読者です 読者をやめる 読者になる 読者になる

MetaTrader4でのオーダーが130 invalid stopsでエラーになる場合の対処(ストップレベルの確認)

今回はFXの自動売買に利用するMT4(MetaTrader4)についてのTipsを。

 

MetaTraderでOrderSend()した際に、オーダーに失敗することがあります。

 GetLastError()でエラーが取得できるので、確認してみると、

[OrderSendError] : 130 invalid stops

といったエラーになっていました。

 130はエラーコード、「invalid stops」がエラー理由のようです。

 

調べてみると、このエラーが出る場合は、大きく2つの原因があるようです。

 

1.ストップレベル(StopLevel)に引っかかっている

各ブローカーでは、現在値から近すぎる(逆)指値注文は受け付けないような設定があります。

これをストップレベル(StopLevel,FreezeLevel)と呼びます。

 

なぜこのような設定がされているかというと、近い値での注文を許容すると、スキャルピングなど、短い時間で数多くの注文を送ることで、利ザヤを稼ぐ手法がやりやすくなるため、結果としてサーバの負荷が上がってしまうことにつながるからです。

 

そのため、例えば、現在値が83.800円(AUD/JPY)の場合、ストップレベルが5pipsだと、83.840円や83.77円の(逆)指値注文を受け付けないということになります。

 もし、そのような値を指定してSendOrder()した場合、注文はエラーで受け付けられず、「130 invalid stops」がブローカーのサーバから返却されます。

 

お使いのMT4で自分のブローカーのストップレベルを確認するには?

このストップレベルはMT4の画面で確認することができます。

 

  • MT4の左側にある通貨ペアの中で、ストップレベルを確認したい通貨ペアを選択し、右クリックする。
  • コンテキストメニューが開くので、その中から「仕様」を選択。
  • すると、プロパティのダイアログが開くので、その中の「ストップレベル」の値がそれです。

 

上記の例だと、10なので、1pips以上離れている必要があります。

 

f:id:camusneco:20170511000938p:plain

 

ブローカーや通貨ペアによっては100など、10pips以上離れている必要がある場合もあるので、お使いのEA(Expert Advisor)の注文がよくエラーになる場合は確認してみてください。

 

2.OrderSendに渡す値が不正の場合

購入した市販のEAではあまりないかもしれませんが、自作のEAを動かして自動売買させている場合は、こういうこともあるかもしれません。

 

OrderSendに渡すopenPriceやslippage, stoploss, closePriceなどの値が不正な場合、このエラーが出ることがあるようです。

 

不正な値の例としては、83.500000001のように、小数点以下3桁までが有効なブローカーで、さらに小さな桁数を持った値などが考えられます。

 

計算によっては上記のような値が出る可能性はありますが、OrderSend()に渡す前に「NormalizeDouble()」関数で、お使いのブローカーの対応している桁数(Digits)にそろえてオーダーを出すようにしましょう。

 

NormalizeDouble(<値段>, Digits)

 

使い方はこんな感じ ↓ ↓ ↓

f:id:camusneco:20170511001016p:plain