【開発の裏側⑪】MQL4からMQL5へ移すとき、最初に確かめる3つ

【開発の裏側⑪】MQL4からMQL5へ移すとき、最初に確かめる3つ

記事
IT・テクノロジー
どうも、FXトレーダー兼システムエンジニアのナオトです。

FXハムラットのインジケーターは、MT4版とMT5版の両方を作っています。
1つのインジケーターについては、どちらかを主に開発して、もう一方へ移すやり方です。

移すときの目標は、コンパイルが通ることではありません。
同じ銘柄、同じ時間足で、同じ値と同じ描画になることです。

今回は、移すときに最初に確かめる3つを書きます。



1つ目は、配列の並び順です。

MQL4では、価格の配列の0番目が一番新しい足です。
MQL5の OnCalculate に渡される配列は、既定で0番目が一番古い足になります。

MQL4の感覚で close の0番目を読むと、MQL5では一番古い足をつかみます。
私は、MQL5の側で ArraySetAsSeries を使ってMQL4と同じ並びにそろえるやり方を基本にしています。自分で持つバッファにも忘れずに掛けます。
どちらにそろえたかは、仕様書に書いておきます。混ぜると後で必ず迷う。ここは譲れないところです。



2つ目は、テクニカル指標の呼び方です。

MQL4の iMA は、その足の移動平均の値がそのまま返ってきます。
MQL5の iMA が返すのは、値ではなくハンドルです。

ハンドルは OnInit で1回だけ作り、値は CopyBuffer で読みます。
CopyBuffer が必要な本数を返さないときは、データがまだそろっていないので、その回の計算はやめて次を待ちます。
終わるときは IndicatorRelease でハンドルを手放します。

計算のたびにハンドルを作るような書き方をすると、動くには動いても重くなります。



3つ目は、EAの場合の注文の考え方です。

MQL4では、建玉も待機注文も、まとめて注文として扱います。
MQL5では、建玉はポジション、待機注文は注文と、別のものになります。

さらにMT5には、1つの銘柄に1つのポジションしか持てないネッティング口座と、複数持てるヘッジ口座があります。
ナンピンのように同じ銘柄で何本も持つEAは、口座の種類でロジックが変わるんです。
ここは1対1で置き換えられないので、設計から見直します。



ほかにも細かい違いはたくさんありますが、事故になるのはたいていこの3つです。
移したあとは、両方のチャートを並べて、値が一致しているかを目で確かめて終わりにしています。



MT4とMT5の変換のご依頼は、こちらで受けています。


最後までお読みいただき、ありがとうございました。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す