RSI逆転ブレイクアウト戦略

作者: リン・ハーンチャオチャン, 日時: 2023年8月10日 14:16:57
タグ:

概要

RSIリバーサルブレイクアウト戦略は,RSI指標を使用して過買い・過売り状況を特定し,価格が移動平均を突破すると反トレンド取引を行う戦略である.この戦略は,トレンドと過買い/過売り指標を組み合わせて,逆転信号が現れるときに取引を開始し,株式価格の短期的な逆転機会を捕捉することを目的としている.

戦略の論理

この戦略は主に次の論理に基づいています

  1. 価格が過買いまたは過売れているかどうかを判断するために,RSI (RSI) を使用します.25未満のRSIは過売りとみなされ,80を超えるRSIは過買いとみなされます.

  2. 全体のトレンド方向を決定するために200日間のEMAを使用します.EMAを超える価格は上昇傾向の信号,EMA以下の価格は下落傾向の信号とみなされます.

  3. RSI が過売れ信号を示し,価格が EMA を上回ると,上昇傾向のロングをします.これは典型的な逆転信号で,価格が過売れゾーンから反発することを示します.

  4. RSIが過買い信号を示し,価格がEMAを下回ると,ダウントレンドにショートします.また逆転信号で,価格が過買いゾーンから引き戻し始めることを示します.

  5. 逆転のトレードで 新しいトレンドの始まりを 始める前に把握したいのです

特に,エントリールールは,RSIが <25で価格が上位帯を突破するとロング;RSIが >80で価格が下位帯を突破するとショートする.当日の最高価格が前日の最高価格を下回ると終了する.

利点

RSIの逆転ブレイアウト戦略には以下の利点があります

  1. 逆転の可能性を把握する:RSIで過買い/過売りを特定することで,価格逆転を把握できる.これはアルファを生成する鍵です.

  2. トレンドと取引: EMA を統合することで,トレードが主要なトレンドと一致することを保証します.大きなトレンドと一致する場合にのみ逆転が考慮されます.

  3. リスク管理:リバース取引は,ポジション保持期間を制限し,リスクを制御する.

  4. 柔軟なパラメータ: RSI 期と EMA 期は,市場体制の変化に調整され,適応性が向上します.

  5. 適正な取引頻度: 反転シグナルは適度に発生し,アクティブのままに過剰取引を避ける.

  6. シンプル: ルールが直線的で,リアルタイム取引では簡単に実行できます.

リスクと管理

この戦略には次のリスクもあります

  1. 逆転リスク:逆転信号の後,価格が元のトレンドを再開し,損失につながる可能性があります.ダウンサイドを制御するためにストップロスを使用できます.

  2. 不明な傾向リスク: EMA は,明確な傾向がない場合,うまく機能しません.傾向が不明である場合,逆転を避けることができます.

  3. 最適化リスク: RSI と EMA パラメータはパフォーマンスに大きな影響を与える.最適な値を見つけるために,さまざまな値を徹底的にテストする必要があります.

  4. 過適性リスク:最適化中にパフォーマンスを追うことは過適性につながる可能性があります.過適性を避けるために強度チェックが必要です.

  5. 過剰取引リスク:過度に頻繁な反転信号が過剰な取引につながります.取引頻度を制限するためにRSI期間を調整できます.

改良

この戦略は,次の側面においてさらに改善することができる.

  1. ストック品質を評価する 戦略を基本値に基づいて 高品質のストックにのみ適用する

  2. 他の指標を組み込む MACD,KD などを追加して逆転信号を確認し信頼性を向上させる.

  3. ダイナミックパラメータ調整: 変化する市場状況に基づいて,RSIとEMAパラメータをダイナミックに調整する.

  4. 入力のタイミングを最適化します. 逆転の確認を待つために入力のルールを調整します.

  5. 利益の引き取り戦略: 利益の引き取りを避けるために適切な利益の引き取りレベルを設定します.

  6. トランザクションコストを考慮する: スリップと手数料の影響を評価する.

  7. 戦略をより堅牢にするため 高い変動率の株にのみ焦点を当てる

結論

RSI逆転ブレイクアウト戦略は,早期の逆転と主要な機会を捉えるためにトレンドと逆転信号を組み合わせます.適度な取引頻度はリスク管理に役立ちます.エントリータイミング,利益占い,パラメータ選択に関する適切な最適化はパフォーマンスをさらに向上させることができます.健全な最適化により,この戦略は効果的な定量的な取引アプローチになります.


/*backtest
start: 2022-10-01 00:00:00
end: 2023-10-07 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jocker.soad

//@version=4
// strategy("My Script", overlay=true, initial_capital=10000, default_qty_value=100)
min = input(title="Valor minimo de entrada", defval=25)
qtdAtivos = input(title="Quantidade de ações", defval=1)

// overBuyLine = hline(80)
// overSellLine = hline(min)

var comprado = false
var valorComprado = 0.0
var qtdDiasComprado = 0
var valorLucro = 0.0

valueRsi = rsi(close, 2)
valueSma = sma(close, 200)
valueEma = ema(close, 200)
lastHighPrice = high[2]

buyValidation = valueRsi <= min
sellValidation = close >= lastHighPrice



// plot(lastHighPrice, trackprice=true, offset=-99999, color=color.olive, linewidth=3, style=plot.style_area)
// plot(valueRsi)
// plot(valueSma)
// plot(valueEma)
// plotshape(sellValidation, style=shape.triangledown, color=color.blue)
// plotshape(comprado, style=shape.triangledown, color=color.blue)

startDate = input(title="Inicio Dia", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Inicio Mes", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Inicio Ano", type=input.integer, defval=2018, minval=1800, maxval=2100)

endDate = input(title="Final Dia", type=input.integer, defval=1, minval=1, maxval=31)
endMonth = input(title="Final Mes", type=input.integer, defval=12, minval=1, maxval=12)
endYear = input(title="Final Ano", type=input.integer,  defval=2020, minval=1800, maxval=2100)

inDateRange = true

if inDateRange

    if close >= valueEma
    
        if comprado == false and buyValidation
            qtdDiasComprado := 0
            comprado := true
            valorComprado := close
            strategy.order("buy", true, qtdAtivos, when=buyValidation)
        
        if sellValidation and comprado == true
            comprado := false
            valorLucro := valorLucro + (close - valorComprado)
            valorComprado := 0
            strategy.order("sell", false, qtdAtivos, when=sellValidation)
        
        if comprado == true and sellValidation == false
            qtdDiasComprado := qtdDiasComprado + 1

// plot(valorLucro, color=color.lime)




もっと