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