マルチフィルターボリンガーバンド取引戦略は,条件を満たしたときに多条件スクリーニングのためにボリンガーバンド指標,移動平均指標,RSI指標およびK線グラフィック機能を組み合わせ,取引信号を生成する定量的な取引戦略である.これは,中期から長期間の価格傾向の変動を捕捉することによって利益を得る典型的なトレンドフォロー戦略である.
この戦略は主に3つの指標を使用する.ボリンジャーバンド,移動平均線,RSI.それらのうちの,ボリンジャーバンドの中央線は,価格のn日間の単純な移動平均線であり,上下線は,それぞれ中間線 +2標準偏差,中間線 -2標準偏差である.RSIインジケーターは,一定の期間における上昇/減少範囲に基づいて計算される0〜100の値である.
この戦略は,次の3つの主要条件によって取引信号を生成します.
(1) ボリンガー下帯ブレイク&K線ボディ矛盾.閉じる価格が下帯を上向きに突破し,K線ボディの色が現在のトレンド方向に矛盾すると,ロングする.
(2) ボリンガー上帯ブレイク&K線ボディ矛盾. 閉じる価格が上帯を下向きに突破し,K線ボディの色が現在のトレンド方向に矛盾すると,ショートに行く.
(3) K線体逆転.位置方向がK線体色逆転と一致する場合は,位置を閉じます.
さらに,戦略は移動平均フィルター,K線ボディフィルター,RSIフィルター,その他の補助条件を厳格に制御するために設定しています.
リスクはボリンガーパラメータを調整し ストップを厳格に制御することで 軽減できます
概して,この戦略は典型的な中長期トレンドフォロー戦略である.多条件スクリーニングとトレンドトレードアプローチでエントリーと出口タイミングを厳格に制御することで,不必要な取引を削減し,中長期市場トレンドを把握することができる.パラメータを調整し,より多くの補助ツールを追加し,戦略の安定性と収益性をさらに高めるために,この戦略を最適化するにはまだ大きな余地がある.
/*backtest start: 2023-12-17 00:00:00 end: 2024-01-16 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true ) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(false, defval = false, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") usebf = input(true, defval = true, title = "Use body-filter") usecf = input(true, defval = true, title = "Use color-filter") userf = input(true, defval = true, title = "Use RSI-filter") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebf == false //Color filter bar = close > open ? 1 : close < open ? -1 : 0 gb = bar == 1 or usecf == false rb = bar == -1 or usecf == false //RSI Filter fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) ursi = rsi > 70 or userf == false drsi = rsi < 30 or userf == false //Signals up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0) dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0) exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()