Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 784

 
Leonid123456:

для этого советника последняя)) Вообще работал. получался последний)). Советник для тестов... Так что работа под несколько валют и ручную торговлю (вместе) не предусматривается пока что.. 

Можете подсказать на будущее, будет полезно как правильнее...

Еще раз спасибо. 

Опять же перебором в обратном порядке ищем именно свой ордер, если надо, то отличаем рыночный от отложенного, первый попавшийся по всем критериям (символ, магик, тип) обычно и есть самый свежий.  Но правильнее ещё и на время открытия смотреть, чтобы уж наверняка моложе не было.

В тестере вообще можно сразу выбрать

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

чтобы работать с последним открытым ордером, если система без отложек, то другого и не надо, всё работать будет нормально. Но если одновременно есть и отложки, и рыночные, то уже так не пойдёт, не говорю уже про реальную работу.

 
Leonid123456:

для этого советника последняя)) Вообще работал. получался последний)). Советник для тестов... Так что работа под несколько валют и ручную торговлю (вместе) не предусматривается пока что.. 

Можете подсказать на будущее, будет полезно как правильнее...

Еще раз спасибо. 

Правильнее не писать лишнего. Зачем натыкал вложенных циклов? Ведь всё что тебе нужно, можно сделать в одном цикле при одном выборе ордера.

if(New_Bar)
{
OrderSend(Symbol(),OP_BUYSTOP,Lotpers,Ask+step,100,0,0,NULL,MagicNumber,0,DarkTurquoise);
OrderSend(Symbol(),OP_SELLSTOP,Lotpers,Bid-step,100,0,0,NULL,MagicNumber,0,Yellow);
}

 for(int b=0; b<OrdersTotal(); b++)
  {
   if(OrderSelect(b, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
    {
     lastlot = OrderLots();
   // Здесь надо в переменную засунуть тикет выбранного ордера
     if(OrderType() == OP_BUYSTOP||OrderType() == OP_BUY)
      orderprisebuy = OrderOpenPrice();
   
      if(OrderType() == OP_SELLSTOP||OrderType() == OP_SELL)
       orderprisecell = OrderOpenPrice(); 
         
        SL_VirtualCell = orderprisecell+step1*Point;
        SL_VirtualBuy = orderprisebuy-step1*Point;

                          /*  if(Mas_Tip[0] >0|| Mas_Tip[1] >0)
                                               {
if (New_Bar&&/*valsar1<Ask &&  osma0>0&&osma1<0    /*&& Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_BUY,NormalizeDouble( lastlot*Marti,2),Ask,100,0,0,NULL,MagicNumber,0,DarkTurquoise);

if (New_Bar&& /*valsar1>Bid && osma0<0&&osma1>0    /* && Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_SELL,NormalizeDouble( lastlot*Marti,2),Bid,100,0,0,NULL,MagicNumber,0,Yellow);       
         
}*/

CheckEvents(MagicNumber); // Вот здесь теряется выбранный ордер при переборе ордеров в вызванной функции

/*if ( eventSellClosed_SL >0|| eventBuyClosed_SL >0)
{        as();
                

 }
  /* ///   if ( eventBuyClosed_TP > 0 )
   //     Alert( Symbol(), ": Buy-позиция закрыта по ТейкПрофиту!" );

   */
    if(eventBuyStopOpened > 0)
     {
      OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble( Lotpers,5),orderprisecell,0,0,0,NULL,MagicNumber,0,clrKhaki); 
 
      if (OrderType() == OP_SELL)
       OrderClose(OrderTicket(),OrderLots(), Ask, 3,clrIvory );  // Здесь может быть чужой OrderTicket() Возможны и другие аналогичные потери
     }//завершение блока if(eventBuyStopOpened > 0)
 ///

  if(eventSellStopOpened > 0)
  {
  OrderSend(Symbol(),OP_BUYSTOP,NormalizeDouble( Lotpers,5),orderprisebuy,0,0,0,NULL,MagicNumber,0,clrPlum);
 
   if (OrderType() == OP_BUY)
    OrderClose(OrderTicket(),OrderLots(), Bid, 3,clrIvory );  
  }//завершение блока if(eventSellStopOpened > 0)
 }//завершение блока if(OrderSelect(b
}//завершение блока for(int b=0


Я не смог разобраться в том месте где у тебя многострочные комментарии. Что-то мне показалось что там может остаться ошибка компиляции... Обрати внимание на мои комментарии в коде.

 
Zhunko:
Смысл?
спасибо за помощь!
 
AlexeyVik:

Правильнеене писать лишнего. Зачем натыкал вложенных циклов? Ведь всё что тебенужно, можно сделать в одном цикле при одном выборе ордера.


Я не смог разобраться в том месте где у тебя многострочные комментарии. Что-то мне показалось что там может остаться ошибка компиляции... Обрати внимание на мои комментарии в коде.

Ошибок нет, но есть предложения проверить функцию OrderSendOrderClose. и OrderDelete

return value of 'OrderSend' should be checked .

Спасибо за комментарии. 

 

Ищу в массиве минимум индикатора "ZigZag" с помощью "ArrayMinimum".

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

 
Никак не пойму как закодить. Нужно чтобы советник ждал определенное время если последняя поза была убыточной. Есть идеи?
 
Forexman77:

Ищу в массиве минимум индикатора "ZigZag" с помощью "ArrayMinimum".

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

Вернее всего придется использовать цикл
 
Vinin:
Вернее всего придется использовать цикл
Спасибо! 
 

Как найти самую глубокую коррекцию между максимумом и минимумом? Максимум и минимум нам известен, найти его не проблема с помощью iHighest и 

 iLowest.  Если использовать  iHighest и  iLowest, то будут иногда находиться ближние экстремумы, потому, что, как на картинке не всегда бывает. Вообщем нужна идентификация формации ABC.  

Пробовал приспособить под это дело ZigZag, получается неточное попадание.

е.

 

Forexman77:

Как найти самую глубокую коррекцию между максимумом и минимумом? Максимум и минимум нам известен, найти его не проблема с помощью iHighest и 

 iLowest.  Если использовать  iHighest и  iLowest, то будут иногда находиться ближние экстремумы, потому, что, как на картинке не всегда бывает. Вообщем нужна идентификация формации ABC.  

Пробовал приспособить под это дело ZigZag, получается неточное попадание.

Всё будет просто если определить на какую глубину надо искать. Вместо iLowest можно использовать CopyLow и ArrayMinimum()

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