MT5でOrderSendを正しく動作させる方法 - ページ 2 123456789...13 新しいコメント Renat Fatkhullin 2016.10.10 20:48 #11 fxsaber: これはもう専門用語の議論ですね。悪い状況は、上記で詳しく説明したとおりです。標準的なライブラリは、それすら考慮していない。いいえ。 でも、粘り強く続けてください。これ以上の説明は省きます。 fxsaber 2016.10.10 20:57 #12 Renat Fatkhullin:いいえ。 でも、粘り強く続けてください。これ以上の説明は省きます。掲示板に書いている人もいます。しかも一度だけでなく、何度も。その反応は、まさにその通り。 prostotrader 2016.10.10 21:00 #13 fxsaber:掲示板に書いている人もいます。しかも一度だけでなく、何度も。反応はこんな感じです。 人は自分で考えようとせず、他人にやってもらいたがるものだ...。残念ながら、これは事実です。 fxsaber 2016.10.10 21:05 #14 prostotrader:このような災難を回避するお手伝いをしましょうか?(実際の口座でMT5ロボットを使って取引した個人的な経験から)追加絶対に無料です :) 自分の分も貯金箱に入れましょう。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム OrderSend()送信後、サーバーの応答待ち。 デニス・サルタコフ さん 2016.10.08 15:43 この関数は同期的に動作するが、この関数の終了に伴い履歴が同期的に更新されることはない。この方法でやってます、OnTrade()とかいじるより簡単だと思うので。bool ClosePosition() { if (!PositionSelect(_Symbol)) { return(false); } bool b_Result; b_Result = m_trade.PositionClose(_Symbol,mi_Deviation); if(!b_Result) { Print("The PositionClose() method has failed. Return code=",m_trade.ResultRetcode(), ". Code description: ",m_trade.ResultRetcodeDescription()); return(false); } if(b_Result) { if (m_trade.ResultRetcode() == TRADE_RETCODE_DONE) { while(PositionSelect(_Symbol)) { } Print("The PositionClose() has been successfully executed. Return code=",m_trade.ResultRetcode(), " (",m_trade.ResultRetcodeDescription(),")"); return(true); } if (m_trade.ResultRetcode() != TRADE_RETCODE_DONE) { Print("The PositionClose() failed. Return code=",m_trade.ResultRetcode(), " (",m_trade.ResultRetcodeDescription(),")"); return(false); } } return(false); } //+------------------------------------------------------------------+ fxsaber 2016.10.10 21:06 #15 prostotrader: 人は自分で考えようとせず、他人にやってもらいたがるものだ...。残念ながら、これは事実です。人々は考えるだけでなく、その解決策を共有する。これについては、残念ながら開発者は沈黙しています。このトピックに関するドキュメントは一例もありません。そして、これはメイン機能とのことです。 prostotrader 2016.10.10 21:11 #16 fxsaber:人々は考えるだけでなく、その解決策を共有する。これについては、残念ながら開発者は沈黙しています。このトピックに関するドキュメントは一例もありません。それもメイン機能で。上に挙げた例は、失礼ながら全くナンセンスです。そんなところからスタートするのか!? fxsaber 2016.10.10 21:14 #17 prostotrader:上に挙げた例は、失礼ながら全くナンセンスです。そんなところからスタートするのか!? 私のバリアント トレーディング、自動売買システム、ストラテジーテストに関するフォーラム バグ、バグ、質問 fxsaber さん 2016.10.09 09:39 OrderSendが送信された場合、それが行われたことを記憶しておく必要があります(ここが潜在的な脆弱性です)。そして、適切なOnTradeメッセージが届くまで、現在の履歴(取引環境)を無視する。届いたら、REMEMBER to FORGET(忘れることなく)。REMEMBERがない場合は、MT4と同様に履歴を信頼することができます。 prostotrader 2016.10.10 21:28 #18 //+------------------------------------------------------------------+ //| OrderSend.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" // bool is_busy; ulong order_ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- is_busy=false; order_ticket=0; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(!is_busy && (order_ticket==0)) //Только при выполнении данного условия мы продолжаем работать(кроме отложенного ордера) { MqlTradeRequest request={0}; MqlTradeResult result={0}; if(PositionSelect(Symbol())) { if(OrderSend(request, result) { if(result.retcode==TRADE_RETCODE_PLACED) //для биржи TRADE_RETCODE_PLACED { if(result.order>0) { is_busy=true; order_ticket=result.order; Print("Order plased, ticket = ",result.order); } else { Print("Internal error!"); } } else { //смотрим причину result.retcode } } else { Print("Order NOT send!"); } } else { } } } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- В зависимости от того, квкой тип ордера мы устанавливали, смотрим, что с ордером произошло // и только после полного понимания снимаем флаг is_busy=false; order_ticket=0; // вот и все премудрости OrderSend } //+------------------------------------------------------------------+ 活用してください。 fxsaber 2016.10.10 21:29 #19 prostotrader: 使ってみてください。では、上に書いたこととどう違うのでしょうか。善良な人が、真面目なバイブルまで送ってくれた。人々は解決策を見いだしています。開発者自身がSBにすら入れてないって話だったんだけどな。 prostotrader 2016.10.10 21:35 #20 fxsaber:では、上に書いたこととどう違うのでしょうか。優秀な人が真剣にバイブルを落としてくれたこともありました。人々は解決策を見いだしています。開発者自身がSBにすら入れてないって話だったんだけどな。 嫌なら使うな。 123456789...13 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
これはもう専門用語の議論ですね。悪い状況は、上記で詳しく説明したとおりです。標準的なライブラリは、それすら考慮していない。
いいえ。
でも、粘り強く続けてください。これ以上の説明は省きます。
いいえ。
でも、粘り強く続けてください。これ以上の説明は省きます。
掲示板に書いている人もいます。しかも一度だけでなく、何度も。その反応は、まさにその通り。
掲示板に書いている人もいます。しかも一度だけでなく、何度も。反応はこんな感じです。
このような災難を回避するお手伝いをしましょうか?(実際の口座でMT5ロボットを使って取引した個人的な経験から)
追加
絶対に無料です :)
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
OrderSend()送信後、サーバーの応答待ち。
デニス・サルタコフ さん 2016.10.08 15:43
この関数は同期的に動作するが、この関数の終了に伴い履歴が同期的に更新されることはない。
この方法でやってます、OnTrade()とかいじるより簡単だと思うので。
人は自分で考えようとせず、他人にやってもらいたがるものだ...。残念ながら、これは事実です。
人々は考えるだけでなく、その解決策を共有する。これについては、残念ながら開発者は沈黙しています。
このトピックに関するドキュメントは一例もありません。そして、これはメイン機能とのことです。
人々は考えるだけでなく、その解決策を共有する。これについては、残念ながら開発者は沈黙しています。
このトピックに関するドキュメントは一例もありません。それもメイン機能で。
上に挙げた例は、失礼ながら全くナンセンスです。
そんなところからスタートするのか!?
上に挙げた例は、失礼ながら全くナンセンスです。
そんなところからスタートするのか!?
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2016.10.09 09:39
OrderSendが送信された場合、それが行われたことを記憶しておく必要があります(ここが潜在的な脆弱性です)。そして、適切なOnTradeメッセージが届くまで、現在の履歴(取引環境)を無視する。届いたら、REMEMBER to FORGET(忘れることなく)。
REMEMBERがない場合は、MT4と同様に履歴を信頼することができます。
活用してください。
使ってみてください。
では、上に書いたこととどう違うのでしょうか。善良な人が、真面目なバイブルまで送ってくれた。
人々は解決策を見いだしています。開発者自身がSBにすら入れてないって話だったんだけどな。
では、上に書いたこととどう違うのでしょうか。優秀な人が真剣にバイブルを落としてくれたこともありました。
人々は解決策を見いだしています。開発者自身がSBにすら入れてないって話だったんだけどな。