Estrategia adaptativa híbrida de fuerza relativa y media móvil dual

EMA RSI RS
Fecha de creación: 2024-12-04 15:29:05 Última modificación: 2024-12-04 15:29:05
Copiar: 0 Número de Visitas: 414
1
Seguir
1617
Seguidores

Estrategia adaptativa híbrida de fuerza relativa y media móvil dual

Descripción general

La estrategia es un sistema de negociación integral que combina un sistema de doble línea de equilibrio, un indicador de fuerza relativa (RSI) y un análisis de fuerza relativa (RS). La estrategia realiza un mecanismo de decisión de negociación multidimensional a través de la confirmación de tendencias cruzadas en los promedios móviles (EMA) de los índices de los días 13 y 21 y la confirmación de la señal de negociación en combinación con el RSI y el valor de RS en relación con el índice de referencia.

Principio de estrategia

La estrategia se basa en el mecanismo de confirmación de múltiples señales:

  1. La señal de entrada debe cumplir al mismo tiempo las siguientes condiciones:
    • El EMA13 lleva el EMA21 o el precio es más alto que el EMA13
    • El RSI es mayor que 60.
    • La intensidad relativa (RS) es positiva
  2. Las condiciones de salida incluyen:
    • El precio cae por debajo de la EMA21
    • El RSI está por debajo de 50.
    • RS es negativo
  3. Los requisitos para reingresar:
    • El precio es de EMA13 y EMA13 es mayor que EMA21
    • RS se mantiene como un valor positivo
    • O el precio ha superado los máximos de la semana pasada.

Ventajas estratégicas

  1. El mecanismo de confirmación de múltiples señales reduce el riesgo de una falsa brecha
  2. Combinado con análisis de intensidad relativa, selecciona variedades fuertes de manera efectiva
  3. Mecanismos de ajuste por ciclo de tiempo adaptativo
  4. Un sistema de control de riesgos adecuado
  5. Mecanismo de reingreso inteligente incluido
  6. Ofrece visualizaciones de estado de transacciones en tiempo real

Riesgo estratégico

  1. Los mercados convulsionados pueden generar transacciones frecuentes
  2. La dependencia de múltiples indicadores puede causar un retraso en la señal
  3. El umbral RSI fijo puede no ser adecuado para todas las circunstancias del mercado
  4. El cálculo de la intensidad relativa depende de la precisión del índice de referencia
  5. El límite de pérdidas de 52 semanas puede ser demasiado flexible

Dirección de optimización de la estrategia

  1. Introducción de un umbral RSI adaptado
  2. Optimización de la lógica de los criterios de reingreso
  3. Aumentar las dimensiones de análisis de volumen de transacciones
  4. Mejorar el mecanismo de stop-profit y stop-loss
  5. Añadir un filtro de fluctuación
  6. Optimización del ciclo de cálculo de intensidad relativa

Resumir

La estrategia, mediante la combinación de análisis técnico y análisis de intensidad relativa, construye un sistema de negociación integral. Su mecanismo de confirmación de múltiples señales y su sistema de control de riesgos lo hacen muy práctico. A través de la dirección de optimización sugerida, la estrategia tiene espacio para mejorar aún más. La implementación exitosa de la estrategia requiere que el comerciante tenga un profundo conocimiento del mercado y realice los ajustes de parámetros adecuados según las características de la variedad de negociación específica.

Código Fuente de la Estrategia
/*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)