
RSI軸向均線交差戦略は,RSI指標とその単純な移動平均を計算し,両者の金叉死叉を観察して,入場出場を判断する.この戦略は,ブリン帯をRSI軸向均線に加えるサポート抵抗判断と組み合わせる.
この戦略は,まず14日RSIを計算し,次に8日RSIのシンプル移動平均を計算する. RSIが移動平均を上から突破すると,買入シグナルが生じる. RSIが移動平均を上から下へと突破すると,売出シグナルが生じる.
また,この戦略は,RSI軸向平均線にブリン帯を加えることを判定する.ブリン帯は,RSI軸向平均線が相対的に過度に混雑しているかどうかを判定するために,基準差を計算することで,高値を購入し,低値を売ることを避ける.
RSI軸向均線交差策は,トレンド指数RSIと曲線順位指数移動平均を組み合わせて,市場の傾向とランダム性を効果的に判断できます. RSI指数の算術平均は,価格変動が信号に影響を平衡するのに役立ちます.
この策略に組み込まれたブリン帯は,標準差の原理を使用し,上下線の幅を自動的に調整することができ,取引信号の混乱を効果的に防止する.ブリン帯が狭くなると,変化が徐々に緩やかになり,反転の機会を探すのに適している.ブリン帯が広がると,取引状況が激しく変動する時期を示し,トレンドを追跡するのに適している.
RSI軸向平均線交差策の最大のリスクは,RSI指標と移動平均の自体の遅延である. 急速な動きが来るとき,指標の計算とトレンド判定には一定の遅延がある.
もう1つの主要なリスクは,トレンドが牛か熊に転じるときの指標の誤導である.市場状況が転じ,RSIと平均線指標がまだ反応していない場合,誤った取引信号が生み出され,損失が生じます.
解決方法は,RSIパラメータを適切に調整し,平均線周期を短縮する;トレンド型指標の補助判断を追加する; 適切な停止範囲の緩和を含む.
RSI軸向均線交差策は以下の方向から最適化することができる.
RSIパラメータの最適化:RSIの長さを調整することで,感度と安定性をバランスできます.
移動平均のパラメータを最適化:平均線型と周期パラメータを調整し,指標の順位性を最適化
損失を増加させるメカニズム:移動損失または時間損失を設定し,単一損失を制御する
トレンド指数と組み合わせる:MACD,KDJなどの指数を加え,反転誤判を避ける
多時間枠検証:より高い時間枠を利用してトレンドを特定し,罠を避ける
RSI軸向均線交差戦略は,全体的に比較して成熟した量化取引戦略である.それは,複数の技術指標の優位性を融合し,パラメータ調整と多次元最適化により,市場の主流状態に入ることができる.この戦略の最大のリスクは,指標の遅れであることであり,損失を制御するために止損を配備する必要がある.適切に運用された場合,RSI軸向均線交差戦略は,より安定した投資リターンを得ることができる.
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// Copyright (c) 2020-present, Alex Orekhov (everget)
// Corrected Moving Average script may be freely distributed under the terms of the GPL-3.0 license.
strategy('rsisma', shorttitle='rsisma')
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.blue)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")
long = ta.crossover(rsi, rsiMA)
short = ta.crossunder(rsi, rsiMA)
if long
strategy.entry("long", strategy.long)
if short
strategy.close("long", comment = "long TP")
// long1 = close * 9
// long2 = long1 / 100
// long3 = long2 + close
//plot(long3,color=color.blue)
// if short
// strategy.entry("short", strategy.short)
// if long
// strategy.close("short", comment = "short TP")