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

Estrategia de negociación adaptativa de doble EMA y fuerza relativa

El autor:¿ Qué pasa?, Fecha: 2024-12-04 15:29:05
Las etiquetas:El EMAIndicador de riesgoRS

img

Resumen general

Esta estrategia es un sistema de negociación integral que combina un sistema dual de EMA, índice de fortaleza relativa (RSI) y análisis de fortaleza relativa (RS). La estrategia confirma las tendencias a través del cruce de promedios móviles exponenciales (EMA) de 13 y 21 días mientras utiliza los valores de RSI y RS en relación con un índice de referencia para la confirmación de señales, implementando un mecanismo de decisión comercial multidimensional. También incluye mecanismos de control de riesgos basados en máximos de 52 semanas y juicios de condiciones de reingreso.

Principios de estrategia

La estrategia emplea un mecanismo de confirmación de señales múltiples:

  1. Las señales de entrada requieren las siguientes condiciones:
    • EMA13 cruza por encima de EMA21 o el precio por encima de EMA13
    • RSI por encima de 60
    • Fuerza relativa positiva (RS)
  2. Las condiciones de salida incluyen:
    • El precio cae por debajo de la EMA21
    • Indicador de rentabilidad por debajo de 50
    • El RS se vuelve negativo.
  3. Condiciones de reentrada:
    • Los precios se cruzan por encima de la EMA13 y la EMA13 por encima de la EMA21
    • El RS sigue siendo positivo.
    • O el precio se rompe por encima de la semana pasada

Ventajas estratégicas

  1. La confirmación de múltiples señales reduce los riesgos de fuga falsa
  2. La integración del análisis de la fuerza relativa filtra eficazmente a los mejores
  3. Adopta el mecanismo de ajuste del marco de tiempo adaptativo
  4. Sistema completo de control de riesgos
  5. Mecanismo de reingreso inteligente
  6. Visualización del estado de las operaciones en tiempo real

Riesgos estratégicos

  1. Posibilidad de operaciones frecuentes en mercados agitados
  2. Los indicadores múltiples pueden dar lugar a señales con retraso
  3. Es posible que los umbrales fijos de la IOR no se adapten a todas las condiciones de mercado
  4. El cálculo del RS depende de la exactitud del índice de referencia
  5. El alto stop-loss de 52 semanas podría ser demasiado flojo

Direcciones para la optimización de la estrategia

  1. Introducción de umbrales adaptativos de los índices de rentabilidad
  2. Optimización de la lógica de las condiciones de reingreso
  3. Adición de la dimensión de análisis de volumen
  4. Mejora de los mecanismos de obtención de beneficios y de suspensión de pérdidas
  5. Implementación de filtros de volatilidad
  6. Optimización de los períodos de cálculo de la resistencia relativa

Resumen de las actividades

La estrategia construye un sistema de negociación integral mediante la combinación de análisis técnico y análisis de fuerza relativa. Su mecanismo de confirmación de señales múltiples y sistema de control de riesgos lo hacen altamente práctico. A través de las direcciones de optimización sugeridas, hay margen para una mayor mejora. La implementación exitosa requiere que los operadores tengan un profundo conocimiento del mercado y realicen los ajustes de parámetros apropiados basados en las características específicas del instrumento de negociación.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-03 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA 13 & 21 Entry Exit", overlay=true)

// Define the EMAs
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)

// Define the RSI
rsi = ta.rsi(close, 14)

// Calculate the closing price relative to Nifty 50
//nifty50 = request.security("NSE:NIFTY", timeframe.period, close)
//closeRelative = close / nifty50

// Define a base period (e.g., 123) and adjust it based on the timeframe
//basePeriod = 123

// Calculate the effective period based on the timeframe
//effectivePeriod = basePeriod * (timeframe.isintraday ? (60 / timeframe.multiplier) : 1)

// Calculate the EMA
//rs = ta.ema(closeRelative, effectivePeriod)

// Define the Relative Strength with respect to NIFTY 50
nifty50 = request.security("swap", "D", close)
rs = ta.ema(close / nifty50, 55 )

// Define the previous 2-week low and last week's high
twoWeekLow = ta.lowest(low, 10)  // 10 trading days roughly equal to 2 weeks
lastWeekHigh = ta.highest(high, 5)  // 5 trading days roughly equal to 1 week
fiftytwoWeekhigh = ta.highest(high, 52*5) // 252 tradingdays roughly equal to 52 week.

// Long condition: EMA 21 crossing above EMA 55, price above EMA 21, RSI > 50, and RS > 0
longCondition = ta.crossover(ema13, ema21) or close > ema13 and rsi > 60 and rs > 0

// Exit condition: Price closing below EMA 55 or below the previous 2-week low
exitCondition = close < ema21 or rsi < 50 or rs < 0 //or close < fiftytwoWeekhigh*0.80

// Re-entry condition: Price crossing above EMA 21 after an exit, EMA 21 > EMA 55, and RS > 1
reEntryCondition = ta.crossover(close, ema13) and ema13 > ema21 and rs > 0

// Re-entry condition if trailing stop loss is hit: Price crossing above last week's high
reEntryAfterSL = ta.crossover(close, lastWeekHigh)

// Plot the EMAs
plot(ema13 ,color=color.green, title="EMA 13",linewidth = 2)
plot(ema21, color=color.red, title="EMA 21",linewidth = 2)


// Plot buy and sell signals
plotshape(series=longCondition, location=location.abovebar, color=color.rgb(50, 243, 130), style=shape.flag, title="Buy Signal")
plotshape(series=exitCondition, location=location.belowbar, color=color.red, style=shape.xcross, title="Sell Signal")
plotshape(series=reEntryCondition or reEntryAfterSL, location=location.belowbar, color=color.blue, style=shape.labelup, title="Re-entry Signal")
//plotshape(series = fiftytwoWeekhigh,location=location.abovebar, color=color.blue,style=shape.flag, title="52WH")

// Plot background color for RS > 0
//bgcolor(rs > 0 ? color.new(color.green, 90) : na, title="RS Positive Background")
// Plot the previous 2-week low and last week's high
// plot(twoWeekLow, color=color.orange, title="2-Week Low")
// plot(lastWeekHigh, color=color.purple, title="Last Week High")

// Strategy logic
if (longCondition or reEntryCondition or reEntryAfterSL)
    strategy.entry("Long", strategy.long)

if (exitCondition)
    strategy.close("Long")

 // Calculate Stop Loss (SL) and Profit
var float entryPrice = na
var float stopLoss = na
var float profit = na

if (strategy.opentrades > 0)
    entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
    stopLoss := fiftytwoWeekhigh * 0.80
    profit := (close - entryPrice) / entryPrice * 100

// Display the strategy table
var table strategyTable = table.new(position.top_right, 4, 2, border_width = 1)

// Make the table movable
tableX = input.int(0, title="Table X Position")
tableY = input.int(0, title="Table Y Position")

// Add size options for the table
tableSize = input.string("small", title="Table Size", options=["tiny", "small", "large"])

// Adjust table size based on user input
tableWidth = tableSize == "tiny" ? 2 : tableSize == "small" ? 4 : 6
tableHeight = tableSize == "tiny" ? 1 : tableSize == "small" ? 2 : 3

// Create the table with the specified size
//table = table.new(position.top_right, tableWidth, tableHeight, border_width = 1)

// Position the table based on user input
// table.cell(strategyTable, tableX, tableY, "Entry Price",  bgcolor=#18eef9)
// table.cell(strategyTable, tableX, tableY + 1, str.tostring(entryPrice, format.mintick), bgcolor=#18eef9)
// table.cell(strategyTable, tableX + 1, tableY, "Stop Loss (20%)", bgcolor=color.red)
// table.cell(strategyTable, tableX + 1, tableY + 1, str.tostring(stopLoss, format.mintick), bgcolor=color.red)
// table.cell(strategyTable, tableX + 2, tableY, "Profit (%)", bgcolor=color.green)
// table.cell(strategyTable, tableX + 2, tableY + 1, str.tostring(profit, format.percent), bgcolor=color.green)


Relacionados

Más.