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

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

?? strategy.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
					SP_ASSERT( NULL != pTech );
					if( NULL == pTech )
						continue;
					pTech->ClearLastIntensity();
					int nIntensity	=	pTech->GetIntensity( nIndexIndex );
					if( !ITS_ISBUY(nIntensity) )
						bBuy	=	FALSE;
				}
			}
		}
	}

	if( bBuy )	// 確定買入了
	{
		if( !opparam.GetNextTradeTime(tmCur, tmOp) )	// 操作日期,下一個交易日
			return FALSE;

		if( opparam.m_nStoreDiv-nOwnedStockCount <= 0 )	// 股票已經夠多了,不能再買入新的了
			return FALSE;
		double	dUseCash	=	dCash / (opparam.m_nStoreDiv-nOwnedStockCount);	// 需使用資金

		if( dCash < dUseCash )
			dUseCash	=	dCash;	// 資金不夠,則有多少用多少

		dSharePrice		=	opparam.m_dBuyMulti * dPriceNow;
		double	dTemp	=	dSharePrice * ( 1 + rate.GetRate( techstock.m_info ) );
		if( fabs(dTemp) < 1e-4 || dUseCash < 1e-4 )
			return FALSE;

		dwShare		=	(DWORD)( dUseCash / dTemp );	// 買入股數
		dwShare		=	( dwShare / 100 ) * 100;		// 取整
		if( 0 == dwShare )
			return FALSE;

		if( ptmOp )			*ptmOp		=	tmOp;
		if( pdwShare )		*pdwShare	=	dwShare;
		if( pdSharePrice )	*pdSharePrice	=	dSharePrice;
		return TRUE;
	}
	
	return FALSE;
}

// 給定CTechStock,日期tmCur,資金dCash,擁有股票own(含有買入時價格),操作條件opparam,
// 現在擁有股票數量nOwnedStockCount,計算需要賣出的股票數量和委托價格及委托時間,
// 如果不需要賣出,返回FALSE
BOOL CTechStockContainer::GetShouldSellShare( CTechStock & techstock, CSPTime tmCur, STOCKOWN & own, COpParam &opparam,
									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	bSell	=	FALSE;
	if( COpParam::logicAnd == opparam.m_nSellLogic )	// 全部條件還是任一條件
		bSell	=	TRUE;
	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::logicAnd == opparam.m_nSellLogic )
		{
			if( nIntensity > opparam.m_nSellLimit )			// 買賣信號是否達到所需條件
				bSell	=	FALSE;
		}
		else
		{
			if( nIntensity <= opparam.m_nSellLimit )
				bSell	=	TRUE;
		}
	}

	// StopLosing and StopProfit 止損和止贏
	if( opparam.m_bStopLosing && dPriceNow < own.dBuyPrice * (1-opparam.m_dStopLosing) )	// 止損
		bSell	=	TRUE;
	if( opparam.m_bStopProfit && dPriceNow > own.dBuyPrice * (1+opparam.m_dStopProfit) )	// 止贏
		bSell	=	TRUE;

	if( bSell )	// 確定賣出了
	{
		if( !opparam.GetNextTradeTime(tmCur, tmOp) )	// 操作日期,下一個交易日
			return FALSE;
		dwShare			=	own.dwShare;
		dSharePrice		=	opparam.m_dSellMulti * dPriceNow;

		if( ptmOp )			*ptmOp		=	tmOp;
		if( pdwShare )		*pdwShare	=	dwShare;
		if( pdSharePrice )	*pdSharePrice	=	dSharePrice;
		return TRUE;
	}
	
	return FALSE;
}

// 得到某只股票szCode在日期tmCur的收盤價
BOOL CTechStockContainer::GetClosePrice( const char * szCode, CSPTime tmCur, double * pdPrice )
{
	if( NULL == szCode || strlen(szCode) <= 0 || GetSize() <= 0 )
		return FALSE;

	for( int j=0; j<GetSize(); j++ )
	{
		CTechStock & techstock	=	ElementAt(j);
		if( techstock.m_info.IsEqualTo( CStock::marketUnknown, szCode ) )
		{
			return techstock.GetClosePrice( tmCur, pdPrice );
		}
	}

	return FALSE;
}

// 得到某日的總資產
BOOL CTechStockContainer::GetSumAsset( CSPTime tmCur, CStockOwnContainer &container, double * pdAsset )
{
	if( GetSize() <= 0 )
		return FALSE;

	double	dAsset	=	0;
	for( int i=0; i<container.GetSize(); i++ )
	{
		STOCKOWN &	own	=	container.ElementAt(i);
		double	dPrice	=	0;
		if( !GetClosePrice( own.szCode, tmCur, &dPrice ) )
			return FALSE;
		dAsset	+=	dPrice * own.dwShare;
	}
	
	if( pdAsset )	*pdAsset	=	dAsset;
	return TRUE;
}

// 得到下一個有成交量的交易日
BOOL CTechStockContainer::GetNextExistTradeTime( CSPTime tmCur, CSPTime & tmNext )
{
	CSPTime	sptime(tmCur.GetTime());
	DWORD	dateCur		=	sptime.ToStockTimeDay( );
	DWORD	dateNext	=	-1;
	for( int i=0; i<GetSize(); i++ )
	{
		CTechStock	&	techstock	=	ElementAt(i);
		int nIndex	=	techstock.m_kdata.GetAboutIndexByDate( dateCur );
		if( -1 != nIndex && nIndex+1 < techstock.m_kdata.GetSize() )
		{
			if( -1 == dateNext )
				dateNext	=	techstock.m_kdata.ElementAt(nIndex+1).m_date;
			else if( dateNext > techstock.m_kdata.ElementAt(nIndex+1).m_date )
				dateNext	=	techstock.m_kdata.ElementAt(nIndex+1).m_date;
		}
	}
	if( -1 != dateNext && sptime.FromStockTimeDay( dateNext ) )
	{
		tmNext	=	sptime.GetTime();
		return TRUE;
	}
	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// CStrategy

// 給定策略文件,得到策略名稱
CSPString CStrategy::GetName( LPCTSTR lpszPath )
{
	if( NULL == lpszPath || strlen(lpszPath) <= 0 )
		return "";

	CSPString	strName;
	CStrategy		doc;
	CSPFile	file;
	if( file.Open( lpszPath, CSPFile::modeRead) )
	{
		CSPArchive ar(&file, CSPArchive::load | CSPArchive::bNoFlushOnDelete);
		if( file.GetLength() > 0 )
			doc.Serialize( ar, NULL, 0 );

		ar.Close();
		file.Close();
		strName	=	doc.m_strName;
	}

	if( strName.IsEmpty() )
		strName	=	lpszPath;
	return strName;
}

/////////////////////////////////////////////////////////////////////////////
// CStrategy construction/destruction

char szCELFileMagic[]	=	"BALANG CEL FILE.";
DWORD	dwCELFileVersion		=	0x20000000;

CStrategy::CStrategy()
{
	SimuReset( );
	RealReset( );
}

CStrategy::~CStrategy()
{
	ClearCache( );
}

// 打開策略文件
BOOL CStrategy::OpenStrategyFile( LPCTSTR lpszPathName, LPSTR lpErr, UINT nMaxSize )
{
	CSPFile	file;
	if( NULL != lpszPathName && file.Open( lpszPathName, CSPFile::modeRead) )
	{
		if( 0 == file.GetLength() )
		{
			SetPathName(lpszPathName);
			return TRUE;
		}

		CSPArchive ar(&file, CSPArchive::load | CSPArchive::bNoFlushOnDelete);
		BOOL bSuccess = Serialize( ar, lpErr, nMaxSize );
		ar.Close();
		file.Close();
		if( bSuccess )
			SetPathName(lpszPathName);
		return bSuccess;
	}
	
	SetPathName( NULL );
	return FALSE;
}

BOOL CStrategy::SaveStrategyFile( LPCTSTR lpszPathName )
{
	CSPString newName;
	if( lpszPathName )
		newName	=	lpszPathName;
	if (newName.IsEmpty())
		newName = m_strPathName;

	CSPFile	file;
	if( file.Open( newName, CSPFile::modeCreate | CSPFile::modeWrite) )
	{
		CSPArchive ar(&file, CSPArchive::store);
		Serialize( ar, NULL, 0 );
		ar.Close();
		file.Close();
		SetPathName(newName);
		return TRUE;
	}

	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// CStrategy serialization

// 文件保存和讀取
BOOL CStrategy::Serialize(CSPArchive& ar, LPSTR lpErr, UINT nMaxSize )
{
	if( lpErr && nMaxSize>0 )
		memset(lpErr,0,nMaxSize);

	if (ar.IsStoring())
	{
		ar.Write( szCELFileMagic, sizeof(szCELFileMagic) );
		
		ar << dwCELFileVersion;
		ar << m_strName;
		ar << m_strDescript;
		m_stocks.Serialize( ar );

		m_rate.Serialize( ar );

		m_paramBuy.Serialize( ar );
		m_paramSell.Serialize( ar );
		m_paramLongTrend.Serialize( ar );
		m_paramIndexTrend.Serialize( ar );

		m_anTechsBuy.Serialize( ar );
		m_anTechsSell.Serialize( ar );
		m_anTechsLongTrend.Serialize( ar );
		m_anTechsIndexTrend.Serialize( ar );

		m_opparam.Serialize( ar );

		// Simulation
		ar << m_SimuCurrentStatus;
		ar << m_SimuCurrentTime;
		ar << m_SimuCurrentCash;
		m_SimuStockOwn.Serialize( ar );
		m_SimuOpRecord.Serialize( ar );
		m_SimuNextOp.Serialize( ar );
		m_SimuAssetSerial.Serialize( ar );

		// Real Operation
		ar << m_RealBeginTime;
		ar << m_RealCurrentTime;
		ar << m_RealCurrentCash;
		m_RealStockOwn.Serialize( ar );
		m_RealOpRecord.Serialize( ar );
		m_RealNextOp.Serialize( ar );
		m_RealAssetSerial.Serialize( ar );
	}
	else
	{
		char	buffer[sizeof(szCELFileMagic)+1];
		if( sizeof(szCELFileMagic) != ar.Read( buffer, sizeof(szCELFileMagic) )
			|| 0 != strncmp( buffer, szCELFileMagic, sizeof(szCELFileMagic) ) )
		{
			if( lpErr )
				strncpy(lpErr,strategy_errfile,min(nMaxSize-1,strlen(strategy_errfile)) );
			return FALSE;
		}

		ar >> m_dwFileVersion;
		if( m_dwFileVersion > dwCELFileVersion )
		{
			if( lpErr )
				strncpy(lpErr,strategy_errfilever,min(nMaxSize-1,strlen(strategy_errfilever)) );
			return FALSE;
		}

		ar >> m_strName;
		ar >> m_strDescript;
		m_stocks.Serialize( ar );

		m_rate.Serialize( ar );

		m_paramBuy.Serialize( ar );
		m_paramSell.Serialize( ar );
		m_paramLongTrend.Serialize( ar );
		m_paramIndexTrend.Serialize( ar );

		m_anTechsBuy.Serialize( ar );
		m_anTechsSell.Serialize( ar );
		m_anTechsLongTrend.Serialize( ar );
		m_anTechsIndexTrend.Serialize( ar );

		m_opparam.Serialize( ar );

		// Simulation
		ar >> m_SimuCurrentStatus;
		ar >> m_SimuCurrentTime;
		ar >> m_SimuCurrentCash;
		m_SimuStockOwn.Serialize( ar );
		m_SimuOpRecord.Serialize( ar );
		m_SimuNextOp.Serialize( ar );
		m_SimuAssetSerial.Serialize( ar );

		// Real Operation
		ar >> m_RealBeginTime;
		ar >> m_RealCurrentTime;
		ar >> m_RealCurrentCash;
		m_RealStockOwn.Serialize( ar );
		m_RealOpRecord.Serialize( ar );
		m_RealNextOp.Serialize( ar );
		m_RealAssetSerial.Serialize( ar );
	}
	return TRUE;
}

BOOL CStrategy::DoFileSave( )
{
	return SaveStrategyFile( GetPathName() );
}

BOOL CStrategy::OnClose( )
{
	ClearCache( );
	return TRUE;
}

void CStrategy::OnRealOpViewed( )
{
	for( int i=0; i<m_RealNextOp.GetSize(); i++ )
		m_RealNextOp.ElementAt(i).bViewed	=	TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CStrategy commands
void CStrategy::SetPathName( LPCTSTR lpszPathName )
{
	m_strPathName	=	lpszPathName;
}

CSPString CStrategy::GetPathName( )
{
	return m_strPathName;
}

// 設定策略名稱
void CStrategy::SetName( LPCTSTR lpszName )
{
	m_strName	=	lpszName;
}
// 得到策略名稱
CSPString	CStrategy::GetName( )
{
	if( m_strName.IsEmpty() )
		return GetPathName();
	return m_strName;
}
// 設定策略描述
void CStrategy::SetDescript( LPCTSTR lpszDescript )
{
		m_strDescript	=	lpszDescript;
}
// 得到策略描述
CSPString	CStrategy::GetDescript( )
{
	return m_strDescript;
}
// 得到策略被選股票
CSPStringArray & CStrategy::GetStocks( )
{
	return m_stocks;
}
// 設定策略備選股票
void CStrategy::SetStocks( CSPStringArray & astr )
{
	m_stocks.Copy( astr );
}
// 加入策略備選股票
void CStrategy::AddStock( LPCTSTR lpszCode )
{
	m_stocks.AddStock( lpszCode );
}
// 移除策略備選股票
void CStrategy::RemoveStock( LPCTSTR lpszCode )
{
	m_stocks.RemoveStock( lpszCode );
}
// 得到策略的一般性描述文字
CSPString CStrategy::GetStockTechString( )
{
	int	nStockShowCount = 3, nTechShowCount = 10;

	CSPString	strStock;
	int i=0;
	for(  i=0; i<m_stocks.GetSize() && i<nStockShowCount; i++ )
	{
		if( strStock.GetLength() > 0 )
			strStock	+=	",";
		CStockInfo	info;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三四在线| 日日夜夜精品视频免费| 亚洲制服丝袜在线| 国产综合色视频| 欧美精品欧美精品系列| 中文字幕一区二区三区在线播放 | 亚洲123区在线观看| 国产黄色成人av| 6080午夜不卡| 亚洲精品乱码久久久久久日本蜜臀| 国产真实乱子伦精品视频| 欧美日韩国产在线播放网站| 中文字幕欧美激情| 国产精品亚洲午夜一区二区三区 | 成人午夜在线视频| 4438成人网| 亚洲一区av在线| av不卡免费电影| 国产精品乱码一区二区三区软件 | 5566中文字幕一区二区电影| 亚洲欧美一区二区不卡| 国产精品影视在线观看| 欧美电影免费观看高清完整版在线 | 亚洲欧洲成人av每日更新| 国产一区二区三区免费在线观看 | 精品va天堂亚洲国产| 亚洲地区一二三色| 91久久精品一区二区三| 亚洲免费观看高清完整版在线| 国产精品18久久久久久vr| 日韩久久精品一区| 久久不见久久见中文字幕免费| 91精品国产一区二区三区香蕉| 亚洲一区二区三区四区在线| 一本久久综合亚洲鲁鲁五月天| 综合在线观看色| 91论坛在线播放| 亚洲精品乱码久久久久久久久 | 国产98色在线|日韩| 中文字幕精品—区二区四季| 国产91露脸合集magnet| 成人欧美一区二区三区小说| aaa欧美日韩| 一区二区三区四区亚洲| 欧美美女一区二区| 免费看欧美美女黄的网站| 日韩视频免费直播| 国产精品一区二区黑丝 | 91精品欧美综合在线观看最新 | 激情文学综合网| 久久亚洲精品小早川怜子| 春色校园综合激情亚洲| 亚洲人成网站色在线观看| 欧美美女网站色| 国产精品中文有码| 一区二区三区四区蜜桃| 91精品国产全国免费观看| 国产在线观看一区二区| 国产精品不卡在线| 久久精品视频在线免费观看 | 欧美精品亚洲一区二区在线播放| 蜜臀av性久久久久av蜜臀妖精| 久久综合av免费| 日本韩国一区二区三区| 免费在线观看一区| 亚洲婷婷在线视频| 欧美tickling挠脚心丨vk| 91亚洲国产成人精品一区二区三| 亚洲国产sm捆绑调教视频| 久久久午夜精品理论片中文字幕| 色婷婷久久久久swag精品| 精品在线播放午夜| 亚洲一区av在线| 欧美韩日一区二区三区| 欧美日韩一区不卡| 成人听书哪个软件好| 日韩av中文字幕一区二区| 国产精品区一区二区三区| 欧洲另类一二三四区| 国产精品99久久久久久久vr| 同产精品九九九| 亚洲欧洲av在线| 日韩一区二区电影| 91香蕉视频黄| 国产一区二区视频在线播放| 亚洲成人777| 国产精品成人一区二区三区夜夜夜 | 成人性生交大合| 日韩精品午夜视频| 亚洲精品美腿丝袜| 国产精品美女久久久久av爽李琼 | 亚洲国产电影在线观看| 欧美女孩性生活视频| 一本到高清视频免费精品| 粉嫩av一区二区三区| 国产一区在线观看视频| 亚洲电影一级片| 一区二区三区小说| 亚洲人精品午夜| 国产精品国产三级国产aⅴ中文| 日韩欧美国产电影| 4438x亚洲最大成人网| 欧美视频一区在线| 9i在线看片成人免费| 国产成人精品免费| 国产露脸91国语对白| 日韩激情av在线| 热久久免费视频| 日韩黄色免费网站| 视频在线观看一区| 午夜国产精品一区| 天天综合日日夜夜精品| 亚洲国产aⅴ成人精品无吗| 亚洲天堂精品视频| 一个色妞综合视频在线观看| 亚洲精品少妇30p| 一区二区三区在线看| 中文字幕一区三区| 亚洲精品少妇30p| 亚洲综合一二区| 亚洲地区一二三色| 奇米精品一区二区三区在线观看一 | 欧美日韩国产大片| 91精品午夜视频| 久久亚洲综合色| 日本一区二区在线不卡| 国产精品国产自产拍高清av王其| 亚洲视频 欧洲视频| 一区二区三区四区在线| 午夜免费久久看| 激情欧美日韩一区二区| 国产在线观看一区二区| 成人精品亚洲人成在线| 在线观看亚洲一区| 51精品视频一区二区三区| 精品捆绑美女sm三区| 国产欧美精品日韩区二区麻豆天美| 国产午夜亚洲精品理论片色戒 | 欧美精品一区二区在线播放| 久久精品人人爽人人爽| 亚洲婷婷综合色高清在线| 午夜av电影一区| 久久99热99| 97久久精品人人做人人爽50路| 欧美亚洲动漫另类| 久久免费美女视频| 亚洲一区二区视频在线观看| 91一区二区三区在线观看| 欧美巨大另类极品videosbest| 精品国产髙清在线看国产毛片| 欧美国产日韩在线观看| 亚洲成人一二三| 成人免费视频视频| 欧美色倩网站大全免费| 欧美精品一区二区久久久| 亚洲精品老司机| 国产精品一区二区免费不卡 | 26uuu久久天堂性欧美| 亚洲区小说区图片区qvod| 另类欧美日韩国产在线| 成人成人成人在线视频| 欧美欧美午夜aⅴ在线观看| 中文字幕国产一区| 麻豆成人久久精品二区三区小说| 99精品欧美一区二区蜜桃免费 | 欧美亚洲综合在线| 国产欧美日韩三区| 蜜桃传媒麻豆第一区在线观看| 97se狠狠狠综合亚洲狠狠| 日韩一区二区三区四区 | 色婷婷一区二区| 日本一区二区免费在线| 捆绑紧缚一区二区三区视频 | 日韩三区在线观看| 亚洲国产精品久久不卡毛片 | 国产精品主播直播| 欧美一区二区观看视频| 亚洲精品v日韩精品| 成人黄色片在线观看| 久久综合色8888| 日本aⅴ免费视频一区二区三区| 91麻豆国产福利在线观看| 欧美国产1区2区| 国产在线乱码一区二区三区| 欧美另类变人与禽xxxxx| 亚洲国产一区视频| 欧美午夜一区二区三区| 亚洲欧美视频在线观看| 99精品一区二区| 成人欧美一区二区三区视频网页| 国产剧情一区二区三区| 精品国产人成亚洲区| 久草在线在线精品观看| 日韩欧美自拍偷拍| 六月婷婷色综合| 日韩精品一区二区三区四区视频| 青青草国产精品97视觉盛宴| 91精品国产免费久久综合| 奇米在线7777在线精品| 日韩欧美亚洲一区二区|