MQL4から始めた方がよくやる失敗【超基本】
インジケーターに必要な初期化関数が抜けていないかチェック
まずインジケーターには下記の3つの関数が必須です。
インジケーター初期化関数
int OnInit() { }
インジケーター初期化解除関数
void OnDeinit(const int reason) { }
インジケーターティック毎の処理関数
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[]) { }
これはほぼテンプレートで、インジケーターの開発者様にはおなじみの関数ですが、実は2番めのインジケーター初期化解除関数OnDeinit()はテンプレートとして最初から書かれていないので注意が必要です。
チャート上に出したインジケーターの線などを消すコードをこのOnDenit()内に記載するのですが、OnDeinit()がないとMT4からインジケーターを削除してもチャート上に表示がすべて残ってしまうということが起きます。
全角スペースは使えない
これはプログラミングを書く際には当然の話なのですが、相談を受けているととても多い案件です。
独学でプログラミングの勉強をされている場合、勉強ルートによっては意外とこの基礎が説明不足で抜けてしまうのかもしれません。
どんなプログラミング言語でも、コードを書く場合に全角スペースや全角コンマは利用できません。もし使いますとエディターに下記のエラーがでますので注意してくださいね。
セミコロンの場所に注意
これも初学者さんによくあるミスですが、セミコロンは変数の宣言と関数の宣言でつけるかつけないかが異なります。
関数の宣言はセミコロンがいらないが、中括弧が必要
void OnDeinit(const int reason) {
}
変数の宣言 行末にセミコロンが必要
int limit = Bars - IndicatorCounted();
MQL4から始めた方がよくやる失敗【超基本】



クリックで拡大できます


