MT4でプログラミングを行うに当たっては、まず決まり事を覚えておきましょう。
※大前提として、プログラムはメタエディタを使う。
プロであればメモ帳から作ることも出来ますが、素人はこのメタエディタを使いましょう。
ソースファイル「mq4」を編集されたことがある方ならご記憶にあると思いますが、
ソースファイルはこのような形式で記述してあります。
//+——————————————————————+
//| aaa.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+——————————————————————+
#property copyright “Copyright 2018, MetaQuotes Software Corp.”
#property link “https://www.mql5.com”
#property version “1.00”
#property strict
#property indicator_separate_window
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int OnInit()
{
//— indicator buffers mapping
//—
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[])
{
//—
//— return value of prev_calculated for next call
return(rates_total);
}
//+——————————————————————+
//| Timer function |
//+——————————————————————+
void OnTimer()
{
//—
}
//+——————————————————————+
//| ChartEvent function |
//+——————————————————————+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//—
}
//+——————————————————————+
このソースを見ると、拒否反応を起こしそうです。
決まりごととは、MT4で処理する際には、int OnInit()
int OnCalculate()この2つの部分に注意してプログラミングを行います。
まず、int OnInit()エリアは、MT4でカスタムインディケーターをセットした際、もしくはMT4を再起動した際と処理がスタート時の1回だけ実行されれば良いものを記述するエリアとなります。
例えば変数の部分であったり、色の設定であったり。
次にint OnCalculate()のエリアですが、ここから下に記述されたプログラムは、値動きのあるつど毎回処理が実施されるエリアと覚えておいてください。
例えば、移動平均線の計算や、ボリンジャーバンドの計算等
価格変動のつど計算が必要な処理はここに記述します。
最後にvoid OnTimer()、やvoid OnChartEvent()などは
作成するロジックの内容によって使ったり不要になったりします。
現時点ではここは無視してかまいません。
なお、細かい部分ですが、「//」スラッシュ2本で記述内容をコメントと認識します。
行の終わり部分には「;」セミコロンが必要
ソースファイル内、コメント部分以外に全角文字は使用できない
と言ったプログラムを記述するうえでのルールがあります。ここらは実際にプログラムを作りながら覚えていくと良いでしょう。
まとめ、今回はソースファイルには1度だけ処理されるエリアと、価格変動の度に処理されるエリアがあり、変数の設定や、色の設定等は1度だけ処理するエリアへ、数値の計算や、設定した変数へ数値を代入したりする処理は、価格変動の度に計算処理が行われるエリアに記述すると言う部分を覚えておいてください。