MQL4 簡単なインジケータの作成

MQL4言語はC言語のような古い言語です。また数年前からMT4がアップデートされそれに伴い多少変更され、昔のコード異なることがあります。

カスタム・インジケータをMQL4言語を使って作ることが可能です。

 

直近の時間足で高値をコメントで表示させるインジケータです。

カスタム・インジケータ

 
MetaEditorでプログラムを作りたいのですが、現状ではMQL5で記述してMT4で使うという微妙な段階にあります。MQL5が新しいのでそちらを導入すればいいのですが、実際に使われているのはMT4なのでMQL5そのままでは動かないこともあるようで、いずれ解消されるでしょうけれど。
 

 

初期設定

 
プロパティ設定:
インジケータなのでチャート上に表示する。表示するため値を入れるバッファーが必要、それを色をつけて線で表示というような設定です。

  • ローソク足のチャート上に表示
  • 計算と表示用バッファー
  • グラフィックス表示用バッファー
  • 表示方法
  • 表示色


 
グローバル変数:
次に具体的なインジケータのバッファー名を配列で決めます。 小数点を使うのでdouble型で宣言
 


 
OnInit():初期化
起動時に1度だけ実行する箇所です。ここで必要な初期化をします。先に宣言したバッファを表示用に使うため SetIndexBuffer を使い、引数にINDICATOR_DATA を指定します。
 


 
OnCalculate():
次にプログラムの本体となる部分で、OnCalculateは価格の変化 (Tick) 毎に呼び出されます。

OnCalculateの引数の意味は:
  • rates_total
    • チャートのバー(ロウソク足)の総数で最初は画面バー総数です。
    • 価格の変化 (Tick) で呼び出さると+1になります。
  • prev_calculated
    • 計算済みのバー数です。
    • 最初は0
    • 計算を始めて全て計算を終えた時にはrates_totalと同じ
    • バーが追加されると rates_totalは1つ増えます。
  • &time[], &open[], &high[], &low[], &close[]
    • それぞれのバーにおける時間、始値、高値、安値、終値が配列で収まっている。
    • 要素の0は最新なのでチャート上は右端
    • バーが増えると要素が+1シフトする
  • tick_volume
    • Tickの更新回数
  • volume
    • Fxでは使用されていません
  • spread
    • MT4では使用されていません
 

OnCalculate()

 
OnCalculate()のパラメーターを使って
Barが追加されると1度だけ計算する設定を作ってみます

これを追加していきます


Print()を使ってLogを取って挙動を確認してみましょう


Logの結果は、以下のようになりました


時系列的には下から上に流れています

初期の動きは
rates_total=2048 // 総数
prev_calculated=0 // 計算をしていない状態
limit=2048 // rates_total – prev_calculated なので総数と同じ
i=0 // for()分のmain loopで計算をして、i=0で終わる

次にTickが来ると OnCalculate() が呼ばれるが
prev_calculated=2048 の総数と同じなので何もしない

1分足なので、20:53が20:54になるタイミング、
つまりBarが追加され
rates_total=2049
となり
limit=1でmain loopの計算を1度だけ行う

という挙動となります

 

Comment 高値表示

  簡単な文字を表示するためにCommentを使ってみます。下のように文字は「” “」でくくり、数字はそのままで、「,」で区切ります。  


 
これを使ってOnCalculateで引っ張ってくる最新の高値を表示してみましょう。
ラインを描画しないので必要ないものもありますのでコメントアウト
 

 

MT4に設定

 
実際にMT4に設定してみましょう。
 
MT4の「ファイル」から「データフォルダを開く」を選択
 

「MQL4」フォルダ
 

「indicators」を選択
EAはExpertsに入れますがインジケータはindicatorsに入れます。

そのフォルダに拡張子をmq4として保存します。

一旦、MT4を終了して再起動するとex4ファイルがコンパイルされ生成されています。

ナビゲータにインジケータが表示されているのでそれをチャートにドラッグアンドドロップで起動させます。

コメントで1つ前の時間足での高値が表示されます。

また、簡単にインジケータをプログラム無しである程度作れるものもあります

[PR]
インジケーターつくーるMQL言語の学習ができ、裁量トレーダーもインジケーター開発が可能に | GogoJungle
MQL言語の学習ができ、裁量トレーダーもインジケーター開発が可能にMQL言語の学習ができ、裁量トレーダーもインジケーター開発が可能に | GogoJungle

 

EAを作るオンラインセミナー

 
実際にEAを作ろうとするとプログラミング以外にFX特有のやり方を知っておかないと失敗します。
失敗はイコール損失です。

EAに関する本もありますが、このようなオンラインセミナーもあります。
プログラミングがある程度分かる
FXの裁量はできるが自動化したい
などのトレーダーに向いているでしょう

[PR]
EAプログラミングセミナー【オンラインセミナー】実際に利益が出せるEAのロジックおよびソースコードを完全公開!EAプログラミングの実戦的な学習にこの上ない環境を作りました! | GogoJungle
実際に利益が出せるEAのロジックおよびソースコードを完全公開!EAプログラミングの実戦的な学習にこの上ない環境を作りました!実際に利益が出せるEAのロジックおよびソースコードを完全公開!EAプログラミングの実戦的な学習にこの上ない環境を作りました! | GogoJungle

EA開発者の必読書:

ケビン・ダービーが3桁のリターンをたたき出すトレードシステム開発の秘訣を伝授
[PR]

システムトレード 検証と実践 ──自動売買の再現性と許容リスク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする