Эта стратегия использует перекресток двойных скользящих средних в качестве торговых сигналов в сочетании с остановками ATR для тренда после торговли.
Стратегия в основном использует два набора скользящих средних для определения направления тренда. Быстрая скользящая средняя имеет длину 25 дней, а медленная скользящая средняя имеет длину 100 дней. Сигнал покупки генерируется, когда быстрый MA пересекает верхнюю часть медленного MA, а сигнал продажи генерируется при пересечении ниже.
Для фильтрации некоторых ложных сигналов стратегия добавляет счетчик кроссовера, называемый crossCount. Сигналы запускаются только тогда, когда количество перекрестков для быстрого MA в период обратного просмотра (по умолчанию 25 дней) меньше maxNoCross (по умолчанию 10).
Кроме того, стратегия имеет механизм подтверждения, при котором сигнал также подтверждается, если цена вновь входит между двумя скользящими средними после первоначального сигнала.
После входа в позиции стратегия использует ATR для установки уровней стоп-лосса. ATR измеряет диапазон колебаний цен в течение определенного периода, и здесь его 14x используется в качестве стоп-расстояния. Уровень стоп-лосса плавает в соответствии с движением цены.
Стратегия имеет следующие преимущества:
Используя двойные перекрестки MA с фильтрацией, он может эффективно улавливать сильные движения тренда, избегая ложных сигналов.
Механизм подтверждения предотвращает фальсификацию ложными утечками.
Плавающий режим ATR для остановки убытков помогает максимизировать прибыль, ограничивая прибыль.
Он имеет несколько оптимизируемых параметров и легко внедряется.
Применяется на всех рынках, включая крипто и традиционные активы.
Сочетает в себе несколько технических показателей прочности.
К основным рискам стратегии относятся:
Частые пересечения MA в пределах диапазона могут привести к множественным потерям.
Неправильное настройка параметров ATR может привести к тому, что остановки будут слишком широкими или слишком плоскими.
Большие пробелы могут напрямую привести к остановке.
Крупные новостные события, вызывающие огромную волатильность, также могут остановить позиции.
Недостаточные параметры MA могут привести к отсутствию тенденций или слишком большому количеству ложных сигналов.
Недавнее движение цен может сделать остановки ATR устаревшими.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Оптимизировать параметры MA для поиска лучших комбинаций, тестируя различные периоды и средневзвешенные значения.
Испытайте различные периоды ATR, чтобы найти лучшее расстояние остановки.
Добавьте дополнительные фильтры, такие как пики объема, индикаторы волатильности для улучшения качества сигнала.
Включите показатели тренда, чтобы избежать сбоев на нестабильных рынках.
Добавьте алгоритмы машинного обучения для автоматической оптимизации параметров через обратное тестирование.
Ищите больше подтверждений в более короткие сроки, чтобы избежать короткого шума.
Внедрять правила поэтапного получения прибыли, чтобы выйти из прибыльных позиций.
Эта стратегия сочетает в себе двойные пересечения MA, фильтрацию тренда, подтверждение и динамические остановки ATR для надежного следования тренду.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("QuantCat Intraday Strategy (15M)", overlay=true) //MA's for basic signals, can experiment with these values fastEMA = sma(close, 25) slowEMA = sma(close, 100) //Parameters for validation of position lookback_value = 25 maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets //Amount of crosses on MA to filter out noise ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0 ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results crossCount = (ema25_crossover_sum <= maxNoCross) //Entries long agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false //Entries short agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false //ATR atrLkb = input(14, minval=1, title='ATR Stop Period') atrRes = input("15", title='ATR Resolution') atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb)) //Strategy longCondition = ((agrLong or consLong) == true) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ((agrShort or consShort) == true) if (shortCondition) strategy.entry("Short", strategy.short) //Stop multiplier stopMult = 4 //horizontal stoplosses longStop = na longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] shortStop = na shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1] //Strategy exit functions strategy.exit("Long ATR Stop", "Long", stop=longStop) strategy.exit("Short ATR Stop", "Short", stop=shortStop) //Plots redgreen = (fastEMA > slowEMA) ? green : red p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) fill(p1, p2, color=redgreen) s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop') s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop') fill(p2, s1, color=red, transp=95) fill(p2, s2, color=red, transp=95)