O recurso está a ser carregado... Carregamento...

Estratégia de negociação adaptativa de EMA dupla e força relativa

Autora:ChaoZhang, Data: 2024-12-04 15:29:05
Tags:EMARSIRS

img

Resumo

Esta estratégia é um sistema de negociação abrangente que combina um sistema dual EMA, Índice de Força Relativa (RSI) e análise de Força Relativa (RS). A estratégia confirma as tendências através do cruzamento de médias móveis exponenciais (EMA) de 13 dias e 21 dias, enquanto utiliza os valores RSI e RS em relação a um índice de referência para confirmação de sinal, implementando um mecanismo de decisão de negociação multidimensional.

Princípios de estratégia

A estratégia utiliza um mecanismo de confirmação de sinais múltiplos:

  1. Os sinais de entrada exigem as seguintes condições:
    • EMA13 cruza acima da EMA21 ou preço acima da EMA13
    • RSI acima de 60
    • Força relativa positiva (RS)
  2. As condições de saída incluem:
    • Preço cai abaixo da EMA21
    • RSI inferior a 50
    • RS torna-se negativo
  3. Condições de reentrada:
    • Os preços cruzam acima da EMA13 e da EMA13 acima da EMA21
    • RS permanece positivo
    • Ou os preços ultrapassam o máximo da semana passada.

Vantagens da estratégia

  1. A confirmação de múltiplos sinais reduz os riscos de falha de fuga
  2. A integração da análise de força relativa filtra efetivamente os desempenhos fortes
  3. Adopta um mecanismo de ajustamento do quadro de tempo adaptativo
  4. Sistema abrangente de controlo dos riscos
  5. Mecanismo de reentrada inteligente
  6. Visualização em tempo real do estado das transacções

Riscos estratégicos

  1. Possíveis trocas frequentes em mercados agitados
  2. Indicadores múltiplos podem levar a sinais atrasados
  3. Os limiares fixos do RSI podem não corresponder a todas as condições de mercado
  4. O cálculo do RS depende da precisão do índice de referência
  5. O alto stop-loss de 52 semanas pode ser muito frouxo

Orientações para a otimização da estratégia

  1. Introdução de limiares de RSI adaptativos
  2. Optimização da lógica das condições de reentrada
  3. Adição da dimensão de análise de volume
  4. Melhoria dos mecanismos de obtenção de lucros e de stop-loss
  5. Implementação de filtros de volatilidade
  6. Optimização dos períodos de cálculo da resistência relativa

Resumo

A estratégia constrói um sistema de negociação abrangente, combinando análise técnica e análise de força relativa. Seu mecanismo de confirmação de sinais múltiplos e sistema de controle de risco tornam-no altamente prático. Através das direções de otimização sugeridas, há espaço para melhorias adicionais. A implementação bem-sucedida requer que os comerciantes tenham uma compreensão profunda do mercado e façam ajustes apropriados de parâmetros com base nas características específicas do instrumento de negociação.


/*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

Mais.