MT4 DLL開發--通過DLL傳遞數據到外部程序 [MT4]
作者:
MT4 來源:
cxh99.com 發布時間:2012年05月17日 點擊數:
【
收藏到本網的會員中心】
- 在Visual C++開發工具中創建一個工程,選擇MFC(DLL)類型,假設工程名為demo。創建好工程后,最核心的兩個文件為demo.cpp和demo.def。
假設希望開發的dll文件中包含三個功能函數:
復制代碼- double GetCloseValue( RateInfo* rates,int totalRecords, int shift )返回收盤價位
- double GetHighValue( RateInfo* rates,int totalRecords, int shift )返回最高價位
- void GetSMAArray( RateInfo* rates, int totalRecords, int period, double result[] ) 返回SMA移動平均線值
其中RateInfo被定義為結構類型:
復制代碼- struct RateInfo
- {
- unsigned int time; //時間
- double open;//開盤價格
- double low; //最低價格
- double high;//最高價格
- double close; //收盤價格
- double volume; //成交量
- };
比較精妙的是MT4提供了ArrayCopyRates函數用于復制一段走勢圖上的數據到一個二維數組,并返回復制柱子的總數。其第二維為固定的6個項目,從0到5分別為“時間、開盤價格、最低價格、最高價格、收盤價格、成交量”。
復制代碼- int ArrayCopyRates( void dest_array[], void symbol, void timeframe)
因此這里的RateInfo結構定義正好對應上面二維數組的第二維,MT4程序也是默認通過這種方式來提供二維數組到結構指針(即RateInfo結構數組)的映射的。
在demo.def中定義DLL的輸出函數(如下),經過編譯后將在指定目錄生成DLL文件。
復制代碼- LIBRARY"demo"
- EXPORTS
- GetCloseValue
- GetHighValue
- GetSMAArray
將生成的DLL文件拷貝到MT4程序的”experts/libraries目錄下。在MT4程序中調用引用DLL的代碼為:
復制代碼- #import "demo.dll"
- double GetCloseValue( double rates[][6], int totalRecords, int shift );
- doubleGetHighValue( double rates[][6], int totalRecords, int shift );
- void GetSMAArray( double rates[][6], int totalRecords, int period, double& results[]);
- #import
這里引用DLL函數的一個重要的區別在于RateInfo*被映射為二維數組double rates[][6],也就是說MT4調用DLL的時候由操作系統根據內存指針完成了數據的訪問,且結構定義中的unsigned int是從double類型轉換后得到的。在MT4程序中調用DLL中函數的代碼為:
復制代碼- int start()
- {
- double rates[][6];
- int totalRecords = ArrayCopyRates( rates, Symbol(), 0 );
- for( int i = totalRecords; i >= 0; i-- )
- { `
- results[i] = EMPTY;
- }
- GetSMAArray( rates, totalRecords, period, results );
- return(0);
- }
示例代碼(DLL對應cpp文件中的函數定義和代碼):
復制代碼- //+------------------------------------------------------------------+
- //|MT4調用DLL示例程序 |
- //| Copyright @2009-2010, 笨蛋學經濟 |
- //| [url]http://macy01.blogcn.com[/url] |
- //+------------------------------------------------------------------+
- #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
- #define MT4_EXPFUNC __declspec(dllexport)
- //+-----------------------------------------------------------------------------------------------------------------------------+
- //| MT4數據結構|
- //+-----------------------------------------------------------------------------------------------------------------------------+
- #pragma pack(push,1)
- struct RateInfo
- {
- unsigned int time;
- double open;
- double low;
- double high;
- double close;
- double volume;
- };
- struct MqlStr
- {
- int len;
- char* string;
- };
- #pragma pack(pop)
- //+-----------------------------------------------------------------------------------------------------------------------------+
- //|DLL函數定義 |
- //+-----------------------------------------------------------------------------------------------------------------------------+
- MT4_EXPFUNC double _stdcall GetCloseValue( RateInfo* rates,int totalRecords, int shift )
- {
- return( rates[totalRecords-shift-1].close );
- }
- MT4_EXPFUNC double _stdcall GetHighValue( RateInfo* rates,int totalRecords, int shift )
- {
- return( rates[totalRecords-shift-1].high );
- }
- MT4_EXPFUNC void _stdcall GetSMAArray( RateInfo* rates, int totalRecords, int period, double result[] )
- {
- for( int i = 0; i < totalRecords; i++)
- {
- double sum = 0.0;
- for( int k = 0; k < period ; k++ )
- {
- sum += rates[totalRecords-i-1-k].close;
- }
- result[totalRecords-i-1] = sum / period ;
- }
- }
主站蜘蛛池模板:
gay白袜男强制捆绑视频网站|
亚洲成a人片在线观看久|
里番acg全彩本子同人视频|
国产精品久久久久久|
99热亚洲色精品国产88|
成人做受120视频试看|
久久免费观看国产精品88av|
欧美jizzhd精品欧美|
亚洲欧洲日产国码无码久久99
|
assbbwbbwbbwbbwbw精品|
成人福利网址永久在线观看|
久久人人爽人人爽人人av东京热|
最近中文字幕完整电影|
亚洲国产一区二区三区|
毛片网站免费观看|
伊人久久大香线蕉亚洲|
精品午夜福利1000在线观看|
囯产精品一品二区三区|
蜜桃久久久久久久久久久|
国产在线拍揄自揄拍无码|
国模私拍福利一区二区|
国产真实乱了在线播放|
2020狠狠操|
国产美女一级做a爱视频|
99久热re在线精品996热视频|
天天躁夜夜躁狠狠躁2021西西|
一本久久综合亚洲鲁鲁五月天
|
亚洲美女在线观看播放|
99久久综合狠狠综合久久aⅴ|
性放荡日记高h|
中文字幕人妻三级中文无码视频
|
国产精品自在线拍国产电影|
99久久99这里只有免费费精品|
天堂中文资源网|
一区两区三不卡|
好男人社区在线www|
一级一级毛片看看|
学渣坐在学长的棒棒上写作业作文|
中国国产aa一级毛片|
成人久久精品一区二区三区|
不卡高清av手机在线观看|