大伊人青草狠狠久久-大伊香蕉精品视频在线-大伊香蕉精品一区视频在线-大伊香蕉在线精品不卡视频-大伊香蕉在线精品视频75-大伊香蕉在线精品视频人碰人

您現在的位置:程序化交易>> 外匯現貨>> MT4>> MT4知識>>正文內容

MT4 DLL開發--通過DLL傳遞數據到外部程序 [MT4]

  • 在Visual C++開發工具中創建一個工程,選擇MFC(DLL)類型,假設工程名為demo。創建好工程后,最核心的兩個文件為demo.cpp和demo.def。
    假設希望開發的dll文件中包含三個功能函數:
    復制代碼
    1.  double GetCloseValue( RateInfo* rates,int totalRecords, int shift )返回收盤價位
    2.  double GetHighValue( RateInfo* rates,int totalRecords, int shift )返回最高價位
    3.  void GetSMAArray( RateInfo* rates, int totalRecords, int period, double result[] ) 返回SMA移動平均線值

    其中RateInfo被定義為結構類型:
    復制代碼
    1. struct RateInfo
    2. {
    3. unsigned int time; //時間
    4. double open;//開盤價格
    5. double low; //最低價格
    6. double high;//最高價格
    7. double close; //收盤價格
    8. double volume; //成交量
    9. };

    比較精妙的是MT4提供了ArrayCopyRates函數用于復制一段走勢圖上的數據到一個二維數組,并返回復制柱子的總數。其第二維為固定的6個項目,從0到5分別為“時間、開盤價格、最低價格、最高價格、收盤價格、成交量”。
    復制代碼
    1. int ArrayCopyRates( void dest_array[], void symbol, void timeframe)

    因此這里的RateInfo結構定義正好對應上面二維數組的第二維,MT4程序也是默認通過這種方式來提供二維數組到結構指針(即RateInfo結構數組)的映射的。
    在demo.def中定義DLL的輸出函數(如下),經過編譯后將在指定目錄生成DLL文件。
    復制代碼
    1. LIBRARY"demo"
    2. EXPORTS
    3. GetCloseValue
    4. GetHighValue
    5. GetSMAArray

    將生成的DLL文件拷貝到MT4程序的”experts/libraries目錄下。在MT4程序中調用引用DLL的代碼為:
    復制代碼
    1. #import "demo.dll"
    2. double GetCloseValue( double rates[][6], int totalRecords, int shift );
    3. doubleGetHighValue( double rates[][6], int totalRecords, int shift );
    4. void GetSMAArray( double rates[][6], int totalRecords, int period, double& results[]);
    5. #import

    這里引用DLL函數的一個重要的區別在于RateInfo*被映射為二維數組double rates[][6],也就是說MT4調用DLL的時候由操作系統根據內存指針完成了數據的訪問,且結構定義中的unsigned int是從double類型轉換后得到的。在MT4程序中調用DLL中函數的代碼為:
    復制代碼
    1. int start()
    2. {
    3. double rates[][6];
    4. int totalRecords = ArrayCopyRates( rates, Symbol(), 0 );
    5. for( int i = totalRecords; i >= 0; i-- )
    6. { `
    7. results[i] = EMPTY;
    8. }
    9. GetSMAArray( rates, totalRecords, period, results );
    10. return(0);
    11. }

    示例代碼(DLL對應cpp文件中的函數定義和代碼):
    復制代碼
    1. //+------------------------------------------------------------------+
    2. //|MT4調用DLL示例程序 |
    3. //| Copyright @2009-2010, 笨蛋學經濟 |
    4. //| [url]http://macy01.blogcn.com[/url] |
    5. //+------------------------------------------------------------------+
    6. #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
    7. #define MT4_EXPFUNC __declspec(dllexport)
    8. //+-----------------------------------------------------------------------------------------------------------------------------+
    9. //| MT4數據結構|
    10. //+-----------------------------------------------------------------------------------------------------------------------------+
    11. #pragma pack(push,1)
    12. struct RateInfo
    13. {
    14. unsigned int time;
    15. double open;
    16. double low;
    17. double high;
    18. double close;
    19. double volume;
    20. };
    21. struct MqlStr
    22. {
    23. int len;
    24. char* string;
    25. };
    26. #pragma pack(pop)
    27. //+-----------------------------------------------------------------------------------------------------------------------------+
    28. //|DLL函數定義 |
    29. //+-----------------------------------------------------------------------------------------------------------------------------+
    30. MT4_EXPFUNC double _stdcall GetCloseValue( RateInfo* rates,int totalRecords, int shift )
    31. {
    32. return( rates[totalRecords-shift-1].close );
    33. }
    34. MT4_EXPFUNC double _stdcall GetHighValue( RateInfo* rates,int totalRecords, int shift )
    35. {
    36. return( rates[totalRecords-shift-1].high );
    37. }
    38. MT4_EXPFUNC void _stdcall GetSMAArray( RateInfo* rates, int totalRecords, int period, double result[] )
    39. {
    40. for( int i = 0; i < totalRecords; i++)
    41. {
    42. double sum = 0.0;
    43. for( int k = 0; k < period ; k++ )
    44. {
    45. sum += rates[totalRecords-i-1-k].close;
    46. }
    47. result[totalRecords-i-1] = sum / period ;
    48. }
    49. }

【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
主站蜘蛛池模板: 欧美午夜精品一区二区三区 | 天天干天天舔天天操 | 91成人爽a毛片一区二区 | 日韩欧美亚洲一区精选 | 亚洲国产高清精品线久久 | 一级片免费网站 | 国产网友自拍 | 精品国产自在现线看久久 | 国产成人精品综合久久久软件 | 神马影院我不卡888 神马影院我不卡手机 | 狠色狠狠色狠狠狠色综合久久 | a级片网址 | 一级毛片特级毛片黄毛片 | 欧美观看一级毛片 | 黄色毛片视频免费 | 999热这里只有精品 999人在线精品播放视频 | 中文字幕亚洲在线 | 久草在线免费看视频 | 久久久久久久男人的天堂 | 99热精品久久只有精品黑人 | 国产三级在线精品男人的天堂 | 国产精品自拍视频 | 日本黄页网址 | 国偷盗摄自产福利一区在线 | 夜色资源在线观看免费 | 日韩色区 | 亚洲国产成人在线 | 四虎影在永久地址在线观看 | 亚色91| 国产成人一区二区视频在线观看 | 欧美精品免费在线观看 | 国产成人aa在线观看视频 | 色妇色综合久久夜夜 | 久久国产亚洲观看 | 夭天干天天做天天免费看 | 日日摸夜夜添夜夜添毛片 | 久久水蜜桃 | 欧美一区二区三区在线视频 | 99精品免费在线观看 | 久久精品国产影库免费看 | 超碰最新上传 |