私のEAではダブルエントリーを行います - ページ 9 1234567891011 新しいコメント Snelle Moda 2014.01.19 11:43 #81 こんにちは この方法は、現在のポジションサイズがゼロで、新しい取引が希望のポジションサイズで正常に実行される場合にのみ機能します。コードをご覧ください。#include <Trade\Trade.mqh> //--- global variables CTrade trade; bool position_opened=false; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { bool conditions_to_open; ENUM_ORDER_TYPE order_type; double lot; double price,sl,tp; //---...set variables //--- inside OnTick() if(conditions_to_open && !position_opened) //-- Or position_opened==false { if(trade.PositionOpen(_Symbol,order_type,lot,price,sl,tp,"comment") && (trade.ResultRetcode()==10009 || trade.ResultRetcode()==10008)) //-- Or others condition according to your needs { //--- set the global variable to true to avoid duplicate orders position_opened=true; Print("Success!"); } else { Print("Error = ",GetLastError(), "trade error = ", trade.ResultRetcode()); //--- Sets the global variable to false // position_opened=false; //-- Not needed as position_opened is already false return; } } //--- }しかし、あなたのEAがポジションを転換している場合:ロングポジションからショートポジションへ、またはその逆で、このアクションが2つの異なる取引で実行されている場合はどうでしょうか?最初の取引の後、"position_opened" boolean は "TRUE" に設定され、EAは2番目の取引を開くことができません。これは、条件が"if(conditions_to_open && !position_opened)" をチェックしているためです。また、ポジションサイズが一部しか開いていない場合はどうでしょうか?ポジションサイズを正しいサイズにするために、2回目のトレードが必要です。結局、「長い話を短くする」ためには、現在のポジションサイズを計算するためにPositionSelect(Symbol())関数が常に必要で、これが問題のすべての始まりです(そしてこのフォーラムスレッドもそうです)。EAがPositionSelect(Symbol())を呼び出す重要な瞬間に、端末はまだ現在のポジションサイズを更新しておらず、EAは間違ったポジションサイズで動作し、トレードサーバーに新しいダブルオーダーを送信してしまいます。EAがPositionSelect(Symbol())関数を正しいポジションサイズに更新するまで待たされるため、(figlli)のアプローチの方が良いと思います。bool fatalError=false; // atention: declare this as global .... if(fatalError == false) { if(m_Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, LotSize, Price, 0, 0)) { Print("Position opened in ", Symbol()); int maxTimeout=0; while(!PositionSelect(Symbol())) { Sleep(100); maxTimeout++; if(maxTimeout > 100) { Print("### PositionSelect fatal error!"); fatalError = true; break; } } Print("--> PositionSelect delay=",maxTimeout * 100); break; } } Alain Verleyen 2014.01.19 11:56 #82 snelle_moda:こんにちは この方法は、現在のポジションサイズがゼロで、新しい取引が希望のポジションサイズで正常に実行される場合にのみ機能します。コードをご覧ください。しかし、あなたのEAがポジションを転換している場合:ロングポジションからショートポジションへ、またはその逆で、このアクションが2つの異なる取引で実行されている場合はどうでしょうか?最初の取引の後、"position_opened" boolean は "TRUE" に設定され、EAは2番目の取引を開くことができません。これは、条件が"if(conditions_to_open && !position_opened)" をチェックしているためです。また、ポジションサイズが一部しか開いていない場合はどうでしょうか?ポジションサイズを正しいサイズにするために、2回目のトレードが必要です。結局、「長い話を短くする」ためには、現在のポジションサイズを計算するためにPositionSelect(Symbol())関数が常に必要で、これが問題のすべての始まりです(そしてこのフォーラムスレッドもそうです)。EAがPositionSelect(Symbol())を呼び出す重要な瞬間に、端末はまだ現在のポジションサイズを更新しておらず、EAは間違ったポジションサイズで動作し、トレードサーバーに新しいダブルオーダーを送信してしまいます。EAがPositionSelect(Symbol())関数を更新するまで待たされるため、(figlli)のアプローチの方が良いと思います。おっしゃるとおり、どちらのアプローチにも限界があります。この問題の原点がはっきりしました。各自が自分の戦略に応じてコードを適応させなければなりません。すべてのケースに適用できる一般的な方法はないと思います。 Ubzen 2014.01.19 11:59 #83 Great & Powerful mql5のOrderSendReliable()ライブラリは必要ですか? Alain Verleyen 2014.01.19 12:08 #84 Ubzen: 偉そうにmql5のOrderSendReliable()ライブラリが必要なのか? 皮肉は何の役にも立たないと思います。このような複雑さをもたらすのは、明らかに設計が悪いのですが。 Snelle Moda 2014.01.19 12:13 #85 angevoyageur:おっしゃるとおり、どちらのアプローチにも限界があります。この問題の原点は、今や明確に特定されています。各自が自分の戦略に応じてコードを適応させなければなりません。すべてのケースに適用できる一般的な方法があるとは思えません。あるいは、Metaquotes社自身からの「公式声明」を待つしかないでしょう。サービスデスクからの回答はすでにあるのでしょうか? Ubzen 2014.01.19 12:14 #86 angevoyageur: 皮肉は何の役にも立たないと思います。しかし、このような複雑さをもたらすのは、明らかに悪い設計 です。もし私があなたに同意したら、あなたはそれが役に立たないと思うだろうか?.私は、Sleeping until Terminating Tradingの解決策が、OrderSendReliable()を連想させることを教えただけです。これらはもっとエレガントに対処されていただろうと教えました。また、old_documentsの処理...ここで{とすべての取引が停止されるべきである}になることを私に思い出させる。とにかく、謝罪は、mql5を選ぶことを意図していませんでした。 Alain Verleyen 2014.01.19 12:18 #87 snelle_moda:それとも、Metaquotesの人たち自身からの「公式声明」を待つ必要があるのでしょうか。サービスデスクからの回答は既にあるのでしょうか?いや、ちょうどそのことを考えていたところです...関係者全員がこの問題についてServiceDeskにチケットを書けば、おそらく役に立つでしょう。しかし、私は、MQがこのデザインを変更する気があるかどうか、非常に懐疑的です。しかし、私たちは試すことができます。人々はServiceDeskに 手紙を書いて、そのチケット番号をここで報告することができます。私のは エラー、MetaTrader 5 MQL、Open、Start。2013.12.23 19:08,#916435 Get in touch with developers using Service Desk! www.mql5.com We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them. Alain Verleyen 2014.01.19 12:25 #88 Ubzen:もし私があなたに同意したら、役に立たないと思われますか?私は、取引終了まで寝るという解決策が、OrderSendReliable()を連想させることを教えただけです。私は、これらがよりエレガントに対処されているだろうと教えました。それはまた、私にold_documentsの処理を思い出させる...それは{とすべての取引が停止されるべきである}になる場所です。とにかく、謝罪は、mql5を選ぶことを意図していませんでした。 mql4でも同じような問題は存在しないのでしょうか。私は、mql4のフォーラムで、ダブルトレードについて不満を持つユーザーから、この数ヶ月で少なくとも2つのトピックを読みました。それが関連しているかどうかは分かりませんが、これらのトピックをチェック する価値はあるでしょう。あなたはこれらのトピックを読んでいますか? Ubzen 2014.01.19 12:26 #89 angevoyageur: mql4でも同じような問題は存在しないのでしょうか。私は、mql4フォーラムで、この数ヶ月間に少なくとも2つのトピックで、二重取引について不満を持つユーザーからの情報を読みました。それが関連しているかどうかは分かりませんが、これらのトピックをチェックする価値はあるでしょう。あなたはこれらのトピックを読んでいますか?そうですね、でもコーディングが悪いからかどうかはわかりません。二重売買は多重売買スレッド以前から問題になっていました。その伝統的な処理方法は、snelle_modaが処理する方法です。 Alain Verleyen 2014.01.19 12:39 #90 Ubzen:そうですね、でもコーディングが悪いからかどうかはわかりません。二重売買は多重売買スレッド以前から問題になっていました。その伝統的な処理方法は、snelle_modaの処理方法です。 意味がよくわからないのですが。このトピックで話しているこの問題は、コーディングが悪いのではなく、mql5の設計が悪いのです(これは私の意見ですが、単にバグかも しれませんね)。複数の取引スレッド」とはどういう意味ですか? Get in touch with developers using Service Desk! www.mql5.com We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them. 1234567891011 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは
この方法は、現在のポジションサイズがゼロで、新しい取引が希望のポジションサイズで正常に実行される場合にのみ機能します。
コードをご覧ください。
しかし、あなたのEAがポジションを転換している場合:ロングポジションからショートポジションへ、またはその逆で、このアクションが2つの異なる取引で実行されている場合はどうでしょうか?
最初の取引の後、"position_opened" boolean は "TRUE" に設定され、EAは2番目の取引を開くことができません。これは、条件が"if(conditions_to_open && !position_opened)" をチェックしているためです。
また、ポジションサイズが一部しか開いていない場合はどうでしょうか?ポジションサイズを正しいサイズにするために、2回目のトレードが必要です。
結局、「長い話を短くする」ためには、現在のポジションサイズを計算するためにPositionSelect(Symbol())関数が常に必要で、これが問題のすべての始まりです(そしてこのフォーラムスレッドもそうです)。
EAがPositionSelect(Symbol())を呼び出す重要な瞬間に、端末はまだ現在のポジションサイズを更新しておらず、EAは間違ったポジションサイズで動作し、トレードサーバーに新しいダブルオーダーを送信してしまいます。
EAがPositionSelect(Symbol())関数を正しいポジションサイズに更新するまで待たされるため、(figlli)のアプローチの方が良いと思います。
こんにちは
この方法は、現在のポジションサイズがゼロで、新しい取引が希望のポジションサイズで正常に実行される場合にのみ機能します。
コードをご覧ください。
しかし、あなたのEAがポジションを転換している場合:ロングポジションからショートポジションへ、またはその逆で、このアクションが2つの異なる取引で実行されている場合はどうでしょうか?
最初の取引の後、"position_opened" boolean は "TRUE" に設定され、EAは2番目の取引を開くことができません。これは、条件が"if(conditions_to_open && !position_opened)" をチェックしているためです。
また、ポジションサイズが一部しか開いていない場合はどうでしょうか?ポジションサイズを正しいサイズにするために、2回目のトレードが必要です。
結局、「長い話を短くする」ためには、現在のポジションサイズを計算するためにPositionSelect(Symbol())関数が常に必要で、これが問題のすべての始まりです(そしてこのフォーラムスレッドもそうです)。
EAがPositionSelect(Symbol())を呼び出す重要な瞬間に、端末はまだ現在のポジションサイズを更新しておらず、EAは間違ったポジションサイズで動作し、トレードサーバーに新しいダブルオーダーを送信してしまいます。
EAがPositionSelect(Symbol())関数を更新するまで待たされるため、(figlli)のアプローチの方が良いと思います。
おっしゃるとおり、どちらのアプローチにも限界があります。
この問題の原点がはっきりしました。各自が自分の戦略に応じてコードを適応させなければなりません。すべてのケースに適用できる一般的な方法はないと思います。
偉そうにmql5のOrderSendReliable()ライブラリが必要なのか?
おっしゃるとおり、どちらのアプローチにも限界があります。
この問題の原点は、今や明確に特定されています。各自が自分の戦略に応じてコードを適応させなければなりません。すべてのケースに適用できる一般的な方法があるとは思えません。
あるいは、Metaquotes社自身からの「公式声明」を待つしかないでしょう。
サービスデスクからの回答はすでにあるのでしょうか?
もし私があなたに同意したら、あなたはそれが役に立たないと思うだろうか?
.
私は、Sleeping until Terminating Tradingの解決策が、OrderSendReliable()を連想させることを教えただけです。これらはもっとエレガントに対処されていただろうと教えました。
また、old_documentsの処理...ここで{とすべての取引が停止されるべきである}になることを私に思い出させる。
とにかく、謝罪は、mql5を選ぶことを意図していませんでした。
それとも、Metaquotesの人たち自身からの「公式声明」を待つ必要があるのでしょうか。
サービスデスクからの回答は既にあるのでしょうか?
いや、ちょうどそのことを考えていたところです...関係者全員がこの問題についてServiceDeskにチケットを書けば、おそらく役に立つでしょう。しかし、私は、MQがこのデザインを変更する気があるかどうか、非常に懐疑的です。しかし、私たちは試すことができます。
人々はServiceDeskに 手紙を書いて、そのチケット番号をここで報告することができます。私のは
もし私があなたに同意したら、役に立たないと思われますか?
私は、取引終了まで寝るという解決策が、OrderSendReliable()を連想させることを教えただけです。私は、これらがよりエレガントに対処されているだろうと教えました。
それはまた、私にold_documentsの処理を思い出させる...それは{とすべての取引が停止されるべきである}になる場所です。
とにかく、謝罪は、mql5を選ぶことを意図していませんでした。
そうですね、でもコーディングが悪いからかどうかはわかりません。二重売買は多重売買スレッド以前から問題になっていました。その伝統的な処理方法は、snelle_modaが処理する方法です。
そうですね、でもコーディングが悪いからかどうかはわかりません。二重売買は多重売買スレッド以前から問題になっていました。その伝統的な処理方法は、snelle_modaの処理方法です。