En la carga de los recursos... Cargando...

El valor de las posiciones de los instrumentos de inversión se calculará en función de la posición de los activos de inversión.

El autor:¿ Qué pasa?, Fecha: 2024-11-12 11:41:30
Las etiquetas:El ATREl EMAIndicador de riesgoLa SMA

img

Resumen general

Esta estrategia es un sistema de negociación cuantitativo que combina múltiples indicadores técnicos con una gestión dinámica del riesgo. Integra el seguimiento de la tendencia de la EMA, la volatilidad del ATR, las condiciones de sobrecompra/sobreventa del RSI y el reconocimiento de patrones de velas, logrando rendimientos equilibrados a través del tamaño adaptativo de las posiciones y mecanismos dinámicos de stop-loss.

Principios de estrategia

La estrategia aplica el comercio a través de:

  1. Utilización de cruces de EMA de 5 y 10 períodos para determinar la dirección de la tendencia
  2. Indicador del índice de rentabilidad para zonas de sobrecompra/sobreventa
  3. Indicador ATR para el stop-loss dinámico y el dimensionamiento de posiciones
  4. Patrones de velas (engulfamiento, martillo, estrella fugaz) como señales de entrada
  5. Compensación por deslizamiento dinámico basada en ATR
  6. Confirmación del volumen para el filtrado de señales

Ventajas estratégicas

  1. La validación cruzada de múltiples señales mejora la fiabilidad
  2. La gestión dinámica del riesgo se adapta a la volatilidad del mercado
  3. La estrategia de obtención de beneficios parciales bloquea las ganancias
  4. Las pérdidas de detención de seguimiento protegen los beneficios acumulados
  5. Las exposiciones al riesgo de pérdida diaria limitadas
  6. La compensación por deslizamiento dinámico mejora la ejecución de órdenes

Riesgos estratégicos

  1. Los indicadores múltiples pueden causar retraso en la señal
  2. El comercio frecuente puede acarrear altos costos
  3. Las pérdidas de detención pueden desencadenarse con frecuencia en mercados variados
  4. Factores subjetivos en el reconocimiento de patrones de candelabro
  5. Optimización de parámetros riesgos de sobreajuste

Direcciones de optimización

  1. Introducir la detección del ciclo de mercado para el ajuste de parámetros dinámicos
  2. Añadir filtros de fuerza de tendencia para reducir las señales falsas
  3. Optimizar los algoritmos de dimensionamiento de posiciones para mejorar la eficiencia del capital
  4. Incorporar indicadores adicionales del sentimiento del mercado
  5. Desarrollar un sistema de optimización de parámetros adaptativo

Resumen de las actividades

Este es un sistema de estrategia sofisticado que combina múltiples indicadores técnicos, mejorando la estabilidad de las operaciones a través de la gestión dinámica del riesgo y la validación de múltiples señales.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Optimized Scalping with High Risk-Reward", overlay=true)

// Input for EMA periods
shortEMA_length = input(5, title="Short EMA Length")
longEMA_length = input(10, title="Long EMA Length")

// ATR for dynamic stop-loss
atrPeriod = input(14, title="ATR Period")
atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss")

// Calculate EMAs
shortEMA = ta.ema(close, shortEMA_length)
longEMA = ta.ema(close, longEMA_length)

// ATR calculation for dynamic stop loss
atr = ta.atr(atrPeriod)

// RSI for overbought/oversold conditions
rsi = ta.rsi(close, 14)

// Plot EMAs
plot(shortEMA, color=color.blue, title="Short EMA")
plot(longEMA, color=color.red, title="Long EMA")

// Dynamic Slippage based on ATR
dynamic_slippage = math.max(5, atr * 0.5)

// Candlestick pattern recognition
bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and close > close[1]
hammer = close > open and (high - close) / (high - low) > 0.6 and (open - low) / (high - low) < 0.2
bearish_engulfing = open[1] > close[1] and open > close and open > open[1] and close < close[1]
shooting_star = close < open and (high - open) / (high - low) > 0.6 and (close - low) / (high - low) < 0.2

// Enhanced conditions with volume and RSI check
buy_condition = (bullish_engulfing or hammer) and close > shortEMA and shortEMA > longEMA and volume > ta.sma(volume, 20) and rsi < 70
sell_condition = (bearish_engulfing or shooting_star) and close < shortEMA and shortEMA < longEMA and volume > ta.sma(volume, 20) and rsi > 30

// Dynamic ATR multiplier based on recent volatility
volatility = atr
adaptiveMultiplier = atrMultiplier + (volatility - ta.sma(volatility, 50)) / ta.sma(volatility, 50) * 0.5

// Execute buy trades with slippage consideration
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    stop_loss_buy = strategy.position_avg_price - atr * adaptiveMultiplier - dynamic_slippage
    take_profit_buy = strategy.position_avg_price + atr * adaptiveMultiplier * 3 + dynamic_slippage
    strategy.exit("Exit Buy", "Buy", stop=stop_loss_buy, limit=take_profit_buy)

// Execute sell trades with slippage consideration
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    stop_loss_sell = strategy.position_avg_price + atr * adaptiveMultiplier + dynamic_slippage
    take_profit_sell = strategy.position_avg_price - atr * adaptiveMultiplier * 3 - dynamic_slippage
    strategy.exit("Exit Sell", "Sell", stop=stop_loss_sell, limit=take_profit_sell)

// Risk Management
maxLossPerTrade = input.float(0.01, title="Max Loss Per Trade (%)", minval=0.01, maxval=1, step=0.01)  // 1% max loss per trade
dailyLossLimit = input.float(0.03, title="Daily Loss Limit (%)", minval=0.01, maxval=1, step=0.01) // 3% daily loss limit

maxLossAmount_buy = strategy.position_avg_price * maxLossPerTrade
maxLossAmount_sell = strategy.position_avg_price * maxLossPerTrade

if (strategy.position_size > 0)
    strategy.exit("Max Loss Buy", "Buy", stop=strategy.position_avg_price - maxLossAmount_buy - dynamic_slippage)

if (strategy.position_size < 0)
    strategy.exit("Max Loss Sell", "Sell", stop=strategy.position_avg_price + maxLossAmount_sell + dynamic_slippage)

// Daily loss limit logic
var float dailyLoss = 0.0
if (dayofweek != dayofweek[1])
    dailyLoss := 0.0  // Reset daily loss tracker at the start of a new day

if (strategy.closedtrades > 0)
    dailyLoss := dailyLoss + strategy.closedtrades.profit(strategy.closedtrades - 1)

if (dailyLoss < -strategy.initial_capital * dailyLossLimit)
    strategy.close_all("Daily Loss Limit Hit")

// Breakeven stop after a certain profit with a delay
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Buy", from_entry="Buy", stop=strategy.position_avg_price)

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Sell", from_entry="Sell", stop=strategy.position_avg_price)

// Partial Profit Taking
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5)
    strategy.close("Partial Close Buy", qty_percent=50)  // Use strategy.close for partial closure at market price

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5)
    strategy.close("Partial Close Sell", qty_percent=50) // Use strategy.close for partial closure at market price

// Trailing Stop with ATR type
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Buy", from_entry="Buy", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)

if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Sell", from_entry="Sell", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)


Relacionados

Más.