Эта стратегия построена на основе двойного индикатора EMA с целью распознавания ценовых тенденций и отслеживания тенденций. Сначала она рассчитывает средне- и долгосрочную EMA и краткосрочную EMA, а затем реализует длинную позицию при наличии золотого креста и короткую позицию при наличии смертельного креста между двумя EMA. Между тем, также внедряется фильтрация наивысшего / низкого уровня для дальнейшего устранения ложных сигналов.
Основными показателями этой стратегии являются двойные EMA, одна из которых является краткосрочной, а другая - долгосрочной.
ema1: Средне- и долгосрочный период EMA, дефолт до 34 дней
ema2: Краткосрочный период EMA, по умолчанию до 13 дней
ema_sr: средне- и долгосрочная EMA на основе ценового замыкания
highest_ema: Самая высокая EMA ema_sr, период - ema2
lowest_ema: Самая низкая EMA ema_sr, период - ema2
ema_ysl: EMA, используемая для генерации торговых сигналов, рассчитанная на основе отношения между ema_sr и highest/lowest_ema
кроссы обнаруживают золотые и смертельные кроссы между ema_sl и ema_ysl, и таким образом достигают следующего тренда.
Сочетание двойной EMA позволяет более точно оценивать ценовые тенденции. Средне- и долгосрочная EMA фильтрует краткосрочный шум, в то время как краткосрочная EMA может своевременно отслеживать повороты среднесрочных тенденций. Введение самой высокой/низкой EMA может еще больше устранить ложные сигналы и уменьшить ненужные сделки.
Наибольшее преимущество этой стратегии заключается в точном определении тренда. Сама двойная EMA превосходит одиночную EMA, SMA и другие индикаторы для улавливания изменений тренда. Применение highest/lowest_ema может эффективно отфильтровать ложные сигналы, вызванные краткосрочными отступлениями, что имеет решающее значение для стратегий, следующих за трендом.
Кроме того, параметры этой стратегии просты и просты в настройке и оптимизации. Пользователям нужно только сосредоточиться на двух параметрах EMA, что очень интуитивно понятно. Это также делает стратегию легкой в понимании и использовании.
Основной риск этой стратегии заключается в том, что она не способна выявить изменение тренда. Когда цена формирует долгосрочные корректировки или крупные повороты, отставание двойной EMA может привести к отсутствию лучших точек входа.
Кроме того, EMA сама не имеет возможности реагировать на чрезвычайные ситуации. Стратегия может также понести убытки при возникновении событий черного лебедя.
Для смягчения вышеуказанных рисков рекомендуется сократить длительность средне- и долгосрочной EMA или ввести такие индикаторы, как MACD, чтобы справиться с чрезвычайными ситуациями.
Есть возможности для дальнейшей оптимизации этой стратегии, в частности, основные направления:
Испытать больше комбинаций параметров EMA для поиска оптимальных параметров;
Добавить объем суждения, чтобы избежать выдачи неправильных сигналов при колебаниях цены;
Сочетание линий тренда, каналов и других инструментов для более точного определения поворотных точек тренда.
Благодаря оптимизации параметров, добавлению условий фильтрации и другим средствам, это обещает еще больше улучшить стабильность и рентабельность стратегии.
В целом, эта стратегия имеет относительно сильную способность идентифицировать тенденции, отфильтровывая шум с двойной EMA и эффективно сглаживая кривую цены.
Однако сама стратегия имеет некоторое отставание в своевременном выявлении обратных тенденций. Это основной риск, с которым она сталкивается, а также ключевое направление для будущих оптимизаций. Мы с нетерпением ждем дальнейшего повышения надежности стратегии посредством настройки параметров, фильтрации сигналов и других средств, чтобы она могла достигать устойчивой доходности в более рыночных условиях.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Modified from kivancfr3762's A2MK script strategy("EMA STRATEGY", overlay=true) ema2=input(13, "EMA2 Length") ema1=input(34, "EMA1 Length") ema_sr = ema((max(close[1], high) + min(close[1], low)) / 2, ema1) highest_ema = ema(highest(ema_sr, 3), ema2) lowest_ema = ema(lowest(ema_sr, 3), ema2) k1 = ema_sr > highest_ema k2 = ema_sr < lowest_ema ema_ysl = iff(k1, lowest_ema, highest_ema) longCondition = crossover(ema_ysl, ema_sr) if (longCondition) strategy.entry("Short", strategy.short) shortCondition = crossunder(ema_ysl, ema_sr) if (shortCondition) strategy.entry("Long", strategy.long)