SPARK Dimensión dinámica de las posiciones y estrategia de negociación de dos indicadores

El autor:¿ Qué pasa?, Fecha: 2024-04-12 17:22:47
Las etiquetas:super tendenciaIndicador de riesgoEl ATR

img

Resumen general

La estrategia SPARK es una estrategia de trading cuantitativa que combina el dimensionamiento dinámico de posiciones con la confirmación de indicadores duales. La estrategia utiliza el indicador SuperTrend y el Índice de Fuerza Relativa (RSI) para identificar puntos de entrada y salida potenciales mientras emplea un mecanismo de dimensionamiento dinámico de posiciones para optimizar la asignación de capital.

Principios de estrategia

El núcleo de la estrategia SPARK radica en la aplicación combinada del indicador SuperTrend y el indicador RSI. El indicador SuperTrend determina la dirección de la tendencia comparando el precio de cierre con los niveles de soporte y resistencia dinámicos, mientras que el indicador RSI se utiliza para identificar las condiciones de mercado de sobrecompra y sobreventa.

La estrategia emplea un mecanismo dinámico de tamaño de posición para optimizar la asignación de capital para cada operación. Al establecer un porcentaje de cartera y una relación de apalancamiento, la estrategia calcula automáticamente el tamaño óptimo de la posición en función de las condiciones actuales del mercado y el saldo de la cuenta. Además, la estrategia ofrece ajustes flexibles de toma de ganancias y stop loss, lo que permite a los usuarios elegir entre porcentajes fijos o niveles calculados dinámicamente.

Ventajas estratégicas

  1. Confirmación de dos indicadores: mediante la combinación de los indicadores SuperTrend y RSI, la estrategia SPARK puede identificar con mayor precisión los puntos de entrada y salida potenciales, reduciendo la probabilidad de señales falsas.
  2. La estrategia emplea un mecanismo dinámico de posicionamiento que optimiza automáticamente la asignación de capital para cada operación en función del porcentaje de cartera y la relación de apalancamiento, mejorando la eficiencia del capital.
  3. Gestión del riesgo flexible: la estrategia ofrece ajustes flexibles de toma de ganancias y stop loss, permitiendo a los usuarios elegir entre porcentajes fijos o niveles calculados dinámicamente en función de sus preferencias de riesgo, lo que permite un control preciso del riesgo.
  4. Parámetros personalizables: la estrategia permite a los usuarios ajustar múltiples parámetros de entrada, como la longitud del ATR, el multiplicador y los umbrales del RSI, para adaptarse a las diferentes condiciones del mercado y preferencias comerciales.

Riesgos estratégicos

  1. Riesgo de mercado: a pesar de la confirmación de la estrategia SPARK con dos indicadores y el mecanismo dinámico de dimensionamiento de posiciones, puede seguir enfrentándose al riesgo de pérdidas en condiciones extremas de mercado.
  2. Riesgo de optimización de parámetros: el rendimiento de la estrategia depende en gran medida de la selección de parámetros de entrada.
  3. Riesgo de sobreajuste: si los parámetros de la estrategia están demasiado optimizados, puede resultar en un bajo rendimiento en condiciones futuras de mercado.

Direcciones para la optimización de la estrategia

  1. Incorporación de indicadores adicionales: Considere la posibilidad de incorporar otros indicadores técnicos, como el MACD, las bandas de Bollinger, etc., para mejorar aún más la precisión de la confirmación de la señal.
  2. Optimización de los mecanismos de toma de ganancias y stop loss: Explore estrategias más avanzadas de toma de ganancias y stop loss, como paradas de trailing, niveles dinámicos de toma de ganancias, etc., para proteger mejor las ganancias y limitar las pérdidas.
  3. Ajuste adaptativo de parámetros: Desarrollar un mecanismo adaptativo que ajuste dinámicamente los parámetros de la estrategia en función de las condiciones del mercado para adaptarse al entorno de mercado en constante cambio.

Resumen de las actividades

La estrategia SPARK proporciona a los operadores una solución de negociación cuantitativa integral al combinar los indicadores SuperTrend y RSI, empleando un mecanismo dinámico de tamaño de posición y ofreciendo herramientas flexibles de gestión de riesgos.


/*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)


Relacionados

Más.