Bollinger Bands Breakout をベースにした FiboBuLL 波動戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-01 14:11:56
タグ:

img

概要

FiboBuLL Wave戦略は,私のスクリプトページの下で見つけることができるボリンジャー帯の研究のフィルターバージョンから改変されています. 価格は上部帯以上を閉ざしたとき,戦略は長くなって,価格が下部帯を下回ると短くなります.

ボリンジャーバンドは,20期間の単純な移動平均値と,中間帯から2標準偏差離れた上下帯のプロットを使用する古典的な指標である.これらのバンドは,価格が帯との関係性のある場所に基づいて価格変動と傾向を視覚化するのに役立ちます.

この戦略は,ボリューム/RSI/ファンドメンタルなど他のパラメータを考慮しないため,ユーザーは他の指標またはファンドメンタルからの確認に基づいて裁量権を使用する必要があります. 戦略の結果は,純粋にロングとショートトレードに基づいています.

価格が上/下/上部のバンドを閉じる後にバーが継続しているときに最もうまく機能します.この戦略またはボリンジャーバンドフィルターを他の指標と一緒に使用することは,BB圧縮または波動性に基づいてキャンドル閉じる際にバンドの破損/失敗を早期に把握するために確実に有益です.

この戦略は,トレンドを検出するためにハイキン・アシ・キャンドルで使用できますが,ハ・キャンドルは資産の実際の価格を反映していないため,取引エントリでは推奨されません.

戦略の論理

FiboBuLL Wave戦略のコアロジックは,ボリンジャーバンドのブレイクアウトに基づいて取引することです.ボリンジャーバンドは中帯,上帯,下帯から構成されています.中帯は閉値の21期間の単純な移動平均値です.上帯は,中帯の上方幅を反映する1標準偏差を加算して計算されます.下帯は,中帯下方幅を反映する1標準偏差を引いて導きます.

ロング・シグナルは,閉じる価格が上位帯を超えると生成される.ショート・シグナルは,閉じる価格が下位帯を超えるとトリガーされる.ロング・ショート・ポジションを取った後,価格が再び反対帯を超えると既存の取引が終了する.

この戦略は,上帯と下帯との関係で価格のブレイクを追跡するために,barssince関数を使用する.上帯ブレイク以降のバーの数が下帯ブレイク数よりも小さいとき,ロング信号が生成される.下帯ブレイク以降のバーの数が上帯ブレイク数よりも少ないとき,ショート信号がトリガーされる.

中間帯の期間と標準偏差倍数パラメータを調整することで,ボリンジャー帯のブレイクアウト感度が変更され,入力のタイミングを調整できます.

利点

FiboBuLL Wave 戦略にはいくつかの利点があります.

  1. シンプルな論理をベースにした BB 脱出,理解しやすい
  2. パラメータを調整することで,ブレイクアウト感度を制御することができます.
  3. BB帯は価格変動とトレンドを視覚化します
  4. 他の指標と組み合わせられ,精度が向上します
  5. 複数のタイムフレームに適用可能

リスク

また,FiboBuLL Wave戦略にはいくつかのリスクがあります.

  1. 誤った信号に敏感で,BBのブレイクにのみ頼る
  2. ブレイク後の勢いと期間を 特定できない
  3. 退場規則がない
  4. ストップロスのない高リスク

この最適化は次の側面で行うことができます.

  1. 偽信号を避けるために他の指標を使用してフィルターを追加します.
  2. 過去データに基づくパラメータを最適化
  3. 最大損失を制限するためにストップ損失を設定する
  4. 持続性を決定するために逆転因子を追加することを検討します

増進 の 機会

FiboBuLL Wave 戦略の主な最適化方向:

  1. A/D線など,弱度のブレイクを避けるため,ボリュームインジケーターを追加します.
  2. 精度を高めるため,過剰購入/過剰販売指標 (RSI) を組み合わせる.
  3. バックテスト結果に基づいて周期と偏差倍数のようなパラメータを最適化
  4. リスクをコントロールし,利益をロックするためにストップ・ロスを設定し,利益を取ります
  5. 傾向と逆転フィルタを考慮して方向性持続を決定する
  6. 異なる製品と時間枠で最適なパラメータをテストする

上記の改善により,FiboBuLL Wave戦略の安定性と収益性が大幅に向上できます.

概要

FiboBuLL Wave戦略は,価格変動を追跡するために,ブレイクアウトと中間帯へのリバースを特定するボリンジャー帯の基本原理を利用する.そのシンプルなコンセプトと広範な適用性により,市場の変動を測定する効果的なアプローチとして機能する.

しかし,ブレイクアウトだけに頼ることは,誤った信号やウイプソーを生む傾向があります.したがって,ブレイクアウトの信頼性を決定するために,ボリューム,トレンド,指標などを使用する確認を組み込む必要があります.

FiboBuLL Wave戦略は,価格アクションに基づいた取引の設計のための基本的な枠組みを提供します. 継続的な最適化と追加の要因の統合により,取引決定の策定において強力なツールになる可能性があります.


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

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave (A version of Bollinger Bands Breakout Strategy By Trade Chartist)', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title='Source')
length = input.int(21, minval=1, title='SMA length')  // 20 for classis Bollinger Bands SMA line (basis)


mult = input.float(1., minval=0.236, maxval=2, title='Standard Deviation')  //2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)

Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
CC = input(true, 'Color Bars')

upper = basis + dev
lower = basis - dev

//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.

short = src < lower  // and rsi(close,14)<40
long = src > upper  // and rsi(close,14)>60

L1 = ta.barssince(long)
S1 = ta.barssince(short)

longSignal = L1 < S1 and not (L1 < S1)[1]
shortSignal = S1 < L1 and not (S1 < L1)[1]

//Plots and Fills


////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)  

// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)  


p1 = plot(upper, color=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, title='Lower Band')

p = plot(basis, color=L1 < S1 ? #008000 : S1 < L1 ? #ff0000 : na, linewidth=2, editable=false, title='Basis')

fill(p, p1, color=color.new(color.teal, 85), title='Top Fill')  //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85)  //fill for basis-lower

//Barcolor

bcol = src > upper ? color.new(#8ceb07, 0) : src < lower ? color.new(#ff0000, 0) : src > basis ? color.green : src < basis ? color.red : na

barcolor(CC ? bcol : na, editable=false, title='Color Bars')


// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>
    time >= start and time <= finish ? true : false

if window() and (Show == 'Longs Only' or Show == 'Both')
    strategy.entry('AL', direction=strategy.long, when=longSignal)
    strategy.close('LongAL', when=shortSignal, comment='AL KAPA')

if window() and (Show == 'Shorts Only' or Show == 'Both')
    strategy.entry('SAT', direction=strategy.short, when=shortSignal)
    strategy.close('SAT', when=longSignal, comment='SAT KAPA')




















もっと