Backtesting und Optimierung von RSI-Strategien


Erstellungsdatum: 2023-11-10 11:59:40 zuletzt geändert: 2023-11-10 11:59:40
Kopie: 1 Klicks: 858
1
konzentrieren Sie sich auf
1617
Anhänger

Backtesting und Optimierung von RSI-Strategien

Überblick

Diese Strategie basiert auf der relativ starken Indikator ((RSI) zu überkaufen und zu verkaufen, um einen Rückschlag zu erreichen, wenn der RSI überkaufen und überkaufen Bereich erreicht. Die Strategie ist einfach und effizient, um durch die Erfassung von kurzfristigen Überkaufen und Überverkaufen zu profitieren.

Strategieprinzip

Die Strategie verwendet nur den RSI-Indikator als Positionssignal. Wenn der RSI unter dem festgelegten Tiefpunkt (default 20) liegt, ist der RSI unter dem festgelegten Hochpunkt (default 80), und wenn der RSI über dem festgelegten Hochpunkt (default 80) liegt, ist der RSI leer.

Die Kernlogik der Strategie lautet:

  1. Überkaufen und Überverkaufen anhand des RSI
  2. Unter RSI ist es 20 Uhr.
  3. Der RSI ist bei 80 leer.
  4. $ 100 für jede Position
  5. Nach-Stop- oder Nach-Loss-Plating
  6. Wenn der Verlust auf der nächsten K-Linie ausgesetzt ist, werden 24 K-Linien nicht gehandelt.

Die Strategie ist sehr mechanisch und gibt kaum Raum für Parameteroptimierung. Sie nutzt die reinen mathematischen Eigenschaften des RSI-Indikators, um in überkauften und überverkauften Gebieten umgekehrt zu positionieren und umgekehrt zu profitieren.

Analyse der Stärken

Die größte Stärke dieser Strategie liegt in ihrer Einfachheit und Effizienz.

  1. Der RSI ist ein einziger Indikator, der keine komplizierten technischen Analysen erfordert.
  2. Das ist ein komplett mechanisches Handelssystem, das nicht von persönlichen Emotionen beeinflusst wird.
  3. Es ist nicht notwendig, die Entwicklung des Marktes vorherzusagen, um von mathematischen Merkmalen zu profitieren, die kurzfristig von der Marktentwicklung abweichen.
  4. Geldverwaltungsregeln, Risikokontrolle durch Stop-Loss-Mechanismen

Darüber hinaus wurde die Strategie mit einem Stop-Loss-Verhältnis eingerichtet, um Gewinne zu sichern und Risiken zu kontrollieren, sowie mit einem Trading-Suspension-Mechanismus, um die Handelsfrequenz zu reduzieren. Dies ermöglicht der Strategie, stabile Gewinne mit minimalem Risiko zu erzielen.

Risikoanalyse

Die Hauptrisiken dieser Strategie sind:

  1. Wenn der Trend sehr stark ist, kann der RSI in einer überkauften oder überverkauften Zone bleiben, und es gibt nur eine geringe Chance, dass sich die Strategie umkehrt.

  2. Eine übermäßige Stop-Loss-Einstellung kann zu einer Vergrößerung der Verluste führen. Der Stop-Loss beträgt derzeit 3%, es kann jedoch zu einer Anpassung von 1-2% kommen.

  3. Eine zu hohe Handelsfrequenz kann dazu führen, dass nach dem Aufbau von Positionen weiterhin Gewinne erzielt werden. Die Häufigkeit der Aufnahme von Positionen sollte entsprechend kontrolliert werden.

  4. Die Festsetzung von 100 USD pro Position kann zu riskant sein und muss als Kapitalanteil optimiert werden.

Optimierungsrichtung

Nach den oben beschriebenen Analysen kann die Strategie in folgenden Bereichen optimiert werden:

  1. Es ist wichtig, dass die Trends mit den wichtigsten Indikatoren, wie beispielsweise dem MA, verglichen werden, um den Trend zu bestimmen.

  2. Optimierung der Stop-Loss-Stop-Ratio, um die Stop-Loss-Anpassung auf 1-2% zu optimieren. Die Stop-Loss kann als Floating Stop eingestellt werden.

  3. Erhöhung der Häufigkeit der Eröffnung von Positionen, wenn nur ein oder zwei Positionen in einer bestimmten Zeit erlaubt sind.

  4. Ändern Sie die Festzahlung von 100 USD in einen Kapitalprozentsatz, z. B. 1%.

  5. Optimierung von Parameterkombinationen, wie z. B. RSI-Perioden, Überkauf-Überverkaufszonen usw.

  6. Erhöhung der Positionskontrolle ohne Erhöhung des Einzelhandelskapitals bei Erhöhung des Initial Capital.

Durch die Optimierung der oben genannten Punkte können die Risiken des Handels reduziert und die Stabilität und Zuverlässigkeit der Strategie verbessert werden.

Zusammenfassen

Diese Strategie ist im Allgemeinen sehr einfach und direkt, durch die RSI-Indikator zu überkaufen und zu verkaufen, um kurzfristige Rückgewinn zu erzielen. Der Vorteil ist einfach und effizient, ohne Vorhersage, die Handelslogik ist klar, leicht zu erkennen und zu überprüfen. Es kann jedoch schwierig sein, die Trendsituation zu bewältigen, und es besteht ein gewisses Verlustrisiko.

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

//@version=5
strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash)
open_pos = input.int(50000, title = "每次开单资金(usdt)")
rsi_period = input.int(14, title = "rsi周期")
rsi_line      = input.float(20.0,      title='RSI触发线',      step=0.05)
stop_rsi_top_line = input.float(70, title = "顶部rsi止损线")
stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线")
stop_loss_perc = input.float(0.03, title = "止损线")
stop_profit = input.float(0.01, title = "止盈")
loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易")


rsiParam = ta.rsi(close, rsi_period)

var int failedTimes = 0
var bool stopTrade = false

// plot(rsiParam)

if stopTrade
    failedTimes += 1
    if failedTimes == loss_stop_trade_k
        failedTimes := 0
        stopTrade := false



// 获取当前持仓方向
checkCurrentPosition() =>
    strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0

curPosition = checkCurrentPosition()

// 当前持仓成本价
position_avg_price = strategy.position_avg_price


// 当前持单, 触达反向的rsi线,清仓
if curPosition > 0 and rsiParam >= stop_rsi_top_line
    strategy.close_all(comment = "closebuy")

if curPosition < 0 and rsiParam <= stop_rsi_bottom_line
    strategy.close_all(comment = "closesell")


// 止盈止损清仓
if curPosition > 0
    // if (position_avg_price - close) / close >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closebuy")
    //     stopTrade := true
    if (close - position_avg_price) / position_avg_price >= stop_profit
        // 止盈
        strategy.close_all(comment = "closebuy")



if curPosition < 0
    // if (close - position_avg_price) / position_avg_price >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closesell")
    //     stopTrade := true

    if (position_avg_price - close) / close >= stop_profit
        // 止盈
        strategy.close_all(comment = "closesell")


a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0
    stopTrade := true

var float openPrice = 0.0



if rsiParam <= rsi_line and stopTrade == false
	strategy.entry("long", strategy.long, open_pos / close, comment = "long")
    if curPosition == 0
        openPrice := close
    strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy")

if rsiParam >= 100 - rsi_line and stopTrade == false
    strategy.entry("short", strategy.short, open_pos / close, comment = "short")
    if curPosition == 0
        openPrice := close
    strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell")




plot(failedTimes)