|
#ifndef __FOXFUNC_H_INCLUDE
#define __FOXFUNC_H_INCLUDE /* /////////////////////////////////////////////////////////////////////////// 飛狐交易師“C語言接口”擴展程序調用接口規(guī)范V3.0 1.本規(guī)范適用于飛狐交易師V3.x公式系統(tǒng). 2.擴展函數可用于實現系統(tǒng)公式函數不能實現的特殊算法. 3.擴展函數用windows 32位動態(tài)鏈接庫實現,建議使用Microsoft Visual C++編程. 4.調用時在公式編輯器中書寫"動態(tài)庫名稱@函數名稱"(參數表)即可,例如下面函數可以寫為"FOXFUNC@MYMACLOSE"(5) 5.動態(tài)鏈接庫名稱和函數名稱可以自己定義. 6.使用時必須將動態(tài)庫文件放置在飛狐交易師安裝目錄下的FmlDLL子目錄下使用. */ #ifdef __cplusplus extern "C" { #endif //__cplusplus //////////////////////////////////////////////////// //分析周期 //////////////////////////////////////////////////// enum DATA_TYPE { TICK_DATA=2, //分筆成交 MIN1_DATA, //1分鐘線 MIN5_DATA, //5分鐘線 MIN15_DATA, //15分鐘線 MIN30_DATA, //30分鐘線 MIN60_DATA, //60分鐘線 DAY_DATA, //日線 WEEK_DATA, //周線 MONTH_DATA, //月線 YEAR_DATA, //年線 MULTIDAY_DATA, //多日線 MULTIMIN_DATA, //多分鐘線 MULTISEC_DATA //多秒線 }; //////////////////////////////////////////////////// //基本數據 //////////////////////////////////////////////////// typedef struct tagSTKDATA { time_t m_time; //時間,UCT float m_fOpen; //開盤 float m_fHigh; //最高 float m_fLow; //最低 float m_fClose; //收盤 float m_fVolume; //成交量(手) float m_fAmount; //成交額(元)/持倉(未平倉合約,僅期貨有效) WORD m_wAdvance; //上漲家數(僅大盤有效) WORD m_wDecline; //下跌家數(僅大盤有效) } STKDATA; //////////////////////////////////////////////////// //擴展數據,用于描述分筆成交數據的買賣盤 //////////////////////////////////////////////////// typedef union tagSTKDATAEx { struct { float m_fBuyPrice[3]; //買1--買3價 float m_fBuyVol[3]; //買1--買3量 float m_fSellPrice[3]; //賣1--賣3價 float m_fSellVol[3]; //賣1--賣3量 DWORD m_dwToken; //成交方向 }; float m_fDataEx[13]; } STKDATAEx; //////////////////////////////////////////////////// //除權數據 //////////////////////////////////////////////////// typedef struct tagSPLITDATA { time_t m_time; //時間,UCT float m_fHg; //紅股 float m_fPg; //配股 float m_fPgj; //配股價 float m_fHl; //紅利 } SPLITDATA; //////////////////////////////////////////////////// /*財務數據順序(m_pfFinData內容) 序號 內容 0 總股本(萬股), 1 國家股, 2 發(fā)起人法人股, 3 法人股, 4 B股, 5 H股, 6 流通A股, 7 職工股, 8 A2轉配股, 9 總資產(千元), 10 流動資產, 11 固定資產, 12 無形資產, 13 長期投資, 14 流動負債, 15 長期負債, 16 資本公積金, 17 每股公積金, 18 股東權益, 19 主營收入, 20 主營利潤, 21 其他利潤, 22 營業(yè)利潤, 23 投資收益, 24 補貼收入, 25 營業(yè)外收支, 26 上年損益調整, 27 利潤總額, 28 稅后利潤, 29 凈利潤, 30 未分配利潤, 31 每股未分配, 32 每股收益, 33 每股凈資產, 34 調整每股凈資, 35 股東權益比, 36 凈資收益率 37 經營現金流入 38 經營現金流出 39 經營現金流量 40 投資現金流入 41 投資現金流出 42 投資現金流量 43 籌資現金流入 44 籌資現金流出 45 籌資現金流量 46 現金及等價物 47 應收帳款周轉率 48 存貨周轉率 49 股東總數 50 發(fā)行價 51 速動比率 52 主營業(yè)務增長率 53 稅后利潤增長率 54 凈資產增長率 55 總資產增長率 */ //////////////////////////////////////////////////// //調用參數項結構 //////////////////////////////////////////////////// typedef struct tagCALCPARAM { union { const float* m_pfParam; //序列參數,指向一個浮點型數組 const float m_fParam; //數值參數 }; const int m_nParamStart; //序列參數有效起始位置 }CALCPARAM; //////////////////////////////////////////////////// //調用接口信息數據結構 //////////////////////////////////////////////////// typedef struct tagCALCINFO { const DWORD m_dwSize; //結構大小 const DWORD m_dwVersion; //調用軟件版本(V2.10 : 0x210) const DWORD m_dwSerial; //調用軟件序列號 const char* m_strStkLabel; //股票代碼 const BOOL m_bIndex; //大盤 const int m_nNumData; //數據數量(pData,pDataEx,pResultBuf數據數量) const STKDATA* m_pData; //常規(guī)數據,注意:當m_nNumData==0時可能為 NULL const STKDATAEx* m_pDataEx; //擴展數據,分筆成交買賣盤,注意:可能為 NULL const int m_nParam1Start; //參數1有效起始位置 const float* m_pfParam1; //調用參數1 const float* m_pfParam2; //調用參數2 const float* m_pfParam3; //調用參數3 const float* m_pfParam4; //調用參數3 float* m_pResultBuf; //結果緩沖區(qū) const DWORD m_dataType; //數據類型 const float* m_pfFinData; //財務數據 //以上與分析家兼容,所以沿用其結構和名稱 //以下為飛狐交易師擴展 const DWORD m_dwReserved; // 保留 const int m_nNumParam; // 調用參數數量 const CALCPARAM* m_pCalcParam; // 調用參數數組 const DWORD m_dwReservedEx[4]; // 保留 char* m_strStkName; //股票名稱 SPLITDATA* m_pSplitData; //除權數據 int m_nNumSplitData; //除權次數 } CALCINFO; /* 注1: (與分析家兼容) 1.函數調用參數由m_pfParam1--m_pfParam4帶入,若為NULL則表示該參數無效. 2.當一個參數無效時,則其后的所有參數均無效. 如:m_pfParam2為NULL,則m_pfParam3,m_pfParam4也為NULL. 3.參數1可以是常數參數或序列數參數,其余參數只能為常數參數. 4.若m_nParam1Start<0, 則參數1為常數參數,參數等于*m_pfParam1; 5.若m_nParam1Start>=0,則參數1為序列數參數,m_pfParam1指向一個浮點型數組, 數組大小為m_nNumData,數據有效范圍為 m_nParam1Start 至 m_nNumData-1. 在時間上m_pData[x] 與 m_pfParam1[x]是一致的 注2: (飛狐交易師擴展) 1.該擴展結構使調用參數在技術上可以是無限數目的,且每個參數都可為數值或序列,由公式中實際的調用參數決定。 2.CALCPARAM結構用于帶入參數信息和實際數據,m_pCalcParam數組大小為m_nNumParam,數據有效范圍為 0 至 m_nNumParam-1. 3.按參數的順序,m_pCalcParam[0]為第一個參數的數據,m_pCalcParam[1]為第二個參數的數據...,為了保持兼容,原m_nParam1Start、m_pfParam1等5個屬性依然有賦值。 4.若 i位置的參數為數值,取用m_pCalcParam[i].m_fParam. 5.若 i位置的參數為序列,取用m_pCalcParam[i].m_pfParam,數組大小為m_nNumData,數據有效范圍為m_pCalcParam[i].m_nParamStart 至 m_nNumData-1. 若m_pCalcParam[i].m_nParamStart<0, 則此數組中無有效數據。 6.由于可以調用多個序列,許多序列的計算可以先在公式中進行,然后作為調用的參數即可。 7.經此擴展,對分析家的DLL依然可以調用、兼容。 */ //////////////////////////////////////////////////// /* 函數輸出 __declspec(dllexport) int xxxxxxxx(CALCINFO* pData); 1.函數名稱需全部大寫. 2.函數必須以上述形式聲明,請用實際函數名稱替代xxxxxxxx; 對于C++程序還需包括在 extern "C" { } 括號中. 3.函數計算結果用pData->m_pResultBuf帶回. 4.函數返回-1表示錯誤或全部數據無效,否則返回第一個有效值位置,即: m_pResultBuf[返回值] -- m_pResultBuf[m_nNumData-1]間為有效值. 5.函數名稱長度不能超過15字節(jié),動態(tài)連接庫文件名不能超過9字節(jié)(不包括擴展名),動態(tài)庫名稱不能叫SYSTEM,EXPLORER */ //示例函數,使用時用實際名稱替換 __declspec(dllexport) int WINAPI CALLWDDLL(CALCINFO* pData); #ifdef __cplusplus } #endif //__cplusplus #endif //__FOXFUNC_H_INCLUDE |
|
|