?? strategy.h
字號:
/*
Cross Platform Core Code.
Copyright(R) 2001-2002 Balang Software.
All rights reserved.
Using:
class CRateParam;
class CSPTimeContainer;
class COpParam;
class CStockOwnContainer;
class COpRecordContainer;
class CAssetSerialContainer;
class CTechStock;
class CTechStockContainer;
class CStrategy;
*/
#if !defined( __STKLIB_STRATEGY_H__ )
#define __STKLIB_STRATEGY_H__
/////////////////////////////////////////////////////////////////////////////
// CRateParam
/***
交易稅費設置類
*/
class CRateParam
{
public:
CRateParam( );
BOOL IsValid( );
void SetDefault( );
void Serialize( CSPArchive &ar );
double GetRate( CStockInfo & info );
double m_dShaa;
double m_dShab;
double m_dShafund;
double m_dSzna;
double m_dSznb;
double m_dSznfund;
};
/////////////////////////////////////////////////////////////////////////////
// CSPTimeContainer
//template class __declspec(dllexport) CSPArray<CSPTime, CSPTime &>;
typedef CSPArray<CSPTime, CSPTime &> CSPTimeArray;
class CSPTimeContainer : public CSPTimeArray
{
public:
CSPTimeContainer() {}
virtual ~CSPTimeContainer() { RemoveAll(); }
// for access CSPTimeArray
virtual int Add( CSPTime &tm ) { return CSPTimeArray::Add( tm ); }
virtual void RemoveAll( ) { CSPTimeArray::RemoveAll(); }
};
/////////////////////////////////////////////////////////////////////////////
// COpParam
CSPString AfxGetLogicString( int nLogic );
CSPString AfxGetStoreDivString( int nStoreDiv );
/***
策略模擬操作條件類
*/
class COpParam
{
public:
COpParam( );
// Attributes
BOOL IsValid( );
void SetDefault( );
void SetDefaultOfInvalidMember( );
void Serialize( CSPArchive &ar );
// Operation
BOOL IsInTimeZones( CSPTime tm );
CSPTime GetBeginTime( );
CSPTime GetEndTime( );
BOOL GetNextTradeTime( CSPTime tmNow, CSPTime &tmNext );
DWORD GetProgress( CSPTime tmNow, DWORD dwProgressMax );
enum storeDivs {
storedivMin = 0x01,
storedivOnce = 0x01,
storedivTwice = 0x02,
storedivThird = 0x03,
storedivForth = 0x04,
storedivFifth = 0x05,
storedivSixth = 0x06,
storedivSeventh = 0x07,
storedivEighth = 0x08,
storedivNinth = 0x09,
storedivTenth = 0x0A,
storedivMax = 0x0A,
};
enum Logical {
logicMin = 0x01,
logicAnd = 0x01,
logicOr = 0x02,
logicMax = 0x02,
};
int m_nKType;
int m_nMaindataType;
int m_nBuyLogic;
int m_nBuyLimit;
double m_dBuyMulti;
int m_nSellLogic;
int m_nSellLimit;
double m_dSellMulti;
CSPTimeContainer m_atmBegin;
CSPTimeContainer m_atmEnd;
long m_nStartAmount; // 元
int m_nStoreDiv;
BOOL m_bStopLosing;
BOOL m_bStopProfit;
double m_dStopLosing;
double m_dStopProfit;
BOOL m_bLongTrend;
BOOL m_bIndexTrend;
int m_nKTypeLong;
int m_nKTypeIndex;
};
/////////////////////////////////////////////////////////////////////////////
// stockown_t
#pragma pack(1)
typedef struct stockown_t {
char szCode[STKLIB_MAX_CODE];
DWORD dwShare;
double dBuyPrice;
DWORD dwMarket;
char szReserved[20];
} STOCKOWN, * LPSTOCKOWN;
//template class __declspec(dllexport) CSPArray< STOCKOWN, STOCKOWN & >;
typedef CSPArray< STOCKOWN, STOCKOWN & > CStockOwnArray;
/***
擁有股票數組
*/
class CStockOwnContainer : public CStockOwnArray
{
public:
virtual ~CStockOwnContainer() { RemoveAll(); }
// for access CStockOwnArray
virtual void RemoveAll( ) { CStockOwnArray::RemoveAll(); }
BOOL AddStock( CStockInfo & info, DWORD dwShare, double dBuyPrice );
BOOL RemoveStock( CStockInfo & info, DWORD dwShare );
BOOL HasThisStock( CStockInfo & info, LPSTOCKOWN lpOwn );
};
/////////////////////////////////////////////////////////////////////////////
// oprecord_t
// 操作類型
#define STRATEGY_OPTYPE_BUY 0x01 // 買入
#define STRATEGY_OPTYPE_SELL 0x02 // 賣出
#define STRATEGY_OPTYPE_ADDSTOCK 0x03 // 添加股票
#define STRATEGY_OPTYPE_REMOVESTOCK 0x04 // 移除股票
#define STRATEGY_OPTYPE_ADDCASH 0x05 // 添加資金
#define STRATEGY_OPTYPE_REMOVECASH 0x06 // 取走資金
CSPString AfxGetStrategyOpTypeString( long lOpType );
typedef struct oprecord_t {
long lOpType;
time_t time;
char szCode[STKLIB_MAX_CODE];
DWORD dwShare;
double dSharePrice;
double dRateCost;
long bViewed; // for next op use in realop.
DWORD dwMarket;
char szReserved[24];
} OPRECORD, * LPOPRECORD;
//template class __declspec(dllexport) CSPArray< OPRECORD, OPRECORD & >;
typedef CSPArray< OPRECORD, OPRECORD & > COpRecordArray;
/***
操作記錄數組
*/
class COpRecordContainer : public COpRecordArray
{
public:
virtual ~COpRecordContainer() { RemoveAll(); }
// for access COpRecordArray
virtual int Add( OPRECORD &newElement){ return COpRecordArray::Add(newElement); }
virtual void RemoveAt(int nIndex, int nCount = 1){ COpRecordArray::RemoveAt(nIndex,nCount); }
virtual void RemoveAll( ) { COpRecordArray::RemoveAll(); }
virtual void Copy(const COpRecordArray& src) { COpRecordArray::Copy(src); }
// operation
int AddRecord( long lOpType, CSPTime tm, const char *szCode,
DWORD dwShare, double dSharePrice, double dRateCost );
int AddRecordUniqueStock(long lOpType, CSPTime tm, const char *szCode,
DWORD dwShare, double dSharePrice, double dRateCost );
int GetBuyRecordCount();
BOOL HasBuyStock( const char * szCode );
BOOL StatResults( int *pnTimes, int *pnVictoryTimes, double *pdYieldMax, double *pdYieldMin );
};
typedef struct assetserial_t {
time_t time;
double dAsset;
double dCash;
char szReserved[32];
} ASSETSERIAL, * LPASSETSERIAL;
//template class __declspec(dllexport) CSPArray< ASSETSERIAL, ASSETSERIAL & >;
typedef CSPArray< ASSETSERIAL, ASSETSERIAL & > CAssetSerialArray;
/***
資產數組
*/
class CAssetSerialContainer : public CAssetSerialArray
{
public:
virtual ~CAssetSerialContainer() { RemoveAll(); }
// for access CAssetSerialArray
virtual void RemoveAt(int nIndex, int nCount = 1){ CAssetSerialArray::RemoveAt(nIndex,nCount); }
virtual void RemoveAll( ) { CAssetSerialArray::RemoveAll(); }
virtual void Copy(const CAssetSerialArray& src) { CAssetSerialArray::Copy(src); }
// operation
BOOL SortInsert( ASSETSERIAL serial );
BOOL GetStdDev( double *pdStdDev, double * pdXiapu );
};
#pragma pack()
//////////////////////////////////////////////////////////////////////
// CTechStock
/***
一只待操作的股票,包含股票的信息,K線數據,長周期K線數據,所需技術指標,所需長周期技術指標
*/
class CTechStock
{
public:
CTechStock( );
CTechStock( const CTechStock & src );
virtual ~CTechStock( );
CTechStock & operator = ( const CTechStock &src );
void SetAutoDelete( BOOL bAutoDelete = TRUE );
void Clear( );
BOOL GetPriceOK( long lOpType, CSPTime tmCur, DWORD dwShare, double dSharePrice, double *pdPriceOK );
BOOL IsStopTrading( CSPTime tmCur );
BOOL GetClosePrice( CSPTime tmCur, double *pdPrice );
BOOL GetCloseDiffPercent( CSPTime tmCur, double *pdDiffPercent );
CStockInfo m_info; // 股票信息
CKData m_kdata; // 所需K線數據
CKData m_kdataLong; // 長周期K線數據
CSPPtrArray m_techs; // 所需技術指標
CSPPtrArray m_techsLong; // 所需長周期技術指標
protected:
BOOL m_bAutoDelete;
};
//template class __declspec(dllexport) CSPArray< CTechStock, CTechStock & >;
typedef CSPArray< CTechStock, CTechStock & > CTechStockArray;
/***
CTechStock數組
*/
class CTechStockContainer : public CTechStockArray
{
public:
virtual ~CTechStockContainer( );
// for access CTechStockArray
virtual void SetSize(int nNewSize, int nGrowBy = -1) { CTechStockArray::SetSize(nNewSize,nGrowBy); }
// operation
void Clear( );
// Operation
BOOL GetShouldBuyShare( CTechStock & techstock, CSPTime tmCur, double dCash, CRateParam &rate, COpParam &opparam, int nOwnedStockCount,
CSPTime *ptmOp, DWORD *pdwShare, double *pdSharePrice );
BOOL GetShouldSellShare( CTechStock & techstock, CSPTime tmCur, STOCKOWN &own, COpParam &opparam,
CSPTime *ptmOp, DWORD *pdwShare, double *pdSharePrice );
BOOL GetClosePrice( const char * szCode, CSPTime tmCur, double * pdPrice );
BOOL GetSumAsset( CSPTime tmCur, CStockOwnContainer &container, double * pdAsset );
BOOL GetNextExistTradeTime( CSPTime tmCur, CSPTime & tmNext );
CStockInfo m_infoIndex;
CKData m_kdataIndex;
CSPPtrArray m_techsIndex;
};
/////////////////////////////////////////////////////////////////////////////
// CStrategy
typedef BOOL (CALLBACK* SIMULATION_CALLBACK)(DWORD dwType, DWORD dwValue, LPCTSTR lpszMsg, VOID * cookie);
#define STRATEGY_MAX_TITLE 256
#define SIMULATION_PROGRESS 1
#define SIMULATION_YIELD 2
#define STRATEGY_MAX_PROGRESS 10000
#define STRATEGY_MAXF_PROGRESS 10000.
#define STRATEGY_BASE_YIELD 10000
#define STRATEGY_BASEF_YIELD 10000.
/***
策略
*/
class CStrategy
{
public:
CStrategy();
virtual ~CStrategy();
static CSPString GetName( LPCTSTR lpszPath );
// Overrides
public:
virtual BOOL OpenStrategyFile( LPCTSTR lpszPathName, LPSTR lpErr, UINT nMaxSize );
virtual BOOL SaveStrategyFile( LPCTSTR lpszPathName );
virtual BOOL Serialize(CSPArchive& ar, LPSTR lpErr, UINT nMaxSize);
virtual BOOL DoFileSave( );
virtual BOOL OnClose( );
virtual void OnRealOpViewed( );
protected:
// 存盤文件路徑和名稱,不寫到策略文件中
CSPString m_strPathName;
// Attributes
public:
void SetPathName( LPCTSTR lpszPathName );
CSPString GetPathName( );
void SetName( LPCTSTR lpszName );
CSPString GetName( );
void SetDescript( LPCTSTR lpszDescript );
CSPString GetDescript( );
CSPStringArray & GetStocks( );
void SetStocks( CSPStringArray & astr );
void AddStock( LPCTSTR lpszCode );
void RemoveStock( LPCTSTR lpszCode );
CSPString GetStockTechString( );
CRateParam & GetRateParam( );
COpParam & GetOpParam( );
CTechParameters & GetTechParametersBuy( );
CTechParameters & GetTechParametersSell( );
CTechParameters & GetTechParametersLongTrend( );
CTechParameters & GetTechParametersIndexTrend( );
CSPDWordArray & GetSelectedTechsBuy( );
CSPDWordArray & GetSelectedTechsSell( );
CSPDWordArray & GetSelectedTechsLongTrend( );
CSPDWordArray & GetSelectedTechsIndexTrend( );
// Operations
public:
// Simulation
enum SimuStatus {
statusInit = 0x01,
statusRunning = 0x02,
statusPaused = 0x03,
statusFinished = 0x04,
};
// Data Cache
BOOL PrepareData( SIMULATION_CALLBACK fnCallback, void * cookie );
void ClearLastIntensity( );
void ClearCache( );
CTechStockContainer & GetTechStockContainer( );
BOOL CanModifiedNow() { return ( SimuIsStatusInit() || SimuIsStatusFinished() ); }
// Simulation Status
int SimuGetCurStatus( ) { return m_SimuCurrentStatus; }
BOOL SimuIsStatusInit( ) { return statusInit == m_SimuCurrentStatus; }
BOOL SimuIsStatusRunning( ) { return statusRunning == m_SimuCurrentStatus; }
BOOL SimuIsStatusPaused( ) { return statusPaused == m_SimuCurrentStatus; }
BOOL SimuIsStatusFinished( ) { return statusFinished == m_SimuCurrentStatus; }
void SimuSetStatusInit( ) { m_SimuCurrentStatus = statusInit; }
void SimuSetStatusRunning( ) { m_SimuCurrentStatus = statusRunning; }
void SimuSetStatusPaused( ) { m_SimuCurrentStatus = statusPaused; }
void SimuSetStatusFinished( ){ m_SimuCurrentStatus = statusFinished; }
// Simulation
void SimuReset( );
BOOL SimuGotoNextTime( );
CSPTime SimuGetCurrentTime( );
double SimuGetCurrentCash( );
BOOL SimuOperate( OPRECORD record, BOOL bTimeStrict = TRUE );
COpRecordContainer & SimuGetOpRecord( );
COpRecordContainer & SimuGetNextOp( );
CStockOwnContainer & SimuGetStockOwn( );
CAssetSerialContainer & SimuGetAssetSerial( );
DWORD SimuGetCurrentProgress( DWORD dwProgressMax = STRATEGY_MAX_PROGRESS ); // Not Same as Real
double SimuGetAsset( CSPTime tmCur );
double SimuGetCurrentYield( );
double SimuGetCurrentYieldIndexPercent( );
double SimuGetCurrentYieldPercent( );
BOOL SimuOperateNextop( CSPTime tmCur, COpRecordContainer & nextop, CTechStock & techstock );
virtual BOOL SimuRun( SIMULATION_CALLBACK fnCallback, void * cookie );
// Real
void RealReset( );
BOOL RealGotoNextTime( );
CSPTime RealGetBeginTime( ); // Not Same as Simu
CSPTime RealGetCurrentTime( );
double RealGetCurrentCash( );
BOOL RealOperate( OPRECORD record, BOOL bTimeStrict = TRUE );
COpRecordContainer & RealGetOpRecord( );
COpRecordContainer & RealGetNextOp( );
CStockOwnContainer & RealGetStockOwn( );
CAssetSerialContainer & RealGetAssetSerial( );
double RealGetAsset( CSPTime tmCur );
double RealGetCurrentYield( );
double RealGetCurrentYieldIndexPercent( );
double RealGetCurrentYieldPercent( );
BOOL RealOperateNextop( CSPTime tmCur, COpRecordContainer & nextop, CTechStock & techstock );
virtual BOOL RealRun( SIMULATION_CALLBACK fnCallback, void * cookie );
BOOL RealAddOpRecordStrict( OPRECORD record ); // Not Same as Simu
BOOL RealDeleteOpRecordStrict( int nRecord ); // Not Same as Simu
protected:
// Properties
DWORD m_dwFileVersion;
CSPString m_strName; // 策略名稱
CSPString m_strDescript; // 策略說明
// Stocks
CDomain m_stocks; // 策略備選股票
// Rate
CRateParam m_rate; // 交易費用
// Tech parameters
CTechParameters m_paramBuy; // 買入指標規則
CTechParameters m_paramSell; // 賣出指標規則
CTechParameters m_paramLongTrend; // 長期指標規則
CTechParameters m_paramIndexTrend; // 指數指標規則
CSPDWordArray m_anTechsBuy; // 買入依據的指標
CSPDWordArray m_anTechsSell; // 賣出依據的指標
CSPDWordArray m_anTechsLongTrend; // 長周期趨勢依據的指標
CSPDWordArray m_anTechsIndexTrend;// 指數趨勢依據的指標
// Operate Parameters
COpParam m_opparam; // 操作規則
// Simulation
int m_SimuCurrentStatus; // Not Same as Real, 起始,正在進行,暫停,完成
CSPTime m_SimuCurrentTime; // 模擬當前時間
double m_SimuCurrentCash; // 模擬當前資金
CStockOwnContainer m_SimuStockOwn; // 模擬當前擁有股票
COpRecordContainer m_SimuOpRecord; // 模擬記錄
COpRecordContainer m_SimuNextOp; // 模擬下一步操作
CAssetSerialContainer m_SimuAssetSerial; // 模擬資產值序列
// Real Operate
CSPTime m_RealBeginTime; // Not Same as Simu,實戰起始時間
CSPTime m_RealCurrentTime; // 實戰當前時間
double m_RealCurrentCash; // 實戰當前資金
CStockOwnContainer m_RealStockOwn; // 實戰當前擁有股票
COpRecordContainer m_RealOpRecord; // 實戰操作記錄
COpRecordContainer m_RealNextOp; // 實戰下一步操作
CAssetSerialContainer m_RealAssetSerial; // 實戰資產值序列
// Cache Data, Not Saved
CTechStockContainer m_techstocks; // 備選股票,包含信息、數據、技術指標等
};
#endif // __STKLIB_STRATEGY_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -