【MQL4】OrderCloseでエラーコード138が返ってくる原因と解決方法

いやー、MQL4は仕様どおりに作っても、取引所が絡んだエラーが多いです。

OrderCloseの関数でも同じでした。エラーコード138が必ず返ってくる。

色々調べて試して、ようやく解決しました。記事にまとめてみました。

OrderCloseのエラー内容

20日移動平均線にタッチしたら手仕舞いするというロジックを組んだんだけど、どうしてもオーダーがオープンになったままクローズしない。

 

ログで表示するようにしてみると、OrderCloseの際に、エラーコード138、その内容はREQUOTEでした。

エラーコード138の意味

公式リファレンスによると

Runtime Errors - Codes of Errors and Warnings - Constants, Enumerations and Structures - MQL4 Reference - MQL4 Documentation
Runtime Errors - Codes of Errors and Warnings - Constants, Enumerations and Structures - MQL4 Reference - MQL4 Documentation
矢野テック
矢野テック

REQUOTE(再見積もり)のエラーという意味のようですが、意味がわからん。

原因はスリッページの値が低いから

相当しらべて、あれこれ色々いじってみたのですが、解決せず。

 

しかし、以下の方の記事に検索でヒットして、解決しました。

『138エラーの謎がとけた・・・』
スリップページの設定が狭すぎたことが原因だったようだ参考にしていた書籍では OrderSendのスリップページの単位はpipsとあり 見本のプログラムでも「3…
矢野テック
矢野テック

スリッページの値を低く設定すると発生するようです。現に、僕のソースではスリッページ0で動かしてました。

スリッページ=30で実施したところ無事うごきました

スリッページを30ポイントに設定したら、ちゃんとクロースできました。

取引所によって、スリッページの下限は変わるみたい。

調べてもわからないはずだ。。

最後に正常稼働したOrderCloseのソース

このページに検索でたどり着いた方は、色々やっている方だろうから、ご存知だと思うけど。

矢野テック
矢野テック

長くなるので書かなかったけど、上記はロングのみのオーダーをクローズする関数です。OrderType() == OP_SELL でショートのオーダーを検知できます。

 

コメント