
Se trata de una estrategia de negociación de tendencias multifacética que combina la ruptura de dos medias y el análisis de la transacción. La estrategia toma decisiones de negociación mediante la comparación de señales cruzadas de medias móviles a corto y largo plazo y la combinación de indicadores de transacción.
La lógica central de la estrategia se basa en los siguientes elementos clave:
Riesgo de mercado de temblor: En mercados de temblor horizontal, los cruces de línea media frecuentes pueden causar múltiples falsas rupturas. Solución: Se puede agregar un indicador de confirmación de tendencia, como el ADX o el indicador de fuerza de tendencia.
Riesgo de deslizamiento: En caso de un incremento repentino en el volumen de transacciones, es posible que se produzcan grandes pérdidas de deslizamiento. Solución: Se recomienda establecer tolerancias razonables para el punto de deslizamiento y usar la lista de precios límite para abrir posiciones.
Riesgo de desencadenamiento de stop loss: el stop loss porcentual fijo puede ser demasiado sensible cuando la volatilidad del mercado aumenta. Solución: Se puede considerar el uso de un ATR para detener el deterioro dinámico o el ajuste de la volatilidad.
La estrategia construye un sistema de negociación relativamente completo mediante la combinación de tendencias de precios y cambios en el volumen de transacciones. La estrategia tiene la ventaja de tener mecanismos de confirmación múltiple y un control de riesgo perfecto, pero en un mercado convulso puede enfrentar el riesgo de falsas rupturas.
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover with Volume (Long Only) + Stop Loss", overlay=true)
// Input settings for Moving Averages
shortMaLength = input.int(9, title="Short MA Length", minval=1)
longMaLength = input.int(21, title="Long MA Length", minval=1)
// Input settings for Volume
volumeMaLength = input.int(20, title="Volume MA Length", minval=1)
volumeThresholdMultiplier = input.float(1.5, title="Volume Multiplier (x times the average)", step=0.1)
// Input settings for Stop Loss
stopLossPercent = input.float(2.0, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 // Stop loss in percentage
// Calculating Moving Averages
shortMa = ta.sma(close, shortMaLength)
longMa = ta.sma(close, longMaLength)
// Calculating Volume Metrics
volumeMa = ta.sma(volume, volumeMaLength) // Average volume
isVolumeAboveAverage = volume > (volumeMa * volumeThresholdMultiplier) // Volume above threshold
isVolumeIncreasing = volume > volume[1] // Volume increasing compared to the previous bar
// Plotting Moving Averages
plot(shortMa, color=color.blue, title="Short MA")
plot(longMa, color=color.orange, title="Long MA")
// Buy Condition with Volume
longCondition = ta.crossover(shortMa, longMa) and isVolumeAboveAverage and isVolumeIncreasing
exitCondition = ta.crossunder(shortMa, longMa) // Exit when the MAs cross downward
// Calculate Stop Loss Level
var float entryPrice = na // Variable to store entry price
if (strategy.position_size > 0 and na(entryPrice)) // Update entry price only when entering a new trade
entryPrice := strategy.position_avg_price
stopLossLevel = entryPrice * (1 - stopLossPercent) // Stop-loss level based on entry price
// Strategy Entry (Long Only)
if (longCondition)
strategy.entry("Long", strategy.long)
// Close position on Stop Loss or Exit Condition
if (strategy.position_size > 0)
if (low < stopLossLevel) // If the price drops below the stop-loss level
strategy.close("Long", comment="Stop Loss Hit")
if (exitCondition)
strategy.close("Long", comment="Exit Signal Hit")
// Debugging Plots
plot(volumeMa, color=color.purple, title="Volume MA", style=plot.style_area, transp=80)
hline(0, "Zero Line", color=color.gray)