定量的追跡強気相場戦略


作成日: 2024-01-04 15:25:42 最終変更日: 2024-01-04 15:25:42
コピー: 0 クリック数: 572
1
フォロー
1621
フォロワー

定量的追跡強気相場戦略

概要

量的な追跡牛市戦略は,EMA平均線とATRストップに基づいてトレンド追跡戦略である.それはEMA平均線を使用して大トレンドの方向を判断し,ATR動的追跡ストップを使用してトレンドの利得をロックし,利益を最大化する.

戦略原則

この戦略は以下の部分から構成されています.

  1. EMAの平均線は 主なトレンドを判断している.

13日線,50日線,100日線を多空の視点として使用し,主要トレンドの方向を判断する.

  1. ATRの動態停止

ATR指数は,この周期中の価格変動範囲を計算して,ストップ・ロスを実現するために,ストップ・ロスを設定します.

  1. 信号が滑らか

K線閉盤価格に一定の周期のSMA平滑を行い,誤信号を回避する.

  1. 多空信号

価格がEMA平均線を越える時,多めに,EMA平均線を越える時,空いてください. そしてATR動的トラッキングストップを設定してください.

優位分析

この戦略の利点は以下の通りです.

  1. 回収制御は優れ,最大回収は160%以内で制御できる.
  2. ストップトラッキングは固定ストップよりもスマートで,より多くのトレンドをロックして利益を得ることができます.
  3. EMAは,主要トレンドの方向を判断し,逆操作を避けるために使用します.
  4. 滑らかなK線で,偽信号をフィルタリングして,勝利率を上げます.

リスク分析

この戦略にはリスクもあります.

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