Страница 1 из 3

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

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

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

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

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

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


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

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

Добавлено: 23 мар 2016, 07:52
evge
Ипонамама писал(а):программный стоп и по-моему трейлинг стоп

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


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

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

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

Провел оптимизацию и тестирование для 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 КБ) 26564 просмотра

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 КБ) 26549 просмотров

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

Добавлено: 23 мар 2016, 08:04
evge
исправил немного код, незначительно на результат влияет. Проверку поставил на незаданный стоплосс.

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

Добавлено: 23 мар 2016, 10:23
evge
Нашёл баги, внес изменения. Надеюсь теперь всё ок.

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

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

Пример

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

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

Добавлено: 23 мар 2016, 10:50
evge
изменилась тепловая карта оптимизации

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

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

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

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

Добавлено: 23 мар 2016, 23:36
evge
Если имеются другие идеи по работе стратегии могу реализовать

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

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

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

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

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