MT5でOrderSendを正しく動作させる方法 - ページ 3

 
prostotrader:

活用してください。

なぜサーバーに空のリクエストを送信しているのですか?意味があるようでない。
また、TRADE_RETCODE_TIMEOUTや TRADE_RETCODE_FROZENが出た場合、「//see cause result.retcode」でどうするのでしょうか?
 
RickD:
なぜサーバーに空のリクエストを送信しているのですか?意味があるようでない。
また、例えばTRADE_RETCODE_TIMEOUTやTRADE_RETCODE_FROZENが出た場合、「//see result.retcode」でどうするのでしょうか?
首を吊るぞ :)
 
Andrey Khatimlianskii:

両手で支えています。まるでMQが、オーダーを送り、レスポンスを受け取るというレディ機能に責任を持ちたくないかのようだ。

私の選択肢は松葉杖もありです。

同じようなものを作って(すべての場面ではなく、せめて一番シンプルなものを!)、SBに出してみてはいかがでしょうか?

を待たなければならないのであれば、OrderSend(...)の「迅速な実行」に何の意味があるのでしょうか?

環境の更新、この場合は履歴の更新のため...と、待機のためのさまざまなアルゴリズムを考え出す...。

歴史が更新されるまでは、先に進めない...つまり、このスピードは意味がない...。

 
Denis Sartakov:

もし、EAで、OrderSend(...)の "迅速な "実行を待つ必要があるならば、本当に意味があるのでしょうか?

環境の更新、この場合は履歴の更新のため...と、待機のためのさまざまなアルゴリズムを考え出す...。

歴史が更新されるまでは、先に進めない...つまり、このスピードは意味がない...。

おそらく、端末がOrderSendとOrderSendAsyncを並行して実行できるため、OrderSend後に強制的に履歴を同期させるとOrderSendAsync、OnTrade、OnTradeTransactionに 何らかの影響を与え、遅くなるためこのように実装されているのでしょう。
 
Andrey Khatimlianskii:
言語組み込みの関数ではなく、標準ライブラリの 話です。
具体的には、OrderSendが内部で取引履歴の更新を待つことができるのに、そうしないという、組み込みの言語機能の話です。:)
松葉杖があるというけれど、そんなに頼りになるものでもないでしょう。信頼できる良い松葉杖の例を教えてください。
もしかしたら、松葉杖を全く使わなくてもいけるかもしれないと言っているんです。もし開発者がOrderSendの動作を変更することを意図したのであれば。MT4と同じように作ってください。
あるいは-、別の選択肢もある。OrderSendMT4Style 関数を追加します。:)
 

非常にシンプルなOrderSendのオーバーロードが独立して書かれています。OnTradeがレスポンスを返すまで、それ以降のOrderSendはすべてfalseを返します。応答があり次第、-強制falseは解除されます。

これこそ、SBに加えるべきソリューションです。そして、私たち自身が使わなければならないのです。

SBでは、同じ原理でboolCTrade::IsHistoryLoad( const string Symb = NULL ) を追加する。

そして松葉杖もなし!どちらの関数も、自分で簡単に書くことができます。

完全な機能を実現したい場合(SB用ではない)、OnTradeでOnTickとOnTimerを対応する同期の到来時に独立して呼び出します。

 

なんという姥捨て山が書かれているのだろう...。void OnTradeTransaction()関数の動作の検討

/*********************TradeTransaction function*********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
{
      if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
       {
        if(!PositionSelectByTicket(trans.position))
         {
          //Print("********* закрылась позиция ", trans.position);
           closedPosition(trans);
         }
        if(PositionSelectByTicket(trans.position))
         {
          //Print("********* отккрылась позиция ", ", ", EnumToString(trans.deal_type), ", ", trans.position);
           openedPosition(trans);
         }
       }
       
}/*******************************************************************/

また、オープンポジションや オーダーのエラーも処理します。

 
Alexey Viktorov:

なんという姥捨て山が書かれているのだろう...。void OnTradeTransaction()関数の動作の検討

また、オープンポジションや オーダーのエラーも処理します。

主題を斜め読みしたことになります。
 
fxsaber:
トピックを斜め読みしましたね。

いいえ、縦方向のみです。各行の最初の文字のみ。

 
Andrey Khatimlianskii:

この単純なオーバーロードは、同じ楽器に2つのEAを使用した場合、どのように機能するのでしょうか?

残念ながら、端末のグローバル 変数という松葉杖を使うしかない。