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

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

?? strategy.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/*
	Cross Platform Core Code.

	Copyright(R) 2001-2002 Balang Software.
	All rights reserved.

	Using:
		class	CRateParam;
		class	COpParam;
		class	CStockOwnContainer;
		class	COpRecordContainer;
		class	CAssetSerialContainer;
		class	CTechStock;
		class	CTechStockContainer;
		class	CStrategy;
*/

#include "stdafx.h"
#include "Strategy.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRateParam

CRateParam::CRateParam( )
{
	SetDefault( );
}

// 交易費用參數是否合法
BOOL CRateParam::IsValid( )
{
	return (m_dShaa >= 0 && m_dShaa < 0.1
		&& m_dShab >= 0 && m_dShab < 0.1
		&& m_dShafund >= 0 && m_dShafund < 0.1
		&& m_dSzna >= 0 && m_dSzna < 0.1
		&& m_dSznb >= 0 && m_dSznb < 0.1
		&& m_dSznfund >= 0 && m_dSznfund < 0.1 );
}

// 缺省交易費用
void CRateParam::SetDefault( )
{
	m_dShaa		=	0.003;
	m_dShab		=	0.003;
	m_dShafund	=	0.001;
	m_dSzna		=	0.003;
	m_dSznb		=	0.003;
	m_dSznfund	=	0.001;
}

// 保存交易費用至文件
void CRateParam::Serialize( CSPArchive &ar )
{
	if( ar.IsStoring( ) )
	{
		ar << m_dShaa;
		ar << m_dShab;
		ar << m_dShafund;
		ar << m_dSzna;
		ar << m_dSznb;
		ar << m_dSznfund;
	}
	else
	{
		ar >> m_dShaa;
		ar >> m_dShab;
		ar >> m_dShafund;
		ar >> m_dSzna;
		ar >> m_dSznb;
		ar >> m_dSznfund;
	}
}

// 根據股票選擇交易費率
double CRateParam::GetRate( CStockInfo & info )
{
	LONG	stocktype	=	info.GetType();
	if( CStock::typeshA == stocktype || CStock::typeshIndex == stocktype )
		return m_dShaa;
	else if( CStock::typeshB == stocktype )
		return m_dShab;
	else if( info.IsShangHai() && info.IsFund() )
		return m_dShafund;
	else if( CStock::typeszA == stocktype || CStock::typeszIndex == stocktype )
		return m_dSzna;
	else if( CStock::typeszB == stocktype )
		return m_dSznb;
	else if( info.IsShenZhen() && info.IsFund() )
		return m_dSznfund;

	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// COpParam

// 邏輯字符串,全部指標 任一指標
CSPString AfxGetLogicString( int nLogic )
{
	switch( nLogic )
	{
	case	COpParam::logicAnd:		return	strategy_logicand;
	case	COpParam::logicOr:		return	strategy_logicor;
	default:
		SP_ASSERT( FALSE );
	}
	return "";
}

// 倉位字符串
CSPString AfxGetStoreDivString( int nStoreDiv )
{
	switch( nStoreDiv )
	{
	case	COpParam::storedivOnce:			return strategy_sdonce;
	case	COpParam::storedivTwice:		return strategy_sdtwice;
	case	COpParam::storedivThird:		return strategy_sdthird;
	case	COpParam::storedivForth:		return strategy_sdforth;
	case	COpParam::storedivFifth:		return strategy_sdfifth;
	case	COpParam::storedivSixth:		return strategy_sdsixth;
	case	COpParam::storedivSeventh:		return strategy_sdseventh;
	case	COpParam::storedivEighth:		return strategy_sdeighth;
	case	COpParam::storedivNinth:		return strategy_sdninth;
	case	COpParam::storedivTenth:		return strategy_sdtenth;
	default:
		SP_ASSERT( FALSE );
	}
	return "";
}

COpParam::COpParam( )
{
	SetDefault( );
}

// 操作條件是否合法
BOOL COpParam::IsValid( )
{
	if( CKData::ktypeDay != m_nKType && CKData::ktypeWeek != m_nKType && CKData::ktypeMonth != m_nKType )
		return FALSE;
	if( m_nMaindataType < CKData::mdtypeMin || m_nMaindataType > CKData::mdtypeMax )
		return FALSE;
	if( m_nBuyLogic < logicMin || m_nBuyLogic > logicMax )
		return FALSE;
	if( m_nBuyLimit < ITS_MIN || m_nBuyLimit > ITS_MAX )
		return FALSE;
	if( m_dBuyMulti <= 0.89 || m_dBuyMulti > 1.11 )
		return FALSE;
	if( m_nSellLogic < logicMin || m_nSellLogic > logicMax )
		return FALSE;
	if( m_nSellLimit < ITS_MIN || m_nSellLimit > ITS_MAX )
		return FALSE;
	if( m_dSellMulti <= 0.89 || m_dSellMulti > 1.11 )
		return FALSE;
	if( m_atmBegin.GetSize() <= 0 || m_atmEnd.GetSize() <= 0
		|| m_atmBegin.GetSize() != m_atmEnd.GetSize() )
		return FALSE;
	// TIMEZONES
	if( m_nStartAmount < 1000 || m_nStartAmount > 2000000000 )
		return FALSE;
	if( m_nStoreDiv < storedivMin || m_nStoreDiv > COpParam::storedivMax )
		return FALSE;

	if( m_bStopLosing && ( m_dStopLosing <= 0 || m_dStopLosing >= 100 ) )
		return FALSE;
	if( m_bStopProfit && m_dStopProfit <= 0 )
		return FALSE;
	if( m_bLongTrend && CKData::ktypeDay != m_nKTypeLong && CKData::ktypeWeek != m_nKTypeLong && CKData::ktypeMonth != m_nKTypeLong )
		return FALSE;
	if( m_bIndexTrend && CKData::ktypeDay != m_nKTypeIndex && CKData::ktypeWeek != m_nKTypeIndex && CKData::ktypeMonth != m_nKTypeIndex )
		return FALSE;
	return TRUE;
}

// 缺省操作條件
void COpParam::SetDefault( )
{
	m_nKType		=	CKData::ktypeDay;
	m_nMaindataType	=	CKData::mdtypeClose;
	m_nBuyLogic		=	logicAnd;
	m_nBuyLimit		=	ITS_BUY;
	m_dBuyMulti		=	1.0;
	m_nSellLogic	=	logicOr;
	m_nSellLimit	=	ITS_SELL;
	m_dSellMulti	=	0.98;
	CSPTime	tmCurrent	=	CSPTime::GetCurrentTime();
	m_atmBegin.RemoveAll();
	m_atmEnd.RemoveAll();
	m_atmBegin.Add( tmCurrent - CSPTimeSpan( 365 * 3, 0, 0, 0 ) );
	m_atmEnd.Add( tmCurrent );
	m_nStartAmount	=	1000000;
	m_nStoreDiv		=	storedivThird;

	m_bStopLosing		=	FALSE;
	m_bStopProfit		=	FALSE;
	m_dStopLosing		=	0.1;
	m_dStopProfit		=	0.3;
	m_bLongTrend		=	FALSE;
	m_bIndexTrend		=	FALSE;
	m_nKTypeLong	=	CKData::ktypeWeek;
	m_nKTypeIndex	=	CKData::ktypeWeek;
}

// 設定不合法的操作條件為缺省值
void COpParam::SetDefaultOfInvalidMember( )
{
	if( CKData::ktypeDay != m_nKType && CKData::ktypeWeek != m_nKType && CKData::ktypeMonth != m_nKType )
		m_nKType		=	CKData::ktypeDay;
	if( m_nMaindataType < CKData::mdtypeMin || m_nMaindataType > CKData::mdtypeMax )
		m_nMaindataType	=	CKData::mdtypeClose;
	if( m_nBuyLogic < logicMin || m_nBuyLogic > logicMax )
		m_nBuyLogic	=	logicAnd;
	if( m_nBuyLimit < ITS_MIN || m_nBuyLimit > ITS_MAX )
		m_nBuyLimit		=	ITS_BUY;
	if( m_dBuyMulti <= 0.89 || m_dBuyMulti > 1.11 )
		m_dBuyMulti		=	1.0;
	if( m_nSellLogic < logicMin || m_nSellLogic > logicMax )
		m_nSellLogic	=	logicOr;
	if( m_nSellLimit < ITS_MIN || m_nSellLimit > ITS_MAX )
		m_nSellLimit	=	ITS_SELL;
	if( m_dSellMulti <= 0.89 || m_dSellMulti > 1.11 )
		m_dSellMulti	=	0.98;
	if( m_atmBegin.GetSize() <= 0 || m_atmEnd.GetSize() <= 0
		|| m_atmBegin.GetSize() != m_atmEnd.GetSize() )
	{
		m_atmBegin.RemoveAll();
		m_atmEnd.RemoveAll();
		CSPTime	tmCurrent	=	CSPTime::GetCurrentTime();
		m_atmBegin.Add( tmCurrent - CSPTimeSpan( 365 * 3, 0, 0, 0 ) );
		m_atmEnd.Add( tmCurrent );
	}
	// TIMEZONES
	if( m_nStartAmount < 1000 || m_nStartAmount > 2000000000 )
		m_nStartAmount	=	1000000;
	if( m_nStoreDiv < storedivMin || m_nStoreDiv > storedivMax )
		m_nStoreDiv		=	storedivThird;

	if( m_bStopLosing && ( m_dStopLosing <= 0 || m_dStopLosing >= 100 ) )
		m_dStopLosing	=	0.1;
	if( m_bStopProfit && m_dStopProfit <= 0 )
		m_dStopProfit	=	0.3;
	if( m_bLongTrend && CKData::ktypeDay != m_nKTypeLong && CKData::ktypeWeek != m_nKTypeLong && CKData::ktypeMonth != m_nKTypeLong )
		m_nKTypeLong		=	CKData::ktypeWeek;
	if( m_bIndexTrend && CKData::ktypeDay != m_nKTypeIndex && CKData::ktypeWeek != m_nKTypeIndex && CKData::ktypeMonth != m_nKTypeIndex )
		m_nKTypeIndex		=	CKData::ktypeWeek;
}

// 保存或者讀取硬盤文件
void COpParam::Serialize( CSPArchive &ar )
{
	if( ar.IsStoring( ) )
	{
		ar << m_nKType;
		ar << m_nMaindataType;
		ar << m_nBuyLogic;
		ar << m_nBuyLimit;
		ar << m_dBuyMulti;
		ar << m_nSellLogic;
		ar << m_nSellLimit;
		ar << m_dSellMulti;
		m_atmBegin.Serialize( ar );
		m_atmEnd.Serialize( ar );
		ar << m_nStartAmount;
		ar << m_nStoreDiv;

		ar << m_bStopLosing;
		ar << m_bStopProfit;
		ar << m_dStopLosing;
		ar << m_dStopProfit;
		ar << m_bLongTrend;
		ar << m_bIndexTrend;
		ar << m_nKTypeLong;
		ar << m_nKTypeIndex;
	}
	else
	{
		ar >> m_nKType;
		ar >> m_nMaindataType;
		ar >> m_nBuyLogic;
		ar >> m_nBuyLimit;
		ar >> m_dBuyMulti;
		ar >> m_nSellLogic;
		ar >> m_nSellLimit;
		ar >> m_dSellMulti;
		m_atmBegin.Serialize( ar );
		m_atmEnd.Serialize( ar );
		ar >> m_nStartAmount;
		ar >> m_nStoreDiv;

		ar >> m_bStopLosing;
		ar >> m_bStopProfit;
		ar >> m_dStopLosing;
		ar >> m_dStopProfit;
		ar >> m_bLongTrend;
		ar >> m_bIndexTrend;
		ar >> m_nKTypeLong;
		ar >> m_nKTypeIndex;
	}
}

// 給定時間是不是在模擬時間內
BOOL COpParam::IsInTimeZones( CSPTime tm )
{
	for( int i=0; i<m_atmBegin.GetSize() && i<m_atmEnd.GetSize(); i++ )
	{
		if( tm >= m_atmBegin.ElementAt(i) && tm <= m_atmEnd.ElementAt(i) )
			return TRUE;
	}
	return FALSE;
}

// 獲取模擬開始時間
CSPTime COpParam::GetBeginTime( )
{
	if( m_atmBegin.GetSize() > 0 )
		return m_atmBegin.ElementAt(0);
	return CSPTime::GetCurrentTime();
}

// 獲取模擬結束時間
CSPTime COpParam::GetEndTime( )
{
	if( m_atmEnd.GetSize() > 0 )
		return m_atmEnd.ElementAt(m_atmEnd.GetSize()-1);
	return CSPTime::GetCurrentTime();
}

// 獲取下一個交易時間
BOOL COpParam::GetNextTradeTime( CSPTime tmNow, CSPTime &tmNext )
{
	CSPTime	sptime( tmNow.GetTime() );
	DWORD	dwDate		=	sptime.ToStockTime( CKData::IsDayOrMin(m_nKType) );
	DWORD	dwDateNext	=	CSPTime::GetStockTimeNext( dwDate, m_nKType );
	if( sptime.FromStockTime( dwDateNext, CKData::IsDayOrMin(m_nKType) ) )
	{
		tmNext	=	sptime.GetTime();
		return TRUE;
	}
	return FALSE;
}

// 獲取當前模擬進度
DWORD COpParam::GetProgress( CSPTime tmNow, DWORD dwProgressMax )
{
	// TIMEZONES
	if( !IsInTimeZones( tmNow ) )
		return 0;
	CSPTime	tmBegin	=	GetBeginTime( );
	CSPTime	tmEnd	=	GetEndTime( );
	double	dBeginNow	=	( tmNow.GetTime() - tmBegin.GetTime() );
	double	dBeginEnd	=	( tmEnd.GetTime() - tmBegin.GetTime() );
	double	dProgress	=	0;
	if( fabs(dBeginEnd) > 1e-4 )
	{
		dProgress	=	( dBeginNow / dBeginEnd ) * dwProgressMax;
	}
	return (DWORD)dProgress;
}

/////////////////////////////////////////////////////////////////////////////
// CStockOwnContainer

// 擁有股票數組,加入股票
BOOL CStockOwnContainer::AddStock( CStockInfo & info, DWORD dwShare, double dBuyPrice )
{
	if( dwShare <= 0 )
		return FALSE;

	// 如果已經有了,改變數量
	for( int i=0; i<GetSize(); i++ )
	{
		STOCKOWN	&	own	=	ElementAt(i);
		if( info.IsEqualTo( own.dwMarket, own.szCode ) )
		{
			if( dBuyPrice > 0.005 && own.dwShare + dwShare > 0 )
			{
				own.dBuyPrice	=	(own.dBuyPrice * own.dwShare + dBuyPrice * dwShare) / (own.dwShare + dwShare);
			}
			own.dwShare	+=	dwShare;
			return TRUE;
		}
	}
	// 加入新的
	STOCKOWN	ownnew;
	memset( &ownnew, 0, sizeof(ownnew) );
	strncpy( ownnew.szCode, info.GetStockCode(), min(sizeof(ownnew.szCode)-1,strlen(info.GetStockCode())) );
	ownnew.dwShare		=	dwShare;
	ownnew.dBuyPrice	=	dBuyPrice;
	ownnew.dwMarket		=	info.GetMarket();
	return ( Add(ownnew) >= 0 );
}

// 擁有股票數組,移除股票
BOOL CStockOwnContainer::RemoveStock( CStockInfo & info, DWORD dwShare )
{
	for( int i=0; i<GetSize(); i++ )
	{
		STOCKOWN	&	own	=	ElementAt(i);
		if( info.IsEqualTo( own.dwMarket, own.szCode ) )
		{
			if( own.dwShare < dwShare )
				return FALSE;
			own.dwShare	-=	dwShare;
			if( 0 == own.dwShare )
				RemoveAt(i);
			return TRUE;
		}
	}
	return FALSE;
}

// 擁有股票數組,是否有這個股票,如果有,返回至lpOwn
BOOL CStockOwnContainer::HasThisStock( CStockInfo & info, LPSTOCKOWN lpOwn )
{
	for( int i=0; i<GetSize(); i++ )
	{
		STOCKOWN	&	own	=	ElementAt(i);
		if( info.IsEqualTo( own.dwMarket, own.szCode ) )
		{
			if( lpOwn )
				memcpy( lpOwn, &own, sizeof(own) );
			return ( own.dwShare > 0 );
		}
	}
	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// COpRecordContainer
// 操作描述
CSPString	AfxGetStrategyOpTypeString( long lOpType )
{
	CSPString	strOp;
	if( STRATEGY_OPTYPE_BUY == lOpType )
		return strategy_optype_buy;
	else if( STRATEGY_OPTYPE_SELL == lOpType )
		return strategy_optype_sell;
	else if( STRATEGY_OPTYPE_ADDSTOCK == lOpType )
		return strategy_optype_addstock;
	else if( STRATEGY_OPTYPE_REMOVESTOCK == lOpType )
		return strategy_optype_removestock;
	else if( STRATEGY_OPTYPE_ADDCASH == lOpType )
		return strategy_optype_addcash;
	else if( STRATEGY_OPTYPE_REMOVECASH == lOpType )
		return strategy_optype_removecash;
	return strOp;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩在线| 久久99精品国产麻豆婷婷| 亚洲chinese男男1069| 精品亚洲成a人在线观看| 91免费观看在线| 久久网站最新地址| 三级亚洲高清视频| 色天天综合久久久久综合片| 精品欧美一区二区在线观看| 亚洲精品免费在线| 国产成人免费视频网站高清观看视频 | 91免费视频观看| 精品国产一二三| 日日骚欧美日韩| 在线视频你懂得一区| 亚洲国产精品ⅴa在线观看| 日本中文在线一区| 欧美日韩亚洲丝袜制服| 亚洲天堂精品在线观看| 国产成人午夜视频| 久久久久久久综合色一本| 久久精品国产99国产| 精品视频全国免费看| 一区二区三区欧美日韩| 99久久久精品免费观看国产蜜| 日韩精品在线一区二区| 日韩av中文在线观看| 欧美在线视频日韩| 一区二区三区在线观看网站| 不卡av免费在线观看| 国产欧美精品区一区二区三区 | 国产在线麻豆精品观看| 欧美一区三区四区| 日韩主播视频在线| 欧美美女喷水视频| 日韩av在线发布| 欧美xxxxx裸体时装秀| 久久99国产精品尤物| 久久综合色综合88| 国产suv精品一区二区三区| 久久精品日韩一区二区三区| 国产综合色精品一区二区三区| 日韩一级二级三级精品视频| 人人精品人人爱| 日韩美女主播在线视频一区二区三区| 蜜臀av一区二区| 久久综合丝袜日本网| 成人免费观看男女羞羞视频| 国产精品久久一级| 欧美在线一二三| 青娱乐精品视频在线| 精品国产凹凸成av人网站| 国产一区二区伦理片| 亚洲图片你懂的| 欧美日韩一区在线| 精品一区在线看| 国产精品成人网| 欧美老肥妇做.爰bbww| 黄色精品一二区| 亚洲图片你懂的| 日韩欧美激情一区| 国产成人丝袜美腿| 亚洲第一精品在线| 精品国产第一区二区三区观看体验| 国产91精品在线观看| 亚洲精品视频在线看| 日韩欧美一区二区久久婷婷| 成人性生交大片免费看中文网站| 亚洲人一二三区| 精品国产欧美一区二区| 成人av在线一区二区| 日韩国产精品久久| 日本一区二区免费在线 | 7777精品伊人久久久大香线蕉超级流畅 | 欧美精品一卡二卡| 国产精品丝袜一区| 2017欧美狠狠色| 久久久久国产精品麻豆ai换脸| 日韩三级高清在线| 欧美精品一区二| 久久久久国产精品人| 国产日韩欧美亚洲| 国产片一区二区三区| 国产精品久久久久久久蜜臀| 中文字幕亚洲精品在线观看 | 91在线播放网址| 91美女在线看| 欧美日韩在线不卡| 欧美二区乱c少妇| 日韩一区二区三区在线| 精品少妇一区二区三区日产乱码 | 精品免费99久久| 国产午夜久久久久| 国产精品久久久久9999吃药| 亚洲欧洲av一区二区三区久久| 亚洲欧美日本韩国| 丝瓜av网站精品一区二区 | 欧美日韩亚洲综合| 欧美一级欧美三级在线观看 | 日韩一区二区高清| 国产午夜精品在线观看| 亚洲欧美一区二区三区久本道91 | 久久久午夜精品| 中文字幕一区二区三区不卡在线 | 国产一区二区三区最好精华液| 国产伦精品一区二区三区免费迷| 成人福利视频网站| 欧美日韩美少妇| 精品国产精品网麻豆系列| 国产精品美女www爽爽爽| 亚洲一区二区五区| 狠狠色伊人亚洲综合成人| 91小视频在线免费看| 5858s免费视频成人| 久久精品无码一区二区三区| 悠悠色在线精品| 韩国一区二区在线观看| 色欧美乱欧美15图片| 日韩一级免费观看| 亚洲靠逼com| 国产一区二区三区最好精华液| 色妹子一区二区| xnxx国产精品| 亚洲国产中文字幕在线视频综合| 久久福利视频一区二区| 91视频在线观看免费| 欧美成人猛片aaaaaaa| 亚洲免费高清视频在线| 另类欧美日韩国产在线| 色丁香久综合在线久综合在线观看 | 久久99精品国产麻豆婷婷洗澡| gogogo免费视频观看亚洲一| 欧美精品国产精品| 国产精品狼人久久影院观看方式| 天堂va蜜桃一区二区三区| 丰满放荡岳乱妇91ww| 在线成人小视频| 亚洲另类在线视频| 大胆亚洲人体视频| 精品久久久久久综合日本欧美| 亚洲制服丝袜在线| www.日本不卡| 久久久久97国产精华液好用吗| 性欧美疯狂xxxxbbbb| 91免费在线看| 中文字幕一区av| 成人一区二区三区视频在线观看 | 福利电影一区二区三区| 日韩欧美一区在线观看| 亚洲一区视频在线观看视频| 成人av网站免费| 中文字幕成人网| 国产一区高清在线| 欧美成人aa大片| 日本不卡免费在线视频| 欧美日韩一级黄| 一区二区三区成人| 日本久久一区二区| 亚洲日本青草视频在线怡红院| 成人精品一区二区三区四区| 久久久国产精品麻豆| 久久狠狠亚洲综合| 日韩午夜激情免费电影| 丝袜美腿高跟呻吟高潮一区| 欧美日韩专区在线| 亚洲一区二区五区| 欧美精选午夜久久久乱码6080| 亚洲大片免费看| 欧美日韩久久久一区| 亚洲图片自拍偷拍| 欧美一区二区在线看| 水野朝阳av一区二区三区| 国产精品色呦呦| 色综合久久久久综合99| 日韩美女视频一区二区 | 国产成人自拍网| 欧美激情综合在线| 国产成人aaa| 成人免费一区二区三区视频| 色综合天天综合色综合av | 欧美韩国日本一区| 91日韩在线专区| 亚洲成av人影院在线观看网| 欧美日本韩国一区二区三区视频| 亚洲福利视频一区二区| 91精品中文字幕一区二区三区| 美国十次综合导航| 国产清纯美女被跳蛋高潮一区二区久久w| 国产伦理精品不卡| 亚洲欧洲综合另类| 91精品国模一区二区三区| 久久精品国产网站| 欧美国产欧美综合| 在线视频你懂得一区| 麻豆久久久久久| 中文字幕中文字幕一区| 欧美日韩一区二区三区高清 | 日韩精品色哟哟| 久久精品人人爽人人爽| 一本大道久久a久久综合|