MT4. Вопрос по написанию советника: не срабатывает условие завязанное на рыночной цене

 

Здравствуйте, уважаемые форумчане.

если не там создал тему, прошу перекинуть её в нужное место. 

пишу советника...

одно из условий должно быть такое: Если текущая рыночная цена ниже чем Low последней сформировавшейся свечи[1], то ...

 

Вот такая штука работает: Low[1]<Low[2]. - но это слишком запаздывающее событие особенно для малых ТФ. 

 

Прописал как Low[0]<Low[1]  - не работает.

А как прописать текущую рыночную цену (или последнюю известную BID) никак не могу сообразить.

Помогите плиз.

Нутром чую что это элементарно... 

 
МТ4
 
Andrey Pereverzev:

Здравствуйте, уважаемые форумчане.

если не там создал тему, прошу перекинуть её в нужное место. 

пишу советника...

одно из условий должно быть такое: Если текущая рыночная цена ниже чем Low последней сформировавшейся свечи[1], то ...

 

Вот такая штука работает: Low[1]<Low[2]. - но это слишком запаздывающее событие особенно для малых ТФ. 

 

Прописал как Low[0]<Low[1]  - не работает.

А как прописать текущую рыночную цену (или последнюю известную BID) никак не могу сообразить.

Помогите плиз.

Нутром чую что это элементарно... 

Внезапно : Bid<Low[1]

Или позабористей: MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,1)

 
Maxim Kuznetsov:

Внезапно : Bid<Low[1]

Или позабористей: MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,1)

Bid<Low[1] - делал так, но не работает и не могу понять почему пффффф, должно ж
 
Maxim Kuznetsov:

Внезапно : Bid<Low[1]

Или позабористей: MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,1)

MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,1)

не работает... 

 
Andrey Pereverzev:

MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,1)

не работает... 

вы бы показали больший фрагмент кода, в котором "не работает"
 

Вот в таком кусочке: 

for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if

         (  
          MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,0,1) 
     

    


         
        )
        if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        if (OrderType()==OP_BUY) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
     }

 

Смысл данного кода в том, что при выполнении условия "MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,0,1)", т.е. (если рыночная цена оказалась ниже Лоя предыдущей (последней) свечи[1].) , должны быть закрыты все имеющиеся открытые БАЙ-ордера по текущей (рыночной) цене.

 
Andrey Pereverzev:

Вот в таком кусочке: 

for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if

         (  
          MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,0,1) 
     

    


         
        )
        if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        if (OrderType()==OP_BUY) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
     }

 

Смысл данного кода в том, что при выполнении условия "MarketInfo(_Symbol,MODE_BID)<iLow(_Symbol,0,1)", т.е. (если рыночная цена оказалась ниже Лоя предыдущей (последней) свечи[1].) , должны быть закрыты все имеющиеся открытые БАЙ-ордера по текущей (рыночной) цене.

Сначала проверка, а потом, если истина, цикл по открытым позициям. Зачем вам проверка цены в цикле?
 
Artyom Trishkin:
Сначала проверка, а потом, если истина, цикл по открытым позициям. Зачем вам проверка цены в цикле?

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

Не так делаю?

Больше года не трогал mql... не могу сообразить.

Но в другом коде (иные задачи и иные паттерны) данный код закрытия работает исправно, но правда там используются уже сформированные свечи [1] и [2].

А вот как прицепить текущую цену не соображу 

 
Andrey Pereverzev:

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

Не так делаю?

Больше года не трогал mql... не могу сообразить.

Но в другом коде (иные задачи и иные паттерны) данный код закрытия работает исправно, но правда там используются уже сформированные свечи [1] и [2].

У вас условие: если цена ниже то закрыть все.
Почему в коде пишете сначала все, а потом условие?
 
Artyom Trishkin:
У вас условие: если цена ниже то закрыть все.
Почему в коде пишете сначала все, а потом условие?
Нужно условие вынести за пределы цикла?