Bollinger Bands フィボナッチリトレースメント取引戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-27 16:52:05
タグ:

概要

この戦略は,ボリンジャーバンドを使用して価格チャネルを特定し,アルゴリズム取引のためのフィボナッチリトレースメント比に基づいてサポート/レジスタンスレベルを決定する.ボリンジャーバンドのブレイクを検出し,リトレースメントレベルを追跡し,高確率のプルバックゾーンの周りにロング/ショートポジションを入力する.

戦略の論理

  1. Bollinger Bands の中間,上部,下部帯を計算する

    • 中間帯はSMA,上下帯はSMA +/- ATRの倍数

    • ボリンジャー・バンドは市場の変動によって拡大・縮小する

  2. 比率に基づいてフィボナッチリトレースメントレベルを計算する

    • 引き戻し比はATR*フィボナッチ比の倍数である

    • 複数のFibレベルは,中間帯に基づいて計算されます.

  3. Bollinger Bands の値の突破を監視する

    • 価格が上位帯を突破したとき,ロングに行くことを検討します.

    • 価格が低値を下回るとショートに行くことを検討します

  4. Fib リトラセインメントゾーンの周辺にSL/TPを設定する

    • 価格がFibゾーンに戻ると取引を入力します.

    • ゾーンの反対側でストップ・ロスを設定し,利益を取ります.

利点分析

  • ボリンジャー・バンドは市場変動の範囲と傾向を明確に示します

  • フィボナッチ比率は主要なサポートとレジスタンスのレベルを把握します

  • インディケーターを組み合わせることで アルゴリズムの取引が可能になります

  • 追いかけるのを避けるために成功の確率を増加します

  • 調整可能なパラメータは,異なる期間と製品に適応

リスク分析

  • ボリンジャー・バンドのブレイクは誤った信号かもしれない

  • 価格がFibレベルに戻る時期を正確に予測するのは難しい

  • 誤ったストップ・ロスは損失を増やす可能性があります

  • 戦略に影響する 引き下げの大きさが不十分か過大か

  • 効果のないパラメータや継続的な市場傾向が戦略を無効にすること

  • ボリンジャー帯の論理を強化し 容量,動的ゾーン調整などを考えます

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

  • より良いトレンドとS/R判断のためにボリンジャーバンドのパラメータを最適化

  • ブレイクシグナルを検証するために音量指標を追加します.

  • 機械学習を活用して 引き戻し確率を予測する

  • 信号検証のためのより多くの技術指標を組み込む

  • 製品特性と取引セッションに基づいて合理的なパラメータを選択する

  • 波動性の変化に合わせて,リトルバックゾーンの強さを適時に調整する

結論

この戦略は,ボリンジャーバンドとフィボナッチリトレースの強みを組み合わせて,トレンドを特定し,高い確率のプルバックレベルに入ることができます. リスクはパラメータ最適化,追加の信号検証,動的ゾーン調整などによって軽減され,結果が向上できます. 容量,機械学習モデルなどを組み込むことで拡大する余地があります. 戦略は継続的な最適化によってさらに精製することができます.


/*backtest
start: 2023-08-27 00:00:00
end: 2023-09-26 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle="BBands Fibo", title="Bollinger Bands Fibonacci Ratios", overlay=true)

length      =   input(20, minval=1, type=input.integer, title="Length")
src         =   input(close, title="Source")
offset      =   input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
fibo1       =   input(defval=1.618, title="Fibonacci Ratio 1")
fibo2       =   input(defval=2.618, title="Fibonacci Ratio 2")
fibo3       =   input(defval=4.236, title="Fibonacci Ratio 3")

fiboBuyReverse = input(false, title = "Use Reverse Buy?")
fiboBuy       =   input(options = ["Fibo 1", "Fibo 2", "Fibo 3"],defval = "Fibo 1", title="Fibonacci Buy")
fiboSellReverse = input(false, title = "Use Reverse Sell?")
fiboSell       =   input(options = ["Fibo 1", "Fibo 2", "Fibo 3"],defval = "Fibo 1", title="Fibonacci Sell")

sma = sma(src, length)
atr = atr(length)

ratio1 = atr * fibo1
ratio2 = atr * fibo2
ratio3 = atr * fibo3

upper3 = sma + ratio3
upper2 = sma + ratio2
upper1 = sma + ratio1

lower1 = sma - ratio1
lower2 = sma - ratio2
lower3 = sma - ratio3

plot(sma, style=0, title="Basis", color=color.orange, linewidth=2, offset = offset)

upp3 = plot(upper3, transp=90, title="Upper 3", color=color.teal, offset = offset)
upp2 = plot(upper2, transp=60, title="Upper 2", color=color.teal, offset = offset)
upp1 = plot(upper1, transp=30, title="Upper 1", color=color.teal, offset = offset)

low1 = plot(lower1, transp=30, title="Lower 1", color=color.teal, offset = offset)
low2 = plot(lower2, transp=60, title="Lower 2", color=color.teal, offset = offset)
low3 = plot(lower3, transp=90, title="Lower 3", color=color.teal, offset = offset)

fill(upp3, low3, title = "Background", color=color.new(color.teal, 95))

targetBuy = fiboBuy == "Fibo 1" ? upper1 : fiboBuy == "Fibo 2" ? upper2 : upper3
targetBuy := fiboBuyReverse == false ? targetBuy : fiboBuy == "Fibo 1" ? lower1 : fiboBuy == "Fibo 2" ? lower2 : lower3
buy = low < targetBuy and high > targetBuy

targetSell = fiboSell == "Fibo 1" ? lower1 : fiboSell == "Fibo 2" ? lower2 : lower3
targetSell := fiboSellReverse == false ? targetSell : fiboSell == "Fibo 1" ? upper1 : fiboSell == "Fibo 2" ? upper2 : upper3
sell = low < targetSell and high > targetSell

strategy.entry("Buy", true, when = buy)
strategy.entry("Sell", false, when = sell)


もっと