//主程序暴露給插件的接口
interface IMainFramework
{
public:
IMainFramework(){};
virtual ~IMainFramework(){};
//取得主窗口句柄
virtual HWND GetMainWindow() = 0;
//取主程序版本號(hào)
virtual DWORD GetVersion() = 0;
//取指定品種數(shù)據(jù),成功取得數(shù)據(jù)返回TRUE,否則為FALSE
virtual BOOL GetDataInfo(PCALCINFO * pInfo) = 0;
//取指定品種的動(dòng)態(tài)及時(shí)報(bào)表
virtual REPORT_STRUCT * GetReportData(char * szLabel, WORD wMarket) = 0;
//取指定分類(lèi)板塊的品種數(shù)組
//szName為分類(lèi)或者板塊名稱(chēng),如"上海A股"等,nMode為類(lèi)別,0市場(chǎng)分組,1分類(lèi)板塊,2系統(tǒng)板塊(品種欄對(duì)應(yīng))
virtual void GetReportData(CArray<BLOCK_STRUCT, BLOCK_STRUCT&> &arBlcok, char * szName, int nMode) = 0;
//注冊(cè)品種到數(shù)據(jù)通知,例如RegReportNotify("CL05",'MN');將合約注冊(cè)到數(shù)據(jù)通知,當(dāng)CL05有最新數(shù)據(jù)到達(dá)時(shí)觸發(fā)ReportNotify事件。
virtual BOOL RegReportNotify(char * szLabel, WORD wMarket) = 0;
//取消品種數(shù)據(jù)注冊(cè),例如UnRegReportNotify("CL05",'MN'),CL05數(shù)據(jù)到達(dá)時(shí)不會(huì)再收到通知。
virtual void UnRegReportNotify(char * szLabel, WORD wMarket) = 0;
//下單委托交易
// nType 下單類(lèi)型 0限價(jià) 1市價(jià) 2停損 3限價(jià)停損
// fLmtPrice 委托限價(jià)
// fStopLmtPrice限價(jià)停損單(僅限IB外盤(pán)品種使用)
// nVol 委托數(shù)量
// nAspect 0買(mǎi)入 1賣(mài)出
// lpszLabel 品種名稱(chēng)
// wMarket 品種市場(chǎng)
// bMustOK 是否彈出下單確認(rèn)
// lpszAccount 下單帳戶,為空則為當(dāng)前活動(dòng)帳戶
// nKaiPing 0開(kāi)倉(cāng) 1平倉(cāng) 2平今
// nTouBao 0投機(jī) 1保值
// bOrderQueue 是否為隊(duì)列委托方式,即成交上一筆后再委托下一筆
// 返回值 : 返回本次的委托編號(hào)
virtual long PlaceOrder(BYTE nType, float fLmtPrice, float fStopLmtPrice, UINT nVol, BYTE nAspact, LPCSTR lpszLabel, WORD wMarket,
BOOL bMustOK, LPCSTR lpszAccount, BYTE nKaiPing, BYTE nTouBao, BYTE bOrderQueue) = 0;
//撤單
// nOrderID 委托編號(hào),即PlaceOrder委托下單的委托編號(hào). 當(dāng)bOrderQueue為2或3時(shí),該變量為CANCEL_ORDER_EX結(jié)構(gòu)體指針
// bOrderQueue 是否為隊(duì)列方式的委托撤單,即必須等到該筆撤單成功后再繼續(xù)后續(xù)的下單任務(wù)
// 當(dāng)bOrderQueue=0時(shí)為 不使用隊(duì)列下單 為1時(shí)為隊(duì)列下單模式,當(dāng)bOrderQueue為2或者3時(shí)為下列情況之一
// 當(dāng)為2時(shí)為CANCEL_ORDER_EX結(jié)構(gòu)體中不用隊(duì)列下單模式; 當(dāng)為3時(shí)表示CANCEL_ORDER_EX結(jié)構(gòu)體中,使用隊(duì)列下單模式
virtual void OrderCancel(long nOrderID, BYTE bOrderQueue) = 0;
//注冊(cè)WINDOWS窗口消息,金字塔將以事件方式通知各種
virtual void RegisterMsg(HWND hMsgWnd, DWORD dwMsg) = 0;
//得到套利合約信息
//返回TRUE表示成功 ,返回套利指數(shù)內(nèi)定義的套利品種信息
virtual BOOL GetTaoliInfo(char * szTaoliLabel, CArray<TAOLI_INFO,TAOLI_INFO&> &m_arTaoliInfo) = 0;
//得到IB品種持倉(cāng)數(shù)量
virtual int GetHolding() = 0;
//得到國(guó)內(nèi)期貨的持倉(cāng)數(shù)量
virtual int GetHolding2(char * szAccount) = 0;
//到所有IB帳戶當(dāng)前有效的未成交合約品種數(shù)量
virtual int GetOrderNum() = 0;
//得到所有國(guó)內(nèi)期貨當(dāng)前有效的未成交合約品種數(shù)量
virtual int GetOrderNum2() = 0;
//得到IB帳戶的成交明細(xì)數(shù)量
virtual int GetTradeCount() = 0;
//得到指定帳戶的國(guó)內(nèi)期貨帳戶的成交明細(xì)數(shù)量
virtual int GetTradeCount2(CString Account) = 0;
//當(dāng)前已經(jīng)登陸IB顧問(wèn)帳戶子帳戶數(shù)量,若登陸的是IB普通帳戶此屬性為1
virtual int GetIBACCount() = 0;
//當(dāng)前已經(jīng)登陸國(guó)內(nèi)期貨帳戶數(shù)量(包含無(wú)效登陸等情況在內(nèi)的)
virtual int GetCTPAcCount() = 0;
//得到當(dāng)前默認(rèn)帳戶信息
virtual VARIANT GetAccount(short nType) = 0;
//得到指定的國(guó)內(nèi)期貨帳戶信息
virtual VARIANT GetAccount2(short nType, char * szAccount) = 0;
/*取指定索引的持倉(cāng)IB合約信息
Index 輸入?yún)?shù),指定基于0索引的持倉(cāng)和約信息,持倉(cāng)和約總量參見(jiàn) Holding 屬性。
Hold 輸出參數(shù),該該持倉(cāng)品種持倉(cāng)量,若空倉(cāng)返回負(fù)數(shù)
MktPrice 輸出參數(shù),該持倉(cāng)品種市價(jià)
AvgPrice 輸出參數(shù),該持倉(cāng)品種均價(jià)
MktValue 輸出參數(shù),該持倉(cāng)品種市值
AgeCost 輸出參數(shù),該持倉(cāng)品種成本
PNL 輸出參數(shù),該持倉(cāng)品種浮動(dòng)盈虧
Code 輸出參數(shù),該持倉(cāng)品種代碼
Market 輸出參數(shù),該持倉(cāng)品種市場(chǎng)
返回值: 成功返回1,失敗返回0 */
virtual BOOL HoldingInfo(UINT Index, int &Hold, double &MktPrice, double &AvgPrice, double &MktValue, double &AgeCost, double &PNL, CString &Code, WORD &Market) = 0;
/*取指定索引的指定其他帳戶(CTP,金仕達(dá),恒生,股票等)的合約持倉(cāng)信息
Index 輸入?yún)?shù),指定基于0索引的持倉(cāng)和約信息,持倉(cāng)和約總量參見(jiàn) Holding2 屬性。
BuyHoding 輸出參數(shù),該該持倉(cāng)品種買(mǎi)入持倉(cāng)總量
BuyCost 輸出參數(shù),該持倉(cāng)品種持倉(cāng)成本
BuyTodayHoding 輸出參數(shù),該持倉(cāng)品種今買(mǎi)持總量
SellHoding 輸出參數(shù),該持倉(cāng)品種賣(mài)出持倉(cāng)總量
SellCost 輸出參數(shù),該持倉(cāng)品種賣(mài)出持倉(cāng)成本
SellTodayHoding 輸出參數(shù),該持倉(cāng)品種的今賣(mài)出持倉(cāng)總量
PNL 輸出參數(shù),該持倉(cāng)品種浮動(dòng)盈虧
UseMargin 輸出參數(shù),該持倉(cāng)品種的保證金占用
Code 輸出參數(shù),該持倉(cāng)品種代碼
Market 輸出參數(shù),該持倉(cāng)品種市場(chǎng)
Account 輸入?yún)?shù),可缺省,登陸其他帳戶(CTP,金仕達(dá),恒生,股票等)的帳戶名稱(chēng),若不填寫(xiě)則表示當(dāng)前默認(rèn)的帳戶
返回值: 成功返回1,失敗返回0 */
virtual BOOL HoldingInfo2(UINT Index, int &BuyHoding, double &BuyCost, int &BuyTodayHoding, int &SellHoding, double &SellCost, int &SellTodayHoding, double &PNL, double &UseMargin, CString &Code, WORD &Market, CString Account) = 0;
/*
* 取指定基于0索引的未成交IB合約信息
Index 輸入?yún)?shù),指定基于0索引的持倉(cāng)和約信息,持倉(cāng)和約總量參見(jiàn) OrderNum 屬性。
OrderID 輸出參數(shù), 未成交訂單ID
ConSign 輸出參數(shù),本次委托數(shù)量
Filled 輸出參數(shù),已成交數(shù)量
Remaining 輸出參數(shù),未成交數(shù)量
Action 輸出參數(shù),動(dòng)作類(lèi)型 0買(mǎi)入 1賣(mài)出
OrderType 輸出參數(shù),訂單類(lèi)型 0限價(jià) 1市價(jià) 2停損 3市價(jià)停損
LmtPrice 輸出參數(shù),當(dāng)OrderType等于0時(shí)為限價(jià),為3時(shí)為停損限價(jià)
auxPrice 輸出參數(shù),停損價(jià)格
Account 輸出參數(shù),帳戶信息
Code 輸出參數(shù),該持倉(cāng)品種代碼
Market 輸出參數(shù),該持倉(cāng)品種市場(chǎng)
返回值: 成功返回1,失敗返回0
*/
virtual BOOL OrderInfo(UINT Index, int &OrderID, int &ConSign, int &Filled, int &Remaining, int &Action, int &OrderType, double &LmtPrice, double &auxPrice, CString &Account, CString &Code, WORD &Market) = 0;
/*取指定基于0索引的未成交其他帳戶(CTP,金仕達(dá),恒生,股票等)合約信息
Index 輸入?yún)?shù),指定基于0索引的持倉(cāng)和約信息,持倉(cāng)和約總量參見(jiàn) OrderNum2 屬性。
OrderID 輸出參數(shù), 未成交訂單ID
ConSign 輸出參數(shù),本次委托數(shù)量
Filled 輸出參數(shù),已成交數(shù)量
Remaining 輸出參數(shù),未成交數(shù)量
Action 輸出參數(shù),動(dòng)作類(lèi)型 0買(mǎi)入 1賣(mài)出
OrderType 輸出參數(shù),訂單類(lèi)型 0限價(jià) 1市價(jià) 2停損 3市價(jià)停損
LmtPrice 輸出參數(shù),當(dāng)OrderType等于0時(shí)為限價(jià),為3時(shí)為停損限價(jià)
Account 輸出參數(shù),帳戶信息
Kaiping 輸出參數(shù),開(kāi)平倉(cāng)類(lèi)型 0開(kāi)倉(cāng) 1平倉(cāng)
Code 輸出參數(shù),該持倉(cāng)品種代碼
Market 輸出參數(shù),該持倉(cāng)品種市場(chǎng)
返回值: 成功返回1,失敗返回0 */
virtual BOOL OrderInfo2(UINT Index, int &OrderID, int &ConSign, int &Filled, int &Remaining, int &Action, int &OrderType, double &LmtPrice, CString &Account, int &Kaiping, CString &Code, WORD &Market) = 0;
/*獲取指定品種的合約種類(lèi)
Code 輸入?yún)?shù),指定的品種代碼
Market 輸入?yún)?shù),指定的品種市場(chǎng)
返回值:是可以交易的國(guó)內(nèi)期貨接口品種返回1,IB接口返回0*/
virtual int StockType(char * szCode, WORD wMarket) = 0;
/*取指定品種的和約信息
Code 輸入?yún)?shù),指定的品種代碼
Market 輸入?yún)?shù),指定的品種市場(chǎng)
Multipliter 輸出參數(shù),該品種的乘數(shù)/單位
MinTick 輸出參數(shù),該品種的最小變動(dòng)單位
ShortPercent 輸出參數(shù),該品種的空頭保證金
LongPercent 輸出參數(shù),該品種的多頭保證金
返回值:成功返回1否則返回0
*/
virtual int GetContract(char *szCode, WORD wMarket, float &Multipliter, float &MinTick, float &ShortPercent, float &LongPercent) = 0;
/*計(jì)算指定品種的本次交易手續(xù)費(fèi)用。請(qǐng)用戶在交易費(fèi)率設(shè)置上預(yù)先設(shè)置好不同品種的各種交易費(fèi)率情況,這樣才能通過(guò)此方法得到正確的結(jié)果。
Code 指定的品種代碼
Market 指定的品種市場(chǎng)
lmtPrice 指定的限價(jià)
Volume 委托數(shù)量
Type 成交方向 0開(kāi)倉(cāng) 1平倉(cāng) 2平今
返回值: 返回計(jì)算后的手續(xù)費(fèi)用*/
virtual float GetChargeByNum(char * szCode, WORD wMarket, float lmtPrice, int Volume, int Type) = 0;
/*取指定基于0索引序號(hào)的IB帳戶成交明細(xì)
Index 輸入?yún)?shù),基于0索引的成交明細(xì)
Date 輸出參數(shù),成交時(shí)間
Code 輸出參數(shù),品種代碼
Market 輸出參數(shù),品種市場(chǎng)
OrderType 輸出參數(shù),成交單類(lèi)型,0限價(jià) 1市價(jià) 2停損 3限價(jià)停損
Action 輸出參數(shù),成交方向 0買(mǎi)入 1賣(mài)出
Price 輸出參數(shù),成交價(jià)格
Volume 輸出參數(shù),成交量
Account 輸出參數(shù),成交帳戶
返回值: 成功返回1,失敗返回0*/
virtual int TradeDetalied(int Index, DATE &Date, CString &Code, WORD &Market, int &OrderType, int &Action, float &Price, int &Volume, CString &Account) = 0;
/*取指定基于0索引序號(hào)的其他帳戶(CTP,金仕達(dá),恒生,股票等)帳戶成交明細(xì)
Index 輸入?yún)?shù),基于0索引的成交明細(xì)
Date 輸出參數(shù),成交時(shí)間
Code 輸出參數(shù),品種代碼
Market 輸出參數(shù),品種市場(chǎng)
OrderType 輸出參數(shù),成交單類(lèi)型,0限價(jià) 1市價(jià) 2停損 3限價(jià)停損
Action 輸出參數(shù),成交方向 0買(mǎi)入 1賣(mài)出
Price 輸出參數(shù),成交價(jià)格
Volume 輸出參數(shù),成交量
Kaiping 輸出參數(shù),開(kāi)平倉(cāng)類(lèi)型,0開(kāi)倉(cāng) 1平倉(cāng)
Account 輸入?yún)?shù),成交帳戶,可省略,若省略則表示當(dāng)前默認(rèn)激活帳戶
返回值: 成功返回1,失敗返回0*/
virtual int TradeDetalied2(int Index, DATE &Date, CString &Code, WORD &Market, int &OrderType, int &Action, float &Price, int &Volume, int &Kaiping, CString &Account) = 0;
//得到指定基于0索引的IB帳戶名稱(chēng),例如IBAccountName(0)表示取第一個(gè)登陸的IB帳戶
virtual CString GetIBAccountName(int nIndex) = 0;
//得到指定基于0索引的其他帳戶(CTP,金仕達(dá),恒生,股票等)帳戶名稱(chēng)(包含登陸未成功的),例如 CTPAccountName(0)表示取第一個(gè)登陸的用戶名稱(chēng)
virtual CString GetCTPAccountName(int nIndex) = 0;
//判斷指定帳號(hào)是否是當(dāng)前已登錄有效帳號(hào),例如 Order.IsAccount("351579"),如果該賬戶已登錄則返回1,否則返回0
virtual int IsAccount(CString strAccount) = 0;
};
這些純虛函數(shù),不用實(shí)現(xiàn),就能用嗎?
示例這樣用的:
void CMainWindowDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
//顯示出上證指數(shù)的及時(shí)報(bào)價(jià)
REPORT_STRUCT * pReport = g_pMainFormework->GetReportData("000001",'HS');
if(pReport)
{
CString strText;
strText.Format("%s 開(kāi)盤(pán):%.2f 最高:%.2f 最低:%.2f 最新:%.2f", pReport->m_szName, pReport->m_fOpen, pReport->m_fHigh, pReport->m_fLow, pReport->m_fNewPrice);
// dc.TextOut(20,20,strText);
}
}