小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

通達(dá)信編輯DLL函數(shù)范例

 js大圣 2021-02-20

通達(dá)信最新內(nèi)測(cè)版公式支持dll函數(shù),發(fā)個(gè)dll編輯教程,大家一起學(xué)習(xí)


為什么要用dll文件來(lái)開發(fā)公式?
1.為了突破分析家和飛狐現(xiàn)有功能的限制。
2.為了提高公式速度。
3.為了加密公式的理念。
4.增加新的功能。 
 下面我們逐漸用vc++ 6.0來(lái)講制作分析家dll公式的過(guò)程。

[第一講]準(zhǔn)備的東東
1.安裝VC++ 6.0軟件
2.下載分析家C語(yǔ)言接口文件。
3.具備C++編程的知識(shí)。
如果不會(huì),自己下載教學(xué)軟件,或找本相關(guān)的書籍。
4.會(huì)分析家基本公式編寫。
如果不會(huì),在本站下載相關(guān)分析家公式編寫資料。 
準(zhǔn)備好后,我開始講一個(gè)完整公式的編寫過(guò)程?! ?/font>

[第二講]練習(xí)編譯dll文件。
1.解包分析家c語(yǔ)言接口
2.啟動(dòng)Vc++
點(diǎn)擊菜單[File]選Open Workspace。
選擇文件FxjFunc.dsw
3.選擇菜單[Build],選擇Build FxjFunc.dll
生成FxjFunc.dll文件。如果沒(méi)有錯(cuò)誤,顯示下面結(jié)果。
--------------------Configuration: FxjFunc - Win32 Debug--------------------
FxjFunc.dll - 0 error(s), 0 warning(s)
4.生成的FxjFunc.dll文件在D:\SUPERSTK目錄中。
如果不在當(dāng)前使用的分析家目錄,可以將FxjFunc.dll文件復(fù)制到分析家目錄中,也可以復(fù)制到飛狐

\FoxTrader\FmlDLL目錄中。
5.在飛狐或分析家建立公式,看看結(jié)果。公式只有下面一句,10日close均線。
ma1:"fxjfunc@mymaclose"(10); 如果結(jié)果正確,你已經(jīng)成功編寫了dll公式了。
在后面的講課中介紹編寫技巧。 
第三講]分析家擴(kuò)展函數(shù)規(guī)范及設(shè)計(jì)
分析家擴(kuò)展函數(shù)規(guī)范如下:
///////////////////////////////////////////////////////////////////////////
#ifndef __FXJFUNC_H_INCLUDE
#define __FXJFUNC_H_INCLUDE

#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, //月線
MULTI_DATA //多日線
};
  
///////////////////////////////////////////////////////////////////////////
//基本數(shù)據(jù)
typedef struct tagSTKDATA 
{
time_t m_time; //時(shí)間,UCT
float m_fOpen; //開盤
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盤
float m_fVolume; //成交量
float m_fAmount; //成交額
WORD m_wAdvance; //上漲家數(shù)(僅大盤有效)
WORD m_wDecline; //下跌家數(shù)(僅大盤有效)
} STKDATA;
////////////////////////////////////////////////////////////////////////////
//擴(kuò)展數(shù)據(jù),用于描述分筆成交數(shù)據(jù)的買賣盤
typedef union tagSTKDATAEx
{
struct
{
float m_fBuyPrice[3]; //買1--買3價(jià)
float m_fBuyVol[3]; //買1--買3量
float m_fSellPrice[3]; //賣1--賣3價(jià)
float m_fSellVol[3]; //賣1--賣3量
};
float m_fDataEx[12]; //保留
} STKDATAEx;
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
//函數(shù)數(shù)據(jù)結(jié)構(gòu)
typedef struct tagCALCINFO
{
const DWORD m_dwSize; //結(jié)構(gòu)大小
const DWORD m_dwVersion; //調(diào)用軟件版本(V2.10 : 0x210)
const DWORD m_dwSerial; //調(diào)用軟件序列號(hào)
const char* m_strStkLabel; //股票代碼
const BOOL m_bIndex; //大盤
  
const int m_nNumData; //數(shù)據(jù)數(shù)量(pData,pDataEx,pResultBuf數(shù)據(jù)數(shù)量)
const STKDATA* m_pData; //常規(guī)數(shù)據(jù),注意:當(dāng)m_nNumData==0時(shí)可能為 NULL
const STKDATAEx* m_pDataEx; //擴(kuò)展數(shù)據(jù),分筆成交買賣盤,注意:可能為 NULL
  
const int m_nParam1Start; //參數(shù)1有效位置
const float* m_pfParam1; //調(diào)用參數(shù)1 
const float* m_pfParam2; //調(diào)用參數(shù)2
const float* m_pfParam3; //調(diào)用參數(shù)3
const float* m_pfParam4; //調(diào)用參數(shù)3
  
float* m_pResultBuf; //結(jié)果緩沖區(qū)
const DATA_TYPE m_dataType; //數(shù)據(jù)類型
const float* m_pfFinData; //財(cái)務(wù)數(shù)據(jù)
} CALCINFO;

///////////////////////////////////////////////////////////////////////////////////

//示例函數(shù),使用時(shí)用實(shí)際名稱替換
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMACLOSE_CALC_PREV(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR_CALC_PREV(CALCINFO* pData);
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__FXJFUNC_H_INCLUDE
////////////////////////////////////////////////////////////////////////
  分析家的數(shù)據(jù)結(jié)構(gòu)見(jiàn)上面。
//基本數(shù)據(jù)
typedef struct tagSTKDATA 
{
time_t m_time; //時(shí)間,UCT
float m_fOpen; //開盤
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盤
float m_fVolume; //成交量
float m_fAmount; //成交額
WORD m_wAdvance; //上漲家數(shù)(僅大盤有效)
WORD m_wDecline; //下跌家數(shù)(僅大盤有效)
} STKDATA;
在前一講中,求均線ma(c,x),是用收盤價(jià),我們可以改成中值(h+l+c)/3的均線。
將FxjFunc.cpp程序中
fTotal += pData->m_pData[i-j].m_fClose;
改為
fTotal=fTotal + ( pData->m_pData[i-j].m_fClose+ pData->m_pData[i-j].m_fLow+ pData->m_pData

[i-j].m_fHigh )/3;
  
將上面接口規(guī)范看懂后,你可以創(chuàng)作各種函數(shù)。
當(dāng)將你公式中的一些分析家函數(shù)替換成dll中的函數(shù),可以實(shí)現(xiàn)簡(jiǎn)單的加密。
另一方面,使用dll文件讀取數(shù)據(jù),是沒(méi)有經(jīng)過(guò)精度轉(zhuǎn)換的原始記錄數(shù)據(jù),有助
于精確分析。此外用c++編寫公式可以使用循環(huán),遍歷等很多分析家所不能實(shí)現(xiàn)
的功能。
[第四講]公式中的數(shù)據(jù)傳遞
一.dll公式計(jì)算的結(jié)果如何返回到分析家中
dll函數(shù)計(jì)算結(jié)果用pData->m_pResultBuf帶回.
也就是說(shuō)dll函數(shù)必須有值返回。
函數(shù)返回-1表示錯(cuò)誤或全部數(shù)據(jù)無(wú)效,否則返回第一個(gè)有效值位置,即:
m_pResultBuf[返回值] -- m_pResultBuf[m_nNumData-1]間為有效值.
例如上例:i表示當(dāng)前所計(jì)算的周期。
pData->m_pResultBuf = fTotal/nPeriod;
全部數(shù)據(jù)為m_nNumData組。超過(guò)會(huì)出現(xiàn)錯(cuò)誤。數(shù)據(jù)下標(biāo)從0開始到m_nNumData-1二.分析家中公式的參數(shù)如

何傳遞到dll公式。
1.函數(shù)調(diào)用參數(shù)由m_pfParam1--m_pfParam4帶入,若為NULL則表示該參數(shù)無(wú)效.
2.當(dāng)一個(gè)參數(shù)無(wú)效時(shí),則其后的所有參數(shù)均無(wú)效.
如:m_pfParam2為NULL,則m_pfParam3,m_pfParam4一定為NULL.
3.參數(shù)1可以是常數(shù)參數(shù)或序列數(shù)參數(shù),其余參數(shù)只能為常數(shù)參數(shù).
4.若m_nParam1Start<0, 則參數(shù)1為常數(shù)參數(shù),參數(shù)等于*m_pfParam1;
5.若m_nParam1Start>=0,則參數(shù)1為序列數(shù)參數(shù),m_pfParam1指向一個(gè)浮點(diǎn)型數(shù)組,數(shù)組大小為m_nNumData,

數(shù)據(jù)有效范圍為m_nParam1Start--m_nNumData.在時(shí)間上m_pData[x] 與 m_pfParam1[x]是一致的
在參數(shù)上,分析家不如飛狐交易師靈活。分析家只允許1個(gè)變化序列數(shù)據(jù),飛狐可以允許四個(gè)變化序列數(shù)

據(jù)。三.公式的設(shè)計(jì)和使用
1.調(diào)用時(shí)在公式編輯器中寫"動(dòng)態(tài)庫(kù)名稱@函數(shù)名稱"(參數(shù)表)即可,例如下面函數(shù)可以寫

為"FXJFUNC@MYCMALOSE"(5)
2.動(dòng)態(tài)連接庫(kù)名稱和函數(shù)名稱可以自己定義.
3.使用時(shí)可以將動(dòng)態(tài)庫(kù)拷貝到分析家目錄下使用.
分析家在SUPERSTK目錄中
飛狐在FoxTrader\FmlDLL目錄中例子:在公式接口中有,這個(gè)例子告訴你如何使用兩個(gè)參數(shù)。
//計(jì)算均價(jià),2個(gè)參數(shù),參數(shù)1為待求均線的數(shù)據(jù),參數(shù)2表示計(jì)算周期
//調(diào)用方法:
// MYMAVAR(CLOSE-OPEN,5)
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
float f,fTotal;
const float* pvalue;
int nPeriod,nFirst,i,j;
if(pData->m_pfParam1 && pData->m_pfParam2 && //參數(shù)1,2有效
pData->m_nParam1Start>=0 && //參數(shù)1為序列數(shù)
pData->m_pfParam3==NULL) //有2個(gè)參數(shù)
{
pvalue = pData->m_pfParam1; //參數(shù)1
nFirst = pData->m_nParam1Start; //有效值
f = *pData->m_pfParam2;
nPeriod = (int)f; //參數(shù)2
if(nFirst>=0 && nPeriod>0)
{
for(i=nFirst+nPeriod-1;im_nNumData;i++)
{
fTotal = 0.0f;
for(j=0;j
fTotal += pData->m_pData[i-j].m_fClose;
pData->m_pResultBuf = fTotal/nPeriod; //平均
}
return nFirst+nPeriod-1;
}
}
return -1;
}
大家可以參照上例來(lái)設(shè)計(jì)自己的dll公式。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多