コード例 #1
0
ファイル: SetKDataDlg.cpp プロジェクト: darwinbeing/trade
BOOL CSetKDataDlg::DeleteKData( CString strStockCode )
{
	if( strStockCode.GetLength() <= 0 )
		return FALSE;

	UpdateData( );

	if( m_tmDate.GetTime() == -1 )
		return FALSE;

	CStockInfo info;
	CStock	stock;
	if( !info.SetStockCode( CStock::marketUnknown, strStockCode ) )
		return FALSE;
	stock.SetStockInfo( &info );
	
	int nKType = m_comboKType.GetSelect();
	AfxPrepareStockData( &AfxGetDB(), stock, nKType,  CKData::formatOriginal, CKData::mdtypeClose, FALSE, TRUE );
	CKData & kdata = stock.GetKData(nKType);

	CSPTime sptime = m_tmDate.GetTime();
	int nIndex = kdata.GetIndexByDate( sptime.ToStockTime(CKData::IsDayOrMin(kdata.GetKType())) );
	if( nIndex >= 0 && nIndex < kdata.GetSize() )
	{
		kdata.RemoveAt(nIndex);
		AfxGetDB().InstallKData( kdata, TRUE );
		return TRUE;
	}
	return FALSE;
}
コード例 #2
0
ファイル: TechKLine.cpp プロジェクト: darwinbeing/trade
/***
	K线叠加图,准备叠加K线的数据
*/
BOOL CDJ::PrepareStockData(CStDatabase * pDatabase, const char * szCodeOrg,
						   int nCurKType, int nCurKFormat, int nCurMaindataType,
						   DWORD dwAutoResumeDRBegin, int nAutoResumeDRLimit )
{
	SP_ASSERT( pDatabase );

	// bReload and kdayMain
	BOOL	bReload	=	(NULL!=szCodeOrg && 0!=strncmp(szCodeOrg,m_strCodeOrg,m_strCodeOrg.GetLength()) );
	m_strCodeOrg	=	szCodeOrg;

	// m_stockSha
	m_stockSha.SetStockCode( CStock::marketSHSE, m_strCodeSha );
	AfxPrepareStockData( pDatabase, m_stockSha, nCurKType, nCurKFormat, nCurMaindataType, FALSE, bReload );

	// m_stockSzn
	m_stockSzn.SetStockCode( CStock::marketSZSE, m_strCodeSzn );
	AfxPrepareStockData( pDatabase, m_stockSzn, nCurKType, nCurKFormat, nCurMaindataType, FALSE, bReload );
	
	return TRUE;
}
コード例 #3
0
ファイル: SetKDataDlg.cpp プロジェクト: darwinbeing/trade
void CSetKDataDlg::LoadKData( CString strStockCode )
{
	if( strStockCode.GetLength() <= 0 )
		return;

	UpdateData();

	m_strOpen.Empty();
	m_strHigh.Empty();
	m_strLow.Empty();
	m_strClose.Empty();
	m_dwVolume = 0;
	m_dwAmount = 0;

	if( m_tmDate.GetTime() == -1 )
	{
		UpdateData( FALSE );
		return;
	}

	CStockInfo info;
	CStock	stock;
	if( !info.SetStockCode( CStock::marketUnknown, strStockCode ) )
		return;
	stock.SetStockInfo( &info );
	
	int nKType = m_comboKType.GetSelect();
	AfxPrepareStockData( &AfxGetDB(), stock, nKType,  CKData::formatOriginal, CKData::mdtypeClose, FALSE, TRUE );
	CKData & kdata = stock.GetKData(nKType);

	// 价格小数位数格式串
	CString strPriceFmt;
	strPriceFmt.Format( "%%.%df", info.DigitBit() );

	CSPTime sptime = m_tmDate.GetTime();
	int nIndex = kdata.GetIndexByDate( sptime.ToStockTime(CKData::IsDayOrMin(kdata.GetKType())) );
	if( nIndex >= 0 && nIndex < kdata.GetSize() )
	{
		KDATA kd = kdata.ElementAt(nIndex);

		m_strOpen.Format( strPriceFmt, kd.m_fOpen );
		m_strHigh.Format( strPriceFmt, kd.m_fHigh );
		m_strLow.Format( strPriceFmt, kd.m_fLow );
		m_strClose.Format( strPriceFmt, kd.m_fClose );
		m_dwVolume	=	(DWORD)(kd.m_fVolume/100);
		m_dwAmount	=	(DWORD)(kd.m_fAmount/1000);
	}

	UpdateData( FALSE );
}
コード例 #4
0
UINT AfxRecalculateYield( int nDays, BOOL bReport )
{
	// 计算市场年平均收益率
	double	market_yield_average = 0.0, market_yield_d = 0.0;
	double	market_dayyield_average = 0.0, market_dayyield_d = 0.0;
	CKData	& kdayMain	=	AfxGetStockMain().GetKDataDay();

	if( kdayMain.GetSize() <= nDays )
	{
		if( bReport )
			AfxMessageBox( IDS_RECALYIELD_NOSZZS, MB_OK | MB_ICONINFORMATION );
		return 0;
	}
	BOOL bmarket_yield_ok = CalculateYieldYear( kdayMain, &market_yield_average, &market_yield_d, nDays );
	BOOL bmarket_dayyield_ok = CalculateYieldDay( kdayMain, &market_dayyield_average, &market_dayyield_d, nDays );

	if( !bmarket_yield_ok && !bmarket_dayyield_ok )
	{
		if( bReport )
			AfxMessageBox( IDS_RECALYIELD_NOSZZS, MB_OK | MB_ICONINFORMATION );
	}
	
	// 开始生成结果数据
	CStockContainer & container = AfxGetStockContainer();
	int	nCount	=	0;
	// 等待对话框
	CWaitDlg	*	pWait	=	NULL;
	if( bReport )
	{
		pWait	=	new CWaitDlg( AfxGetMainWnd() );
		pWait->SetProgressRange( 0, container.GetSize()-1 );
	}
	for( int i=0; i<container.GetSize(); i++ )
	{
		if( pWait )
		{
			pWait->SetProgress( i );
			if( pWait->WaitForCancel( ) )
				break;
		}

		CStockInfo	& info	=	container.ElementAt(i);

		LONG	stocktype	=	info.GetType();
		if( CStock::typeshIndex != stocktype && CStock::typeshA != stocktype && CStock::typeshB != stocktype
			&& CStock::typeszIndex != stocktype && CStock::typeszA != stocktype && CStock::typeszB != stocktype )
			continue;

		CStock	stock;
		stock.SetStockInfo( &info );
		AfxPrepareStockData(&AfxGetDB(),stock,CKData::ktypeDay,CKData::formatXDRup,CKData::mdtypeClose,TRUE,TRUE);
		CKData	& kday	=	stock.GetKDataDay();

		info.m_fYield_average		=	(float)STKLIB_DATA_INVALID;
		info.m_fYield_stddev		=	(float)STKLIB_DATA_INVALID;
		info.m_fBeite				=	(float)STKLIB_DATA_INVALID;

		double	yield_average = 0., yield_d = 0., beite = 0. ;
		if( CalculateYieldYear( kday, &yield_average, &yield_d, nDays ) )
		{
			info.m_fYield_average	=	(float)( 100. * yield_average );
			info.m_fYield_stddev	=	(float)( 100. * yield_d );
			if( bmarket_yield_ok && CalculateBeiteYear( kday, kdayMain, market_yield_average, market_yield_d, &beite, nDays ) )
				info.m_fBeite		=	(float)( beite );
			else if( bmarket_dayyield_ok && CalculateBeiteDay( kday, kdayMain, market_dayyield_average, market_dayyield_d, &beite, nDays ) )
				info.m_fBeite		=	(float)( beite );
		}
		else if( CalculateYieldDay( kday, &yield_average, &yield_d, nDays ) )
		{
			info.m_fYield_average	=	(float)( 100. * (pow(1+yield_average,STKLIB_DAYS_INONEYEAR)-1) );
			info.m_fYield_stddev	=	(float)( 100. * sqrt((double)STKLIB_DAYS_INONEYEAR) * yield_d );
			if( bmarket_dayyield_ok && CalculateBeiteDay( kday, kdayMain, market_dayyield_average, market_dayyield_d, &beite, nDays ) )
				info.m_fBeite		=	(float)( beite );
		}

		nCount	++;
	}

	// 保存到硬盘文件
	AfxGetDB().StoreBasetable( container );

	// 关闭等待对话框和目标文件
	if( pWait )
	{
		pWait->DestroyWindow();
		delete	pWait;
	}

	return nCount;
}