Пользовательские индикаторы > Volatility Stop (VStop) - определение тренда через волатильность

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
m4Dmitry
Сообщения: 72
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 60 раз
Поблагодарили: 3 раза

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение m4Dmitry » 21 июл 2018, 21:26

evge писал(а):тогда надо описать простые условия для входа \ выхода по индикатору.
т.е. расшифровать слово "простая"
опишите, я помогу превратить это в код.


Спасибо, я сейчас попробую.
Суть действительно простая. Условия купил/продал как например для СМА (только тут момент пересечения), а в данном случае момент, когда индикатор "рисует" разворот тренда.
* Открываем лонг, когда смена вверх, и закрываем его когда тренд закончился.
* И сразу открываем Шорт по закрытию Лонга.

Ну и конечно стопы, чтобы не ловить нежданных лосей :)))
Вложения
2018-07-21_20-55-39.png

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

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение evge » 22 июл 2018, 08:39

Вот код по вашему описанию входов и выходов + стоплосс.

Для улучшения результатов, скорее всего, надо добавлять фильтры для входов.

по сберу на параметрах по умолчанию протестировал на H1.

VStop-01.png
VStop-01.png (38.03 КБ) 24032 просмотра

VStop-02.png
VStop-02.png (47.95 КБ) 24032 просмотра


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

/**

**/

function Initialize()
{
   StrategyName = "VStop";
   AddParameter("Length", 20, "", 1);
   AddParameter("Mult", 2, "", 1);
   AddParameter("Period", 1, "", 1);
   AddParameter("SL", 2, "StopLoss %", 1);
   AddInput("I", Inputs.Candle, 60, true, "");
   LongLimit = 1000;
   ShortLimit = -1000;
   AddChartIndicator("MY.VStop", new Dictionary <string, string>{{"length", "Length"},{"mult", "Mult"},{"period", "Period"},{"O", "0"},{"H", "0"},{"L", "0"},{"C", "1"}});   
}

function OnUpdate()
{

   // evge 22.07.2018 http://alfadirect4.ru

   var VS = MY.VStop(I, Length, Mult, Period, 0, 0, 0, 1);
   var VSUp = VS["Up"];
   var VSDn = VS["Dn"];

   if (VSUp[0] > 0 && VSDn[1] > 0)
      {
      EnterLong();
      StopLoss(SL, SignalPriceType.DeltaInPercentFromAveragePrice);
      }
   if (VSDn[0] > 0 && VSUp[1] > 0)
      {
      EnterShort();
      StopLoss(SL, SignalPriceType.DeltaInPercentFromAveragePrice);
      }
}
никогда такого не было и вот опять

m4Dmitry
Сообщения: 72
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 60 раз
Поблагодарили: 3 раза

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение m4Dmitry » 22 июл 2018, 14:27

evge писал(а):Вот код по вашему описанию входов и выходов + стоплосс.
Для улучшения результатов, скорее всего, надо добавлять фильтры для входов.


Спасибо.
Согласен на 100%. А какие могут быть варианты? Что опыт подсказывает?

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

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение evge » 22 июл 2018, 17:38

Много чего можно и другие индикаторы фильтрующие.
Например проверил такое:
Не открывать противоположную позицию после удачной сделки, а лишь закрывать текущую и ждать следующего сигнала.

Это уменьшило количество убыточных сделок :)
Прибыльных стало тоже чуть меньше, но на меньшее количество чем убыточных.
Выросли показатели: средняя прибыльная сделка, профит фактор, фактор восстановления, выигрышность.

Конечная прибыль снизилась на 2.5%, но при этом просадка уменьшилась на 3.5%

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

m4Dmitry
Сообщения: 72
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 60 раз
Поблагодарили: 3 раза

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение m4Dmitry » 22 июл 2018, 18:24

evge писал(а):Много чего можно и другие индикаторы фильтрующие.


Согласен, про это тоже сразу подумал, но уже отправил сообщение.

А какие индикаторы хорошо работают во фелете? Можно было бы их подключить, чтобы отследить момент выхода из него.

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

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение evge » 22 июл 2018, 19:37

Осцилляторы хорошо во флете
никогда такого не было и вот опять

NIKON
Сообщения: 9
Зарегистрирован: 08 апр 2019, 14:34
Благодарил (а): 4 раза

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение NIKON » 08 апр 2019, 23:04

Евгений, добрый день!
У меня еще маленький опыт в торговле, но меня всегда удивляет, почему перед закрытием позиции нельзя сравнить значения инструмента при открытии (на входе) и на закрытии( т.е на выходе). Если они отличаются менее, чем на заданную величину (например, в процентах), то отказаться от закрытия и дождаться следующего момента.
Это очень тяжело реализовать в программе? Не смог бы ты попробовать сделать это, например, с стратегии VStop? Заранее спасибо!

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

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение evge » 09 апр 2019, 08:41

Приветствую!

Реализовать это очень легко, для этого есть функции:

CurrentPL() – возвращает текущий доход по открытой позиции в валюте инструмента (рубли или пункты).
CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.

Если нужна разница в пунктах от средней цены до текущей, то это тоже можно узнать через

Input1.Close[0] - цена последнего закрытия доступная нам в момент принятия решения (хотя если быть точнее момент этот это первая сделка на следующем баре)
AverPrice() – возвращает учетную цену открытой позиции
Учетная цена – средневзвешенная цена сделок, которые увеличивают текущую открытую позицию по роботу

Вычисляем разницу Math.Abs(AverPrice() - Input1.Close[0]) и принимаем решение

NIKON писал(а):Если они отличаются менее, чем на заданную величину (например, в процентах), то отказаться от закрытия и дождаться следующего момента


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

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

По тому что описали выше код может быть таким:

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

/**

**/

function Initialize()
{
   StrategyName = "VStop";
   AddParameter("Length", 20, "", 1);
   AddParameter("Mult", 2, "", 1);
   AddParameter("Period", 1, "", 1);
   AddParameter("SL", 2, "StopLoss %", 1);
   AddParameter("TP", 4, "TakeProfit %", 1);
   AddInput("I", Inputs.Candle, 60, true, "");
   LongLimit = 1000;
   ShortLimit = -1000;
   AddChartIndicator("MY.VStop", new Dictionary <string, string>{{"length", "Length"},{"mult", "Mult"},{"period", "Period"},{"O", "0"},{"H", "0"},{"L", "0"},{"C", "1"}});   
}

function OnUpdate()
{

   // evge 22.07.2018 http://alfadirect4.ru

   var VS = MY.VStop(I, Length, Mult, Period, 0, 0, 0, 1);
   var VSUp = VS["Up"];
   var VSDn = VS["Dn"];

   if (VSUp[0] > 0 && VSDn[1] > 0)
   if (CurrentPLper() >= TP || CurrentPosition() == 0)
      {
      EnterLong();
      StopLoss(SL, SignalPriceType.DeltaInPercentFromAveragePrice);
      }
     
   if (VSDn[0] > 0 && VSUp[1] > 0)
   if (CurrentPLper() >= TP || CurrentPosition() == 0)
      {
      EnterShort();
      StopLoss(SL, SignalPriceType.DeltaInPercentFromAveragePrice);
      }
}


Здесь переворот будет только если по открытой позиции % изменения цены выше или равен параметру TP в %
никогда такого не было и вот опять

NIKON
Сообщения: 9
Зарегистрирован: 08 апр 2019, 14:34
Благодарил (а): 4 раза

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение NIKON » 09 апр 2019, 14:58

Ой, какой ты молодец! Я, честно говоря, не ожидал, что ты ответишь! Спасибо огромное!
Буду тестировать. Но не мог бы ты увеличить размер сигналов стратегии ( они не очень заметны).
Смысл моего предложения заключается в следующем. Предположим, открываем Лонг на 150, так не надо его закрывать на 148,5.В середине тренда м.б. есть 160.А так часто бывает! Ведь индикатор VStop хорошо определяет сам тренд, но, по-существу, игнорирует локальные экстремумы. Были бы знания, я исследовал два варианта.
1. Покупал при Лонге на открытии, а продавал на максимуме цены внутри тренда, и наоборот, при Шорте продавал на открытии, а закрывал бы на минимуме внутри тренда. При этом с обязательной проверкой, что цена продажи больше цены покупки на (например) 1% - это для Лонга. По аналогии для Шорта, цена покупки меньше не менее 1%, чем цена продажи.
2.В пункте 1 подразумевается, что мы затариваемся по максимуму на всю сумму. Может быть, стоит использовать идею StepByStep и покупать(продавать) частями, пока происходит движение тренда .
Было бы классно это проверить!
Еще раз спасибо!

NIKON
Сообщения: 9
Зарегистрирован: 08 апр 2019, 14:34
Благодарил (а): 4 раза

Re: Volatility Stop (VStop) - определение тренда через волатильность

Непрочитанное сообщение NIKON » 09 апр 2019, 16:48

Но вообще-то, все стратегии носят скорее полиативный характер. Мне кажется, что путь к успеху лежит через стратегии, основанные на вероятности. Пока мы не научимся с определенной вероятностью предсказывать будущее значение цены инструмента, мы всегда будем бороться с запаздыванием и. бежать за уходящим поездом
Если ты видел трехмерный (уровень, частота, время) динамический спектр речи - вот наша ситуация! Средняя цена нашей корзины - это плоскость в этом пространстве.Целевая функция - это минимум или максимум расстояния от этой плоскости до текущей цены. Только как это все реализовать?! Нужны совершенно другие данные!


Вернуться в «Пользовательские индикаторы»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей