亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? strategy.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
// 操作記錄數組,加入記錄
int COpRecordContainer::AddRecord(long lOpType, CSPTime tm, const char *szCode,
								   DWORD dwShare, double dSharePrice, double dRateCost )
{
	SP_ASSERT( NULL != szCode && strlen(szCode) > 0 );
	if( NULL == szCode || strlen(szCode) <= 0 )
		return -1;

	OPRECORD	record;
	memset( &record, 0, sizeof(record) );

	record.lOpType		=	lOpType;
	record.time			=	tm.GetTime();
	strncpy( record.szCode, szCode, min(sizeof(record.szCode)-1,strlen(szCode)) );
	record.dwShare		=	dwShare;
	record.dSharePrice	=	dSharePrice;
	record.dRateCost	=	dRateCost;
	record.dwMarket		=	CStock::marketUnknown;
	return Add( record );
}

// 操作記錄數組,加入記錄,記錄中如果已經有該股票的記錄,更改為現在的信息
int COpRecordContainer::AddRecordUniqueStock(long lOpType, CSPTime tm, const char *szCode,
								   DWORD dwShare, double dSharePrice, double dRateCost )
{
	SP_ASSERT( NULL != szCode && strlen(szCode) > 0 );
	if( NULL == szCode || strlen(szCode) <= 0 )
		return -1;

	OPRECORD	record;
	memset( &record, 0, sizeof(record) );

	for( int i=0; i<GetSize(); i++ )
	{
		if( 0 == strncmp( ElementAt(i).szCode, szCode, sizeof(record.szCode) ) )
		{
			ElementAt(i).lOpType		=	lOpType;
			ElementAt(i).time			=	tm.GetTime();
			strncpy( ElementAt(i).szCode, szCode, min(sizeof(ElementAt(i).szCode)-1,strlen(szCode)) );
			ElementAt(i).dwShare		=	dwShare;
			ElementAt(i).dSharePrice	=	dSharePrice;
			ElementAt(i).dRateCost		=	dRateCost;
			ElementAt(i).dwMarket		=	CStock::marketUnknown;
			return i;
		}
	}

	record.lOpType		=	lOpType;
	record.time			=	tm.GetTime();
	strncpy( record.szCode, szCode, min(sizeof(record.szCode)-1,strlen(szCode)) );
	record.dwShare		=	dwShare;
	record.dSharePrice	=	dSharePrice;
	record.dRateCost	=	dRateCost;
	record.dwMarket		=	CStock::marketUnknown;
	return Add( record );
}

// 操作記錄數組,得到買入記錄數
int COpRecordContainer::GetBuyRecordCount()
{
	int	nCount	=	0;
	for( int i=0; i<GetSize(); i++ )
	{
		OPRECORD & record	=	ElementAt(i);
		if( STRATEGY_OPTYPE_BUY == record.lOpType )
			nCount	++;
	}
	return nCount;
}

// 操作記錄數組,是否有szCode股票的買入記錄
BOOL COpRecordContainer::HasBuyStock( const char * szCode )
{
	if( NULL == szCode || strlen(szCode) < 0 )
		return FALSE;

	for( int i=0; i<GetSize(); i++ )
	{
		OPRECORD & record	=	ElementAt(i);
		if( STRATEGY_OPTYPE_BUY == record.lOpType )
		{
			if( 0 == strncmp( record.szCode, szCode, min(sizeof(record.szCode),strlen(szCode)) ) )
				return TRUE;
		}
	}
	return FALSE;
}

// 操作記錄數組,統計結果:操作次數,成功次數,最大收益,最低收益
BOOL COpRecordContainer::StatResults( int *pnTimes, int *pnVictoryTimes, double *pdYieldMax, double *pdYieldMin )
{
	int	nTimes = 0, nVictoryTimes = 0;
	double	dYieldMax = 0, dYieldMin = 0;

	for( int i=0; i<GetSize(); i++ )
	{
		OPRECORD & record	=	ElementAt(i);
		if( STRATEGY_OPTYPE_BUY != record.lOpType )
			continue;

		// 查找當前買入操作的對應賣出操作
		for( int j=i+1; j<GetSize(); j++ )
		{
			OPRECORD & record2	=	ElementAt(j);
			if( STRATEGY_OPTYPE_SELL == record2.lOpType && 0 == strncmp(record.szCode,record2.szCode,sizeof(record.szCode)) )
			{	// 如果是賣出操作,根據買入價格和賣出價格計算收益率
				if( record.dwShare > 0 && record2.dwShare > 0 )
				{
					double	dBuy	=	record.dSharePrice + record.dRateCost/record.dwShare;
					double	dSell	=	record2.dSharePrice - record2.dRateCost/record2.dwShare;
					if( dBuy > 1e-4 )
					{
						double	dYield	=	(dSell - dBuy)/dBuy;
						nTimes	++;
						if( dYield > 0 )	nVictoryTimes	++;
						if( 1 == nTimes )	dYieldMax	=	dYieldMin	=	dYield;
						if( dYieldMax < dYield )	dYieldMax	=	dYield;
						if( dYieldMin > dYield )	dYieldMin	=	dYield;
					}
				}
				break;
			}
		}
	}
	if( pnTimes )			*pnTimes		=	nTimes;
	if( pnVictoryTimes )	*pnVictoryTimes	=	nVictoryTimes;
	if( pdYieldMax )		*pdYieldMax		=	dYieldMax;
	if( pdYieldMin )		*pdYieldMin		=	dYieldMin;
	return TRUE;
}

//////////////////////////////////////////////////////////////////////
// CAssetSerialContainer 
// 資產序列數組,按時間排序插入
BOOL CAssetSerialContainer::SortInsert( ASSETSERIAL serial )
{
	BOOL	bAdded	=	FALSE;
	for( int i=GetSize()-1; i>=0; i-- )
	{
		ASSETSERIAL & se	=	ElementAt(i);
		if( se.time == serial.time )
		{
			se.dAsset	=	serial.dAsset;
			se.dCash	=	serial.dCash;
			bAdded		=	TRUE;
			break;
		}
		else if( se.time < serial.time )
		{
			InsertAt( i+1, serial );
			bAdded		=	TRUE;
			break;
		}
	}
	if( !bAdded )
		InsertAt( 0, serial );
	return TRUE;
}

// 資產序列數組,獲得資產序列標準差
BOOL CAssetSerialContainer::GetStdDev( double *pdStdDev, double *pdXiapu )
{
	if( GetSize() <= 0 )
		return FALSE;
	double	dInit	=	ElementAt(0).dAsset;
	if( dInit < 1e-4 )
		return FALSE;

	double	dSum = 0., dSquareSum = 0.;
	for( int k = 0; k<GetSize(); k++ )
	{
		double	dNow	=	(ElementAt(k).dAsset - dInit) / dInit;
		dSum	+=	dNow;
		dSquareSum	+=	dNow*dNow;
	}

	double	dAverage	=	dSum / GetSize();
	if( dAverage < 1e-4 )
		return FALSE;
	double	dStdDev	=	dSquareSum / GetSize() - ( dAverage*dAverage );
	if( dStdDev > 0 )
		dStdDev	=	sqrt( dStdDev );
	if( pdStdDev )	*pdStdDev	=	dStdDev;
	if( pdXiapu )	*pdXiapu	=	(dStdDev / dAverage);
	return TRUE;
}

//////////////////////////////////////////////////////////////////////
// CTechStock

CTechStock::CTechStock( )
{
	m_bAutoDelete	=	TRUE;

	m_kdata.SetKType(CKData::ktypeDay);
	m_kdataLong.SetKType(CKData::ktypeDay);
}

CTechStock::CTechStock( const CTechStock & src )
{
	*this	=	src;
}

CTechStock & CTechStock::operator = ( const CTechStock &src )
{
	m_bAutoDelete	=	FALSE;

	m_info		=	src.m_info;
	m_kdata		=	src.m_kdata;
	m_kdataLong	=	src.m_kdataLong;
	m_techs.Copy( src.m_techs );
	m_techsLong.Copy( src.m_techsLong );
	return *this;
}

void CTechStock::SetAutoDelete( BOOL bAutoDelete )
{
	m_bAutoDelete	=	bAutoDelete;
}

CTechStock::~CTechStock( )
{
	Clear( );
}

// 清除內存
void CTechStock::Clear( )
{
	if( m_bAutoDelete )
	{
		int i=0;
		for(  i=0; i<m_techs.GetSize(); i++ )
		{
			CTechnique * pTech	=	(CTechnique *)m_techs.ElementAt(i);
			if( pTech )
				delete	pTech;
		}
		for(  i=0; i<m_techsLong.GetSize(); i++ )
		{
			CTechnique * pTech	=	(CTechnique *)m_techsLong.ElementAt(i);
			if( pTech )
				delete	pTech;
		}
	}
	m_techs.RemoveAll();
	m_techsLong.RemoveAll();
}

// 指定日期,指定操作,指定委托價格,得到股票的成交價格
BOOL CTechStock::GetPriceOK( long lOpType, CSPTime tmCur, DWORD dwShare, double dSharePrice, double *pdPriceOK )
{
	double	dPriceOK = dSharePrice;

	CSPTime	sptimeCur(tmCur.GetTime());
	DWORD	dwDate	=	sptimeCur.ToStockTimeDay();
	int nIndex = m_kdata.GetIndexByDate( dwDate );
	if( -1 == nIndex )
		return FALSE;

	KDATA	&	kd	=	m_kdata.ElementAt(nIndex);
	if( STRATEGY_OPTYPE_BUY == lOpType )
	{
		if( dSharePrice < kd.m_fLow )
			return FALSE;
		if( dSharePrice > kd.m_fOpen )
			dPriceOK	=	kd.m_fOpen;
		else
			dPriceOK	=	dSharePrice;
	}
	else if( STRATEGY_OPTYPE_SELL == lOpType )
	{
		if( dSharePrice > kd.m_fHigh )
			return FALSE;
		if( dSharePrice < kd.m_fOpen )
			dPriceOK	=	kd.m_fOpen;
		else
			dPriceOK	=	dSharePrice;
	}
	else
		return FALSE;

	if( pdPriceOK )	*pdPriceOK	=	dPriceOK;
	return TRUE;
}

// 指定日期是否停牌
BOOL CTechStock::IsStopTrading( CSPTime tmCur )
{
	CSPTime	sptimeCur(tmCur.GetTime());
	DWORD	dwDate	=	sptimeCur.ToStockTimeDay();
	int nIndex = m_kdata.GetIndexByDate( dwDate );
	if( -1 == nIndex )
	{
		if( -1 != m_kdata.GetAboutIndexByDate( dwDate ) )
			return TRUE;
		return FALSE;
	}

	KDATA	&	kd	=	m_kdata.ElementAt(nIndex);
	float	fLastClose	=	kd.m_fOpen;
	if( nIndex > 0 )
		fLastClose	=	m_kdata.ElementAt(nIndex-1).m_fClose;

	if( fabs(kd.m_fOpen-kd.m_fClose) < 1e-4 && fabs(kd.m_fOpen-kd.m_fHigh) < 1e-4
		&& fabs(kd.m_fOpen-kd.m_fLow) < 1e-4 && fabs(kd.m_fOpen-fLastClose) < 1e-4 )
		return TRUE;
	return FALSE;
}

// 得到股票的收盤價
BOOL CTechStock::GetClosePrice( CSPTime tmCur, double *pdPrice )
{
	CSPTime	sptimeCur(tmCur.GetTime());
	DWORD	dwDate	=	sptimeCur.ToStockTimeDay();
	int nIndex = m_kdata.GetAboutIndexByDate( dwDate );
	if( -1 == nIndex )
	{
		SP_ASSERT( FALSE );
		return FALSE;
	}

	KDATA	&	kd	=	m_kdata.ElementAt(nIndex);
	if( pdPrice )	*pdPrice	=	kd.m_fClose;
	return TRUE;
}

// 得到股票的收盤價漲幅%
BOOL CTechStock::GetCloseDiffPercent( CSPTime tmCur, double *pdDiffPercent )
{
	if( pdDiffPercent ) *pdDiffPercent = 0;

	CSPTime	sptimeCur(tmCur.GetTime());
	DWORD	dwDate	=	sptimeCur.ToStockTimeDay();
	int nIndex = m_kdata.GetIndexByDate( dwDate );
	if( -1 == nIndex || nIndex <= 0 )
	{
		return FALSE;
	}

	KDATA	&	kd		=	m_kdata.ElementAt(nIndex);
	KDATA	&	kdLast	=	m_kdata.ElementAt(nIndex-1);
	if( pdDiffPercent && kdLast.m_fClose > 1e-4 )
	{
		*pdDiffPercent	=	100. * (kd.m_fClose-kdLast.m_fClose)/kdLast.m_fClose;
	}
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CTechStockContainer

CTechStockContainer::~CTechStockContainer( )
{
	Clear( );
}

void CTechStockContainer::Clear( )
{
	m_infoIndex.Clear();
	m_kdataIndex.Clear();
	m_kdataIndex.SetKType(CKData::ktypeDay);

	int i=0;
	for(  i=0; i<m_techsIndex.GetSize(); i++ )
	{
		CTechnique * pTech	=	(CTechnique *)m_techsIndex.ElementAt(i);
		if( pTech )
			delete	pTech;
	}
	m_techsIndex.RemoveAll();

	for(  i=0; i<GetSize(); i++ )
	{
		CTechStock	&	stock	=	ElementAt(i);
		stock.Clear( );
	}
	RemoveAll();
}

// 給定CTechStock,日期tmCur,資金dCash,交易費率rate,操作條件opparam,
// 現在擁有股票數量nOwnedStockCount,計算需要買入的股票數量和委托價格及委托時間,
// 如果不需要買入,返回FALSE
BOOL CTechStockContainer::GetShouldBuyShare( CTechStock & techstock, CSPTime tmCur, double dCash, CRateParam &rate, COpParam &opparam, int nOwnedStockCount,
									CSPTime *ptmOp, DWORD *pdwShare, double *pdSharePrice )
{
	CSPTime	tmOp = tmCur;
	DWORD	dwShare = 0;
	double	dSharePrice = 0;

	CSPTime	sptimeCur(tmCur.GetTime());
	DWORD	dwDate	=	sptimeCur.ToStockTimeDay();
	int nIndex = techstock.m_kdata.GetIndexByDate( dwDate );	// 得到nIndex,指向techstock.m_kdata數組的當前日期位置
	if( -1 == nIndex )
		return FALSE;
	double	dPriceNow	=	techstock.m_kdata.ElementAt(nIndex).m_fClose;	// 當前價

	// 買入判斷
	BOOL	bBuy	=	TRUE;
	if( COpParam::logicOr == opparam.m_nBuyLogic )	// 全部條件還是任一條件
		bBuy	=	FALSE;
	for( int i=0; i<techstock.m_techs.GetSize(); i++ )	// 每一個設定指標,分別判斷
	{
		CTechnique * pTech	=	(CTechnique *)techstock.m_techs.ElementAt(i);	// 技術指標
		SP_ASSERT( NULL != pTech );
		if( NULL == pTech )
			continue;

		int nIntensity	=	pTech->GetSignal( nIndex );		// 當前買賣信號
		if( COpParam::logicOr == opparam.m_nBuyLogic )
		{
			if( nIntensity >= opparam.m_nBuyLimit )			// 買賣信號是否達到所需條件
				bBuy	=	TRUE;
		}
		else
		{
			if( nIntensity < opparam.m_nBuyLimit )
				bBuy	=	FALSE;
		}
	}

	// Long and Index Trend
	if( bBuy )
	{
		// 如果技術指標判斷為買入,判斷是否滿足長周期趨勢和指數趨勢
		if( opparam.m_bLongTrend )	// 長周期趨勢
		{
			int	nIndexLong	=	techstock.m_kdataLong.GetAboutIndexByDate( dwDate );
			if( opparam.m_nKTypeLong > opparam.m_nKType )
				nIndexLong	--;
			if( nIndexLong >= 0 )
			{
				for( int i=0; i<techstock.m_techsLong.GetSize(); i++ )
				{
					CTechnique * pTech	=	(CTechnique *)techstock.m_techsLong.ElementAt(i);
					SP_ASSERT( NULL != pTech );
					if( NULL == pTech )
						continue;
					pTech->ClearLastIntensity();
					int nIntensity	=	pTech->GetIntensity( nIndexLong );	// 得到當前趨勢
					if( !ITS_ISBUY(nIntensity) )
						bBuy	=	FALSE;
				}
			}
		}
		if( opparam.m_bIndexTrend )	// 指數趨勢
		{
			int	nIndexIndex	=	m_kdataIndex.GetAboutIndexByDate( dwDate );
			if( opparam.m_nKTypeIndex > opparam.m_nKType )
				nIndexIndex	--;
			if( nIndexIndex >= 0 )
			{
				for( int i=0; i<m_techsIndex.GetSize(); i++ )
				{
					CTechnique * pTech	=	(CTechnique *)m_techsIndex.ElementAt(i);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲v日本v欧美v久久精品| 自拍偷拍亚洲综合| 国内偷窥港台综合视频在线播放| 91精品国产91久久久久久最新毛片| 亚洲va国产va欧美va观看| 538prom精品视频线放| 秋霞电影网一区二区| 久久久久久日产精品| 高清beeg欧美| 一个色在线综合| 欧美丰满少妇xxxbbb| 韩国在线一区二区| 中文字幕一区二区三区不卡| 欧洲精品在线观看| 久久成人麻豆午夜电影| 中文字幕亚洲一区二区av在线 | 1024成人网| 欧美色图天堂网| 久久av中文字幕片| 国产精品久久久久久久久动漫 | 91蝌蚪国产九色| 亚洲成人精品在线观看| 亚洲精品一区二区在线观看| 成人午夜免费电影| 亚洲综合小说图片| 久久精品夜夜夜夜久久| 欧美色爱综合网| 国产乱码精品一品二品| 亚洲一区二区精品视频| 久久网站热最新地址| 日本道免费精品一区二区三区| 另类中文字幕网| 一区二区在线观看视频| 精品美女一区二区| 在线视频观看一区| 国产成人在线看| 日本午夜精品一区二区三区电影| 欧美经典三级视频一区二区三区| 欧美亚洲尤物久久| av亚洲产国偷v产偷v自拍| 蜜臀av一级做a爰片久久| 亚洲欧美日韩系列| 久久久久久免费毛片精品| 欧美群妇大交群的观看方式| 99国产欧美久久久精品| 国产一区二区三区香蕉 | 亚洲欧美日韩一区二区三区在线观看| 欧美变态口味重另类| 欧美日韩久久一区二区| 91亚洲精华国产精华精华液| 国产成人午夜片在线观看高清观看 | 91久久人澡人人添人人爽欧美| 国产在线乱码一区二区三区| 日韩黄色免费电影| 亚洲成人av资源| 亚洲激情中文1区| 国产精品国产精品国产专区不片| 26uuu精品一区二区| 日韩亚洲欧美中文三级| 欧美日本一区二区| 欧美视频你懂的| 欧美在线观看一区| 在线精品视频一区二区三四| 99re这里只有精品视频首页| 成人在线综合网站| 粉嫩欧美一区二区三区高清影视| 国产真实乱对白精彩久久| 麻豆精品在线视频| 美腿丝袜在线亚洲一区| 免费在线观看一区| 日本三级亚洲精品| 蜜桃精品视频在线| 精品一二三四区| 国产在线视视频有精品| 国产一区二区日韩精品| 国产精一品亚洲二区在线视频| 国产一区二区不卡在线| 国产精品夜夜嗨| 成人动漫视频在线| 99麻豆久久久国产精品免费优播| 成人免费的视频| 91无套直看片红桃| 欧美日韩一级黄| 91精品国产色综合久久不卡蜜臀| 欧美一区三区四区| 久久亚洲一级片| 国产精品美女视频| 亚洲男人的天堂一区二区| 亚洲一区欧美一区| 日韩黄色免费电影| 国内精品写真在线观看| 成人精品小蝌蚪| 在线观看国产一区二区| 欧美日韩日日夜夜| 久久综合五月天婷婷伊人| 国产欧美综合在线观看第十页| 亚洲视频一区二区在线| 午夜成人免费电影| 精品在线播放免费| 91视频.com| 3d成人动漫网站| 国产视频一区在线观看| 亚洲美女精品一区| 热久久久久久久| 成人影视亚洲图片在线| 精品视频1区2区| 另类小说色综合网站| 色噜噜夜夜夜综合网| 欧美日韩精品欧美日韩精品一综合| 91精品国产色综合久久不卡蜜臀| 精品国产精品网麻豆系列 | 色欧美乱欧美15图片| 欧美精品日韩一区| 亚洲国产精品黑人久久久| 亚洲愉拍自拍另类高清精品| 久久精品久久综合| 91免费视频网| 欧美电影免费观看高清完整版在 | 99久久精品免费看国产免费软件| 欧美日韩精品三区| 日本一区二区三级电影在线观看| 亚洲444eee在线观看| 夫妻av一区二区| 日韩一区二区三区在线观看| 国产精品久久一卡二卡| 日本va欧美va精品| 91高清视频在线| 久久久久久久国产精品影院| 亚洲精品久久久蜜桃| 精品一区二区三区香蕉蜜桃| 欧美性三三影院| 国产精品不卡在线观看| 精品无人码麻豆乱码1区2区 | 国产亚洲一本大道中文在线| 亚洲成人三级小说| 99视频有精品| 国产欧美一区二区三区在线老狼| 日韩av一区二区三区| 欧美伊人久久大香线蕉综合69| 国产欧美综合色| 狠狠色丁香婷综合久久| 在线电影院国产精品| 亚洲精品水蜜桃| 成人免费观看av| 久久久另类综合| 久久国产日韩欧美精品| 777a∨成人精品桃花网| 亚洲国产裸拍裸体视频在线观看乱了 | 日韩中文字幕一区二区三区| 在线观看欧美黄色| 亚洲精品国产一区二区精华液| 成人免费观看视频| 日本一区二区三区免费乱视频| 国产一区二区主播在线| 日韩欧美国产一区二区在线播放| 香蕉久久夜色精品国产使用方法 | 51久久夜色精品国产麻豆| 亚洲国产视频一区| 欧美伊人久久大香线蕉综合69| 亚洲乱码国产乱码精品精可以看 | 粉嫩av亚洲一区二区图片| 精品免费国产二区三区 | 另类小说欧美激情| 日韩精品在线网站| 捆绑变态av一区二区三区| 91精品国产综合久久久久久久| 婷婷丁香久久五月婷婷| 欧美精品丝袜中出| 免费欧美日韩国产三级电影| 日韩一区二区视频在线观看| 免费在线视频一区| 欧美精品一区二区三区视频| 国内外精品视频| 国产日韩欧美制服另类| av日韩在线网站| 亚洲综合男人的天堂| 欧美日韩久久一区二区| 美美哒免费高清在线观看视频一区二区| 日韩午夜中文字幕| 亚洲曰韩产成在线| 欧美精品第一页| 喷白浆一区二区| 精品国产伦理网| 成人涩涩免费视频| 一卡二卡欧美日韩| 日韩亚洲电影在线| 成人性生交大片免费看在线播放| 国产日韩成人精品| 色哟哟欧美精品| 日韩电影网1区2区| 欧美极品另类videosde| 色婷婷亚洲精品| 久久国产剧场电影| 中文字幕日韩av资源站| 欧美日韩dvd在线观看| 国内欧美视频一区二区| 成人欧美一区二区三区视频网页 | 91精品久久久久久蜜臀| 国产一区二区三区免费| 亚洲欧美激情插|