量子トレンドフォロー戦略 (Quant Trend Following Strategy) は,EMA線とATRストップロスをベースとしたトレンドトラッキング戦略である. EMA線を使用して市場全体のトレンド方向を判断し,動的にATRでストップロスを追跡し,トレンド利益をロックし,収益を最大化する.
戦略は以下の主要な部分で構成されています.
主要トレンドを決定する EMA線
13日,50日,100日間の線を使って,上昇/下落バイアスを形成し,主要なトレンド方向を判断します.
ATR ダイナミックストップ損失
ATR インディケーターを使用して,現在の期間の価格動き範囲を計算し,ストップ・ロスを設定して利益をロックします.
信号のスムーズ化
誤ったシグナルを避けるため,SMAで一定の期間中の収束価格をスムーズに調整する.
上昇/下落シグナル
価格がEMA線を超えるとロングで,下を横切るとショートで 動的ATRストップロスを設定します
この戦略には以下の利点があります.
リスクもあります:
パラメータの最適化や適応性テストなどによって これらのリスクを軽減できます
戦略は以下の側面で最適化できます.
概要すると,これはトレンドフォローコンセプトに基づいて設計された量子戦略である.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")