Проблема с сигналами

 

Доброго времени суток господа. Столкнулся с такой проблемой. написал советника вот часть кода:

//+=================================================================================+
// Проверка условий для совершения сделки селл 
if (! NumberOfBarOpenLastPos(NULL, 0,OP_SELLSTOP, Magic)  ==0) 
{//запрет неск. поз на одном баре 
if(p1<p3 && p2<p1 && (Close[1]<(p2+p1)/2))
       {
     SL=0;TP=0;
      if(StopLoss>0)   SL=Bid+Point*StopLoss;
      if(TakeProfit>0) TP=Bid-Point*TakeProfit;
      lots=LotsCounting(); 
   ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,p2,3,SL,TP,"Продаем- тра-ля-ля",Magic,0,Red);
   if(ticket < 0)
   {
            Print("Ошибка открытия ордера SELL #", GetLastError()); 
            Sleep(10000);  
            prevtime = Time[1]; 
            return (0); 
         } 
       }
     }

//+=================================================================================+
  // Проверка условий для совершения сделки бай
if (! NumberOfBarOpenLastPos(NULL, 0,OP_BUYSTOP, Magic)  ==0) 
{ //запрет неск. поз на одном баре
if(p1>p3 && p2>p1 && (Close[1]>(p2+p1)/2))
       {
      SL=0;TP=0;
      if(StopLoss>0)   SL=Ask-Point*StopLoss;
      if(TakeProfit>0) TP=Ask+Point*TakeProfit;
      lots=LotsCounting();    
   ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,p2,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Green);
   if(ticket < 0) 
   {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000); 
            prevtime = Time[1]; 
            return (0); 
         } 
       }
     }
//+=================================================================================+
Сигналы советника долгосрочные, то есть появляется сигнал 
if(p1>p3 && p2>p1 && (Close[1]>(p2+p1)/2))

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

Заранее благодарен.

 
berezhnuy:

Доброго времени суток господа. Столкнулся с такой проблемой. написал советника вот часть кода:

Сигналы советника долгосрочные, то есть появляется сигнал

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

Заранее благодарен.

Ограничьте количество открываемых ордеров. Максимальное количество открытых ордеров задайте внешней переменной.
 
ограничение ордеров не помогло, у меян проблемма не в количестве ордеров, а в том что мои сигналы дублируются с каждым новым баром. Если быть точным то тот первый сигнал, он действителен и не ошибочен, просто он дублируется на новых барах, до появления нового сигнала, соответственно открываются по 1й позиции на каждом баре. Нужно чтоб сигналы не дублировались.
 
berezhnuy:
ограничение ордеров не помогло, у меян проблемма не в количестве ордеров, а в том что мои сигналы дублируются с каждым новым баром. Если быть точным то тот первый сигнал, он действителен и не ошибочен, просто он дублируется на новых барах, до появления нового сигнала, соответственно открываются по 1й позиции на каждом баре. Нужно чтоб сигналы не дублировались.

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

 

суть в том что сигнал существует до тех пор пока не отработает OP_BUYSTOP или OP_SELLSTOP

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

Может ктото знает какуюто функцию типа учета ордеров или магик для ордеров?

 
berezhnuy:

суть в том что сигнал существует до тех пор пока не отработает OP_BUYSTOP или OP_SELLSTOP

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

Может ктото знает какуюто функцию типа учета ордеров или магик для ордеров?


Если нужен только 1 открытый ордер

if (OrdersTotal()!=0) return;

 
david2:


Если нужен только 1 открытый ордер

if (OrdersTotal()!=0) return;


Но только для тестера
 
berezhnuy:

суть в том что сигнал существует до тех пор пока не отработает OP_BUYSTOP или OP_SELLSTOP

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

Может ктото знает какуюто функцию типа учета ордеров или магик для ордеров?

Поскольку полностью код по формированию сигналов отсутствует, а задачу вразумительно вы изложить не можете, то вряд ли здесь вам дадут решение.
 

проблему решил

добавил такую вещь  

if ( NumberOfPositions(NULL , OP_SELLSTOP, Magic )<Orders ) 
{ //если  открытых позиций менее Orders

 ну и для бая соответственно 

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

 

Вопрос следующий))

Хочу удалять предыдущий ордер.

if (OrderType() == OP_SELLSTOP) 
{ 
      if(условие) 
      {
         OrderDelete(OrderTicket()-1); // закрываем позицию
                // return(0); // выходим         
      }   
}

Будет ли при таком коде удалять предыдущую позизыю? 

 
berezhnuy:

Вопрос следующий))

Хочу удалять предыдущий ордер.

Будет ли при таком коде удалять предыдущую позизыю?


Иногда будет, иногда нет
Причина обращения: