Стратегия двойного отслеживания тенденций с перекрестным использованием EMA

Автор:Чао Чжан, Дата: 2024-02-29 11:45:42
Тэги:

img

Обзор

Стратегия Dual EMA Crossover Trend Tracking является количественной торговой стратегией, которая использует двойные индикаторы EMA для определения направления ценовой тенденции. Эта стратегия рассчитывает два индикатора EMA с различными параметрами и сочетает в себе сигналы золотого креста и мертвого креста для оценки ценовой тенденции.

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

Основными показателями этой стратегии являются два набора EMA, включая более длинный цикл EMA1 и более короткий цикл EMA2. Параметр EMA1 составляет 21, а параметр EMA2 - 10. Стратегия рассчитывает эти две EMA на основе 4-часового цикла.

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

Чтобы отфильтровать ошибочные сигналы, стратегия устанавливает два набора индикаторов золотого креста и мертвого креста. Сигналы запускаются только тогда, когда оба набора индикаторов дают один и тот же сигнал, что может эффективно уменьшить ошибки, вызванные колебаниями цен.

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

  • Двойная структура EMA может эффективно отслеживать изменения краткосрочных и среднесрочных тенденций для определения тенденций.

  • Дополнительная фильтрация двух наборов индикаторов "золотой крест" и "мертвый крест" может уменьшить количество ошибочных сигналов и избежать ненужных сделок, вызванных колебаниями цен.

  • Использование четырехчасовых уровней для расчета показателей позволяет справиться с высокочастотными колебаниями цен.

  • Структура стратегии проста и понятна, легко понятна и реализована и подходит для применения в количественной торговле.

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

  • Двойная структура EMA менее эффективна в оценке рынков консолидации.

  • 4-часовые показатели уровня не достаточно чувствительны для реагирования на внезапные события.

  • Стратегия основана исключительно на технических показателях без объединения фундаментального анализа.

Эти риски можно контролировать:

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

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

  3. Соотносить изменения в экономической среде, политике и основных показателях компании для динамической корректировки параметров.

Оптимизация

Стратегия может быть дополнительно оптимизирована:

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

  2. Добавьте механизмы остановки потерь. Разумные точки остановки потерь могут эффективно контролировать единичные потери.

  3. Динамическая оптимизация параметров. Параметры EMA могут быть автоматически оптимизированы на основе различных рыночных условий.

  4. Модели, такие как Tensorflow, могут быть обучены к классификации ценовых тенденций в режиме реального времени.

Заключение

Двойная стратегия отслеживания тренда EMA - это простая и практичная стратегия торговли трендом. Она использует двойные индикаторы EMA для определения краткосрочных и среднесрочных ценовых тенденций с целью поглощения направленных рыночных возможностей. В то же время, объединение двух наборов индикаторов фильтрации золотого креста и мертвого креста может уменьшить ошибочные сделки. Стратегия имеет простую структуру и проста в реализации, что делает ее подходящей для количественных торговых приложений. Благодаря постоянной оптимизации и улучшению она имеет потенциал для дальнейшего расширения преимуществ стратегии и повышения стабильной прибыльности.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin  ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)


mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)

last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)

last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0

condlongx =   in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx =  in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)




if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0    
    strategy.close("Long",when = not Margin)
    
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when = Margin)

Больше