スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OrderSend error 129 invalid price

このエラーは、無効な価格で注文をすると発生します。成行注文時に発生することが多いです。
よくあるのは、重い処理の後に成行注文をしたときですね。

これは、下記コードをコンパイルしてEAをデモ口座で動かしてみますと、すぐに再現できます。
//+------------------------------------------------------------------+
//| ERR_INVALID_PRICE.mq4 |
//| Copyright 2013, BLT. |
//| http://mt4ordersenderror.blog.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, BLT."
#property link "http://mt4ordersenderror.blog.fc2.com/"
#include <stdlib.mqh>

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
// 10秒待機
Sleep(10000);

// 成行買い
OrderSend( Symbol(), OP_BUY, 0.1, Ask, 30, 0, 0, NULL, 123456789 );

// エラーコード取得
int ErrCode = GetLastError();

// エラーがある場合はエラー情報を出力
if ( ErrCode > 0 )
{
Print( "ErrCode = " + ErrCode + ", ErrorDescription = " + ErrorDescription( ErrCode ) );
}

return(0);
}
//+------------------------------------------------------------------+

エキスパートタブに下記のようなエラーが表示されたでしょうか?
22:55:53 ERR_INVALID_PRICE GBPJPY,H1: ErrCode = 129, ErrorDescription = invalid price
22:56:04 ERR_INVALID_PRICE GBPJPY,H1: ErrCode = 129, ErrorDescription = invalid price
22:56:16 ERR_INVALID_PRICE GBPJPY,H1: ErrCode = 129, ErrorDescription = invalid price

無効な価格になる原因は、10秒待機している間(重い処理を実行している間)に、該当通貨のレート(Ask)が
start()関数を実行した直後のレート(Ask)から変動しているからです。(変動していない場合は発生しません)

このエラーを解決するためには、成行注文の直前に下記コードを挿入してください。
挿入するとレートが最新に更新されますので invalid price エラーが発生しなくなります。
        // レートのリフレッシュ
RefreshRates();

バックテストでは約定処理に時間がかからないため、デモや本番で運用して気付くことが多いです。
重たい処理の後に、Bid, Askを使用する際は、リフレッシュをするのを忘れないようにしましょう。

MT4 EA開発・運用ブログ:関連記事ピックアップ

EAつくーる
自動売買システム作成ソフト「EAつくーる
MT4 EA開発ブログの人気記事「RSI」「ボリンジャーバンド
を使用したEAが、数値入力とクリックで簡単に作成できます。
mq4プログラムが出力されるため、MQL4言語を効率よく
習得したいEA開発初心者にもオススメのEA開発ツールです。
お試しで利用したい方は「EAつくーる【1ヶ月版】」をどうぞ。

MT4 EA開発・運用ブログ:カテゴリー

MT4 EA開発・運用ブログ:人気記事ランキング(直近1ヶ月)

MT4 EA開発・運用ブログ:最新記事一覧

もっと見る...
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。