改めて前回の内容をおさらいをしておくと、
- 成行注文とはマーケットの現在値で、該当銘柄をトレードする事を、ブローカーに伝える要求 のことである。
- 成行注文の執行方式には
の4つがある。
- 各ブローカーが採用している執行方式の確認方法については、SymbolInfoInteger関数の第2引数にSYMBOL_TRADE_EXEMODEを記述したスクリプトを実行する。
ということをお伝えしました。
今回は フィルポリシー についてお話ししたいと思います。
フィルポリシーとは?
フィルポリシーとは、
流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法
を指します。
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ポリシー
指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りの約定できなかったロット分も継続して注文処理を行うフィルポリシーです。
例えば、1.0ロットの発注を出したとして、市場の流動性低下の問題から、1.0ロットの約定ができないけど、0.5ロット分なら約定可能な場合、0.5ロット分だけ約定し、残り0.5ロット分も約定できるように追尾処理を行う仕組みになっています。
によるとmarket執行方式の場合、RETURNポリシーは適用できない、となっています。
market執行方式をはじめとした成行注文の執行方式については↓前回の記事をご覧ください。
フィルポリシーの確認方法
3つのフィルポリシーの違いを説明したところで、今度はEA(自動売買プログラム)を作るときに、どのフィルポリシーを当てはめればよいのか?(あるいはいけないのか?)という部分を見ていきましょう。
ここまでの解説で出てきた内容も一部ありますが、
・どのフィルポリシーを選択すればよいのかは、執行方式によって変わる。
・フィルポリシーを指定しないとReturnポリシーになる。
・market執行方式では、Returnポリシーは無効。
という原則があります。
公式リファレンスに書かれている以上のような原則を踏まえて、まとめるとフィルポリシーは↓の画像のようになります
執行方式↓/フィルポリシー→ | FOK | IOC | Return |
---|---|---|---|
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(自動売買プログラム)を作るときには
回路を組み込んでいきます。(今後の記事で紹介するのでもう少々お待ちください)
ただ、今回はあくまで仕組みを理解する事が趣旨です。
現行のMT5・MQL5でEA(自動売買プログラム)を作る場合、
前提として
<許可されているフィルポリシーは執行方式との兼ね合いで変わる>
<フィルポリシーが許可されているか把握しておく>
というポイントを知っておくことが重要です(分かり易く変わることは祈っていますが・・・)
おまけ
現在公式リファレンスでは market執行方式の場合、Returnポリシーは許可されていない となっています。これは、Returnポリシーの所でも書いた通りです。
が! これ、公式リファレンスを突合した時期によっては違う認識の方もいるんじゃないかな?と思います。 market執行方式はReturnポリシーOKという記述時期もあった節があります。
現に、前回の成行注文と執行方式の記事で、引用されてもらった「投資で実現!不労所得生活」さんが、2021年に書かれているコチラのフィルポリシーに関する記事では↓
英語と日本語のリファレンス文を引用してまで、market執行方式口座がReturnポリシーOKだったこと、そして、実情が違う事、その対策までもが精緻に書かれています。
自分がMQL5を勉強した本でも、(この本が若干古いこともあり)「フィルポリシーに関しては、トレードサーバー側で、適切な値に設定するので、心配する必要はない」という趣旨の事が書かれていました。
フィルポリシー周りの運用に変更があったことが伺えます。
今後も再度変わってくることが可能性としてはあり得る為、注視していきたいところです。
- フィルポリシーとは、流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法のことである。
- RETURNポリシーは指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りの約定できなかったロット分も継続して注文処理を行うフィルポリシーである。
- フィルポリシーを指定しないと自動的にReturnポリシーを選択したことになる。
- market執行方式口座では、Returnポリシーは無効である。
- 間違ったフィルポリシーを選択すると「Unsupported filling mode 」エラーが発生し売買をしてくれないので、適切なフィルポリシーを選択できるようなコーディングをしてEA(自動売買プログラム)を作る必要がある。
今回は以上になります。
最後までお読みいただきありがとうございました<m(__)m>
コメント