Закрытие позиции при помощи OrderClose

 
Istrrebitel:
Привет всем! Написал советник, в тестере все замечательно работает а как только перехожу на реальный рынок функция OrderClose не работает!!! В чем может быть причина?
Здесь ответы на вопросы.
 
Artyom Trishkin:
Здесь ответы на вопросы.

      Так я открываю ордера

      ticket3=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Продаж",Magic,0,Red);
      ticket4=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Продаж",Magic,0,Red);
      if (ticket3>0 || ticket4>0)
      PlaySound ("WooHoo!.wav");

      так модифицирую:

      if(ticket3>0)
        {
         if(OrderSelect(ticket3,SELECT_BY_TICKET,MODE_TRADES)==true)
            if(!OrderModify(ticket3,Bid,SL1,TP1,0,clrNONE))
            Print ("Помилка модифікації ордера на продажу!");
        }
      if(ticket4>0)
        {
         if(OrderSelect(ticket4,SELECT_BY_TICKET,MODE_TRADES)==true)
            if(!OrderModify(ticket4,Bid,SL1,TP2,0,clrNONE))
            Print ("Помилка модифікації ордера на продажу!");
        }
     

ну и так пытаюсь закрыть:

   if(ticket3>0 && Bid<=MiddleLine)
      {
         if(OrderSelect(ticket3,SELECT_BY_TICKET,MODE_TRADES)==true)
            if(OrderClose(ticket3,Lots,Bid,Slippage,clrBisque)==true)
            PlaySound ("CoinsDrop2.wav");
      }
   if(ticket4>0 && Bid<=LowLine)
      {
         if(OrderSelect(ticket4,SELECT_BY_TICKET,MODE_TRADES)==true)
            if(OrderClose(ticket4,Lots,Bid,Slippage,clrBisque)==true)
            PlaySound ("CoinsDrop2.wav");
      }     
 Но ОНО не хочет работать на реале (вернее закрываются не все ордера)

Помогите пожалуйста, если еще нужна инфа просто скажите что именно...

Да вот полностью советник:
Файлы:
 
проверяй тип ордера (Buy или Sell)  и закрывай один по Ask , а другой по Bid
 
Евгений:
проверяй тип ордера (Buy или Sell)  и закрывай один по Ask , а другой по Bid

После проверки по тикету добавить проверку по типу?


if(OrderSelect(ticket4,SELECT_BY_TICKET,MODE_TRADES)==true)

       {

        if (OrderType() == OP_SELL) //или бай

        OrderClose(ticket4,Lots,Bid,Slippage,clrBisque);

       }
        

или наоборот:   

if (OrderType() == OP_SELL) //или бай

      {

       if(OrderSelect(ticket4,SELECT_BY_TICKET,MODE_TRADES)==true)

       OrderClose(ticket4,Lots,Bid,Slippage,clrBisque);

      }

Честно говоря не совсем понимаю смысл... по тикету ведь выбирается конкретный ордер (его и нужно закрыть)

я не понимаю почему на тестере работает а на реале нет... Вот главный вопрос!

 
Istrrebitel:

Честно говоря не совсем понимаю смысл... по тикету ведь выбирается конкретный ордер (его и нужно закрыть)


Ордер-то конкретный, но если ты заранее знаешь какого он типа (на продажу или покупка) то можешь сразу закрывать. Только я же тебе сказал - покупные по ask закрывай, а на продажу по bid.


Или у тебя советник только продаёт?

 
Евгений:


Ордер-то конкретный, но если ты заранее знаешь какого он типа (на продажу или покупка) то можешь сразу закрывать. Только я же тебе сказал - покупные по ask закрывай, а на продажу по bid.


Или у тебя советник только продаёт?

у меня открываются по 2 ордера на покупку и на продажу их я закрываю по линиях Боллинжера (покупка:1-й ордер закрывается по средней линии, 2-й ордер - по Hight; продажа:1-й ордер закрывается по средней линии, 2-й ордер - по Low;) и они закрываются покупные по ask и продажу по bid... в тестере...
 
Istrrebitel:
у меня открываются по 2 ордера на покупку и на продажу их я закрываю по линиях Боллинжера (покупка:1-й ордер закрывается по средней линии, 2-й ордер - по Hight; продажа:1-й ордер закрывается по средней линии, 2-й ордер - по Low;) и они закрываются покупные по ask и продажу по bid... в тестере...


То што вы запоминаете тикет позиции при отправке запроса на открытие позиции это хорошо

Но нет ни какой гарантии что этот тикет сохранится в переменной в дальнейшей работе программы.

 
а как же тогда выбирать конкретный ордер из 2 открытых селов или баев?
 
пробовал закрывать пол позиции функцией OrderClose но тогда теряется ордер (тикет присваеватся другой как при открытии нового ордера)...
 
Istrrebitel:
а как же тогда выбирать конкретный ордер из 2 открытых селов или баев?


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

Также и с sell ордерами. 

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