![見出し画像](https://assets.st-note.com/production/uploads/images/70883113/rectangle_large_type_2_036e137cab898bd31fe0b2019d15ea37.png?width=1200)
Block EAでカスタム指標プログラミング
しばらく記事の投稿お休みしてました。
もうすぐFIREの本業が忙しかったことや、Block EAの懸案事項に取り組んでいたためです。
で、ようやくBlock EAのリリース版を公開できました。
Block EAは、メタトレーダーのMT4とMT5とでEAのソースコードを共通化させるライブラリを使うことを前提としているので、基本はEAプログラミング用です。
ただ、メタトレーダーでは、EAのほかにカスタム指標やスクリプトのプログラミングもできるようになっています。懸案事項とは、これらのプログラムもブロックプログラミングで作れないかということでした。
スクリプトは1回実行させるだけのプログラムなので難しくはないのですが、カスタム指標はメタトレーダー独自の作法があり、それがMT4とMT5とで違っていたりして、なかなか難しいところがありました。
さらにカスタム指標は、凝りだすとキリがないほどできることが多いです。MT4とMT5でできることすべてに対応させるのは大変です。
そこで今回は、作成可能なカスタム指標をかなり絞って対応することにしました。基本的には、以下のCodeBaseの「カスタム指標コード集」のページに掲載されているものを作れるようにしました。
では、Block EAの画面で説明していきます。
カスタム指標特有のブロックは、MQL関数のツールボックスの「カスタム指標」のカテゴリーに配置しています。
ただ、これらを一つずつ組んでいくのは面倒なので、とりあえず、テンプレートを見てください。
カスタム指標のコードを知っている人であれば、どう対応しているかはすぐにわかると思います。
「カスタム指標セットアップ」のブロックが、#propertyから始まる一連のプリプロセッサ命令、「初期化関数」のブロックがOnInit()関数、「指標計算関数」のブロックがOnCalculate()関数にそれぞれ対応しています。
この3つのブロックをワークスペースにドラッグするとカスタム指標のプログラムとなります。
MQLコード表示させると、以下のようになります。
#include "LibMQL4.mqh"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 0x0000ff
#property indicator_width1 1
#property indicator_style1 STYLE_SOLID
double Buf[];
int OnInit()
{
SetIndexBuffer(0, Buf);
ArraySetAsSeries(Buf, true);
SetIndexLabel(0, "MyIndicator");
SetIndexDrawBegin(0, 0);
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open2[],
const double &high[],
const double &low[],
const double &close2[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
ArraySetAsSeries(close2, true);
int limit = (rates_total - prev_calculated);
limit = (MathMin(limit, (rates_total - 0)));
for (int i = 0; i <= limit - 1; i++) {
Buf[i] = (close2[i]);
if (((Buf[i]) == (EMPTY_VALUE))) return 0;
}
return (rates_total - 1);
}
コメント等入れていないのでわかりにくいかもしれませんが、単に終値を結ぶだけのプログラムです。
MT4、MT5共通のコードとなっているので、mq4ファイルの保存、mq5ファイルの保存を選ぶと、同じ内容で拡張子だけが違うファイルとして保存されます。
これをMT4、MT5のデータフォルダのMQL4\Indicators、MQL5\Indicatorsのフォルダにコピーしてコンパイルすると実行ファイルになります。
適当なチャートに挿入するとこんな感じになります。
これはテンプレートなので単純な指標ですが、カスタム指標も指標の数が多くなると、同じようなコードを繰り返して書く必要があります。Block EAのブロックでは複数の命令をまとめているので、少しは手間が省けるのではないかと思います。
今回の記事はBlock EAの紹介ということで、細かい仕様には触れませんでした。個別のブロックの機能については、そのうち「今日のワンポイント」として紹介したいと思います。
Block EAもまだ開発途上のツールです。様々な機能の試行やベータバージョンの公開はToyolab FX on Slackの方で行っています。興味のある方は是非ご参加ください。