【超入門】MQL5 EA講座 第59回「フィルポリシー(fill policy)について」【EAの作り方】

MQL5でEA作ろう講座

前回は 成行注文と執行方式 について解説しました。

改めて前回の内容をおさらいをしておくと、

  • 成行注文とはマーケットの現在値で、該当銘柄をトレードする事を、ブローカーに伝える要求 のことである。

         instant執行方式

         market執行方式

         exchange執行方式

         Request執行方式

  の4つがある。

ということをお伝えしました。

今回は フィルポリシー についてお話ししたいと思います。

スポンサーリンク
スポンサーリンク

フィルポリシーとは?

フィルポリシーとは、

流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法

を指します。

MT5が主として扱うFX相場においては、かなり特殊な状況における対応ですね。

そんな特殊な状況での対応の事をなぜ、殊更今説明しているのかというと、

MT5対応のEA(自動売買プログラム)で発注のコード記述をするときに、このフィルポリシーについても記述する必要があるからです。(具体的な発注コードの記述方法は、まもなく記事にする予定なのでもうしばらくお待ちください)

公式リファレンスフィルポリシーに関する文言を読む限り「別に指定してもしなくてもよい」ようにも読み取れる節がありますが、

結論から言えば、現段階では、「指定する必要がある」と考えてください。

きちんとフィルポリシーを理解しておかないと、売買エラーが発生してしまう可能性があるので、注意しましょう。

フィルポリシーに関するコードをどうやって注文の中に取り込んでいくか、ということについては、この後の講座記事で解説予定なので、もうしばらくお待ちいただきたいのですが、

とにかく今は

フィルポリシー=流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法

ということ、そして発注時にはフィルポリシーの設定をする必要があるのだ、という事を覚えておいてください。

では、具体的なフィルポリシーの種類を次は見ていきましょう。

FOKポリシー

FOKポリシーのFOKは

fill or kill の略です。

fill or kill 直訳すれば(満たすか、殺すか)

→即ち、発注した後、指定したロット数でのオーダーをサーバーが受け付けられないときは注文自体がキャンセルになる、というフィルポリシーです。

例えば、1.0ロットの発注を出したとして、市場の流動性低下の問題から、1.0ロットの約定ができない場合、注文全体がキャンセルとなる、という事です。

※なお、当サイトでおススメしているMT5対応業者の1つであるFX業者、外為ファイネストのフィルポリシーFOKポリシーとなっています。

※外為ファイネストに関する詳細は↓の記事をご覧ください。

IOCポリシー

IOCポリシーのIOCは

Immediate or Cancel の略です。

Immediate or Cancel  直訳すれば(目前にあるものかキャンセルか)

→即ち、指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りはキャンセルとなるフィルポリシーです。

例えば、1.0ロットの発注を出したとして、市場の流動性低下の問題から、1.0ロットの約定ができないけど、0.5ロット分なら約定可能な場合、0.5ロット分だけ約定し、残り0.5ロット分はキャンセルとなる、という事です。

RETURNポリシー

RETURNポリシー

指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りの約定できなかったロット分も継続して注文処理を行うフィルポリシーです。

例えば、1.0ロットの発注を出したとして、市場の流動性低下の問題から、1.0ロットの約定ができないけど、0.5ロット分なら約定可能な場合、0.5ロット分だけ約定し、残り0.5ロット分も約定できるように追尾処理を行う仕組みになっています。

MQL5公式リファレンスのフィルポリシーに関する説明箇所

MQL5のドキュメンテーション: 標準的な定数、 列挙と構造体 / 環境状態 / シンボルプロパティ
現在の銘柄に関する情報の取得には SymbolInfoInteger() 、 SymbolInfoDouble() 及び SymbolInfoString() の複数の関数を使用できます。1 番目のパラメータは銘柄名で、2 番目のパラメータ...

によるとmarket執行方式の場合、RETURNポリシーは適用できない、となっています。

market執行方式をはじめとした成行注文の執行方式については↓前回の記事をご覧ください。

フィルポリシーの確認方法

3つのフィルポリシーの違いを説明したところで、今度はEA(自動売買プログラム)を作るときに、どのフィルポリシーを当てはめればよいのか?(あるいはいけないのか?)という部分を見ていきましょう。

ここまでの解説で出てきた内容も一部ありますが、

フィルポリシー

どのフィルポリシーを選択すればよいのかは、執行方式によって変わる。

フィルポリシーを指定しないとReturnポリシーになる。

market執行方式では、Returnポリシーは無効。

という原則があります。

公式リファレンスに書かれている以上のような原則を踏まえて、まとめるとフィルポリシーは↓の画像のようになります

執行方式↓/フィルポリシーFOKIOCReturn
instant執行方式
Request執行方式
market執行方式〇(銘柄による)〇 (銘柄による)×
exchange執行方式〇(銘柄による)〇(銘柄による)

↑の表を見てもらうとわかるように、一番注意すべきなのはMarket執行方式の時にReturnポリシーを選択をしている時です。

「Unsupported filling mode 」エラーについて

上記の表に原則に反し、market執行方式の時にReturnポリシーを選択をしている場合、

↓の動画のように、「Unsupported filling mode 」エラーが発生し、売買がされません。

先述した通り、間違ったフィルポリシーを記述した時だけでなく、明示していないだけでもReturnポリシーになってしまいますから、常にフィルポリシーを明示するコード記述をする必要がある訳です

フィルポリシーを確認するには、SymbolInfoInteger関数を使います。

SymbolInfoInteger関数についての詳細は↓の記事をご参照ください

第1引数には定義済み変数_Symbol」,第2引数には定数SYMBOL_FILLING_MODEを記述します。

戻り値定数値が1の時は、FOKポリシー(ID:SYMBOL_FILLING_FOK)

戻り値定数値が2にの時は、IOCポリシー(ID:SYMBOL_FILLING_IOC)

となっています。

void OnStart()
  {
    long fillPolicy=SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
   
  
   Comment(fillPolicy);
  }

MQL5公式リファレンスでも、銘柄に対してどのフィルポリシーが許可されているかを確認する関数をサンプルコードとして紹介しています。こういったものを利用して確認する方法もあります。↓

・・・なんだか、ひどく面倒くさいですね((+_+))

最終的には、動画のようなことを一々しなくてもいいように、EA(自動売買プログラム)を作るときには

どの執行方式フィルポリシーであれ対応できる

回路を組み込んでいきます。(今後の記事で紹介するのでもう少々お待ちください)

ただ、今回はあくまで仕組みを理解する事が趣旨です。

現行のMT5MQL5EA(自動売買プログラム)を作る場合、

前提として

<許可されているフィルポリシー執行方式との兼ね合いで変わる>

フィルポリシーが許可されているか把握しておく>

というポイントを知っておくことが重要です(分かり易く変わることは祈っていますが・・・)

おまけ

現在公式リファレンスでは market執行方式の場合、Returnポリシーは許可されていない となっています。これは、Returnポリシーの所でも書いた通りです。

が! これ、公式リファレンスを突合した時期によっては違う認識の方もいるんじゃないかな?と思います。 market執行方式ReturnポリシーOKという記述時期もあった節があります。

現に、前回の成行注文と執行方式の記事で、引用されてもらった投資で実現!不労所得生活さんが、2021年に書かれているコチラのフィルポリシーに関する記事では↓

https://memoja.net/p/9jjrrp5/

英語と日本語のリファレンス文を引用してまで、market執行方式口座がReturnポリシーOKだったこと、そして、実情が違う事、その対策までもが精緻に書かれています。

自分がMQL5を勉強した本でも、(この本が若干古いこともあり)「フィルポリシーに関しては、トレードサーバー側で、適切な値に設定するので、心配する必要はない」という趣旨の事が書かれていました。

フィルポリシー周りの運用に変更があったことが伺えます。

今後も再度変わってくることが可能性としてはあり得る為、注視していきたいところです。

まとめ

今回は フィルポリシー について解説しました。

今回の記事では以下のことを学びました

  • フィルポリシーとは、流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法のことである。

  • FOKポリシー発注した後、指定したロット数でのオーダーをサーバーが受け付けられないときは注文自体がキャンセルになる、というフィルポリシーである。

  • IOCポリシーは、指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りはキャンセルとなるフィルポリシー である。

  • RETURNポリシー指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りの約定できなかったロット分も継続して注文処理を行うフィルポリシーである。

今回は以上になります。

最後までお読みいただきありがとうございました<m(__)m>

【超入門】MQL5 EA講座 第58回「成行注文と執行方式について」【EAの作り方】

    →【超入門】MQL5 EA講座 第60回「OrderSend関数とMqlTradeRequest構造体」

コメント

タイトルとURLをコピーしました