*

(MQL4)初めてのEA自作のための教科書~実用編~[EA自作]

公開日: : 初心者EA自作 ,

Originally posted 2019-01-28 18:14:58.

実用に向けたEAのコーディングについて説明します。本当に1からEAの開発について知りたい方はこちら。

初めてのEA開発のための教科書(MQL4)

 

EAに指値注文、逆指値注文でエントリーさせる

これまでには決済で指値注文、逆指値注文をしてきましたが、今回はエントリーにおいて指値注文、逆指値注文を行います。これによりエントリータイミングをずらしたり、トラリピ、マーチンゲール、ドテン、ピラミッティングなどのロジックが可能になります。

予約注文の方法は、これまでにOrderSend関数で書いてきたOrderTypeをOP_BUYからOP_BUYSTOP、OP_BULIMITにするだけです。(OP_SELLの場合は、OP_SELLSTOP、OP_SELLLIMIT)
また、価格は現在値から離して注文しなければならないので、その点にも注意しましょう。

現在のレートから10pips上に逆指値の買い注文を入れる

これまでの下記OrderSned関数を元にエントリーを成行注文から逆指値注文に変更します。

オーダータイプとSL,TPを適当な値に変更します。

SLとTPがエントリー想定価格からの幅になっていることに注意してください。予約注文の場合、現在のレートから近すぎる値で予約注文を出すとエラーになることがあります。(この幅は業者によって変わります。)

予約注文が可能な現在からのレート幅を求める

予約注文が可能な最小の現在からのレート幅を”ストップレベル”と言います。業者によってはこのストップレベルが0のこともありますが、大きい業者では5pips程度のこともあります。

EAにこのストップレベルに関する条件を組み込んで行いと、業者によって使える場合と使えない場合がでてきます。ストップレベルの参照は、

で参照可能です。
ストップレベルを予約送信前に組み込むには、2つの数値の内、大きい方の数値を返すMathMaxを使います。

数Aと数Bの内、大きい方を返す。

とすれば、ストップレベルが10pipsよりも小さい場合には10pipsが返り、ストップレベルが10pipsよりも大きい場合にはストップレベルが返ります。
先ほどはただ単に、

としましたが、

とすることで、ストップレベルが大きい場合でもエラーが出ずにオーダーが送信されます。

 

さまざまな値をフィルターに使う

MarketInfoという情報屋

MQLではスプレッド、口座通貨、ストップレベルなどを取得する際に
MarketInfo
という関数を使います。

このように書くとその通貨ペアのスプレッドを返してくれます。
(値を出力してくれます。)

単位は最小単位を整数とした値なので、
ドル円0.5pipsのスプレッドの場合は5と表示され、1pipsの場合は10となります。

ご存じのようにスプレッドはほとんどの業者で固定ではなく、変動しています。

せっかくいいエントリータイミングだと思っても
スプレッドが大きすぎて手数料で負けてしまう等ということもあります。

この関数を使うことでそういう際のフィルターを作ることができます。

スプレッドが2pip以上のときはエントリーしない

それではスプレッドフィルターを作ってみましょう。

現在のスプレッドはMarketInfoで取得できますが、単位に注意しましょう。

スプレッドが2pips(20point)未満のときにエントリーさせる条件を考えます。

これでスプレッドが広がったときにはエントリーを見送る条件文が完了です。

 

安全装置を付ける

短時間に大量のポジションを取らないようにする

EAプログラミングでは思わぬバグがつきものです。
よくあることとしては短時間の間に大量にポジションをとってしまうことなどが挙げられます。

position_margin_1

今回は短い時間に大量のエントリーと決済を繰り返させない方法の一つとして、
前のエントリーから次のエントリーまでの時間
を制限します。

 

ポジションの時間間隔を制御する

本来は最後の決済時間から次のエントリーまでの時間を制御した方が良いのですが、
成行決済ではなく予約注文で決済した場合にはその決済した瞬間を認識させる記述が別途必要になります。

今回は簡略化のため制御しやすいエントリーのタイミングを記録します。

 

これまではエントリーの条件が整ったらエントリーして終わりでしたが、エントリー後に下記のようにあらかじめ宣言しておいたLastOrderOpenTimeという変数にエントリー時刻を格納します。

これでオーダーが送信され新規ポジションを取得すると、LastOrderOpenTimeにその時刻が格納されます。

 

後はこれをフィルター化してエントリー条件に再度組み込みます。

書き方はいろいろありますが、
ここでは
「最後のエントリーから5本分のロウソク足の経過をしないとエントリーを許可しない」
という条件にします。

上記のフィルターをエントリー条件前に記述すると
下記のように少しエントリーが落ち着きます。

position_margin_filter

エントリー間の時間制御はあくまでトレードルールに穴があった場合の安全装置です。

短時間の大量にポジションを取ると
たとえすぐに決済してもスプレッド分の手数料がどんどん口座から減ってしまいます。

時間制御をしてもエントリー頻度が高い場合にはトレードルールそのものに条件不足の可能性があります。

 

また、このフィルターをつけることにより、逆に「エントリー条件を満たしているのにエントリーしない」というクレームに繋がることもあるので、つける場合はちゃんと説明しておいた方が良いです。

 

 

EAに汎用性を持たせる~”USDJPY”よりSymbol()~

MT4で設定を変更ができるような記述をする

これまでに様々なコードを扱いましたが、これまでの書き方では毎回設定や数値を変更するたびにソースコードを編集しなければなりません。

なるべくコードを編集せずに、MT4側で設定を変更できるようにします。

例えば、
通貨ペアを指定する場面で”USDJPY”と指定してしまうと、
“USDJPYmajor”、”USDJPY‗”等のようになっている特殊なMT4FX業者の場合、正しく処理されずバグに繋がります。

上記のようにSymbol()を使うことにより、MT4側の変更がEAに反映されるようになります。

また、
時間足についてもPERIOD_M5などを使うと、たとえチャートが1時間足になっていたとしてもEAでは5分足で計算してしまいます。

のように「Period()」もしくは「0」と入力することにより汎用性が増します。

 

パラメーター設定できるようにする

パラメータ変数の作り方

EAはMT4側で各種項目を設定できるようにした方がユーザーフレンドリーです。

また、MT4で数値を変更できるようにすることで数値最適化を行うことができるようになります。

これまでに宣言した変数をパラメータ化し、MT4で編集できるようにします。

パラメータ化は非常に簡単で、変数を宣言するときに前にexternかinputをつけるだけです。

でできます。

ここで代入した値はパラメータ設定のデフォルト値になります。

パラメータ化すると下記のようにMT4で設定できます。

extern_sample

 

EAからチャート上にデータを表示させる(Comment())

開発者の場合はソースコードをいじれるので何が起きているかをデバッグすることができますが、トレーダー側はEAで何が起きているのかを判断する術がありません。

 

Comment()という関数を使うとビジュアルモードのバックテストの際や、ライブトレードの際にチャート上にコメントを表示させることができます。

例えば、

と書けば、

comment_Sample_1

のように左上にテキストが表示されます。

これを使えば簡単なデバッグ(プログラムが正しく動いているか確認)することができます。

※MT4には他にもPrint()というエキスパートタブ、操作履歴にテキストを残す関数もありますが、こちらはログがすぐに消えてしまったり、処理が遅かったりすのであまり推奨しません。

テキスト同士は+でつなぐことができ、また、+”\n”+を入れることで改行することができます。

とすれば、

comment_Sample_2

のように改行されます。

チャート上に口座情報を表示させる
口座の情報を表示する関数とComment関数を使えば、下記のように口座情報を表示させられます。

comment_Sample_3

 

 

EAが動かないときのその原因 一覧

この投稿は役に立ちましたか? 役に立った 役に立たなかった 3 人中 3 人がこの 投稿 は役に立ったと言っています。

関連記事

[MT4]EAに口座縛り/期間限定縛りをかける種類と方法(MT5)

良いEAができると、クレクレ厨がよってきますが、身内の人にならひっそりと配布したい場合もあります。

記事を読む

とある両建てロジックのEA検証(コードあり)

今回はちょっとしたシンプルな実験を行います。 お題は両建てです。 ポジションが0の場合SLTP付

記事を読む

[ソースコード開示]たった30行のコードでも右肩上がりにすることはできるのさ(MT4EA)

バックテスト結果   ソースコードはこちら 33行あるやんけ...

記事を読む

ロウソク足パターンのEAを作る~3回連続で陽線になったら買い~[EA自作]

ロウソク足の記述方法 ロウソク足がどうなっているかを知るためにはロウソク足のデータを取得する関数・

記事を読む

MT4チャート上にバイナリーオプションのようなボタンパネルを作ってみた

注:これは、MT4のチャート上でバイナリーオプションのような操作パネルを表示させているだけで、実際に

記事を読む

 
  • fxfx.work

    (↑広告です。このサイトの管理者の運営ではありません)

     


  • 横瀬兼元(ペンネーム)です。

    プロフィール
    商材を買わせようとする偽者がいるらしいのでご注意ください。
    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を) 4000文字未満のトピックや話題はツイッターで発信しています。
  • fxfx.work

    (↑広告です。このサイトの管理者の運営ではありません)

Translate »
ページトップへ