Торговая стратегия с пересечением двух скользящих средних


Дата создания: 2023-11-02 14:21:24 Последнее изменение: 2023-11-02 14:21:24
Копировать: 0 Количество просмотров: 657
1
Подписаться
1617
Подписчики

Торговая стратегия с пересечением двух скользящих средних

Обзор

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

Стратегический принцип

Эта стратегия использует две группы движущихся средних для определения направления тренда. Быстрое движущееся среднее длиной 25 дней и медленное движущееся среднее длиной 100 дней.

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

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

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

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

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

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

  2. Дополнительные механизмы подтверждения, чтобы избежать ложных взломов.

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

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

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

  6. Построение стратегии с использованием нескольких показателей в комплексе делает стратегию более устойчивой.

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

Основные риски этой стратегии:

  1. Во время шок-облигации скользящие средние часто пересекаются, что может привести к многократным потерям.

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

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

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

  5. Неразумные параметры скользящих средних могут привести к пропуску тенденции или созданию слишком много ложных сигналов.

  6. Недавние изменения в диапазоне ценовых колебаний могут привести к неприспособлению ATR к остановке.

Направление оптимизации

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

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

  2. Тестируйте различные параметры цикла ATR, чтобы найти лучший стоп-расстояние.

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

  4. В сочетании с трендовыми показателями, чтобы избежать попадания в ловушку во время шок.

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

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

  7. Установление правил уменьшения позиции прибыли и постепенное блокирование прибыли.

Подвести итог

Эта стратегия включает в себя использование множества технических показателей, таких как пересечение двойных движущихся средних, фильтрация тенденций, механизм подтверждения и динамический стоп 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)