Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
ivan
313
ivan  

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

//+=================================================================================+
// Проверка условий для совершения сделки селл 
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))

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

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

khorosh
10089
khorosh  
berezhnuy:

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

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

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

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

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

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

ivan
313
ivan  

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

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

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

david2
314
david2  
berezhnuy:

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

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

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


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

if (OrdersTotal()!=0) return;

Victor Nikolaev
Модератор
15649
Victor Nikolaev  
david2:


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

if (OrdersTotal()!=0) return;


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

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

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

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

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

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

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

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

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

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

ivan
313
ivan  

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

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

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

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

Victor Nikolaev
Модератор
15649
Victor Nikolaev  
berezhnuy:

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

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

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


Иногда будет, иногда нет
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий