
Эта стратегия использует перекрестку двойных движущихся средних в качестве торгового сигнала в сочетании с ATR-стоп-убытком для проведения трендовых сделок. Основная идея заключается в том, чтобы делать больше, когда пересекаете долгосрочную движущуюся среднюю на коротких движущихся средних, и делать пустое, когда пересекаете ее, и одновременно использовать ATR для установки стоп-убытков, динамически задерживающих остановки.
Эта стратегия использует две группы движущихся средних для определения направления тренда. Быстрое движущееся среднее длиной 25 дней и медленное движущееся среднее длиной 100 дней.
Чтобы отфильтровать некоторые ложные сигналы, в стратегию добавляется счетчик скрещивания crossCount. Сигнал будет запускаться только в том случае, если среднескоростное скольжение будет меньше, чем maxNoCross в течение 25 дней (по умолчанию 10 дней) в течение периода lookback.
Кроме того, в стратегию добавлен механизм подтверждения, то есть после того, как был выдан первоначальный сигнал, сигнал подтверждается, если цена вновь входит между двумя движущимися средними.
После входа в рынок стратегия использует показатель ATR для установления стоп-дистанции. ATR измеряет диапазон колебаний цены за определенный период времени. Здесь стоп-дистанция устанавливается в 14 раз больше ATR.
Эта стратегия имеет следующие преимущества:
Использование двойных скользящих средних в сочетании с механизмом перекрестного фильтрации позволяет эффективно отфильтровывать ложные сигналы и улавливать более сильные тенденции.
Дополнительные механизмы подтверждения, чтобы избежать ложных взломов.
Используя ATR, можно максимально закрепить прибыль и избежать чрезмерного вывода.
Удобство оптимизации имеет меньшее количество параметров и легко реализуется.
Применяется на различных рынках, включая цифровые валюты и традиционные базовые рынки.
Построение стратегии с использованием нескольких показателей в комплексе делает стратегию более устойчивой.
Основные риски этой стратегии:
Во время шок-облигации скользящие средние часто пересекаются, что может привести к многократным потерям.
Неправильная настройка параметров ATR может привести к тому, что остановка будет слишком свободной или слишком плотной.
Большие пробелы или разрывы могут привести к непосредственному срыву.
Внезапные крупные события могут привести к резким колебаниям цен, что может привести к непосредственному ущербу.
Неразумные параметры скользящих средних могут привести к пропуску тенденции или созданию слишком много ложных сигналов.
Недавние изменения в диапазоне ценовых колебаний могут привести к неприспособлению ATR к остановке.
Эта стратегия может быть улучшена в следующих аспектах:
Оптимизируйте параметры скользящих средних, чтобы найти более подходящие комбинации. Можно тестировать различные периодические параметры и взвешенные скользящие средние.
Тестируйте различные параметры цикла ATR, чтобы найти лучший стоп-расстояние.
Добавление дополнительных условий фильтрации, таких как увеличение объема сделки, индикатор колебаний и т. Д., Повышение качества сигнала.
В сочетании с трендовыми показателями, чтобы избежать попадания в ловушку во время шок.
Добавление алгоритмов машинного обучения для автоматической оптимизации пакетов параметров с помощью обучения историческим данным.
Найдите больше подтверждений в больших диаграммах, чтобы избежать ошибочного восприятия коротких линий.
Установление правил уменьшения позиции прибыли и постепенное блокирование прибыли.
Эта стратегия включает в себя использование множества технических показателей, таких как пересечение двойных движущихся средних, фильтрация тенденций, механизм подтверждения и динамический стоп 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)