Стратегии и роботы > Пересечение EMA и SMA с трейлинг стопом (TRS)

Обсуждение, описание стратегий и роботов, идеи для стратегий
Ипонамама
Сообщения: 27
Зарегистрирован: 05 фев 2016, 20:42

Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение Ипонамама » 22 мар 2016, 22:13

Да, сберчик без шорта подпортил позицию )))
В последнем вебинаре был момент как прописывать программный стоп и по-моему трейлинг стоп, если не ошибаюсь.
Сам пока не смотрел - занят сильно, но надо вшить эту тему, желательно в ES.
Если есть желающие - помогите написать а я закину в тест на денежку.

Геннадий
Сообщения: 29
Зарегистрирован: 06 мар 2016, 02:11
Поблагодарили: 2 раза

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение Геннадий » 23 мар 2016, 07:43

Ну программный стоп написать просто от цены входа например. Если закрытие бара ниже точки входа на 1000 пунктов или выше на 300 пунктов, закрыть шорт. При условии, что сделка открыта:

Код: Выделить всё

  /// ПРАВИЛО 2
   if (  (  (Input1.Close  < (AverPrice()-1000)) ||          // закр сделки по профиту
             (Input1.Close  > (AverPrice()+300))        ) && AverPrice() > 0 )   // закр сделки по стопу
   {
      CloseShort();
   }


А вот организовать трейлинг стоп у меня не получается.

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение evge » 23 мар 2016, 07:52

Ипонамама писал(а):программный стоп и по-моему трейлинг стоп

Ипонамама писал(а):помогите написать


Это не проблема. Просто код будет уже открыт, в конструктор уже такой код не вернешь и все манипуляции с кодом только в исходнике.

Написал. Есть ньюансы:

  • стоплосс задается в шагах цены
  • после срабатывания стоплосса позиция в том же направлении не переоткрывается и ожидается сигнал в другую сторону

Провел оптимизацию и тестирование для SBER 1H (см. ниже) на 2000 баров, для других ТФ нужно смотреть :)

Вообщем вот код

Код: Выделить всё

/**Стратегия основана на определении моментов пересечения быстрой экспоненциальной скользящей средней и медленной экспоненциальной скользящей средней (система "ES"). Особенности:
- сигнал на покупку выдается, если быстрая EMA пересекает медленную SMA снизу вверх;
- сигнал на продажу выдается, если быстрая EMA  пересекает медленную SMA  сверху вниз;
- при тестировании цена сделки фиксируется как цена закрытия бара, на котором появился сигнал.
- в роботе заявка выставляется после закрытия бара, на котором появился сигнал.
- стоплосс задается в шагах цены
- после срабатывания стоплосса позиция в том же направлении не переоткрывается и ожидается сигнал в другую сторону
Developed by evge;
Algorithm = ТРЕНД;**/

function Initialize()
{
   StrategyName = "evge_ES_TRS";
   AddParameter("Pfast", 3, "", 1);
   AddParameter("Pslow", 75, "", 0);
   AddParameter("TRS", 0.5, "", 0);  //трейлинг стоп в шагах цены
   AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddGlobalVariable("StopLoss", Types.Double, 0.0); //StopLoss цена
   AddGlobalVariable("P", Types.Int, 0); //позиция 0 - нет, 1 - long, 2 - short
   AddGlobalVariable("NP", Types.Int, 0); //запрет открытия позиции 0 - нет запрета, 1 - long, 2 - short
}

function OnUpdate()
{

   // Определяем стоп
   if (CurrentPosition() > 0 && P != 1) { P = 1; StopLoss = 0; }
   if (CurrentPosition() < 0 && P != 2) { P = 2; StopLoss = 0; }
   if (CurrentPosition() == 0) P = 0;

   if (P == 1 && ((Input1.Close[0] - TRS) > StopLoss || StopLoss == 0)) StopLoss = Input1.Close[0] - TRS;
   if (P == 2 && ((Input1.Close[0] + TRS) < StopLoss || StopLoss == 0)) StopLoss = Input1.Close[0] + TRS;
   //

   /// ПРАВИЛО 1
   if ( NP != 1 && (EMA(Input1.Close, Pfast) > SMA(Input1.Close, Pslow)) )
   {
      NP = 1;
      EnterLong();
   }

   else

   /// ПРАВИЛО 2
   if ( NP != 2 && (EMA(Input1.Close, Pfast) < SMA(Input1.Close, Pslow)) )
   {
      NP = 2;
      EnterShort();
   }

   else

   // закрываем Long по StopLoss
   if ( (P == 1) && (Input1.Close[0] < StopLoss)) {
      CloseLong();
   }

   else

   // закрываем Short по StopLoss
   if ( (P == 2) && (Input1.Close[0] > StopLoss)) {
      CloseShort();
   }

}


evge_ES_TRS-01.png
SBER, ТФ=1H. Доходность при оптимизации параметров Pslow, Pfast от 1 до 100 с шагом 1, при TRS = 0.5
evge_ES_TRS-01.png (49.92 КБ) 31468 просмотров

evge_ES_TRS-02.png
SBER, ТФ=1H. Все тепловые карты при оптимизации параметров Pslow, Pfast от 1 до 100 с шагом 1, при TRS = 0.5

evge_ES_TRS-03.png
Тестирование при Pslow = 74, Pfast = 54

evge_ES_TRS-04.png
Стоп на графике
evge_ES_TRS-04.png (38.72 КБ) 31453 просмотра
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение evge » 23 мар 2016, 08:04

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

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение evge » 23 мар 2016, 10:23

Нашёл баги, внес изменения. Надеюсь теперь всё ок.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение evge » 23 мар 2016, 10:45

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

Пример

Покупка была на 100р, цена пошла вниз, стоп стоял на 99, но бар был до 95. Цена срабатывания стопа будет 95. Проверяется закрытие бара < стопа.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение evge » 23 мар 2016, 10:50

изменилась тепловая карта оптимизации

TRS = 0.5

evge_ES_TRS-05.png
SBER 1H. Оптимизация Pfast, Pslow от 1 до 100 с шагом 1, TRS=0.5, с 01.01.2015 по 23.03.2016


TRS = 3

evge_ES_TRS-06.png
SBER 1H. Оптимизация Pfast, Pslow от 1 до 100 с шагом 1, TRS=3, с 01.01.2015 по 23.03.2016
никогда такого не было и вот опять

Ипонамама
Сообщения: 27
Зарегистрирован: 05 фев 2016, 20:42

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение Ипонамама » 23 мар 2016, 23:34

Переадаптировал под роснефть м30 - показатели приемлемые но невысокие. Скорее всего оттого, что после срабатывания тс-а он не иет в реверс а ждет сигнала, но я не уверен. До конца месяца постоит в советнике - если не будет сливать бабло - поставлю в деньги. Его прямой конкурент на ES стоит на деньгах и работает уже три месяца, посмотрим кто будет сильней. Отчет скину.

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение evge » 23 мар 2016, 23:36

Если имеются другие идеи по работе стратегии могу реализовать
никогда такого не было и вот опять

Геннадий
Сообщения: 29
Зарегистрирован: 06 мар 2016, 02:11
Поблагодарили: 2 раза

Re: Пересечение EMA и SMA с трейлинг стопом (TRS)

Непрочитанное сообщение Геннадий » 24 мар 2016, 17:53

У меня вопрос. В описании указано, что "Стратегия основана на определении моментов пересечения быстрой экспоненциальной скользящей средней и медленной экспоненциальной скользящей средней". Но судя по коду например:

Код: Выделить всё

   /// ПРАВИЛО 1
   if ( NP != 1 && (EMA(Input1.Close, Pfast) > SMA(Input1.Close, Pslow)) )
   {
      NP = 1;
      EnterLong();
   }

открывается Лонг, если ЕМА выше SMA, а не пересекает ее. Нет?


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и 1 гость