Переставить SL в открытой позиции

 

Здравствуйте. Только начал делать роботов на mql5, перешел с TsLab'a. Видел на сайтах подобный вопрос, но всё равно туплю в этом. Можете пожалуйста в несколько строчек написать простой перенос стопа.
Вот, как у меня получилось, но неправильно.

if(Buy_opened == true)

    {

      if(mrate[0].close > mrate[0].open)

      {

       sl = PositionGetDouble(POSITION_SL) + 15;

       mrequest.sl=sl;

       OrderSend(mrequest,mresult);

       if(mresult.retcode==10009 || mresult.retcode==10008) // запрос выполнен или ордер успешно помещен

           {

            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");

           }

         else

           {

            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());

            return;

           }

         }

      

      else

      {

         sl = PositionGetDouble(POSITION_SL) - 5;

       mrequest.sl=sl;

       OrderSend(mrequest,mresult);

       if(mresult.retcode==10009 || mresult.retcode==10008) // запрос выполнен или ордер успешно помещен

           {

            Alert("Ордер Sell успешно помещен, тикет ордера #:",mresult.order,"!!");

           }

         else

           {

            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());

            return;

           }

      }

    }
 
Fresto:

Здравствуйте. Только начал делать роботов на mql5, перешел с TsLab'a. Видел на сайтах подобный вопрос, но всё равно туплю в этом. Можете пожалуйста в несколько строчек написать простой перенос стопа.
Вот, как у меня получилось, но неправильно.

Глубоко не анализировал, т. к. в глаза бросились вот эти строки:

sl = PositionGetDouble(POSITION_SL) - 5;

 и

sl = PositionGetDouble(POSITION_SL) + 15;

Результат для символов типа EURUSD, GBPUSD и т. д. будет либо отрицательный, либо за пределами цен где-то вверху. К примеру, цена EURUSD сейчас 1.06213. Отнимая 5, получим -3,93787. Чтобы такого не cлучалось, нужно приводить пункты к ценовой категории, т. е.:

sl = PositionGetDouble(POSITION_SL) + 15 * Point();
 
Ihor Herasko:

Глубоко не анализировал, т. к. в глаза бросились вот эти строки:

sl = PositionGetDouble(POSITION_SL) - 5;

 и

sl = PositionGetDouble(POSITION_SL) + 15;

Результат для символов типа EURUSD, GBPUSD и т. д. будет либо отрицательный, либо за пределами цен где-то вверху. К примеру, цена EURUSD сейчас 1.06213. Отнимая 5, получим -3,93787. Чтобы такого не cлучалось, нужно приводить пункты к ценовой категории, т. е.:

sl = PositionGetDouble(POSITION_SL) + 15 * Point();
Я вас понял, нужно умножать на шаг цены. Спасибо. А как именно изменить позицию? Например у меня открыта позиция на BUY. У позиции есть SL. Kaк его можно изменить на новом тике? В интернете слишком много текста по этому поводу и мало понятно.
 
Fresto:
Я вас понял, нужно умножать на шаг цены. Спасибо. А как именно изменить позицию? Например у меня открыта позиция на BUY. У позиции есть SL. Kaк его можно изменить на новом тике? В интернете слишком много текста по этому поводу и мало понятно.

Проще всего через СБ.

CTrade trade;
//trade.PositionModify(const string symbol,const double sl,const double tp); // подставить нужное

// или через тикет trade.PositionModify(const ulong ticket,const double sl,const double tp); 



 **

 
Alexey Volchanskiy:

Проще всего через СБ.

CTrade trade;
//trade.PositionModify(const string symbol,const double sl,const double tp); // подставить нужное

// или через тикет trade.PositionModify(const ulong ticket,const double sl,const double tp); 



 **

Спасибо, я пробовал через данную функцию, но если мне не нужно выставлять tp, я просто пишу заместо него 0?
 
Fresto:
Спасибо, я пробовал через данную функцию, но если мне не нужно выставлять tp, я просто пишу заместо него 0?

Если выставляете в первый раз уровень Take Profit (например открываете позицию) - то можно записать вместо tp^

  • "0.0" - то есть Take Proft'a нет
  • свой уровень - то есть Take Profit будет задан
Если Вы модифицируете позиции и у позиции УЖЕ ЕСТЬ Take Profit, то установкой в "0.0" Вы убьёте Take Profit - он станет равен нулю.

Если Вы модифицируете позиции и у позиции УЖЕ ЕСТЬ Take Profit, то чтобы сохранить этот уровень, Вы должны его явно прописать заново.

 
Vladimir Karputov:

Если выставляете в первый раз уровень Take Profit (например открываете позицию) - то можно записать вместо tp^

  • "0.0" - то есть Take Proft'a нет
  • свой уровень - то есть Take Profit будет задан
Если Вы модифицируете позиции и у позиции УЖЕ ЕСТЬ Take Profit, то установкой в "0.0" Вы убьёте Take Profit - он станет равен нулю.

Если Вы модифицируете позиции и у позиции УЖЕ ЕСТЬ Take Profit, то чтобы сохранить этот уровень, Вы должны его явно прописать заново.

Спасибо большое, теперь всё понятно, буду учиться дальше! :)