この戦略は,アレクスグローバーによって開発されたリキュリブバンド指標に基づいたトレンドフォローとブレイクアウト戦略である.低周波でも高品質のエントリー信号を達成するために,誤ったブレイクアウトをフィルタリングするためにモメント条件と組み合わせて,価格動向と主要なサポート/レジスタンスレベルを決定するためにリキュリブバンド指標を使用する.
リキュルシブ・バンド指標は,上部帯,下部帯,中部線で構成され,以下のように計算されます.
上部帯 = 最大 ((前行
ここで n はスケーリング係数であり,波動性は ATR,標準偏差,平均真域または特別な RFV 方法から選択することができます.長度パラメータは感度を制御し,より大きな値は指標がより頻繁に起動しないようにします.
この戦略では,まず,下帯と上帯が同じ方向に動いているかどうかを確認し,偽のブレイクを避ける.
価格が下帯を下回ると,ロングで 上帯を下回るとショートで
さらに,ストップ・ロスの論理も実装されています.
この戦略の利点は次のとおりです.
この戦略にはいくつかのリスクもあります:
これらのリスクは,パラメータの最適化,ストップ損失の実施,滑り値の上昇などによって管理できます.
戦略をさらに最適化するためのいくつかの方向性:
概要すると,これは非常に実用的で効率的なトレンドフォロー戦略である.計算効率のための再帰的フレームワークを組み合わせ,主要なトレンドを決定するためにトレンドサポート/レジスタンスを使用し,偽のブレイクをフィルターし,信号品質を確保するためにモメント条件を追加する.適切なパラメータチューニングとリスク制御により,良い結果を達成することができます.より複雑な市場体制に適応するためにさらなる研究と最適化に値します.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 // Original indicator by alexgrover strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000) length = input.int(260, step=10, title='Length') src = input(close, title='Source') method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method') bandDirectionCheck = input.bool(true, title='Bands Hold Direction') lookback = input(3) //---- atr = ta.atr(length) stdev = ta.stdev(src, length) ahlr = ta.sma(high - low, length) rfv = 0. rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1] //----- f(a, b, c) => method == a ? b : c v(x) => f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x)))) //---- sc = 2 / (length + 1) a = 0. a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src))) b = 0. b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src))) c = (a+b)/2 // Colors beColor = #675F76 buColor = #a472ff // Plots pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band') pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band') pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band') fill(pC, pA, color=color.new(beColor,90)) fill(pC, pB, color=color.new(buColor,90)) // Band keeping direction // By Adulari longc = 0 shortc = 0 for i = 0 to lookback-1 if b[i] > b[i+1] longc:=longc+1 if a[i] < a[i+1] shortc:=shortc+1 bhdLong = if bandDirectionCheck longc==lookback else true bhdShort = if bandDirectionCheck shortc==lookback else true // Strategy if b>=low and bhdLong strategy.entry(id='Long',direction=strategy.long) if high>=a and bhdShort strategy.entry(id='Short',direction=strategy.short) // TP at middle line //if low<=c and strategy.position_size<0 and strategy.position_avg_price>close //strategy.exit(id="Short",limit=close) //if high>=c and strategy.position_size>0 and strategy.position_avg_price<close //strategy.exit(id="Long",limit=close)