エラー、バグ、質問 - ページ 803 1...796797798799800801802803804805806807808809810...3185 新しいコメント ilunga 2012.08.08 07:32 #8021 Karlson: サーバーが違えば、500ppも違う。 サーバーが違うことと、何か関係があるのでしょうか?これは同一人物による2つのテストです。テスターで指定した通貨ペアのみ異なる Dmitriy Parfenovich 2012.08.08 07:34 #8022 ilunga: サーバーが違うことと、何か関係があるのでしょうか?これは同一人物による2つのテストです。テスターで指定した通貨ペアのみ異なる ターミナル/テスターを更新すれば、多分すべてがうまくいくでしょう。私は687ビルドを持っていますが、すべてがうまくいきます。 ilunga 2012.08.08 07:35 #8023 fyords:デモのMKサーバーはすべて正しいです。では、注文を出すときの括弧内の数値は何なのか、なぜ一方では (1.29565 / 1.29654) で、他方では (1.29443 / 1.29479 / 1.29443) なのか、ご説明ください。(あなたの検査結果のことです。fyords: ターミナル/テスターを更新すれば、多分全てがうまくいくでしょう。私は687ビルドを持っていますが、全てがうまくいきます。EAをチャンピオンシップに送信する際、まったく同じエラーが表示されます(自動テスト)。さらに言えば1回だけ表示される("your "以外の通貨ペアで最初に注文しようとしたとき)。 Rashid Umarov 2012.08.08 07:35 #8024 ilunga: サーバーが違うことと、何か関係があるのでしょうか?これは同一人物による2つのテストです。テスターで指定した通貨ペアのみ異なります。テスターに関する記事をご覧ください。MetaTrader 5 Strategy TesterのTick Generation AlgorithmについてMetaTrader 5におけるテストの基本他の通貨ペアでテストする場合、価格は同じである必要はありません。 ilunga 2012.08.08 07:51 #8025 Rosh:テスターに関する記事をご覧ください。MetaTrader 5 Strategy TesterのTick Generation AlgorithmについてMetaTrader 5におけるテストの基礎他の通貨ペアでテストした場合、価格が一致する必要はありません。そこで、さらにいくつかのテストを行った。本当に「現在の価格」の問題。コード#include <Trade\SymbolInfo.mqh> #include <Trade\Trade.mqh> CSymbolInfo m_sym; CTrade m_trade; double bar_info[2]; bool a; int OnInit() { SymbolSelect("EURUSD", true); SymbolSelect("GBPUSD", true); m_sym.Name("EURUSD"); a = false; return(0); } void OnTick() { if (a) return; a = true; m_sym.Refresh(); m_sym.RefreshRates(); CopyHigh("EURUSD", PERIOD_D1, 0, 2, bar_info); Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask())); Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid())); Print("Цена открытия:" + DoubleToString(bar_info[1] + 5000*_Point)); BUY_pending("EURUSD"); Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask())); Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid())); } uint BUY_pending(string symbol) { CopyHigh(symbol, PERIOD_D1, 0, 2, bar_info); // готовим запрос MqlTradeRequest request = {0}; ZeroMemory(request); request.action = TRADE_ACTION_PENDING; request.magic = 0; request.symbol = symbol; request.volume = 1; request.price = m_sym.Ask() + 1; request.sl = 0; request.tp = 0; request.deviation = 10; request.type = ORDER_TYPE_BUY_STOP; request.type_filling = ORDER_FILLING_FOK; MqlTradeResult result; OrderSend(request,result); Print(IntegerToString(result.retcode)); return (result.retcode); }ちなみに、私はAskシンボル価格プラス1(大きなマージン)でオープンしています。同時に現在のAskとBidを印刷する前と後。結果(GBPUSDでテストした場合)。GR 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Ask:1.29241000 LH 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Bid:1.29220000 QL 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Цена открытия:1.34220000 GD 0 Trade 11:49:40 2012.01.02 09:00:00 buy stop 1.00 EURUSD at 2.29241 (1.29709 / 1.29722) IG 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 10009 CP 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Ask:1.29241000 HG 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Bid:1.29220000注文の前後で価格1.29241が表示されます。一方、括弧内(注文時)は1.29722です。どのように?それとも、私が現在の価格を間違って取得しているのでしょうか?そして第二に、もし価格にエラーがあったのなら、なぜエラー10016(ストップ高)になるのでしょうか? 削除済み 2012.08.08 07:59 #8026 ilunga:しかし、カットシーンではまだエラーが発生しています。正直なところ、エラー10016が 停止していない場合にどうなるのか、よくわかりません。何をどのようにやっているのかわからない、問題は本当にSLにあるのだろう。私のバージョンは問題なく動作しています。呼び出しは、しかし、チェックに悩まされないように、初期化ブロックに投げた(それを設定する前に順序の存在は、チェックする価値があるだろうが)。bool BUY_pending(string symbol,ENUM_TIMEFRAMES period,double volume,ulong magic = 0) { //----------------------------------------------------------------------------// //Work variables double price = 0, sl = 0, tp = 0; //Prices: Open, Sell stop, Take profit int ResCopy = -1; //Result of copying the data into an array int Dig = 0; //Digits bool Result = true; //Returned importance //----------------------------------------------------------------------------// ResetLastError(); //Checking the signal to stopping the trading system if(IsStopped()) return(false); //Preparation of structures ZeroMemory(TradeRequest); ZeroMemory(TradeResult); ZeroMemory(CheckResult); //Copying the data into an array ResCopy = CopyHigh(symbol,period,0,2,bar_info); if(ResCopy==-1)return(false); //Calculations Dig = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); price = NormalizeDouble(bar_info[1] + 500*_Point,Dig); sl = NormalizeDouble(price - 200*_Point,Dig); tp = NormalizeDouble(price + 1000*_Point,Dig); //Preparation of request TradeRequest.type_filling = ORDER_FILLING_FOK; TradeRequest.action = TRADE_ACTION_PENDING; TradeRequest.type = ORDER_TYPE_BUY_STOP; TradeRequest.deviation = 10; TradeRequest.symbol = symbol; TradeRequest.magic = magic; TradeRequest.volume = volume; TradeRequest.price = price; TradeRequest.sl = sl; TradeRequest.tp = tp; //Checking Result = OrderCheck(TradeRequest,CheckResult); if((!Result)||(CheckResult.retcode!=0))return(false); //OrderSend Result = OrderSend(TradeRequest,TradeResult); //Checking for presence of the errors if(_LastError!=0){Result = false;} //----------------------------------------------------------------------------// return(Result); //----------------------------------------------------------------------------// } ファイル: Demo-CreateBuyStop.mq5 5 kb ilunga 2012.08.08 08:06 #8027 Interesting:そこで何をやっているのかわからないが、問題は本当にSLにあるのだろう。私のバージョンは問題なく動作しています。この呼び出しは本当に初期化ブロックに転送され、チェックに煩わされないようにするためです(設定前のオーダーの有無はチェックする価値があるでしょうが)。 ちょっとしたお願いです。OrderSendの前にシンボルの現在の 価格を出力するように、コードを修正することはできますか? Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 Rashid Umarov 2012.08.08 08:09 #8028 ilunga: ちょっとしたお願いです。OrderSendの前に、Openする商品の現在の 価格を出力するようにコードを微調整することは可能ですか?この方法で試してみてください。 MqlTradeResult result; if(!OrderSend(request,result)) { PrintFormat("retcode=%d price=%G Ask=%G Bid=%G Comment=%s", result.retcode,result.price,result.ask,result.bid,result.comment); //--- PrintFormat("%s %s at %G Ask=%G Bid=%G ", EnumToString(request.type),symbol,request.price,SymbolInfoDouble(symbol,SYMBOL_ASK), SymbolInfoDouble(symbol,SYMBOL_BID)); Print("------------"); } 削除済み 2012.08.08 08:10 #8029 ilunga: 小さな要望です。OrderSendの前に、そのツールに現在の価格を 出力するようにコードを修正することはできますか?プライススプリッツァー?その必要はないと思います。チェックの成功/失敗のメッセージと注文の設定を追加すればいいのです。原理的には自分でできることであり、難しいことではないはずです(アイデア次第)。ロッシュこの方法で試してみてください。デバッグにはかなり有効だが、実用的なコードでは不要になる(少なくとも、少しいびつな解決策になる)また、注文はOrderCheckの後にした方が、エラー時にOrderSendに移行することがないため良い。追記付け加えると、この例からすると、bar_infoは 問題なく関数内に配置することができます。 ilunga 2012.08.08 08:39 #8030 Interesting:プライススプリッツァー?その必要はないと思います。チェックの成功/失敗のメッセージと注文の設定を追加すればいいのです。原理的には自分でできる、難しくないはず(発想的に)。デバッグには十分かもしれませんが、プロダクションコードでは余計なお世話でしょう(少なくとも、ちょっと曲がった解決方法です)。また、注文はOrderCheckの後にした方が、エラー時にOrderSendに辿り着けないので良いと思います。追記付け加えると、この例からすると、bar_info は関数内に置いても問題ないでしょう。面白いですね。この例では、GBPのBUYSTOPを削除し、EURUSDのみを残しています。リクエストのフィールドを埋めた後、保留中の注文の 価格を出力しています。1) バリアントがある - 保留注文がIniteに置かれる2012.01.01 00:00:00 価格 = 1.304870002) initをコメントアウトし、OnTickに移動しました。最初のティックにのみトリガーする条件をつけました。2012.01.02 09:00:00 価格 = 1.29720000P.S. 私の(そしてあなたの)コードでは bar_info[1] は現在のバーの最大値であると正しく理解していますか? Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 1...796797798799800801802803804805806807808809810...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
サーバーが違えば、500ppも違う。
サーバーが違うことと、何か関係があるのでしょうか?これは同一人物による2つのテストです。テスターで指定した通貨ペアのみ異なる
デモのMKサーバーはすべて正しいです。
では、注文を出すときの括弧内の数値は何なのか、なぜ一方では (1.29565 / 1.29654) で、他方では (1.29443 / 1.29479 / 1.29443) なのか、ご説明ください。
(あなたの検査結果のことです。
ターミナル/テスターを更新すれば、多分全てがうまくいくでしょう。私は687ビルドを持っていますが、全てがうまくいきます。
EAをチャンピオンシップに送信する際、まったく同じエラーが表示されます(自動テスト)。
さらに言えば1回だけ表示される("your "以外の通貨ペアで最初に注文しようとしたとき)。
サーバーが違うことと、何か関係があるのでしょうか?これは同一人物による2つのテストです。テスターで指定した通貨ペアのみ異なります。
テスターに関する記事をご覧ください。
他の通貨ペアでテストする場合、価格は同じである必要はありません。
テスターに関する記事をご覧ください。
他の通貨ペアでテストした場合、価格が一致する必要はありません。
そこで、さらにいくつかのテストを行った。本当に「現在の価格」の問題。
コード
ちなみに、私はAskシンボル価格プラス1(大きなマージン)でオープンしています。同時に現在のAskとBidを印刷する前と後。
結果(GBPUSDでテストした場合)。
注文の前後で価格1.29241が表示されます。一方、括弧内(注文時)は1.29722です。どのように?それとも、私が現在の価格を間違って取得しているのでしょうか?
そして第二に、もし価格にエラーがあったのなら、なぜエラー10016(ストップ高)になるのでしょうか?
しかし、カットシーンではまだエラーが発生しています。
正直なところ、エラー10016が 停止していない場合にどうなるのか、よくわかりません。
何をどのようにやっているのかわからない、問題は本当にSLにあるのだろう。
私のバージョンは問題なく動作しています。呼び出しは、しかし、チェックに悩まされないように、初期化ブロックに投げた(それを設定する前に順序の存在は、チェックする価値があるだろうが)。
そこで何をやっているのかわからないが、問題は本当にSLにあるのだろう。
私のバージョンは問題なく動作しています。この呼び出しは本当に初期化ブロックに転送され、チェックに煩わされないようにするためです(設定前のオーダーの有無はチェックする価値があるでしょうが)。
ちょっとしたお願いです。OrderSendの前に、Openする商品の現在の 価格を出力するようにコードを微調整することは可能ですか?
この方法で試してみてください。
小さな要望です。OrderSendの前に、そのツールに現在の価格を 出力するようにコードを修正することはできますか?
プライススプリッツァー?その必要はないと思います。チェックの成功/失敗のメッセージと注文の設定を追加すればいいのです。
原理的には自分でできることであり、難しいことではないはずです(アイデア次第)。
この方法で試してみてください。
デバッグにはかなり有効だが、実用的なコードでは不要になる(少なくとも、少しいびつな解決策になる)
また、注文はOrderCheckの後にした方が、エラー時にOrderSendに移行することがないため良い。
追記
付け加えると、この例からすると、bar_infoは 問題なく関数内に配置することができます。
プライススプリッツァー?その必要はないと思います。チェックの成功/失敗のメッセージと注文の設定を追加すればいいのです。
原理的には自分でできる、難しくないはず(発想的に)。
デバッグには十分かもしれませんが、プロダクションコードでは余計なお世話でしょう(少なくとも、ちょっと曲がった解決方法です)。
また、注文はOrderCheckの後にした方が、エラー時にOrderSendに辿り着けないので良いと思います。
追記
付け加えると、この例からすると、bar_info は関数内に置いても問題ないでしょう。
面白いですね。この例では、GBPのBUYSTOPを削除し、EURUSDのみを残しています。
リクエストのフィールドを埋めた後、保留中の注文の 価格を出力しています。
1) バリアントがある - 保留注文がIniteに置かれる
2012.01.01 00:00:00 価格 = 1.30487000
2) initをコメントアウトし、OnTickに移動しました。最初のティックにのみトリガーする条件をつけました。
2012.01.02 09:00:00 価格 = 1.29720000
P.S. 私の(そしてあなたの)コードでは bar_info[1] は現在のバーの最大値であると正しく理解していますか?