学び方(1)では、MetaTrader4(MT4)がFX取引プラットフォームの世界標準となるに至った経緯、そして現在、そのMT4がMT5として衣替えの途上にあることまでを述べた。同時に、MT4のプログラム言語(MQL4)とMT5のプログラム言語(MQL5)が互換性を欠くことから、MT4で蓄積されてきた膨大な数のソフト(IndicatorやEA等)をMT5のソフトとして書き直す必要があること、そしてソフト利用者個人がその作業を自ら行うには、新しい言語(MQL5)を学ばなければならないこと等に言及した。
MT4とMT5のプログラム言語に互換性がないとしたが、厳密に表現すると、現行のMT4(新MT4)とMT5の間には、一部関数等には互換性があるが、他の部分には互換性がないとするのが正しい表現になる。MT4、MT5の両サイドで、できる限り互いに近づけるための更新を続けてきたからである。半面、トレード関数 OrderSend()等には、全く互換性が達成されていない。
ここから、MQL5の学び方の本論に入る。
1)テクニカル指標(以下インジ)の作成
MT4を学ばれた方の中には、テクニカル指標(インジ)の作成より前に自動売買プログラム(EA)作成から入られた人の方が多いのではないかと思う。MT5では先ずインジの作成から入るのが断然有利である。なぜなら、インジの作成では、MT4とMT5では互換性がある部分があることに加え、MT5の基礎に係る約束事が何ら加工しない素の形で学べるからである。EA作成においては、複雑な工夫や加工が必要となるので、こちらの学習はひとまず後回しにするのが賢明であろう。
例 単純移動平均線SMAのインジ作成
単純移動平均線のインジを作成する方法としては、指標そのものを数式で計算し、これを配列に適用するという正攻法ともいえる方式と組み込みテクニカル指標であるiMA()等の配列をそのまま適用する簡易な方法とが考えられる。簡易な方法といっても、このiMA()、関数名は酷似しているがMT4とMT5の間で互換性がない。組み込み指標関数を使ったインジの作成には、MT5独特のプログラム技術が用いられている。それゆえ、MQL4とMQL5の基本的な違いを理解するための格好の教材ともなっている。 ここを糸口にしてMT5の習得を始めるのがお勧めである。
① 指標を計算式からプログラム化する方法
「FXメタトレーダー 4 & 5」95ページには、「MQL5のカスタム指標プログラム」の書式のひな型が記載されている。一見して簡単そうであるが、いきなりこのひな形に数式を当てはめるだけではインジは完成できない。20ページに亘る説明を読んで内容をよく理解する必要がある。下記のSMA.mq5は実際に筆者が計算式から書き下ろした単純移動平均線のソースコードである。試行錯誤を繰り返してようやくチャート上問題なく作動するようになった。
//プリプロセッサー命令
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrRed
//指標バッファー用の配列の宣言
double Buf0[];
//外部パラメータ
input int MAPeriod = 20;
// 初期化関数
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0, Buf0, INDICATOR_DATA);
ArraySetAsSeries(Buf0, true);
return(INIT_SUCCEEDED);
}
//Custom indicator iteration function |
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// close[]を時系列配列にセット
ArraySetAsSeries(close, true);
//カスタム指標の範囲
int limit = rates_total - prev_calculated;
if(limit == 0) limit = 1;
//カスタム指標の計算
for (int i=limit-1; i>=limit-MAPeriod-1; i--) Buf0[i] = EMPTY_VALUE;
for (int i=limit-MAPeriod; i>=0; i--)
{
Buf0[i] = 0;
for (int j=0; j<MAPeriod; j++)
{
Buf0[i] += close[i+j];
}
Buf0[i] /= MAPeriod;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
② 一方、組み込み指標関数 iMA()からインジを作成するには、より深いMT4とMT5の違いの理解が必要であり、その詳細は、「FXメタトレーダー 4 & 5」の93 ~ 156ページでじっくり学んでいただきたい。MT5の基礎的知識が理解できるようになる。こちらも、一度使い方を会得すれば、MT5標準搭載の組み込み指標関数やiCustom()を自由に使いこなせるはずである。
最後に
自動売買プログラム(EA)は前ブログで紹介の通り、ライブラリー LibEA.mqhの開発により、MT5でのEA作成も簡易にできるようになった。また、これまでの説明の通り、テクニカル指標の作成も少しの学習で身につくことも分かった。MT5恐れるに足らずということである。
MT5のEA作成については、先ずは前ブログ(MT4及びMT5の両方で稼働するEAを作ろう)で取り上げたライブラリー LibEA.mqh を使って、種々のEAの作成に挑戦してみることだ。いかなるEA作成にも簡易に対応できる仕組みと工夫が用意されている。繰り返すが、難解なライブラリーの中身は、個々のレベルに応じて徐々に勉強していけばよい。インジ作成で培った知識が、ライブラリー理解にも役立つ筈である。(完)
(注意)
「FXメタトレーダー 4 & 5」の自動売買プログラム(EA)作成に係る部分では、MyPosition.mqhというライブラリーが使われているが、MT5のアップデイトで、ポジションのオーダー別管理(両建てを含む)ができるようになった現在、このライブラリーは妥当しなくなっている。MT5では、ライブラリーの使用は不可避ではあるが、LibEA.mqhのように完成度が高くなると、その中身がブラックボックス化することにも繋がる。MyPosition.mqhはMQL5学習にはほどよく出来上がっていたので、個人的にはこれの改訂版(Hedge版)が公開されることを望んでいる。
MyPosition.mqhに基づくEAについても、MT4/5共通ライブラりーLibEA.mqhで作動させるためのプログラム修正方法をToyolabにて発表されている。
※コメント投稿者のブログIDはブログ作成者のみに通知されます