オーダー変更時のエラー1 - ページ 3 1234567 新しいコメント keekkenen 2014.11.07 22:43 #21 error 1 は通常のエラーです... の場合、通常は発生しません(コードが曲がっていて、変更されていない注文パラメータが変更されている場合や、テスターでスリッページを発生させることができる場合を除く)。実際の市場では、これは(正しい注文修正コードで)あなたが市場の近くにストップを変更すると、特にスリッページで可能です - 型ストップロスは、注文が正に移動しているときに価格のすぐ後ろに移動し、スリッページと価格の動きのために、エラーがしばしば発生し、理由は明らかです...良いエラーです...。 Viktar Dzemikhau 2014.11.07 23:00 #22 borilunad:申し訳ございませんが、SellLimitはdistを必要とします。not if (New_OOP < Bid) continue; butif (New_OOP-dist*Point < Bid) continue;Boris さん、私のfOrderModify() メソッドは、STOPLEVELとFRIZLEVELの両方で、すべてのチェックを考慮に入れています。つまり、これらの条件のいずれかが満たされていなければ、改造は完了しなかったということです。レナートあなたは絶対に間違っています。後者のエラーは、今でも多くの重要な機能でリセットされています。WinAPIでもそのように動作します。だから、エラーコードが発生したらすぐにローカル変数に保存し、中間関数の塊でこのシステム変数を10回クリアしてから使おうとはしないことだ。まあ、仮にオプションでエラーが上書きされたとしても、最後の1つはそのままでしょう。最後のエラーは、私の場合、やはり1になってしまいます。そうでしょう?そうやってエラーも出ずに作業していたら。例で示そうか?今デバッグ中なので、全てのプリンターを使った改造関数を紹介します。(他のメソッドは無視して ください)。// 1.2 Функция модифицирует выделенный ордер (установка TP и SL). ========================================================================= bool PositionsManipulations::fOrderModify (int fi_Ticket, // OrderTicket() double fd_OpenPrice, // OpenPrice double fd_NewSL, // Новый StopLoss (УРОВЕНЬ !!!) double fd_NewTP, // Новый TakeProfit (УРОВЕНЬ !!!) datetime fdt_Expiration = 0, // Время истечения отложенного ордера color fc_Arrow = CLR_NONE) // Цвет стрелок модификации StopLoss и/или TakeProfit на графике { Print (__FUNCTION__, ": ", "Вошли в функцию "); //---- Проверяем необходимость модификации if (fd_NewSL == OrderStopLoss() && fd_NewTP == OrderTakeProfit()) return (false); //---- string ls_fName = "fOrderModify()"; int li_Cnt = 0; double ld_Price; bool lb_InvalidSTOP = false, lb_FixInvalidPrice = false; // Флаг первоначальной коррекции отложки //---- Получаем актуальную информацию по символу и текущему ордеру CBase.GetMarkerInfo (OrderSymbol(), fi_Ticket); Print (__FUNCTION__, ": ", "До проверки на FREEZELEVEL и STOPLEVEL тикета № ", fi_Ticket); Print (__FUNCTION__, ": ", "Тикет № ", OrderTicket(), "; OrderOpenPrice() = ", OrderOpenPrice(), "; OrderStopLoss() = ", OrderStopLoss(), "; OrderTakeProfit() = ", OrderTakeProfit()); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); //---- Проверяем на условия FREEZELEVEL и STOPLEVEL if (!CheckLevelsBLOCK (3, SPos.gs_Symbol, SPos.gi_Type, fd_OpenPrice, fd_NewSL, fd_NewTP, lb_FixInvalidPrice)) { if (StringLen (CErrs.ErrInf) > 0) { CLogs.WriteLog (CErrs.ErrInf); return (false); } } Print (__FUNCTION__, ": ", "После проверки на FREEZELEVEL и STOPLEVEL тикета № ", fi_Ticket); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); ResetLastError(); //---- Определяем цвет значков модификации ордеров if (fc_Arrow == CLR_NONE) fc_Arrow = ColorByModify [OrderType() % 2]; //---- Выполняем модификацию в тестере if (!CBase.GetRealTrade()) { static int i = 0; if ((ND (OrderOpenPrice()) != fd_OpenPrice) || ND ((OrderStopLoss()) != fd_NewSL) || (ND (OrderTakeProfit()) != fd_NewTP)) { ResetLastError(); Print (__FUNCTION__, ": ", " i = [", IToS (i), "] Тикет № ", OrderTicket(), "; OrderOpenPrice() = ", OrderOpenPrice(), "; OrderStopLoss() = ", OrderStopLoss(), "; OrderTakeProfit() = ", OrderTakeProfit()); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); i++; if (!OrderModify (fi_Ticket, fd_OpenPrice, fd_NewSL, fd_NewTP, fdt_Expiration, fc_Arrow)) { CLogs.WriteLog (StringConcatenate ("fOrderModify(): ", CErrs.ErrorToString (_LastError))); Print (__FUNCTION__, ": ", "После модификации тикета № ", fi_Ticket); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); return (false); } } } //---- Выполняем модификацию в on-line торговле while (IsTradeAllowed() == true) { if (!IsExpertEnabled() || IsStopped() || li_Cnt > 200) { CLogs.WriteLog (StringConcatenate ("Error: Trying to modify ticket #", fi_Ticket, ", which is ", GetNameOP (SPos.gi_Type), " NOT IsTradeContextBusy")); if (!IsExpertEnabled()) {CLogs.WriteLog ("Permit ExpertEnabled !!!");} return (false); } if (OrderModify (fi_Ticket, fd_OpenPrice, fd_NewSL, fd_NewTP, fdt_Expiration, fc_Arrow)) { break; } if (CErrs.ErrorHandling (_LastError, lb_InvalidSTOP)) break; CLogs.WriteLog (StringConcatenate ("Error Occured : ", CErrs.ErrorToString (_LastError))); CLogs.WriteLog (StringConcatenate ("fOrderModify(): ", SPos.gs_Symbol, "# ", fi_Ticket, "/", GetNameOP (SPos.gi_Type), " | Price = ", DToS (fd_OpenPrice), " | SL = ", DToS (fd_NewSL), " | TP = ", DToS (fd_NewTP))); if (lb_InvalidSTOP) { RefreshRates(); ld_Price = CBase.GetTradePrice (SPos.gi_Type % 2, true, SPos.gs_Symbol); if (SPos.gi_Type < 2) { CheckValidStops (ld_Price, SPos.gi_Type, fd_NewSL, fd_NewTP, false); } else { CheckValidOOP (SPos.gs_Symbol, SPos.gi_Type, fd_OpenPrice, fd_NewSL, fd_NewTP, ld_Price, lb_FixInvalidPrice); } } li_Cnt++; if (NumberOfTry < li_Cnt) return (false); } //---- Контролируем возможные ошибки if (_LastError > 0) CLogs.Printing (StringConcatenate ("ls_fName => ", CErrs.ErrorToString (_LastError))); //---- return (true); } Алексей Тарабанов 2014.11.07 23:19 #23 ビクター、あなたの最初の投稿には、すでに必要な情報がすべて含まれています。その注文のパラメータに新しい値がない状態で、注文を修正するための注文を送信しているに過ぎません。 Алексей Тарабанов 2014.11.07 23:21 #24 サーバーはこう答える。「何しに来たんだい、おじいさん?あるいは、「何が欲しいか言ってくれれば、欲しいものをあげるよ。 Алексей Тарабанов 2014.11.07 23:54 #25 批判もされなかったし、ロシア人の心のこもった「メルシー」ももらえた。悲しいよ、君達...。 Vitalie Postolache 2014.11.08 01:33 #26 tara: 批判もされなかったし、ロシア人の心のこもった「メルシー」ももらえた。悲しいよ、君達...。 感謝することは何ですか? Алексей Тарабанов 2014.11.08 01:35 #27 そうですね... Alexey Viktorov 2014.11.08 06:22 #28 borilunad:申し訳ございませんが、SellLimitはdistを必要とします。not if (New_OOP < Bid) continue; butif (New_OOP-dist*Point < Bid) continue; ボリス、スプレッドの内側にペンディングオーダーを 置く機会に遭遇したことはないのですか?そして、New_OOPにそれが含まれていないと考える根拠は何ですか? Viktar Dzemikhau 2014.11.08 07:41 #29 tara: ビクター、あなたの最初の投稿には、すでに必要な情報がすべて含まれています。そのオーダーのパラメータに新しい値がない状態で、オーダーを修正するためのオーダーを送信するだけです。ボリス 仮にそうだとすると......。想定しています。しかし、関数が注文を修正するために再送信する場合、有意差は修正されるべきです。そして、私の場合は、まったく修正しないのです。過去ログで見ても、見えてくるのはこうだ。modify #2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok OrderModify error 1 なぜ注文が送信されるのですか?パラメータが正しくないと、この関数はクラッシュしてしまうのです......。そして、ここはちょっとOK...。...送信されました。すると、誤りがあることが判明した。どのような理屈なのでしょうか。 Viktar Dzemikhau 2014.11.08 08:46 #30 エラーとどう関係があるのでしょうか?モディファイ関数の直前にエラープリントを貼りました。//---- Выполняем модификацию в тестере if (!CBase.GetRealTrade()) { if ((ND (OrderOpenPrice()) != fd_OpenPrice) || ND ((OrderStopLoss()) != fd_NewSL) || (ND (OrderTakeProfit()) != fd_NewTP)) { ResetLastError(); Print (__FUNCTION__, ": ", " i = [", IToS (i), "] Тикет № ", OrderTicket(), "; OrderOpenPrice() = ", OrderOpenPrice(), "; OrderStopLoss() = ", OrderStopLoss(), "; OrderTakeProfit() = ", OrderTakeProfit()); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); Print (__FUNCTION__, ": ", "_LastError = ", _LastError); \\ ВОТ ТУТ Я ПРОВЕРЯЮ НАЛИЧИЕ ОШИБКИ ПЕРЕД СЛЕДУЮЩЕЙ ФУНКЦИЕЙ МОДИФИКАЦИИ!!! if (!OrderModify (fi_Ticket, fd_OpenPrice, fd_NewSL, fd_NewTP, fdt_Expiration, fc_Arrow)) { CLogs.WriteLog (StringConcatenate ("fOrderModify(): ", CErrs.ErrorToString (_LastError))); Print (__FUNCTION__, ": ", "После модификации тикета № ", fi_Ticket); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); return (false); } } }そして、このコードの一部分のログは以下の通りです。 0 11:45:28 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: Тикет № 2; New_OOP = 1.34048; New_SL = 1.34125; New_TP = 1.33362 0 11:45:28 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: Тикет № 2; OrderOpenPrice() = 1.34048; OrderStopLoss() = 0.0; OrderTakeProfit() = 0.0 0 11:45:28 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: Тикет № 2; New_OOP = 1.34048; New_SL = 1.34125; New_TP = 1.33362 0 11:45:28 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: _LastError = 0 2 11:45:28 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: modify #2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok 3 11:45:28 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: OrderModify error 1 修正機能の前にエラーがないことがよくわかりますね!エラーとどう関係があるのでしょうか? 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
error 1 は通常のエラーです...
の場合、通常は発生しません(コードが曲がっていて、変更されていない注文パラメータが変更されている場合や、テスターでスリッページを発生させることができる場合を除く)。
実際の市場では、これは(正しい注文修正コードで)あなたが市場の近くにストップを変更すると、特にスリッページで可能です - 型ストップロスは、注文が正に移動しているときに価格のすぐ後ろに移動し、スリッページと価格の動きのために、エラーがしばしば発生し、理由は明らかです...良いエラーです...。
申し訳ございませんが、SellLimitはdistを必要とします。
not if (New_OOP < Bid) continue; butif (New_OOP-dist*Point < Bid) continue;
Boris さん、私のfOrderModify() メソッドは、STOPLEVELとFRIZLEVELの両方で、すべてのチェックを考慮に入れています。つまり、これらの条件のいずれかが満たされていなければ、改造は完了しなかったということです。
あなたは絶対に間違っています。後者のエラーは、今でも多くの重要な機能でリセットされています。WinAPIでもそのように動作します。
だから、エラーコードが発生したらすぐにローカル変数に保存し、中間関数の塊でこのシステム変数を10回クリアしてから使おうとはしないことだ。
まあ、仮にオプションでエラーが上書きされたとしても、最後の1つはそのままでしょう。最後のエラーは、私の場合、やはり1になってしまいます。そうでしょう?
そうやってエラーも出ずに作業していたら。例で示そうか?
今デバッグ中なので、全てのプリンターを使った改造関数を紹介します。(他のメソッドは無視して ください)。
サーバーはこう答える。「何しに来たんだい、おじいさん?
あるいは、「何が欲しいか言ってくれれば、欲しいものをあげるよ。
批判もされなかったし、ロシア人の心のこもった「メルシー」ももらえた。悲しいよ、君達...。
批判もされなかったし、ロシア人の心のこもった「メルシー」ももらえた。悲しいよ、君達...。
申し訳ございませんが、SellLimitはdistを必要とします。
not if (New_OOP < Bid) continue; butif (New_OOP-dist*Point < Bid) continue;
ビクター、あなたの最初の投稿には、すでに必要な情報がすべて含まれています。そのオーダーのパラメータに新しい値がない状態で、オーダーを修正するためのオーダーを送信するだけです。
ボリス 仮にそうだとすると......。想定しています。しかし、関数が注文を修正するために再送信する場合、有意差は修正されるべきです。そして、私の場合は、まったく修正しないのです。過去ログで見ても、見えてくるのはこうだ。
なぜ注文が送信されるのですか?パラメータが正しくないと、この関数はクラッシュしてしまうのです......。そして、ここはちょっとOK...。...送信されました。すると、誤りがあることが判明した。どのような理屈なのでしょうか。エラーとどう関係があるのでしょうか?モディファイ関数の直前にエラープリントを貼りました。
そして、このコードの一部分のログは以下の通りです。
修正機能の前にエラーがないことがよくわかりますね!エラーとどう関係があるのでしょうか?