Необходим простой код для советника (модифицировать два открытых ордера) - страница 5

 
deVries:


Вы хотите, чтобы он модифицировал StopLoss для сделок на покупку и продажу с одним и тем же пунктом?

Подумайте еще раз, если это то, что вы хотите, и вы можете выяснить, почему он не модифицируется таким образом.....

Также не модифицируйте сделки с каждой новой точкой в правильном направлении, выберите трейлингстеп, чтобы позволить модификацию (xx Points можно выбрать 10 или больше, чтобы избежать множества ошибок tradecontext too busy).

"!" - это что-то вроде не в кодировке.

На данный момент я хочу, чтобы TakeProfit был изменен только для обеих сделок, StopLoss остается неизменным для всей сделки (во всяком случае, для текущего тестирования).
 

Хорошо, нашел проблему ... Разброс возвращается как количество точек. . . .

Итак, измените эти строки ...

if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))

на эти...

if(OrderTakeProfit() > Candle23Open + ((Spread - TakeProfitModified + 1 ) * Point)  )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + ((Spread - TakeProfitModified) * Point) , 0, Blue))
 
RaptorUK:

Хорошо, нашел проблему ... Разброс возвращается как количество точек. ...

Итак, измените эти строки. . .

на эти...

Теперь все работает, спасибо! Теперь сделки на покупку и продажу модифицируются, однако, по некоторым причинам, они модифицируются несколько раз в течение торгов, и тейк-профит, кажется, иногда идет дальше, чем того требуют входные данные. Это происходит в определенные моменты времени, например, в 2:00 или 7:00. Я не совсем понимаю, почему это происходит, может быть, это как-то связано с тем, что спред постоянно меняется? Это происходит как с покупкой, так и с продажей, так что я думаю, что это не может быть из-за спреда. Единственный способ, который я могу придумать, это то, что свеча в 23:00 меняется, хотя это не имеет смысла, и я не уверен, как я могу это проверить.

 
Добавьте несколько операторов Print здесь и там, чтобы показать, что делают переменные, тогда вы сможете понять, что идет не так, и исправить это.
 

Я пытаюсь использовать это:

Print(Open [iBarShift(NULL, 0, StrToTime("23:00") )]);

Чтобы увидеть, изменяется ли цена открытия бара, но кажется, что каждый раз печатается случайное время.

Также в один из дней я заметил, что сделки не следуют правилу закрытия всех сделок в 22:59 независимо от того, что происходит, я думаю, что это перестало работать.

Я использую это

   if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); }

и это

void CloseAll()
   {
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderMagicNumber()!=MagicNumber) continue;
         
      //
      //
      //
      //
      //
         
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {
         for(int c=0; c<3; c++)
            {
            RefreshRates();
            if (OrderType()==OP_BUY)
                  { double cp = Bid;}  
            else  {        cp = Ask;}
               
            OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow);
            int err=GetLastError();
            if(err==4 || err==136 || err==137 || err==138 || err==146)
               {
               Sleep(5000); continue;
               }  
               break;                     
            }
            break;

Чтобы закрыть сделки в указанное время.

 

Сообщение, написанное заглавными буквами, было удалено.

Пожалуйста, не используйте слишком много заглавных букв в сообщениях. Это считается криком и очень грубо.

Причина обращения: