18 января 2021 smart-lab.ru
Сегодня решил проверить работоспособность своей старой стратегии, проработавшей с большими изменениями с 2008г, и снятой с эксплуатации в 2014 г.
Вначале стратегия была сделана на Excel с ручным исполнение сделок, затем глубоко модифицирована, и стала уже Excel-VBA, затем еще раз модифицирована и была перенесена на C#. Ну, а самая последняя версия на C# в 2014 г успешно прошла месячный прогон на виртуальных сделках, но вывод ее на реал был признан нецелесообразным из за известных событий, и пару лет я рынком вообще не занимался. Ну, а по возвращении на рынок появились новые мысли, и я занялся совсем другими стратегиями.
Сегодня я решил проверить, а работает ли подобная стратегия сейчас. В Python это заняло примерно час, благо заготовок и индикаторов уже написано много и скомпоновать их дело нехитрое, и ничего специально придумывать не надо. Тест стратегии безо всяких ее настроек сразу оказался прибыльным на двух 3-х месячных интервалах фьючерсов Сбера и Газпрома. Критики могут не писать, что интервал тестирования недостаточен. Я знаю ваше мнение, однако, считаю иначе. Недостаточен? — сами делайте и сами тестируйте.
Т.к., саму стратегию я в дальнейшем использовать не планирую, решил рассказать вам о ней. Умолчу только о элементах используемых по сей день, а на них, собственно, и построена вся стратегия.
Однако, многие, возможно обоснованно, считают, что стандартных индикаторов представленных тех.анализом вполне достаточно, и ничего изобретать не надо. Если это мнение соответствует действительности, то стратегия будет работать и у вас.
Итак, о самой стратегии.
Основу стратегии составляют 4 МА (думаю, что в вашем случае целесообразно использовать ЕМА). Параметры МА не подбирались, а выбирались еще до начала проектирования, и далее никак не менялись. Все МА нестандартные, и представляют собой классические фильтры ФНЧ. Параметр Т этих МА никак не соответствуют стандартным МА, и как они пересчитываются в стандартные — я об этом не думал, т.к. вообще не использую стандартные индикаторы.
Итак, рисуем на графике четыре МА, выбрав их периоды таким образом, чтобы из них можно было сделать гребенчатый фильтр (сам фильтр делать не надо)
Стратегия для лонга (для шорта все наоборот):
Далее, ждем когда все 4 МА будут в своем минимуме, т.е., не будут продолжать падать.
Дожидаемся, когда 2 или 3 младших МА начнут расти с более-менее приличной скоростью, особенно младшая и входим в лонг.
Стопа, как такового нет. Открытие/закрытие сделок осуществляется лимитниками по рынку. Выход из сделки осуществляется по анализу ситуации. Если начинается падение, и уже по прогнозу понятно, что оно будет продолжаться дальше, то закрываемся немедленно — с прибылью или убытком.
Если падение достаточно медленное и есть вероятность разворота в нашу сторону, ждем до достижения некоторого критического уровня, который выбирается в зависимости от инструмента, ну, и опять закрываемся, с прибылью или убытком.
В принципе, дополнительно можно установить защитный стоп, если стратегия используется в ручном режиме и вам нужно отойти, или на случай обрыва инета или проблем у брокера-биржи.
ТФ выбираем любой, от 1м до 15м или 1Н. На 15м и 1Н при входе в сделку хорошо бы анализировать данные младших ТФ или хотя бы свечи.
Да, и упаси вас боже оптимизировать это в каком-нибудь оптимизаторе (уже были такие попытки у тех, кому я передавал стратегию). Вы получите замечательную прибыль на истории, но от стратегии ничего не останется — реально работать это не будет. Подбор параметров возможен, но только руками, по результатам анализа сделок на тесте стратегии.
Собственно, и все. Все основное о стратегии вы уже знаете.
А мне интересно было бы сравнить свои результаты с результатами стратегий на стандартных индикаторах сделанными независимыми разработчиками. И вообще узнать, а будет ли это работать у кого нибудь.
Совершенствуем Exponential Moving Average (EMA)
На днях написал топик с описанием своей старой стратегии - Ретростратегия ретро ТС., снятой с эксплуатации в далеком 2014 г, которая, как оказалось, даже в упрощенном виде может работать и сегодня. Не собирался ее использовать, но в ходе обсуждений решил потратить на нее пару вечеров, восстановить по памяти до последней ее версии, и посмотреть, не стоит ли отложить текущие дела, и быстренько вывести ее на рынок.
В ходе восстановления пришлось также дорабатывать фильтры ФНЧ, простейшим из которых является ЕМА. Я дорабатывал свои фильтры, а вам покажу, что можно сделать с ЕМА, чтобы ее усовершенствовать и улучшить.
В комментариях к топику о ретростратегии упомянули некоего Jurik (jurikres.com) и его JMA. Думал, что он уже забыт, но, жив — курилка. То, что мы получим будет не хуже его индикаторов и подобрав периоды сглаживания можете сами в этом убедиться. Вообще, все поделки Jurikа — это где-то на уровне лабораторных работ студентов 4-го курса института по курсу ТАУиР. Наши сегодняшние тоже сложностью не отличаются, но может даже лучше, хотя бы потому, что не являются черными ящиками, и вы знаете как это устроено.
Выражение для ЕМА знают, пожалуй, все:
Y(t) = a0*X(t) +b1*Y(t-1).
У нее много недостатков, одним из которых является большая групповая задержка. Попробуем исправить это, и для начала вычислим ошибку слежения ЕМА за котировками:
delta = x(t) — Y(t-1).
Теперь добавим эту ошибку с некоторым коэффициентом Kos к X(t) (это называется — обратная связь), и получим выражение для нашей скорректированной ЕМА:
Y(t) = a0*(X(t) + Kos*delta) +b1*Y(t-1).
Теоретически Kos может принимать значения от 0 до 1, но увлекаться не надо, обычно достаточно Kos от 0 до 0.3.
Все, можете смотреть что получится.
В рассмотренном выше случае мы использовали так называемую линейную обратную связь, когда корректирующий сигнал пропорционален сигналу ошибки. Далее мы рассмотрим нелинейную связь, когда и сам коэффициент Kos меняется пропорционально ошибке. Запишем это:
delta_nl = Knl*abs(delta/y[t-1])*delta.
Здесь delta/y[t-1] сделано для того, чтобы delta_nl не изменялась от уровня цены, а зависела только от ее изменения.
В итоге, для нашей ЕМА с нелинейной обратной связью окончательно получим:
Y(t) = a0*(X(t)+ delta_nl) +b1*Y(t-1).
С Knl тоже увлекаться не надо, но он здесь достаточно велик, у меня Knl= 1.0.
Теперь можем скомбинировать обе обратных связи в одном индикаторе:
Y(t) = a0*(X(t)+ Kos*delta + delta_nl) +b1*Y(t-1).
И наконец графики того, что у нас из этого получилось на единичном скачке 1(t) — это такой стандартный тест для всяческих подобных систем, по которому, глаз пристрелямши, можно оценивать характеристики системы.
LPF — типовой ФНЧ фильтр,
OS — ФНЧ с обратной связью
NL — ФНЧ с комбинированной связью (последний вариант в топике)
Смотрим выбросы — 10% — это оч небольшой выброс, реально, если и будет виден, то только на гэпах.
Теперь посмотрим те же самые индикаторы на реальных котировках фьючерса Si.
На графиках все так называемы периоды сглаживания одинаковы. Я выбирал значения Kos и Knl такими, которые оптимальны для моих целей. Для ваших применений значения Kos и Knl могут быть совсем другими, и, соответственно, и графики будут иметь несколько иной вид.
Сорри, но для тестов я использовал не ЕМА, а свои ФНЧ, но на ЕМА тоже должно получится, когда-то давно я пробовал.
Вот и все.
В топике Совершенствуем Exponential Moving Average (EMA) мы показали использование линейной и нелинейной обратных связей в применении к ЕМА. Как правильно отметили в части комментариев, в случае линейной обратной связи ЕМА просто превращается в другую ЕМА с меньшим периодом, и толку от такой ЕМА немного. И тем не менее, даже в этом случае, обратная связь демонстрирует то, что и должна была демонстрировать — цель достигнута и ошибка слежения за ценой уменьшилась.
Нелинейная же связь даже в случае с ЕМА работает нормально, и по факту адаптивно в зависимости от ошибки меняет период сглаживания. При больших значениях ошибки период сглаживания уменьшается относительно заданного Тс, при малых ошибках период сглаживания практически равен предустановленному Тс.
В общем, нам надо решить вопрос только с линейной обратной связи, и выбрать для этого в качестве исходного индикатора что-то посложнее ЕМА. Скажем фильтр низких частот (ФНЧ) 2-го порядка. Выражение для него будет иметь вид.
Y(t) = a0*X(t) + b1*Y(t-1) + b2*Y(t-2)
Немногим сложнее обычной ЕМА, ничего ужасного.)
Попробуем такой фильтр сделать из обычной ЕМА вида Y(t) = a0*X(t) +b0*Y(t-1) пропустив сигнал вначале через оду ЕМА, а затем через вторую. Вот так: Y(t) =EMA(EМА(X(t)).
То, что мы сделаем сейчас не совсем обычно с точки зрения алгебры, но, тем не менее, результат от этого не пострадает. Перемножим преобразованные выражения двух одинаковых ЕМА друг на друга, чтобы получить более сложную ЕМА. Вообще-то, это называется z-преобразование.
Н(z) =(a0/(1-b*1z^-1*(a0/(1-b1*z^-1)
Н(z) a0^2/(1 -b1*z^-1 — b1*z^-1 + b1^2*(z^-1)^2 или
Н(z) a0^2/(1 -2*b1*z^-1 + b1^2*z^-2).
А теперь вернувшись из этой абракадабры к обычному виду записи индикаторов, получим:
Y(t) = a0^2*X(t) + 2*b1*Y(t-1) — b1^2*Y(t-2),
где a0 и b1 коэффициенты нашей исходной ЕМА.
и это будет тоже самое, как если бы мы 2 раза пропустили X(t) через ЕМА. График такой ЕМА 2-го порядка ЕМА2 на единичном скачке будет выглядеть примерно так:
Смотри график LPF, в том числе и в предыдущем топике.
На таком фильтре ЕМА2 уже есть где разгуляться и с линейными, и с нелинейными обратными связями, и еще много с чем другим.)
Об этом мы, возможно, в следующий раз поговорим. Если будет с кем.)
Кто хочет продолжения темы — голосуйте, в смысле, ставьте плюсы. Я не буду тратить время и писать в пустоту. Извините за каламбур.)
Удачи!
Вначале стратегия была сделана на Excel с ручным исполнение сделок, затем глубоко модифицирована, и стала уже Excel-VBA, затем еще раз модифицирована и была перенесена на C#. Ну, а самая последняя версия на C# в 2014 г успешно прошла месячный прогон на виртуальных сделках, но вывод ее на реал был признан нецелесообразным из за известных событий, и пару лет я рынком вообще не занимался. Ну, а по возвращении на рынок появились новые мысли, и я занялся совсем другими стратегиями.
Сегодня я решил проверить, а работает ли подобная стратегия сейчас. В Python это заняло примерно час, благо заготовок и индикаторов уже написано много и скомпоновать их дело нехитрое, и ничего специально придумывать не надо. Тест стратегии безо всяких ее настроек сразу оказался прибыльным на двух 3-х месячных интервалах фьючерсов Сбера и Газпрома. Критики могут не писать, что интервал тестирования недостаточен. Я знаю ваше мнение, однако, считаю иначе. Недостаточен? — сами делайте и сами тестируйте.
Т.к., саму стратегию я в дальнейшем использовать не планирую, решил рассказать вам о ней. Умолчу только о элементах используемых по сей день, а на них, собственно, и построена вся стратегия.
Однако, многие, возможно обоснованно, считают, что стандартных индикаторов представленных тех.анализом вполне достаточно, и ничего изобретать не надо. Если это мнение соответствует действительности, то стратегия будет работать и у вас.
Итак, о самой стратегии.
Основу стратегии составляют 4 МА (думаю, что в вашем случае целесообразно использовать ЕМА). Параметры МА не подбирались, а выбирались еще до начала проектирования, и далее никак не менялись. Все МА нестандартные, и представляют собой классические фильтры ФНЧ. Параметр Т этих МА никак не соответствуют стандартным МА, и как они пересчитываются в стандартные — я об этом не думал, т.к. вообще не использую стандартные индикаторы.
Итак, рисуем на графике четыре МА, выбрав их периоды таким образом, чтобы из них можно было сделать гребенчатый фильтр (сам фильтр делать не надо)
Стратегия для лонга (для шорта все наоборот):
Далее, ждем когда все 4 МА будут в своем минимуме, т.е., не будут продолжать падать.
Дожидаемся, когда 2 или 3 младших МА начнут расти с более-менее приличной скоростью, особенно младшая и входим в лонг.
Стопа, как такового нет. Открытие/закрытие сделок осуществляется лимитниками по рынку. Выход из сделки осуществляется по анализу ситуации. Если начинается падение, и уже по прогнозу понятно, что оно будет продолжаться дальше, то закрываемся немедленно — с прибылью или убытком.
Если падение достаточно медленное и есть вероятность разворота в нашу сторону, ждем до достижения некоторого критического уровня, который выбирается в зависимости от инструмента, ну, и опять закрываемся, с прибылью или убытком.
В принципе, дополнительно можно установить защитный стоп, если стратегия используется в ручном режиме и вам нужно отойти, или на случай обрыва инета или проблем у брокера-биржи.
ТФ выбираем любой, от 1м до 15м или 1Н. На 15м и 1Н при входе в сделку хорошо бы анализировать данные младших ТФ или хотя бы свечи.
Да, и упаси вас боже оптимизировать это в каком-нибудь оптимизаторе (уже были такие попытки у тех, кому я передавал стратегию). Вы получите замечательную прибыль на истории, но от стратегии ничего не останется — реально работать это не будет. Подбор параметров возможен, но только руками, по результатам анализа сделок на тесте стратегии.
Собственно, и все. Все основное о стратегии вы уже знаете.
А мне интересно было бы сравнить свои результаты с результатами стратегий на стандартных индикаторах сделанными независимыми разработчиками. И вообще узнать, а будет ли это работать у кого нибудь.
Совершенствуем Exponential Moving Average (EMA)
На днях написал топик с описанием своей старой стратегии - Ретростратегия ретро ТС., снятой с эксплуатации в далеком 2014 г, которая, как оказалось, даже в упрощенном виде может работать и сегодня. Не собирался ее использовать, но в ходе обсуждений решил потратить на нее пару вечеров, восстановить по памяти до последней ее версии, и посмотреть, не стоит ли отложить текущие дела, и быстренько вывести ее на рынок.
В ходе восстановления пришлось также дорабатывать фильтры ФНЧ, простейшим из которых является ЕМА. Я дорабатывал свои фильтры, а вам покажу, что можно сделать с ЕМА, чтобы ее усовершенствовать и улучшить.
В комментариях к топику о ретростратегии упомянули некоего Jurik (jurikres.com) и его JMA. Думал, что он уже забыт, но, жив — курилка. То, что мы получим будет не хуже его индикаторов и подобрав периоды сглаживания можете сами в этом убедиться. Вообще, все поделки Jurikа — это где-то на уровне лабораторных работ студентов 4-го курса института по курсу ТАУиР. Наши сегодняшние тоже сложностью не отличаются, но может даже лучше, хотя бы потому, что не являются черными ящиками, и вы знаете как это устроено.
Выражение для ЕМА знают, пожалуй, все:
Y(t) = a0*X(t) +b1*Y(t-1).
У нее много недостатков, одним из которых является большая групповая задержка. Попробуем исправить это, и для начала вычислим ошибку слежения ЕМА за котировками:
delta = x(t) — Y(t-1).
Теперь добавим эту ошибку с некоторым коэффициентом Kos к X(t) (это называется — обратная связь), и получим выражение для нашей скорректированной ЕМА:
Y(t) = a0*(X(t) + Kos*delta) +b1*Y(t-1).
Теоретически Kos может принимать значения от 0 до 1, но увлекаться не надо, обычно достаточно Kos от 0 до 0.3.
Все, можете смотреть что получится.
В рассмотренном выше случае мы использовали так называемую линейную обратную связь, когда корректирующий сигнал пропорционален сигналу ошибки. Далее мы рассмотрим нелинейную связь, когда и сам коэффициент Kos меняется пропорционально ошибке. Запишем это:
delta_nl = Knl*abs(delta/y[t-1])*delta.
Здесь delta/y[t-1] сделано для того, чтобы delta_nl не изменялась от уровня цены, а зависела только от ее изменения.
В итоге, для нашей ЕМА с нелинейной обратной связью окончательно получим:
Y(t) = a0*(X(t)+ delta_nl) +b1*Y(t-1).
С Knl тоже увлекаться не надо, но он здесь достаточно велик, у меня Knl= 1.0.
Теперь можем скомбинировать обе обратных связи в одном индикаторе:
Y(t) = a0*(X(t)+ Kos*delta + delta_nl) +b1*Y(t-1).
И наконец графики того, что у нас из этого получилось на единичном скачке 1(t) — это такой стандартный тест для всяческих подобных систем, по которому, глаз пристрелямши, можно оценивать характеристики системы.
LPF — типовой ФНЧ фильтр,
OS — ФНЧ с обратной связью
NL — ФНЧ с комбинированной связью (последний вариант в топике)
Смотрим выбросы — 10% — это оч небольшой выброс, реально, если и будет виден, то только на гэпах.
Теперь посмотрим те же самые индикаторы на реальных котировках фьючерса Si.
На графиках все так называемы периоды сглаживания одинаковы. Я выбирал значения Kos и Knl такими, которые оптимальны для моих целей. Для ваших применений значения Kos и Knl могут быть совсем другими, и, соответственно, и графики будут иметь несколько иной вид.
Сорри, но для тестов я использовал не ЕМА, а свои ФНЧ, но на ЕМА тоже должно получится, когда-то давно я пробовал.
Вот и все.
В топике Совершенствуем Exponential Moving Average (EMA) мы показали использование линейной и нелинейной обратных связей в применении к ЕМА. Как правильно отметили в части комментариев, в случае линейной обратной связи ЕМА просто превращается в другую ЕМА с меньшим периодом, и толку от такой ЕМА немного. И тем не менее, даже в этом случае, обратная связь демонстрирует то, что и должна была демонстрировать — цель достигнута и ошибка слежения за ценой уменьшилась.
Нелинейная же связь даже в случае с ЕМА работает нормально, и по факту адаптивно в зависимости от ошибки меняет период сглаживания. При больших значениях ошибки период сглаживания уменьшается относительно заданного Тс, при малых ошибках период сглаживания практически равен предустановленному Тс.
В общем, нам надо решить вопрос только с линейной обратной связи, и выбрать для этого в качестве исходного индикатора что-то посложнее ЕМА. Скажем фильтр низких частот (ФНЧ) 2-го порядка. Выражение для него будет иметь вид.
Y(t) = a0*X(t) + b1*Y(t-1) + b2*Y(t-2)
Немногим сложнее обычной ЕМА, ничего ужасного.)
Попробуем такой фильтр сделать из обычной ЕМА вида Y(t) = a0*X(t) +b0*Y(t-1) пропустив сигнал вначале через оду ЕМА, а затем через вторую. Вот так: Y(t) =EMA(EМА(X(t)).
То, что мы сделаем сейчас не совсем обычно с точки зрения алгебры, но, тем не менее, результат от этого не пострадает. Перемножим преобразованные выражения двух одинаковых ЕМА друг на друга, чтобы получить более сложную ЕМА. Вообще-то, это называется z-преобразование.
Н(z) =(a0/(1-b*1z^-1*(a0/(1-b1*z^-1)
Н(z) a0^2/(1 -b1*z^-1 — b1*z^-1 + b1^2*(z^-1)^2 или
Н(z) a0^2/(1 -2*b1*z^-1 + b1^2*z^-2).
А теперь вернувшись из этой абракадабры к обычному виду записи индикаторов, получим:
Y(t) = a0^2*X(t) + 2*b1*Y(t-1) — b1^2*Y(t-2),
где a0 и b1 коэффициенты нашей исходной ЕМА.
и это будет тоже самое, как если бы мы 2 раза пропустили X(t) через ЕМА. График такой ЕМА 2-го порядка ЕМА2 на единичном скачке будет выглядеть примерно так:
Смотри график LPF, в том числе и в предыдущем топике.
На таком фильтре ЕМА2 уже есть где разгуляться и с линейными, и с нелинейными обратными связями, и еще много с чем другим.)
Об этом мы, возможно, в следующий раз поговорим. Если будет с кем.)
Кто хочет продолжения темы — голосуйте, в смысле, ставьте плюсы. Я не буду тратить время и писать в пустоту. Извините за каламбур.)
Удачи!
Не является индивидуальной инвестиционной рекомендацией | При копировании ссылка обязательна | Нашли ошибку - выделить и нажать Ctrl+Enter | Жалоба