SPARK Dynamische Positionsgrößerung und Handelsstrategie mit zwei Indikatoren

Schriftsteller:ChaoZhang, Datum: 2024-04-12 17:22:47
Tags:SupertrendRSIATR

img

Übersicht

Die SPARK-Strategie ist eine quantitative Handelsstrategie, die die dynamische Positionsgröße mit der Dual-Indikator-Bestätigung kombiniert. Die Strategie nutzt den SuperTrend-Indikator und den Relative Strength Index (RSI), um potenzielle Einstiegs- und Ausstiegspunkte zu identifizieren und gleichzeitig einen dynamischen Positionsgrößenmechanismus zur Optimierung der Kapitalallokation zu verwenden. Die Strategie bietet auch flexible Gewinn- und Stop-Loss-Einstellungen sowie anpassbare Parameter wie Mindesthandelsfrequenz und Richtungspräferenz.

Strategieprinzipien

Der Kern der SPARK-Strategie liegt in der kombinierten Anwendung des SuperTrend-Indikators und des RSI-Indikators. Der SuperTrend-Indikator bestimmt die Trendrichtung, indem er den Schlusskurs mit dynamischen Unterstützungs- und Widerstandsniveaus vergleicht, während der RSI-Indikator verwendet wird, um überkaufte und überverkaufte Marktbedingungen zu identifizieren. Wenn sowohl der SuperTrend- als auch der RSI-Indikator gleichzeitig bestimmte Kriterien erfüllen, erzeugt die Strategie ein Eintrittssignal.

Die Strategie verwendet einen dynamischen Positionsgrößenmechanismus, um die Kapitalzuweisung für jeden Handel zu optimieren. Durch die Festlegung eines Portfolioprozentsatzes und einer Hebelwirkung berechnet die Strategie automatisch die optimale Positionsgröße basierend auf den aktuellen Marktbedingungen und dem Kontostand. Darüber hinaus bietet die Strategie flexible Gewinn- und Stop-Loss-Einstellungen, so dass Benutzer zwischen festen Prozentsätzen oder dynamisch berechneten Niveaus wählen können.

Strategische Vorteile

  1. Doppelindikatorbestätigung: Durch die Kombination der SuperTrend- und RSI-Indikatoren kann die SPARK-Strategie potenzielle Ein- und Ausstiegspunkte genauer identifizieren und so die Wahrscheinlichkeit falscher Signale verringern.
  2. Dynamische Positionsgröße: Die Strategie verwendet einen dynamischen Positionsgrößenmechanismus, der automatisch die Kapitalzuweisung für jeden Handel auf der Grundlage von Portfolioprozentsatz und Hebelwirkung optimiert und somit die Kapitaleffizienz erhöht.
  3. Flexibles Risikomanagement: Die Strategie bietet flexible Gewinn- und Stop-Loss-Einstellungen, die es den Nutzern ermöglichen, zwischen festen Prozentsätzen oder dynamisch berechneten Niveaus zu wählen, die auf ihren Risikopräferenzen basieren und eine präzise Risikokontrolle ermöglichen.
  4. Anpassbare Parameter: Die Strategie ermöglicht es den Nutzern, mehrere Eingabeparameter wie ATR-Länge, Multiplikator und RSI-Schwellenwerte anzupassen, um sich an unterschiedliche Marktbedingungen und Handelspräferenzen anzupassen.

Strategische Risiken

  1. Marktrisiko: Trotz der Bestätigung der SPARK-Strategie mit zwei Indikatoren und dem dynamischen Positionsgrößenmechanismus kann sie unter extremen Marktbedingungen immer noch mit einem Verlustrisiko konfrontiert sein.
  2. Parameteroptimierungsrisiko: Die Leistung der Strategie hängt weitgehend von der Auswahl der Eingabeparameter ab.
  3. Überanpassungsrisiko: Wenn die Strategieparameter übermäßig optimiert sind, kann dies zu schlechten Ergebnissen unter zukünftigen Marktbedingungen führen.

Strategieoptimierungsrichtlinien

  1. Einbeziehung zusätzlicher Indikatoren: Überlegen Sie, andere technische Indikatoren wie MACD, Bollinger-Bänder usw. einzubeziehen, um die Genauigkeit der Signalbestätigung weiter zu verbessern.
  2. Optimierung der Profit- und Stop-Loss-Mechanismen: Erforschen Sie fortschrittlichere Profit- und Stop-Loss-Strategien, wie Trailing-Stops, dynamische Profitniveaus usw., um Gewinne besser zu schützen und Verluste zu begrenzen.
  3. Adaptive Parameteranpassung: Entwicklung eines adaptiven Mechanismus, der die Strategieparameter dynamisch anhand der Marktbedingungen anpasst, um sich dem sich ständig verändernden Marktumfeld anzupassen.

Zusammenfassung

Die SPARK-Strategie bietet den Händlern eine umfassende quantitative Handelslösung, indem sie die SuperTrend- und RSI-Indikatoren kombiniert, einen dynamischen Positionsgrößenmechanismus verwendet und flexible Risikomanagement-Tools anbietet.


/*backtest
start: 2024-03-12 00:00:00
end: 2024-04-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SPARK", shorttitle="SPARK", overlay=true)

// Choose whether to activate the minimal bars in trade feature
minBarsEnabled = input(true, title="Activate Minimal Bars in Trade")
portfolioPercentage = input(10, title="Portfolio Percentage", minval=1, maxval=100)
// Leverage Input
leverage = input(1, title="Leverage", minval=1)

// Calculate position size according to portfolio percentage and leverage
positionSizePercent = portfolioPercentage / 100 * leverage
positionSize = (strategy.initial_capital / close) * positionSizePercent

// Take Profit and Stop Loss settings
useFixedTPSL = input(1, title="Use Fixed TP/SL", options=[1, 0])
tp_sl_step = 0.1
fixedTP = input(2.0, title="Fixed Take Profit (%)", step=tp_sl_step)
fixedSL = input(1.0, title="Fixed Stop Loss (%)", step=tp_sl_step)

// Calculate Take Profit and Stop Loss Levels
takeProfitLong = close * (1 + fixedTP / 100)
takeProfitShort = close * (1 - fixedTP / 100)
stopLossLong = close * (1 - fixedSL / 100)
stopLossShort = close * (1 + fixedSL / 100)

// Plot TP and SL levels on the chart
plotshape(series=takeProfitLong, title="Take Profit Long", color=color.green, style=shape.triangleup, location=location.abovebar)
plotshape(series=takeProfitShort, title="Take Profit Short", color=color.red, style=shape.triangledown, location=location.belowbar)
plotshape(series=stopLossLong, title="Stop Loss Long", color=color.red, style=shape.triangleup, location=location.abovebar)
plotshape(series=stopLossShort, title="Stop Loss Short", color=color.green, style=shape.triangledown, location=location.belowbar)

// Minimum Bars Between Trades Input
minBarsBetweenTrades = input(5, title="Minimum Bars Between Trades")

// Inputs for selecting trading direction
tradingDirection = input("Both", "Choose Trading Direction", options=["Long", "Short", "Both"])

// SuperTrend Function
trendFlow(src, atrLength, multiplier) =>
    atr = atr(atrLength)
    up = hl2 - (multiplier * atr)
    dn = hl2 + (multiplier * atr)
    trend = 1
    trend := nz(trend[1], 1)
    up := src > nz(up[1], 0) and src[1] > nz(up[1], 0) ? max(up, nz(up[1], 0)) : up
    dn := src < nz(dn[1], 0) and src[1] < nz(dn[1], 0) ? min(dn, nz(dn[1], 0)) : dn
    trend := src > nz(dn[1], 0) ? 1 : src < nz(up[1], 0)? -1 : nz(trend[1], 1)
    [up, dn, trend]

// Inputs for SuperTrend settings
atrLength1 = input(7, title="ATR Length for Trend 1")
multiplier1 = input(4.0, title="Multiplier for Trend 1")
atrLength2 = input(14, title="ATR Length for Trend 2")
multiplier2 = input(3.618, title="Multiplier for Trend 2")
atrLength3 = input(21, title="ATR Length for Trend 3")
multiplier3 = input(3.5, title="Multiplier for Trend 3")
atrLength4 = input(28, title="ATR Length for Trend 4")
multiplier4 = input(3.382, title="Multiplier for Trend 4")

// Calculate SuperTrend
[up1, dn1, trend1] = trendFlow(close, atrLength1, multiplier1)
[up2, dn2, trend2] = trendFlow(close, atrLength2, multiplier2)
[up3, dn3, trend3] = trendFlow(close, atrLength3, multiplier3)
[up4, dn4, trend4] = trendFlow(close, atrLength4, multiplier4)

// Entry Conditions based on SuperTrend and Elliott Wave-like patterns
longCondition = trend1 == 1 and trend2 == 1 and trend3 == 1 and trend4 == 1
shortCondition = trend1 == -1 and trend2 == -1 and trend3 == -1 and trend4 == -1

// Calculate bars since last trade
barsSinceLastTrade = barssince(tradingDirection == "Long" ? longCondition : shortCondition)

// Strategy Entry logic based on selected trading direction and minimum bars between trades
if tradingDirection == "Long" or tradingDirection == "Both"
    if longCondition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Long", strategy.long, qty=positionSize)
        strategy.exit("TP/SL Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)

if tradingDirection == "Short" or tradingDirection == "Both"
    if shortCondition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Short", strategy.short, qty=positionSize)
        strategy.exit("TP/SL Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Color bars based on position
var color barColor = na
barColor := strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na

// Plot colored bars
plotcandle(open, high, low, close, color=barColor)

// Plot moving averages
plot(sma(close, 50), color=color.blue)
plot(sma(close, 200), color=color.orange)

// More customizable trading bot - adding a new indicator
// This indicator is the RSI (Relative Strength Index)

// RSI Inputs
rsi_length = input(14, title="RSI Length")
rsi_oversold = input(30, title="RSI Oversold")
rsi_overbought = input(70, title="RSI Overbought")

// Calculate RSI
rsi = rsi(close, rsi_length)

// Plot RSI
plot(rsi, color=color.purple, title="RSI")

// Entry Conditions based on RSI
rsi_long_condition = rsi < rsi_oversold
rsi_short_condition = rsi > rsi_overbought

// Strategy Entry logic based on RSI
if tradingDirection == "Long" or tradingDirection == "Both"
    if rsi_long_condition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Long_RSI", strategy.long, qty=positionSize)
        strategy.exit("TP/SL Long_RSI", from_entry="Long_RSI", stop=stopLossLong, limit=takeProfitLong)

if tradingDirection == "Short" or tradingDirection == "Both"
    if rsi_short_condition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Short_RSI", strategy.short, qty=positionSize)
        strategy.exit("TP/SL Short_RSI", from_entry="Short_RSI", stop=stopLossShort, limit=takeProfitShort)


Verwandt

Mehr