受注サイクルの整理 - ページ 15

 
Alexey Viktorov:

GetAmountPositionsを通常のOnTradeTransactionに置き換えては どうでしょうか?

おおよそこのような感じです。

役に立ちません。特に、あなたのバリアントでは、OnTickの間に独立性が全くありません。

 
fxsaber:

役に立ちません。特に、あなたのバージョンでは、OnTick間の独立性が全くありませんから。

まあ、そうなんですけどね。ティックエミュレーションから月が火星から遠いのと同じぐらい遠いというのは考慮に入れていません。

いくら遅延させても OnTick イベントはOnTradeTransaction が 実行されるまで発生せず、履歴には何も書き込まれません。

 
fxsaber:

こんな感じでいいんじゃないでしょうか。

   if(Trade.Buy(volume,_Symbol,OP,SL,TP))
     {
      uint retcode=Trade.ResultRetcode();
      if(retcode==TRADE_RETCODE_PLACED||retcode==TRADE_RETCODE_DONE)
         {
         ulong ticket=Trade.ResultDeal();
         for(int n=0;n<500;n++)
            {
            if(!PositionSelectByTicket(ticket)) Sleep(10);
            else return(true);
            }
         }
      else return(false);
     }
   else return(false);
つまり、ポジションがリストに入るまで待つだけです。
 
Aleksey Lebedev:

こんな感じでいいんじゃないでしょうか。

つまり、ポジションがリストに入るまで待つだけです。
ulong ticket=Trade.ResultDeal(); // В этом месте может быть ноль
 

fxsaber:

ゼロかもしれない

レトロコードでは、注文は実行されるか、発注されるかのどちらかであるため、可能性は低い。

0の場合は5秒待って終了(2~3でも十分かも)。

この間、ポジションのリストが更新されることを期待しています。

 
Aleksey Lebedev:

その間、ポーズ一覧は更新されることを期待しています。

あえてのオン・ザ・デア。

 
fxsaber:

あえてのオン・ザ・デア。

いや、平均的な天井の科学的方法)