RSI-Dynamische Positionsdurchschnittsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-06 09:44:05
Tags:

img

Übersicht

Diese Strategie kombiniert Relative Strength Index (RSI) und Martingale Position Averaging Prinzipien. Es initiiert eine Long Position, wenn der RSI unter die Überverkaufslinie geht, und verdoppelt die Position, wenn der Preis weiter sinkt. Gewinngewinn wird mit kleinen Zielen erzielt. Diese Strategie eignet sich für hohe Marktkapitalisierung Münzen im Spot-Handel für stetige Gewinne.

Strategie Logik

  1. Verwenden Sie den RSI-Indikator, um Marktüberverkaufszustände zu ermitteln, wobei der RSI-Zeitraum auf 14 und der Überverkaufsschwellenwert auf 30 festgelegt ist.
  2. Erste Long-Position mit 5% des Eigenkapitals des Kontos starten, wenn der RSI < 30.
  3. Wenn der Kurs um 0,5% vom ursprünglichen Einstiegspreis sinkt, verdoppeln Sie die Positionsgröße auf den durchschnittlichen Abwärtstrend.
  4. Gewinnen Sie jedes Mal mit 0,5% Zuwachs.
  5. Wiederholen Sie den Zyklus.

Analyse der Vorteile

  • Identifizieren Sie Marktüberverkaufsbedingungen mit RSI für gute Einstiegspunkte.
  • Die durchschnittliche Martingale-Position senkt den durchschnittlichen Einstiegspreis.
  • Kleine Gewinne ermöglichen konstante Gewinne.
  • Geeignet für den Spothandel mit Marktkapitalisierten Münzen mit kontrollierten Risiken.

Risikoanalyse

  • Ein längerer Marktrückgang kann zu hohen Verlusten führen.
  • Kein Stop-Loss bedeutet unbegrenzten Nachteil.
  • Zu viele Durchschnittswerte erhöhen den Verlust.
  • Es hat immer noch inhärente Risiken in der langen Richtung.

Optimierungsrichtlinien

  1. Einbeziehung von Stop-Loss, um den maximalen Verlust zu begrenzen.
  2. Optimieren Sie die RSI-Parameter, um die besten Überkauf-/Überverkaufssignale zu finden.
  3. Festlegen eines angemessenen Gewinnspielraums auf der Grundlage der spezifischen Volatilität der Münze.
  4. Die durchschnittliche Geschwindigkeit wird anhand der Gesamtsumme der Vermögenswerte oder der Größenordnung der Positionen ermittelt.

Zusammenfassung

Diese Strategie kombiniert RSI-Indikator und Martingale-Positionsdurchschnitt, um Überverkaufssituationen mit angemessener Durchschnittsverwertung nach unten zu nutzen und einen kleinen Gewinn für stetige Gewinne zu erzielen.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stavolt

//@version=5
strategy("RSI Martingale Strategy", overlay=true, default_qty_type=strategy.cash, currency=currency.USD)

// Inputs
rsiLength = input(14, title="RSI Length")
oversoldThreshold = input(30, title="Oversold Threshold") // Keeping RSI threshold
profitTargetPercent = input(0.5, title="Profit Target (%)") / 100
initialInvestmentPercent = input(5, title="Initial Investment % of Equity")

// Calculating RSI
rsiValue = ta.rsi(close, rsiLength)

// State variables for tracking the initial entry
var float initialEntryPrice = na
var int multiplier = 1

// Entry condition based on RSI
if (rsiValue < oversoldThreshold and na(initialEntryPrice))
    initialEntryPrice := close
    strategy.entry("Initial Buy", strategy.long, qty=(strategy.equity * initialInvestmentPercent / 100) / close)
    multiplier := 1

// Adjusting for errors and simplifying the Martingale logic
// Note: This section simplifies the aggressive position size adjustments without loops
if (not na(initialEntryPrice))
    if (close < initialEntryPrice * 0.995) // 0.5% drop from initial entry
        strategy.entry("Martingale Buy 1", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 2)
        multiplier := 2 // Adjusting multiplier for the next potential entry

    if (close < initialEntryPrice * 0.990) // Further drop
        strategy.entry("Martingale Buy 2", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 4)
        multiplier := 4

    // Additional conditional entries could follow the same pattern

// Checking for profit target to close positions
if (strategy.position_size > 0 and (close - strategy.position_avg_price) / strategy.position_avg_price >= profitTargetPercent)
    strategy.close_all(comment="Take Profit")
    initialEntryPrice := na // Reset for next cycle


Mehr