Estrategia ADR cruzada de la EMA - Método de negociación multidimensional basado en indicadores técnicos con una gestión estricta del riesgo

El autor:¿ Qué pasa?, Fecha: 2024-03-28 16:46:29
Las etiquetas:

img

Resumen general

La Estrategia EMA Cross ADR es una estrategia de trading cuantitativa basada en la plataforma TradingView. Combina múltiples indicadores técnicos para determinar tendencias, señales de filtro y establecer niveles de stop-loss y take-profit. La estrategia emplea dos promedios móviles exponenciales (EMA) con períodos diferentes para identificar la tendencia principal, utiliza el rango diario promedio (ADR) como filtro de volatilidad y establece dinámicamente los niveles de stop-loss y take-profit basados en una relación riesgo-recompensa. Además, la estrategia incorpora medidas de gestión de riesgos como una ventana de tiempo de negociación, paradas de rentabilidad y un límite máximo de pérdida diaria, con el objetivo de capturar las oportunidades de tendencia mientras controla estrictamente el riesgo bajista.

Principios de estrategia

  1. Dual EMA Crossover: La estrategia utiliza dos EMA con períodos diferentes para determinar la tendencia. Cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, se considera una tendencia alcista, generando una señal larga; por el contrario, cuando la EMA a corto plazo cruza por debajo de la EMA a largo plazo, se considera una tendencia bajista, generando una señal corta.

  2. Filtro de volatilidad ADR: para evitar la generación de señales de negociación en entornos de baja volatilidad, la estrategia introduce el indicador ADR como filtro de volatilidad.

  3. Ventana de tiempo de negociación: la estrategia permite a los usuarios establecer los horarios de inicio y final para la negociación diaria.

  4. Dinámica Stop-Loss y Take-Profit: La estrategia calcula dinámicamente los precios de stop-loss y take-profit basándose en los precios promedio más altos y más bajos de las N velas más recientes, combinados con una relación riesgo-recompensación preestablecida.

  5. Cuando una posición alcanza un cierto nivel de ganancia (ratio de riesgo-recompensación definido por el usuario), la estrategia mueve el stop-loss al punto de equilibrio (precio de entrada). Esto ayuda a proteger las ganancias que ya se han ganado.

  6. Límite de pérdida diaria máxima: para controlar la pérdida máxima por día, la estrategia establece un límite de pérdida diaria.

  7. Cierre de todas las posiciones al final del día: independientemente de si las posiciones han alcanzado los niveles de take-profit o stop-loss, la estrategia cierra todas las posiciones a una hora fija cada día de negociación (por ejemplo, 16:00) para evitar el riesgo de la noche a la mañana.

Análisis de ventajas

  1. Una fuerte capacidad de seguimiento de tendencias: mediante el uso de dos cruces de EMA para determinar las tendencias, la estrategia puede capturar eficazmente las principales tendencias del mercado, mejorando así la tasa de ganancia y el potencial de ganancia.

  2. Buena adaptabilidad a la volatilidad: La introducción del indicador ADR como filtro de volatilidad puede evitar operaciones frecuentes en entornos de baja volatilidad, reduciendo las pérdidas causadas por señales no válidas y falsos breakouts.

  3. Control estricto del riesgo: la estrategia establece medidas de control del riesgo desde múltiples dimensiones, incluidas el stop-loss y take-profit dinámicos, los break-even stops y los límites máximos de pérdidas diarias, controlando eficazmente el riesgo a la baja y mejorando los rendimientos ajustados al riesgo.

  4. Configuración de parámetros flexibles: los diversos parámetros de la estrategia, como los períodos de EMA, la duración de ADR, la relación riesgo-rendimiento, el horario de negociación, etc., se pueden establecer de manera flexible de acuerdo con las preferencias de los usuarios y las características del mercado para optimizar el rendimiento de la estrategia.

  5. Alto grado de automatización: La estrategia se basa en la plataforma TradingView, y la lógica de negociación se ejecuta completamente por el programa, reduciendo la interferencia de las emociones humanas y los juicios subjetivos, lo que favorece el funcionamiento estable a largo plazo de la estrategia.

Análisis de riesgos

  1. Riesgo de optimización de parámetros: aunque los parámetros de la estrategia se pueden ajustar de manera flexible, la optimización excesiva puede conducir a un sobreajuste y un bajo rendimiento fuera de la muestra.

  2. Riesgo de evento repentino: la estrategia opera principalmente en función de indicadores técnicos y puede no reaccionar suficientemente a algunos eventos fundamentales repentinos, como cambios de política o fluctuaciones significativas en los datos económicos, lo que conduce a grandes retiros.

  3. Riesgo de reversión de tendencia: durante los períodos clave de reversión de tendencia, las señales cruzadas de la EMA dual pueden retrasarse, lo que hace que la estrategia pierda el mejor momento para establecer posiciones o sufra pérdidas al comienzo de una reversión de tendencia.

  4. Riesgo de liquidez: aunque la estrategia establece una ventana de tiempo de negociación, si la liquidez de los instrumentos negociados es deficiente, todavía puede enfrentar riesgos como deslizamiento y retrasos en la negociación, lo que afecta al rendimiento de la estrategia.

  5. Si las condiciones del mercado cambian significativamente, haciendo que los indicadores pierdan su significado original, la eficacia de la estrategia puede disminuir.

Direcciones de optimización

  1. Introducción de indicadores más dimensionados: sobre la base de las EMA y ADR duales existentes, considerar la introducción de indicadores técnicos más eficaces, como el MACD y el RSI, para mejorar la fiabilidad y robustez de las señales.

  2. Optimización dinámica de parámetros: establecer un mecanismo de optimización de parámetros que ajuste dinámicamente los parámetros clave de la estrategia en función de diferentes estados del mercado (como tendencias u oscilaciones) para adaptarse a los cambios del mercado.

  3. Incorporar factores fundamentales: Tener en cuenta adecuadamente algunos indicadores fundamentales importantes, como los datos económicos y las orientaciones políticas, que pueden ayudar a la estrategia a comprender mejor las tendencias del mercado y evitar los riesgos sistémicos de manera oportuna.

  4. Mejorar los mecanismos de stop-loss y take-profit: optimizar aún más la lógica de stop-loss y take-profit sobre la base de la dinámica existente de stop-loss y take-profit, como la introducción de trailing stops y take-profits parciales, para proteger mejor los beneficios y controlar los riesgos.

  5. Múltiples instrumentos y marcos de tiempo: ampliar la estrategia a múltiples instrumentos y marcos de tiempo de negociación y mejorar la adaptabilidad y la estabilidad de la estrategia mediante la diversificación de la inversión y la optimización del marco de tiempo.

Resumen de las actividades

La Estrategia EMA Cross ADR es una estrategia de negociación cuantitativa basada en el análisis técnico. Determina las tendencias a través de cruces dobles de la EMA y utiliza el indicador ADR para filtrar la volatilidad. La estrategia también establece medidas estrictas de control de riesgos, incluyendo stop-loss dinámico y take-profit, break-even stops y límites máximos de pérdida diaria para controlar el riesgo a la baja. Las ventajas de la estrategia se encuentran en su fuerte capacidad de seguir tendencias, buena adaptabilidad a la volatilidad, control de riesgos estricto, ajustes de parámetros flexibles y alto grado de automatización. Sin embargo, también tiene algunos riesgos, como riesgo de optimización de parámetros, riesgo de eventos repentinos, riesgo de inversión de tendencia, riesgo de liquidez y riesgo de fracaso de indicadores técnicos.


/*backtest
start: 2024-02-26 00:00:00
end: 2024-03-27 00:00:00
period: 2h
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/
// © Sameh_Hussein

//@version=5
strategy('EMA Cross ADR Strategy with Stats', overlay=true)

// Adjustable Parameters
shortEmaLength = input(10, title='Short EMA Length')
longEmaLength = input(50, title='Long EMA Length')
adrLength = input(14, title='ADR Length')
riskRewardRatio = input(2.0, title='Risk/Reward Ratio')
lookbackCandles = input(10, title='Lookback Candles for Stop Loss')
startTime = input(0900, title='Start Time')
endTime = input(1600, title='End Time')
minAdrValue = input(10, title='Minimum ADR Value for Entry')
breakEvenProfit = input.float(1.0, title='Break-Even Profit', minval=0.0)
breakEvenRR = input.float(1.0, title='Break-Even Risk-Reward Ratio', minval=0.0)
dailyLossLimit = input(-2000.0, title='Daily Loss Limit')

// Exponential Moving Averages
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)

// Average Daily Range
adr = ta.sma(ta.tr, adrLength)

// Time Filter Function
timeFilter() => true

// Entry Conditions with ADR filter
longCondition = ta.crossover(shortEma, longEma) and timeFilter() and adr > minAdrValue
shortCondition = ta.crossunder(shortEma, longEma) and timeFilter() and adr > minAdrValue

// Calculate the average low and average high of the previous 'lookbackCandles' candles
averageLow = ta.sma(low, lookbackCandles)
averageHigh = ta.sma(high, lookbackCandles)

// Risk and Reward Calculation
stopLossLong = averageLow
takeProfitLong = close + (close - averageLow) * riskRewardRatio
stopLossShort = averageHigh
takeProfitShort = close - (averageHigh - close) * riskRewardRatio

// Entry Control Variables
var longEntryAllowed = true
var shortEntryAllowed = true

// Update entry price on trade execution
var float entryPriceLong = na
var float entryPriceShort = na

if (strategy.position_size > 0)
    if (strategy.position_size[1] <= 0)
        entryPriceLong := strategy.opentrades.entry_price(strategy.opentrades - 1)
    else
        entryPriceLong := entryPriceLong
else
    entryPriceLong := na

if (strategy.position_size < 0)
    if (strategy.position_size[1] >= 0)
        entryPriceShort := strategy.opentrades.entry_price(strategy.opentrades - 1)
    else
        entryPriceShort := entryPriceShort
else
    entryPriceShort := na

// Adjust stop loss to break-even plus the defined profit when the specified risk-reward ratio is reached
breakEvenTriggerLong = entryPriceLong + (entryPriceLong - stopLossLong) * breakEvenRR
breakEvenTriggerShort = entryPriceShort - (stopLossShort - entryPriceShort) * breakEvenRR

if (longEntryAllowed and close >= breakEvenTriggerLong)
    stopLossLong := entryPriceLong + breakEvenProfit

if (shortEntryAllowed and close <= breakEvenTriggerShort)
    stopLossShort := entryPriceShort - breakEvenProfit

// Close all trades at 1600
if (hour == 15 and minute == 59)
    strategy.close_all(comment='Close at 1600')

// Define the daily loss variable and last trade day
var float[] dailyLossArray = array.new_float(1, 0.0)
var int[] lastTradeDayArray = array.new_int(1, na)

// Function to update the daily loss
updateDailyLoss() =>
    _dailyLoss = array.get(dailyLossArray, 0)
    _lastTradeDay = array.get(lastTradeDayArray, 0)
    if na(_lastTradeDay) or dayofmonth != _lastTradeDay
        _dailyLoss := 0.0
        array.set(lastTradeDayArray, 0, dayofmonth)
    if not na(strategy.closedtrades.entry_bar_index(strategy.closedtrades - 1))
        _dailyLoss += strategy.closedtrades.profit(strategy.closedtrades - 1)
    array.set(dailyLossArray, 0, _dailyLoss)

// Call the function to update the daily loss
updateDailyLoss()

// Execute Strategy
if longCondition and longEntryAllowed
    strategy.entry('Long', strategy.long)
    strategy.exit('Take Profit/Stop Loss', 'Long', stop=stopLossLong, limit=takeProfitLong)
    longEntryAllowed := false

if shortCondition and shortEntryAllowed
    strategy.entry('Short', strategy.short)
    strategy.exit('Take Profit/Stop Loss', 'Short', stop=stopLossShort, limit=takeProfitShort)
    shortEntryAllowed := false

// Reset entry control variables on position close
if strategy.position_size == 0
    longEntryAllowed := true
    shortEntryAllowed := true

// // Statistics
// winRate = strategy.wintrades / strategy.closedtrades * 100
// totalTrades = strategy.closedtrades
// averageProfit = strategy.grossprofit / strategy.wintrades
// averageLoss = strategy.grossloss / strategy.losstrades

// // Plotting
// plot(shortEma, color=color.new(color.red, 0), title='Short EMA')
// plot(longEma, color=color.new(color.blue, 0), title='Long EMA')

// // Display Table
// table statsTable = table.new(position=position.top_right, columns=2, rows=4, bgcolor=color.gray, border_width=1)
// table.cell(statsTable, column=0, row=0, text='Win Rate (%)', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=0, text=str.tostring(winRate), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=1, text='Total Trades', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=1, text=str.tostring(totalTrades), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=2, text='Average Profit', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=2, text=str.tostring(averageProfit), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=3, text='Average Loss', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=3, text=str.tostring(averageLoss), bgcolor=color.blue)


Más.