Количественный тренд после стратегии

Автор:Чао Чжан, Дата: 2024-01-04 15:25:42
Тэги:

img

Обзор

Стратегия Quant Trend Following - это стратегия отслеживания тренда, основанная на линиях EMA и ATR стоп-лосс.

Принципы

Стратегия состоит из следующих основных частей:

  1. Линии EMA для определения первичной тенденции

    Используйте 13-дневные, 50-дневные и 100-дневные линии для формирования бычьего/медвежьего предвзятости и оценки основного направления тренда.

  2. Динамическая потеря остановки ATR

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

  3. Сглаживание сигнала

    Плавные цены закрытия в течение определенного периода с SMA, чтобы избежать ложных сигналов.

  4. Сигналы бычьего/медвежьего тренда

    Пройдите длинный, когда цена пересекает линии EMA, и короткий, когда пересекает ниже.

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

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

  1. Отличный контроль нагрузки, максимальное снижение на 160%.
  2. Динамическая стоп-лосс умнее, чем фиксированная, может зафиксировать больше прибыли от тренда.
  3. Использование EMA для определения первичной тенденции позволяет избежать реверсионных сделок.
  4. Гладкие полоски фильтруют ложные сигналы и повышают процент побед.

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

Существуют также некоторые риски:

  1. Статические параметры могут не соответствовать различным продуктам, необходима оптимизация.
  2. Стоп-лосс может отсутствовать на различных рынках.
  3. Требует стабильности сервера, чтобы избежать отсутствия сигналов.

Эти риски могут быть уменьшены путем оптимизации параметров, тестирования адаптивности и т.д.

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

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

  1. Автоматическая оптимизация параметров с помощью алгоритмов машинного обучения.
  2. Добавить адаптивную стоп-лосс на основе рыночных условий.
  3. Увеличьте фильтры для повышения стабильности.
  4. Подумайте о кросс-продуктных испытаниях для улучшения адаптивности.

Заключения

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


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Combined Strategy", overlay=true)

// Input variables for EMA Crossover
ema13_length = input(13, title="EMA 13 Length")
ema50_length = input(50, title="EMA 50 Length")
ema100_length = input(100, title="EMA 100 Length")
ema200_length = input(200, title="EMA 200 Length")

// Calculate EMAs for EMA Crossover
ema13 = ema(close, ema13_length)
ema50 = ema(close, ema50_length)
ema100 = ema(close, ema100_length)
ema200 = ema(close, ema200_length)

// Plot EMAs for EMA Crossover
plot(ema13, color=color.blue, title="EMA 13")
plot(ema50, color=color.orange, title="EMA 50")
plot(ema100, color=color.green, title="EMA 100")
plot(ema200, color=color.red, title="EMA 200")

// Input variables for LinReg Candles
signal_length = input(title="Signal Smoothing", type=input.integer, minval=1, maxval=200, defval=11)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)

lin_reg = input(title="Lin Reg", type=input.bool, defval=true)
linreg_length = input(title="Linear Regression Length", type=input.integer, minval=1, maxval=200, defval=11)

// Calculate LinReg Candles
bopen = lin_reg ? linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? linreg(high, linreg_length, 0) : high
blow = lin_reg ? linreg(low, linreg_length, 0) : low
bclose = lin_reg ? linreg(close, linreg_length, 0) : close

r = bopen < bclose

signal = sma_signal ? sma(bclose, signal_length) : ema(bclose, signal_length)

plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable=true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable=true)

plot(signal, color=color.white)

// Input variables for UT Bot Alerts
a = input(1, title="Key Value. 'This changes the sensitivity'")
c = input(10, title="ATR Period")
h = input(false, title="Signals from Heikin Ashi Candles")

// Calculate UT Bot Alerts
xATR = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))

pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

strategy.entry("Buy", strategy.long, when=buy)
strategy.close("Buy", when=sell)
strategy.entry("Sell", strategy.short, when=sell)
strategy.close("Sell", when=buy)

plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, transp=0, size=size.tiny)

barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

alertcondition(buy, "UT Long", "UT Long")
alertcondition(sell, "UT Short", "UT Short")


Больше