モメントオシレーター ボリンガーバンド RSI トレーディング戦略

作者: リン・ハーンチャオチャン,日付: 2023-09-18 14:07:51
タグ:

概要

この戦略は,ボリンジャーバンドと相対強度指数 (RSI) を組み合わせて価格変動を予測し,最適なエントリーポイントを決定します.論理は簡単です - 私たちはボリンジャー下帯に触れる閉値を見守ります.その後,2つのシナリオがあります:価格がボリンジャー下帯から反発するか,下落を続けます.価格の動きを確認するために,我々はトレンドをさらに調査するために,第2の指標であるRSIを使用します.例えば,価格がボリンジャー下帯に達するが,RSI値は過売り領域には入っていない場合,価格は引き続き下落すると結論付けることができます.RSI値は過売りであれば,このエリアをエントリーポイントとして使用できます.

ストップ・ロスは,RSIが過剰に売れた領域に長時間続く場合,過剰な資本損失を避けるために必要である.

最良のテイク・プロフィート領域は,価格がボリンジャー・ミドル・バンド/上部・バンドを超えて反転するか,RSIが過買いレベルに達する時,どちらが先に来るかです.

長いエントリー:

RSI < 30 と 閉じる価格 < ボリンガー・ダウンバンド

長い出口:

RSI > 70

戦略の論理

ストラテジーは,まずRSIインジケーターを計算し,オーバーバイト/オーバーセールレベルを決定するために上下境界を設定します.その後,ボリンジャー中間,上下帯を計算します.閉値が下帯に触れてRSIが30以下になると,ロングします.RSIが70以上になると,ポジションを閉じる.

ロングに入ると,ストップ・ロスを設定し,利益を取るポイントを設定します. 利益を取ることはエントリー価格で設定されます * (1 + 固定パーセント),ストップ・ロスはエントリー価格で設定されます * (1 - 固定パーセント).

RSIが低いときにボリンガー下帯で購入し,RSIが高いときに売却し,逆転から利益を得ることができます.ストップ損失と利益制御リスクを取ります.

利点分析

  • ボリンジャー・バンドは逆転点を正確に決定します
  • RSIは偽のブレイクをフィルタリングし,信頼性の高いエントリーを保証します
  • ストップ・ロスト・アンド・テイク・プロフィット 取引リスクを効果的に管理する
  • 広範なバックテストとパラメータ最適化は安定した収益性を保証します

リスク分析

  • ボリンジャー・バンドは逆転を完璧に予測できず,いくつかの失敗が起こります
  • RSI は 誤った 信号 も 与え ます
  • ストップ・ロスは,ポジションを保持できず,リスクが高くなります.

リスクは,ボリンジャーパラメータを調整し,他の指標を使用し,ストップロスを適切に拡大することで軽減できます.

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

  • KD,MACDなどの他の指標と組み合わせてエントリをフィルタリングすることを検討します
  • ストップ・ロスト/テイク・プロフィートの割合を動的に調整する
  • ボリンガーパラメータを最適化
  • 異なる製品における耐久性試験

結論

この戦略の全体的なリスク/報酬プロファイルはバランスよく,バックテスト結果は良好である.パラメータ最適化と指標の強化によりさらなる改善が可能である.ボリンジャーバンドに基づく逆転取引コンセプトは単純で信頼性があり,さらなる研究と精製を保証する.

[/トランス]


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bollinger Band with RSI", shorttitle="BB&RSI", format=format.price, precision=2, pyramiding=50, initial_capital=10000, calc_on_order_fills=false, calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=1000, currency="USD")
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(70, "Upper Band", color=#C0C0C0)
band0 = hline(30, "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 < 30 and src < lower
exit_long = rsi > 70

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)


もっと