yuki
本日はEAを作るためにMQL4からプログラミングの勉強を始めた人がよくやってしまう失敗のお話です
カオチャイ
基本的な部分ですが、MQL4は段階的に学べる環境が整っておりませんので、できれば良書が多いC言語などの勉強をおすすめしますよ!
インジケーターに必要な初期化関数が抜けていないかチェック
まずインジケーターには下記の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から始めた方がよくやる失敗【超基本】
yuki
あと初学者のお問い合わせで多いのは中括弧{}が対になっていない事も多いですね
カオチャイ
このあたりは大抵のエディターならば色で教えてくれますので、初学者の方は注意してコードをチェックしてくださいね!
EA・インジケーター制作のご依頼はこちら
インジケーターのバックテスト&リペイントチェック代行サービスMT4やMT5に関するツールを作成する際の流れを説明しています。
シストレファクトリーでは一からEAの制作以外にもツールの修正や、統計的なアプローチができるソフトなどお客様の欲しいツールを形にいたします。...
【MT4&MT5】EA&インジケーター制作代行承ります
EA&インジケーター制作代行とは?
EA&インジケーター制作代行では、皆さんが日頃使っている手法をMT4(MT5)でエントリーサイ...
インジケーターをより使いやすく
【MQLコード解説】EA・インジケーターのカスタマイズ【体験版・LINE通知】EAやインジケーターに口座番号認証を実装する方法を紹介しています。
認証システムにはMQLAuthを利用して解説していきます。...
インジケーターの開発費用の見えない事情
プログラムのコードはいかに少なく、いかに美しく
MT4のツールを作成するためのMQL言語は、たとえチャート上で同じ挙動をするソフト...
MT4とMT5のTIMEFRAMEの違い
TIMEFRAMEが起こすエラー
TIMEFRAMEはMT4でたまに起こる問題があります。
MT4の場合、価格データが時間軸...
MQLでよく出現するarray out of rangeとは?
https://interactivebrokers.work/upgrade/
array out of range...