戦略をフォローする量子トレンド

作者: リン・ハーンチャオチャン,日付: 2024-01-04 15:25:42
タグ:

img

概要

量子トレンドフォロー戦略 (Quant Trend Following Strategy) は,EMA線とATRストップロスをベースとしたトレンドトラッキング戦略である. EMA線を使用して市場全体のトレンド方向を判断し,動的にATRでストップロスを追跡し,トレンド利益をロックし,収益を最大化する.

原則

戦略は以下の主要な部分で構成されています.

  1. 主要トレンドを決定する EMA線

    13日,50日,100日間の線を使って,上昇/下落バイアスを形成し,主要なトレンド方向を判断します.

  2. ATR ダイナミックストップ損失

    ATR インディケーターを使用して,現在の期間の価格動き範囲を計算し,ストップ・ロスを設定して利益をロックします.

  3. 信号のスムーズ化

    誤ったシグナルを避けるため,SMAで一定の期間中の収束価格をスムーズに調整する.

  4. 上昇/下落シグナル

    価格がEMA線を超えるとロングで,下を横切るとショートで 動的ATRストップロスを設定します

利点分析

この戦略には以下の利点があります.

  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")


もっと