初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 81 1...747576777879808182838485868788...1503 新しいコメント Yedelkin 2013.01.15 09:01 #801 oldiol: if(!m_Trade.PositionClose(_Symbol,100))//--- 現在のシンボルでポジションをクローズします。結果、立場が逆転!ポジションをクローズするためのヒントを頂ければ幸いです。 プログラムがサーバーに2つの同じリクエストを送るため、立場が逆転している。このプログラムは、先に送信されたリクエストの存在をチェックしない(サーバーでこのリクエストを処理した結果をチェックしない)ため、サーバーに2つの同じリクエストを送信しています。 oldiol 2013.01.15 09:30 #802 Yedelkin: プログラムがサーバーに2つの同じリクエストを送るため、立場が逆転している。このプログラムは、先に送られたリクエストをチェックしない(サーバーでこのリクエストを処理した結果をチェックしない)ため、サーバーに2つの同じリクエストを送信しています。 私のコードを正しいものに直してください。 oldiol 2013.01.15 09:41 #803 Yedelkinは次のように書いている:そのコードは、以前に送信されたリクエストをチェックしない。このチェックはどの関数で行われるのか教えてください。 Yedelkin 2013.01.15 10:02 #804 oldiol: 私のコードを正しいものに修正してください。 正しいコードの理解は人それぞれです。だから、最終的には「正しい」コードを書かなければならないのです。そしてもう一つのヒントとして、このコードが正しい方法で動作するかどうか試してみてください(sentRequestフラグの模式的な使用法)。bool sentRequest=false; //задать на уровне глобальных переменных программы ... if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(!sentRequest) { if(p_close1<buy_stop_level) { if(!m_Trade.PositionClose(_Symbol,100)) Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),". Описание кода: ",m_Trade.ResultRetcodeDescription()); else { Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode()," (",m_Trade.ResultRetcodeDescription(),")"); sentRequest=true; } } } else Print("Блок закрытия позиции: имеется POSITION_TYPE_BUY и ранее отосланный запрос на закрытие позиции"); } else if(sentRequest) sentRequest=false; oldiol 2013.01.15 10:13 #805 Yedelkin: 正しいコードの理解は人それぞれです。だから、最終的には「正しい」コードを書かなければならないのです。そしてもう一つのヒントとして、このコードが正しいキーで動作するかどうか試してみてください(sentRequestフラグの模式的な使用法)。ありがとうございました。試してみると... oldiol 2013.01.15 10:49 #806 結果は以下の通りです。このコードはロングポジションを適切にクローズし、ショートポジションをオープンしません...ロングポジションを再決済する際、EAが条件に従って決済しない。EAウィンドウには常にメッセージが表示されています。 このコードをExpert Advisor本体で使用するには、一度しか動作しない場合)どうすればよいのでしょうか? Yedelkin 2013.01.15 11:08 #807 oldiol: При повторном открытии лонга, эксперт не закрывает больше позу по условию. В окне эксперта всё время идут сообщения: Как же использовать этот код в теле эксперта, если он работает только 1 раз)? この件に関しては、非常にシンプルであるべきです。回路図のコードでは、オープンポジションが 買いポジションでない場合、sentRequestフラグをゼロに設定する必要があります(コードの最後の行)。オープンポジションが ない場合、またはオープンポジションが 買いポジションでない場合に、このフラグがコード内でゼロに設定されない理由を確認してください。 oldiol 2013.01.15 11:14 #808 万歳!うまくいった))))if(sentRequest) sentRequest=false; を削除し、ブロックの前に if(PositionsTotal()==0) sentRequest=false; を書きました。 Yedelkin 2013.01.15 11:22 #809 oldiol: if(sentRequest) sentRequest=false; を削除し、ブロックの前に if(PositionsTotal()==0) sentRequest=false を書きました。 では、メインコードに位置のチェックはなかったのですか?そして、特定のシンボルの位置は、PositionGetSymbol 関数またはPositionSelect 関数を使って選択されることを追加します。 oldiol 2013.01.15 11:25 #810 oldiol : ロングを再開するとき、EAが条件によってポジションをクローズすることはなくなりました。EAウィンドウに常にメッセージが表示されます。 このコードをEA本体で使用するにはどうしたらよいでしょうか? すみません、私のミスです...コードの中にもう一つ条件があります if(PositionSelect(_Symbol)==true) //オープンポジションが ある{.ポジションクローズブロック}// ...それゆえif(sentRequest) sentRequest=false;// 次の括弧の後ろに配置し、すべてが完璧に動作するようにしました。イェデルキン THANK YOU! 1...747576777879808182838485868788...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
プログラムがサーバーに2つの同じリクエストを送るため、立場が逆転している。このプログラムは、先に送られたリクエストをチェックしない(サーバーでこのリクエストを処理した結果をチェックしない)ため、サーバーに2つの同じリクエストを送信しています。
Yedelkinは次のように書いている:そのコードは、以前に送信されたリクエストをチェックしない。このチェックはどの関数で行われるのか教えてください。
正しいコードの理解は人それぞれです。だから、最終的には「正しい」コードを書かなければならないのです。そしてもう一つのヒントとして、このコードが正しい方法で動作するかどうか試してみてください(sentRequestフラグの模式的な使用法)。
正しいコードの理解は人それぞれです。だから、最終的には「正しい」コードを書かなければならないのです。そしてもう一つのヒントとして、このコードが正しいキーで動作するかどうか試してみてください(sentRequestフラグの模式的な使用法)。
ありがとうございました。試してみると...
結果は以下の通りです。このコードはロングポジションを適切にクローズし、ショートポジションをオープンしません...ロングポジションを再決済する際、EAが条件に従って決済しない。EAウィンドウには常にメッセージが表示されています。
このコードをExpert Advisor本体で使用するには、一度しか動作しない場合)どうすればよいのでしょうか?
oldiol: При повторном открытии лонга, эксперт не закрывает больше позу по условию. В окне эксперта всё время идут сообщения: Как же использовать этот код в теле эксперта, если он работает только 1 раз)?
この件に関しては、非常にシンプルであるべきです。回路図のコードでは、オープンポジションが 買いポジションでない場合、sentRequestフラグをゼロに設定する必要があります(コードの最後の行)。オープンポジションが ない場合、またはオープンポジションが 買いポジションでない場合に、このフラグがコード内でゼロに設定されない理由を確認してください。
万歳!うまくいった))))if(sentRequest) sentRequest=false; を削除し、ブロックの前に if(PositionsTotal()==0) sentRequest=false; を書きました。
oldiol : ロングを再開するとき、EAが条件によってポジションをクローズすることはなくなりました。EAウィンドウに常にメッセージが表示されます。 このコードをEA本体で使用するにはどうしたらよいでしょうか? すみません、私のミスです...コードの中にもう一つ条件があります
if(PositionSelect(_Symbol)==true) //オープンポジションが ある
{.
ポジションクローズブロック
}// ...それゆえ
if(sentRequest) sentRequest=false;// 次の括弧の後ろに配置し、すべてが完璧に動作するようにしました。イェデルキン THANK YOU!