初めてのDLL(3)/移動平均篇

DLL作成3日目は、もっとも簡単なテクニカル指標である移動平均を DLL 内で計算してみます。
DLL内で、MA,ATR,CCI,MACD,RSI等が比較的簡単に計算できれば、いろいろと役に立つと思います。



続きは、本当に興味のある人だけどうぞ..orz


MQL4の準備


(1) まずは、MQL4インジケータ側で DLLを使えるように宣言します。
移動平均を計算するためのデータ配列と、計算結果配列と、配列のサイズを引数とします。


(2) start()内では、DLLへの配列の授受を行います。
↓DLLに渡す配列は時系列配列にしておくのが便利です。

↑分かりやすいように out という配列を用意していますが、outの代わりに MABuffer1を利用することも可能です。


(C言語の知識が増えてきたら、ArrayCopyRates()を用いてRates構造体配列をDLLに渡すのが楽です...。その辺りは、ご自身で探求してください。。



テクニカル指標ライブラリの導入

テクニカル指標の計算式をC言語ですべて書くのはとても面倒なので、フリーのライブラリ ( TA-Lib )を利用します。(手抜き・・・^^;
(3) http://ta-lib.org/hdr_dw.html から、ta-lib-0.4.0-msvc.zipをダウンロードして解凍します。

(4) ta-lib\c フォルダ内の include , lib フォルダをコピーして、

↓プロジェクトフォルダ内にペーストします。

(5) リンカの入力の追加の依存ファイルに .\lib\ta_libc_cmr.lib を追加します。

↑構成が Release になっているか常に注意してください。


(6) cppファイルの先頭に
#include ".\include\ta_libc.h"
を追加します。

(7) DllMain の中に、TA_Initialize(),TA_Shutdown()を追加します。
DLL が読まれた時点で、TA_Initialize し、終了時に TA_Shutdown するようにします。

これでライブラリの利用準備が出来ました。


(この作業を初めて行う人には、おそらく何をしているのか?さっぱり分からないと思います..。これは、魔道書に書かれた意味不明の呪文を唱えているのだと考えてください..。正しく詠唱できれば、現代魔法は作用するのです...。

DLL内で移動平均を計算する。

(8) def ファイルに関数名 CustomMA を追加します。

(9) CustomMA 関数内では、以下のように書きます。

移動平均の計算には、TA_MA という関数を使っています。MQL4 の iMA関数のように1行で移動平均が求まるのが、TA-Lib の利点です。使える MAのタイプは、include\ta_defs.h を見ると9種類あることが分かります。


↓MT4標準の移動平均(青)とCustomMA(赤)を重ねると一致します。

実際にEAの中でDLLを使い、テクニカル指標を計算する場合は、一度はインジケータでDLLを試作してみる必要があります。MQL4が独特な計算式を使っている場合は、TA-Lib と異なる結果になるからです...。異なっていた場合はTA-Lib の利用は諦めて、C言語で計算式を再現するようにプログラムしましょう..orz


TA-Lib については、
使い方 http://ta-lib.org/d_api/d_api.html
関数リスト http://ta-lib.org/function.html
関数仕様 include\ta_func.h
に書かれているので興味のある人はどうぞ....



今日のプロジェクトは、ここに置きました。コーディング内容についてはかなり説明を省いています。DLLを作ろうとする人なら、ある程度脳内補完してくれることを期待していますが..どうしても質問があれば1度だけ回答します。(ぇ