DAKELAX-XRPUSDT ボリンジャー・バンド 逆転戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月2日 16:18:34
タグ:

img

概要

DAKELAX-XRPUSDTは,BinanceでXRPUSDTの取引ボット戦略である.ボリンジャーバンドを使用した簡単な逆の戦略であり,2019年5月から8月までのH1タイムフレームでのバックテストおよびライブで良好なパフォーマンスを発揮している.

戦略の論理

この戦略は,まず20期間のSMAと上下ボリンジャーバンドを計算する.上部帯はSMA+1.5標準偏差,下部帯はSMA-2.2標準偏差である.その後,帯の収縮速度を計算する.収縮が>1.3である場合,帯は黒で満たされ,収縮が<0.1である場合,黄色で満たされ,他の場合は赤で満たされる.

閉じる価格が下帯を下回ると, 20コインでロングします.閉じる価格が上帯を下回ると,すべてのポジションを閉じる.

この戦略では,7期間のEMAの速いラインと18期間のEMAのスローラインを計算する.スローライン上の速いラインのクロスオーバーは購入信号であり,下のクロスオーバーは販売信号である.

利点分析

  • ボリンジャーバンドと収縮率は,傾向と変動を直感的に識別します.
  • EMAのクロスオーバーと組み合わせると信号が強くなります
  • バックテスト結果は良好で,ライブ取引では比較的安定している

リスク分析

  • 帯の収縮後の破裂時の失敗の高い確率
  • ポジションサイズ化リスクの過剰取引なしの固定額購入
  • 市場が多すぎる場合 損失を伴う
  • 日々の要因のみを考慮し,より大きな時間枠の傾向を見逃す

リスクを制御するために動的ポジションサイズまたはストップロスを検討する. 範囲の市場でウィップソーを避けるためにクロスオーバー戦略を最適化する. より大きな動きを特定するためにより高いタイムフレームトレンド指標を追加する.

オプティマイゼーションの方向性

  • 帯域幅に基づいて購入金額を調整する. 契約された場合,より少なく,拡張された場合,より多く.

  • 収縮が観測されても信号がまだ発信されていない場合,位置を蓄積することを検討します.

  • 全体の方向性を決定するために,より長いタイムフレームのトレンドインジケーターを追加し,不透明な場合は戦略を一時停止します.

  • リスクを制御するためにストップロスを組み込む. 最近の低水準の帯に設定することができます.

  • EMA 期間のようなクロスオーバーパラメータを最適化して 閉じ込められないようにする

概要

DAKELAX-XRPUSDTは,EMAクロスオーバーとボリンジャーバンド収縮を使用するトレードボット戦略である.直感的で,バックテスト結果は良好だが,いくつかのリスクが含まれている.これらのリスクはポジションサイズ化,ストップ戦略,ストップ損失を追加し,クロスオーバーロジックを最適化することによって軽減できる.全体的にはボリンジャーバンド戦略の明確な例を提供しているが,安定したライブ利益のためにペア特有の最適化が必要である.


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

//@version=3
//study(title="Tradebotler DAKELAX Binance:XRPUSDT Study-strategy", overlay=true)
strategy(title="Tradebotler DAKELAX Binance:XRPUSDT Strategy", overlay=true)

buyAmount = input(20, minval=1)

// SMA20
len2 = input(20, minval=1)
src2 = input(close)
out2 = sma(src2, len2)

// BB contraction value (medium tight)
contraction_value = 1.3
// BB contraction value (very tight)
contraction_value2 = 0.1

// 2xSTDEV BB calculation
dev = stdev(src2, len2)
upper_BB = out2  + 1.5*dev
lower_BB = out2  - 2.2*dev
x1 = plot(upper_BB, color=blue, linewidth = 2)
x2 = plot(lower_BB, color=blue, linewidth = 2)

contraction = (upper_BB-lower_BB)/out2

//fills the BBands according to the contraction value (threshold)

// Calculate values
fastMA  = ema(close, 7)
slowMA  = ema(close, 18)

// Determine alert setups
crossUp   = crossover(fastMA, slowMA)
crossDown = crossunder(fastMA, slowMA)

buySignal   = (crossUp or crossUp[1]) and (low > slowMA)
shortSignal = (crossDown or crossDown[1]) and (high < slowMA)

// Highlight alerts on the chart
bgColour =
     (buySignal and barstate.isrealtime) ? green :
     (shortSignal and barstate.isrealtime) ? red :
     na

signalBuy = (buySignal ) ? true : false
signalSell = (shortSignal ) ? true : false

test = true

test := not test[1]

closesBelowLowerBB = close < lower_BB
closesAboveUpperBB = close > upper_BB

tmptext = "blah"

// Plot values
plot(series=fastMA, color=teal)
plot(series=slowMA, color=orange)

plot(out2, color=black, linewidth = 1)
fill(x1, x2, color = contraction > contraction_value ? black : contraction < contraction_value2 ? yellow: red)

isInRed = contraction < contraction_value and contraction >= contraction_value2
isInYellow = contraction < contraction_value and contraction < contraction_value2

if ( closesBelowLowerBB )
    strategy.order('Buy', strategy.long, buyAmount)

if ( closesAboveUpperBB )
    strategy.close_all()



もっと