MQL4からMQL5への移植(その2)
前回【MQL4からMQL5への移植(その1)】のつづきです^^
MT4では、BidやBarsといった変数には自動的にその値が入っていましたが、
MT5では、SymbolInfoDouble(_Symbol,SYMBOL_BID)や
Bars(_Symbol,PERIOD_CURRENT)といった感じに関数で呼び出さなくてはなりません。
Close[1]やHigh[0]といった配列にいたっては、
データを入れる配列をつくって、
そのなかにデータをコピーして、
どのデータを知りたいか選択してやっと呼び出せます^^;
そのうえ、MT4のように1本前の足の高値をHigh[1]といったように、
シフトの数で指定するようにする場合は、
ArraySetAsSeries(...)という関数を使って『最新の足を0として数えますよ』と
書いておかないといけません。
例えば、ArraySetAsSeries(Open,true)を書き忘れてしまっていて、
MT4のように、最新の足の始値を取得しようとOpen[0]と書いたら、
最古の始値を取得しちゃいます^^;
慣れるまで大変ですので、頭に
#include <mql4to5_timeseries_array.mqh>
と、start()に替わるOnTick()(EAの場合)の中の最初に
CopyCurrent();
を、書き込むだけでよいインクルードファイルを作りました^^
今回は、前回よりも書き換え手順が楽ですね^^
ダウンロードはこちらから→mql4to5_timeseries_array.zip
そのサンプルEA→timeseries_sample1.zip
でわでわ^^
MQL4からMQL5への移植の関連記事
タグ
MQL4からMQL5への移植(その1)
MT5(MetaTrader5)のメタエディタをいじって気が付いたこと。
EAなどから呼び出す、テクニカルインディケータの関数(iMAなど)の使い方が
大きく違いますね^^;
MT4では、iMA(平均線のパラメータ,何本前の足か)と入力すれば、
知りたい平均線の値が呼び出せましたがMT5では、
iMA(~~)の固有のハンドル(変数)をつくって、
さらに、データを入れる配列をつくって、
そのなかにデータをコピーして、
どのデータを知りたいか選択してやっと呼び出せます^^;
作業が、4~5倍になった感じです。
(使いこなせば、処理のパフォーマンスは上がると思いますが^^;)
多くのEAをMT5に移植する場合、1つ1つのEAを
MQL5の形にするのはとても大変です。
そこで、便利なのがインクルード機能です。
#include <MQL4toMQL5_TechnicalIndicators.mqh>
といった感じにEAの頭の部分に書くと、includeフォルダにある
【MQL4toMQL5_TechnicalIndicators.mqh】を
そのEAの中に書いたことにしてくれます^^
includeフォルダのサブフォルダMQL4toMQL5の中にある場合は、
#include <MQL4toMQL5/mql4to5_timeseries_array.mqh>
です^^ 2009.10.21 内容を修正しました。
mqhファイルの保存場所はとあるMetaTraderの備忘秘録さんが、説明されております^^
今回は、MQL4でiMA(~)と書いていたものを、iMA4(~)と書き換えるだけで、
大丈夫なようにした、mqhファイルを作りました。
サンプルのEA(ただ、値を表示するだけのモノ)もあります。
よかったらダウンロードしてくださいね^^
リファレンスと、MetaEditorの書式が違ったりとまだまだ未完成な部分がたくさんあるようですが、
いまのうちから、移植準備をしておきましょうね^^;
ダウンロードはこちらから→MQL4toMQL5.zip
そのサンプルEA→mt4_tech_sample_ea.zip
2009.10.24 サンプルEA更新
でわでわ^^


