Стратегия двойной кроссоверной торговли скользящими средними

Автор:Чао Чжан, Дата: 2023-11-02 14:21:24
Тэги:

img

Обзор

Эта стратегия использует перекресток двойных скользящих средних в качестве торговых сигналов в сочетании с остановками ATR для тренда после торговли.

Логика стратегии

Стратегия в основном использует два набора скользящих средних для определения направления тренда. Быстрая скользящая средняя имеет длину 25 дней, а медленная скользящая средняя имеет длину 100 дней. Сигнал покупки генерируется, когда быстрый MA пересекает верхнюю часть медленного MA, а сигнал продажи генерируется при пересечении ниже.

Для фильтрации некоторых ложных сигналов стратегия добавляет счетчик кроссовера, называемый crossCount. Сигналы запускаются только тогда, когда количество перекрестков для быстрого MA в период обратного просмотра (по умолчанию 25 дней) меньше maxNoCross (по умолчанию 10).

Кроме того, стратегия имеет механизм подтверждения, при котором сигнал также подтверждается, если цена вновь входит между двумя скользящими средними после первоначального сигнала.

После входа в позиции стратегия использует ATR для установки уровней стоп-лосса. ATR измеряет диапазон колебаний цен в течение определенного периода, и здесь его 14x используется в качестве стоп-расстояния. Уровень стоп-лосса плавает в соответствии с движением цены.

Анализ преимуществ

Стратегия имеет следующие преимущества:

  1. Используя двойные перекрестки MA с фильтрацией, он может эффективно улавливать сильные движения тренда, избегая ложных сигналов.

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

  3. Плавающий режим ATR для остановки убытков помогает максимизировать прибыль, ограничивая прибыль.

  4. Он имеет несколько оптимизируемых параметров и легко внедряется.

  5. Применяется на всех рынках, включая крипто и традиционные активы.

  6. Сочетает в себе несколько технических показателей прочности.

Анализ рисков

К основным рискам стратегии относятся:

  1. Частые пересечения MA в пределах диапазона могут привести к множественным потерям.

  2. Неправильное настройка параметров ATR может привести к тому, что остановки будут слишком широкими или слишком плоскими.

  3. Большие пробелы могут напрямую привести к остановке.

  4. Крупные новостные события, вызывающие огромную волатильность, также могут остановить позиции.

  5. Недостаточные параметры MA могут привести к отсутствию тенденций или слишком большому количеству ложных сигналов.

  6. Недавнее движение цен может сделать остановки ATR устаревшими.

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. Оптимизировать параметры MA для поиска лучших комбинаций, тестируя различные периоды и средневзвешенные значения.

  2. Испытайте различные периоды ATR, чтобы найти лучшее расстояние остановки.

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

  4. Включите показатели тренда, чтобы избежать сбоев на нестабильных рынках.

  5. Добавьте алгоритмы машинного обучения для автоматической оптимизации параметров через обратное тестирование.

  6. Ищите больше подтверждений в более короткие сроки, чтобы избежать короткого шума.

  7. Внедрять правила поэтапного получения прибыли, чтобы выйти из прибыльных позиций.

Резюме

Эта стратегия сочетает в себе двойные пересечения 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)





    




Больше