ボリンジャーバンドとRSIに基づくロングスイングトレード戦略


作成日: 2024-03-11 11:51:22 最終変更日: 2024-03-11 11:51:22
コピー: 0 クリック数: 698
1
フォロー
1617
フォロワー

ボリンジャーバンドとRSIに基づくロングスイングトレード戦略

概要

この戦略は,ブルイン帯 ((Bollinger Band)) と相対的に強い指数 ((RSI)) の2つの技術指標に基づいており,上昇傾向で多頭振動取引を行う.戦略の論理はシンプルですが,有効です. 価格がブルイン帯を下回り,RSIが35を下回ったときに多頭開く.

戦略原則

  1. RSIを計算する:RMA ((Relative Moving Average) を使用して,価格の上昇と下落の平均幅をそれぞれ計算し,その後,上昇幅を合計幅で割ってRSIを得る.RSIは,一定の期間における価格の強さを反映する.

  2. ブリン帯を計算する:SMA ((Simple Moving Average)) を用いて価格平均線を計算し,加減標準差を上下軌道に出す. ブリン帯は価格を動的に反映できる波動範囲である.

  3. 超売れ:価格がブリン帯下線に下落し,RSIが35未満であるとき,超売れと判断され,その時に超売れとする.この2つの条件は,上向きの逆転のタイミングを捉える.

  4. ピン多:RSIが69を突破すると,超買いと判断し,その時点で多頭ポジションを平らにして,利益をロックする.

  5. ストップ・ストップ・損失:開設後,ユーザが設定したパーセントに基づいてストップ・価格とストップ・損失を計算する. ストップ・価格またはストップ・損失価格に触れたときの平仓. これは,各取引のリスクとリターンを制御する.

優位分析

  1. ブリン帯は,価格の動きを客観的に反映する区間であり,価格の動きと同期して調整され,固定値の制限を受けません.

  2. RSIは,多空の力対比を直観的に反映し,また比較的客観的であり,しばしば過買過売を判断するために使用される.

  3. 上昇傾向で使用され,振動取引に適しています. ブリン帯下線と低RSIによる価格反発を捕捉し,高RSIによる時効平仓を有効に把握できます.

  4. ストップ・ストップ・ロスの設定は,戦略的リスクを制御し,投資家は自分のリスクの好みに合わせてパラメータを柔軟に設定することができます.

  5. 戦略の論理とコードは比較的単純で,理解しやすく,実行しやすく,反省効果は比較的安定している.

リスク分析

  1. ブリン帯とRSIは,波動的な状況では,取引信号を多く発信し,取引頻度が高く,手数料が高くなる可能性があります.

  2. RSIなどの単一の指標は,短期的な価格変動の影響を受けやすく,誤導的な信号を生成します. したがって,RSI信号は,価格の動きなどと組み合わせて分析することが最善です.

  3. ブリン帯とRSIのパラメータの選択は,戦略のパフォーマンスに大きく影響し,異なる市場と品種は異なるパラメータを必要とします. ユーザーは,特定の状況に応じて適切な調整を行う必要があります.

  4. 突発的な出来事などの異常な状況では,ブリン帯とRSIは失効する可能性がある.このとき,他の風力管理手段がなければ,戦略に大きな後退をもたらす可能性がある.

最適化の方向

  1. 移動平均などの他の技術指標をフィルターとして導入することを考えることができる.例えば,MAが多頭配列されたときにのみポジションを開くことで,信号の信頼性を高めることができる.

  2. RSIの上下値,ブリン帯のパラメータなどを最適化して,各品種,各周期で最適のパフォーマンスを示すパラメータの組み合わせを見つけることができます.

  3. 分析に基づいて前向きにテストし,模擬取引を行い,実況前に戦略の有効性と安定性を十分に検証することができる.

  4. ポジション管理,ダイナミック・ストップ・ストップ・損失などの方法により,戦略の撤回をさらに制御し,リスク調整後の収益を向上させることができる.

  5. この戦略は,ポートフォリオに組み込まれ,ポートフォリオの安定性を高めるために,単独ではなく,他の戦略と連携して使用することができます.

要約する

この記事では,ブリン帯とRSIの2つの技術指標に基づく多頭振動取引戦略を紹介する. この戦略は,上昇傾向にある波段の動きを捕捉するのに適している. 論理と実装は比較的簡単である. ブリン帯を下回線と低RSIで開いて,高RSIを平らにして,ストップ・ロスを設定している. この戦略の優点は,価格の波動範囲と多空力の対比を客観的に反映できるという点であり,リスクも比較的制御可能である. しかし,特定の使用では,取引頻度を制御し,より多くの指標のストップ・シグナル,良いパラメータの最適化,およびポジション管理などを行うことに注意する必要がある.

ストラテジーソースコード
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Bollinger Band with RSI", shorttitle="BB&RSI")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#8E1599)
band1 = hline(69, "Upper Band", color=#C0C0C0)
band0 = hline(31, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")

length_bb = input(20,title="BB Length", minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="BB StdDev")
basis = sma(src, length_bb)
dev = mult * stdev(src, length_bb)
upper = basis + dev
lower = basis - dev
offset = input(0, "BB Offset", type = input.integer, minval = -500, maxval = 500)


Plot_PnL = input(title="Plot Cummulative PnL", type=input.bool, defval=false)
Plot_Pos = input(title="Plot Current Position Size", type=input.bool, defval=false)

long_tp_inp = input(10, title='Long Take Profit %', step=0.1)/100
long_sl_inp = input(25, title='Long Stop Loss %', step=0.1)/100
// Take profit/stop loss
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)

entry_long = rsi < 35.58 and src < lower
exit_long = rsi > 69
 
plotshape(entry_long, style=shape.labelup, color=color.green,  location=location.bottom, text="L", textcolor=color.white, title="LONG_ORDER")
plotshape(exit_long, style=shape.labeldown, color=color.red,  location=location.top, text="S", textcolor=color.white, title="SHORT_ORDER")

strategy.entry("Long",true,when=entry_long)    
strategy.exit("TP/SL","Long", limit=long_take_level, stop=long_stop_level)
strategy.close("Long", when=exit_long, comment="Exit")
plot(Plot_PnL ? strategy.equity-strategy.initial_capital : na, title="PnL", color=color.red)
plot(Plot_Pos ? strategy.position_size : na, title="open_position", color=color.fuchsia)