RSI軸間移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2023年11月23日 16時45分55秒
タグ:

img

概要

RSI軸間移動平均クロスオーバー戦略は,RSI指標とその単純な移動平均線を計算し,両者の間の黄金十字と死十字を観察することによって取引信号を生成する.この戦略には,RSI軸間移動平均線に対するサポート/レジスタンス判断を追加するためにボリンジャーバンドも組み込まれています.

戦略の論理

この戦略は,まず14日間のRSI指標を計算し,その後はRSI指標の8日間の単純な移動平均線を計算する.RSI指標が移動平均線を超えると購入信号が生成され,RSIが移動平均線を下回ると販売信号が生成される.

同時に,戦略は標準偏差を計算することによって,RSI軸間移動平均線が比較的過密かどうかを判断するためにボリンジャー帯を追加し,それによってピークを購入し底を販売することを避ける.

利点分析

RSI軸間移動平均クロスオーバー戦略は,トレンド指標RSIと曲線に沿った指標移動平均線を組み合わせ,市場のトレンドとランダム性を効果的に決定することができます. RSI指標の算術平均は,シグナルに対する価格変動の影響を平滑化することができます.

この戦略に追加されたボリンジャー帯は,上下線の幅を自動的に調整するために標準偏差の原則を使用し,誤った取引信号を効果的に防止する.ボリンジャー帯が狭くなると,変化は徐々に減速していることを示し,逆転の機会を探するのに適しています.ボリンジャー帯が拡大すると,激しい市場変動の期間を示し,トレンドを追跡するのに適しています.

リスク分析

RSI軸間移動平均クロスオーバー戦略の最大のリスクは,RSI指標と移動平均線そのものの遅れである.急速な市場の動きが起こると,指標計算とトレンド判断は一定程度遅くなる.これは買いポイントを上昇させ,売りポイントを下げる.

もう一つの大きなリスクは,市場のトレンドが牛から熊に転移したり,逆にRSIとMAインジケーターが間に合わずに反応し,取引が失敗するときに指標が誤導されることです.

解決策には,RSIパラメータを適切に調整し,MA期間を短縮し,判断を助けるトレンドインジケーターを追加し,ストップロスの範囲を適切に拡大することが含まれる.

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

RSI軸間移動平均のクロスオーバー戦略は,次の側面で最適化することができます:

  1. RSI パラメータを最適化: 敏感性と安定性をバランスするために RSI 長さを調整する

  2. MA パラメータを最適化: MA タイプと期間パラメータを調整してトレンドフォローを最適化

  3. ストップ損失メカニズムを追加: 単一の損失を制御するために移動または時間停止損失を設定

  4. トレンドインジケーターを組み込む MACD,KDJ 等を追加して,逆転の誤った判断を避ける

  5. 複数のタイムフレームの検証: 罠にはまらないように,より長いタイムフレームを使用して傾向を特定します.

結論

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")




もっと