モメントブレイク戦略

作者: リン・ハーンチャオチャン開催日:2023年11月14日 11:19:05
タグ:

img

概要

この戦略は,シグナルを決定するために,ATR指標とEMA線と組み合わせたボリンジャーバンドを使用する.価格はボリンジャー上部帯を突破してEMA線を急速に越えると購入信号を生成する.価格はボリンジャー下部帯を突破してEMA線を下回ると迅速に売り信号を生成する.ATR指標はストップロスを設定するために使用される.

戦略の論理

  1. Bollinger 中間線,上部帯,下部帯を計算します. 中間線は n 期 SMA,上部帯は中間線 + mn 期間の標準偏差,下帯は中間線 - mn 期間の標準偏差

  2. ストップロスを追跡するためのATRインジケーターを計算する.

  3. 価格の動向を決定するために 1 期間の EMA と n 期間の EMA を計算します.

  4. 価格がボリンガー上帯とEMA線を急速に越えると,買い信号が生成されます.

  5. 価格がボリンガー下帯とEMA線を下回ると 売り信号が生成されます

  6. ATRインジケーターはストップ・ロストポイントを設定し 価格のブレイク方向を追跡し 罠にはまらないようにします

利点分析

  1. Bollinger Bands と ATR のストップロスはリスクを効果的にコントロールできます

  2. EMAの速い線と遅い線が 運動方向を決定し 誤ったブレイクを避けます

  3. 調整可能なパラメータは,異なる市場環境に適しています.

  4. 高い取引頻度で,短期取引に適した明確な買い/売る信号.

  5. ATRインジケーターは タイムリーにストップ・ロスを追跡します

リスク分析

  1. 狭いボリンジャー帯の範囲は,より騒々しい取引を引き起こす可能性があります.

  2. ATRパラメータが小さすぎると,ストップ・ロスは近づいてしまい,閉じ込められる可能性があります.

  3. EMAパラメータは,異なるサイクル効果のために調整する必要があります.

  4. 振動する市場は,より多くの取引を生む可能性があります,注意が必要です.

  5. ストップロスの追跡は 時には過度に攻撃的になり,損失拡大を引き起こすことがあります.

最適化

  1. 他の指標と組み合わせて,取引信号をフィルタリングします.例えば,過剰購入/過剰販売のRSI,分散のKDJなど.

  2. 価格変動に合わせて,ATRに基づくボリンジャーパラメータを動的に調整することを検討する.

  3. 最適なパラメータ組み合わせのために,異なるEMAサイクルパラメータをテストする.

  4. ATR パラメータを不安定性に基づいて 賢明に調整して 攻撃的なストップ損失を回避します

  5. 購入/売却のタイミングを決めるのに役立つディープラーニングモデルを組み込むことを検討する.

概要

この戦略は,価格ブレイクを捕捉するためにボリンジャーバンド,ストップ・ロスの範囲を設定するためにATR,短期の価格動向を効果的に捕捉できるブレイクを総合的に判断するためのモメント方向を決定するためのEMAを使用する明確な論理を持っています.包括的な判断のための複数の指標を組み合わせることで,信号品質が向上することができます.より多くの安定性と弾性のためにこの戦略をさらに精製するために,パラメータチューニング,インジケーター組み合わせなどを通じて最適化する余地があります.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

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

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
// plot(bbr, "Bollinger Bands %B", color=#26A69A)
// band1 = hline(1, "Overbought", color=#787B86, linestyle=hline.style_dashed)
// hline(0.5, "Middle Band", color=color.new(#787B86, 50))
// band0 = hline(0, "Oversold", color=#787B86, linestyle=hline.style_dashed)
// fill(band1, band0, color=color.rgb(38, 166, 154, 90), title="Background")








xATR  = atr(c)
nLoss = a * xATR




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)
emaFast   = ema(src,144)
emaSlow   = ema(src,576)
sma       =  sma(src, c)

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

smaabove = crossover(src, sma)
smabelow = crossover(sma, src)


buy  = src > xATRTrailingStop and above and (bbr>20  or bbr<80)
sell = src < xATRTrailingStop and below  and  (bbr>20  or bbr<80)

// buy  = src > xATRTrailingStop 
// sell = src < xATRTrailingStop 


barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

// plot(emaFast , color = color.rgb(243, 206, 127), title="emaFast")

plot(xATRTrailingStop, color = color.rgb(233, 233, 232), title="xATRTrailingStop")

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)


// plotshape(buy,  title = "Sell",  text = 'Sell',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
// plotshape(sell, title = "buy", text = 'buy', 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)

// strategy.entry("short",   false, when = buy)
// strategy.entry("long ", true, when = sell)


strategy.entry("long",   true, when = buy)
strategy.entry("short ", false, when = sell)

もっと