RefreshRates()

今回の記事は自分の備忘録としての意味もあります。

 

メタトレーダーで新規成行注文を出すときには、約定価格をAskまたはBidに指定するのが一般的です。

 

しかし、AskとBidはスタート関数呼び出し時に代入されるため、OrderSend()関数実行までの間にタイムラグがあると現在価格とずれてしまい、発注エラーになってしまうことがあります。

 

これを防ぐための有効手段としては、

 

①MarketInfo()関数によって現在価格を取得する

 

RefreshRates()関数によってAskとBidの値を更新する

 

あたりがあります。

 

念のために②について、今回ちょっと実験してみました。

上のように、A,B,Cという3種類の注文を出します。

 

Aは、スタート関数呼び出し直後の発注で、許容スリッページの幅を狭くしてあります。

 

Bは、その10秒後に発注で、許容スリッページの幅を広くしてあります。

 

Cは、その後の発注で、その直前にRefreshRates()関数を実行し、スリッページを狭くしてあります。

 

そして、上記、A→B→Cという発注を10回繰り返しました。

 

その結果、成行き注文方式のブローカーでは、AとCの注文は通りますが、Bの注文でいくつかエラーが出ました。

 

ところが、カウントダウン方式のブローカーでは、すべて通りました。

 

ということは、カウントダウン方式のブローカーでは、RefreshRates()関数によるAskとBidの更新は必要なく、常に現在価格で約定してくれるということのようです。

 

ちなみに、カウントダウン方式のブローカーでは、OrderSend()関数であれ、OrderClose()関数であれ、許容スリッページの幅をいくらに設定しても問題なく、常に注文は通るようです。