TraillingStop

 

Привет всем

Никак не могу разобраться что не так делаю, не работает трейлинг стоп хоть убейся, вот код:

if (PositionSelect(_Symbol))
   {
      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
      {          
         if (Ask-SL*_Point > PositionGetDouble(POSITION_SL))
            trade.PositionModify(_Symbol,Ask-SL*_Point,NULL);
      }      
      else
      {         
         if (Bid+SL*_Point < PositionGetDouble(POSITION_SL))
            trade.PositionModify(_Symbol,Bid+SL*_Point,NULL);
      }
   }     

 В иделае функция должна двигать уровень стоп лосса на расстоянии заданном переменной SL

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
ITeXPert:

Привет всем

Никак не могу разобраться что не так делаю, не работает трейлинг стоп хоть убейся, вот код:

 В иделае функция должна двигать уровень стоп лосса на расстоянии заданном переменной SL

По части кода трудно что-либо сказать. Вот у Вас, например, при наличии BUY-позиции уровень стоп-лосса проверяется по показателю Ask. Почему? Так задумано по стратегии?
 
Yedelkin:
По части кода трудно что-либо сказать. Вот у Вас, например, при наличии BUY-позиции уровень стоп-лосса проверяется по показателю Ask. Почему? Так задумано по стратегии?

Ask - лучшее предложение на покупку, или я неправильно понимаю документацию...

Хотя сути это не меняет, разница между Ask и Bid равна спреду,  т.е. даже если бы стоп-лосс был на 2-5 пунктов выше или ниже, то был бы уже второй вопрос, а он просто не выставляется

 

ITeXPert:

Yedelkin:
Вот у Вас, например, при наличии BUY-позиции уровень стоп-лосса проверяется по показателю Ask. Почему? Так задумано по стратегии?

 Ask - лучшее предложение на покупку, или я неправильно понимаю документацию...

:) Ну, если у Вас  BUY-позиция, то  каким образом она должна закрываться: покупкой или продажей ("лучшим предложением на покупку" или "лучшим  предложением  на  продажу")?

ITeXPert:

Хотя сути это не меняет, разница между Ask и Bid равна спреду...

 Просто ошибка может крыться в мелочах, которые в приведённом коде не видны. Например, не ясно используемое значение SL, не  понятно, почему не используется проверка на

SYMBOL_TRADE_STOPS_LEVEL и т.д.

ITeXPert:

... даже если бы стоп-лосс был на 2-5 пунктов выше или ниже, то был бы уже второй вопрос, а он просто не выставляется

 Вы учитываете, что котировки у МТ5 трёх- и пятизначные? А то вполне может оказаться, что стоп-лосс типа "Ask-SL*_Point" выставляется "слишком близко к рынку".

 
Я бы еще на один момент обратил внимание - не понятно нормализованы ли цены или нет...


Кстати, разработчикам -А работает ли NormalizeDouble?

А то на Иене она мне вот это порой возвращает - 76.67100000000001

 
Interesting:
Я бы еще на один момент обратил внимание - не понятно нормализованы ли цены или нет...


Кстати, разработчикам -А работает ли NormalizeDouble?

А то на Иене она мне вот это порой возвращает - 76.67100000000001

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

В качестве доказательства проверочный скрипт. Отгадайте с трёх раз, что будет напечатано

void OnStart()
  {
   Print(76.671);
  }
Кстати, в описании функции NormalizeDouble есть характерный пример, иллюстрирующий нормализацию числа ПИ с точностью 3 знака после запятой
 
Interesting:
Я бы еще на один момент обратил внимание - не понятно нормализованы ли цены или нет..

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

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
Yedelkin:

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

Я их обычно сам нормализую. Кстати код созданный мной на основе выше приведенного примера нормально ставит СЛ на позицию где его нет.
 

Interesting:
Я их обычно сам нормализую.

Судя по содержимому класса CTrade, так надо делать всегда при его применении, так как метод нормализации цен там не предусмотрен.

 
Yedelkin:

Судя по содержимому класса CTrade, так надо делать всегда, так как метод нормализации цен там не предусмотрен.

Вот и зря что не предусмотрен.
 
Interesting:
Вот и зря что не предусмотрен.

Так Ренат как-то говорил на тему, что нормализация цен - это компетенция программиста, а не разработчиков. 

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