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

Sistema de negociação de rastreamento de impulso híbrido de dupla cadeia EMA

Autora:ChaoZhang, Data: 2024-11-29 17:04:57
Tags:EMAMA

img

Resumo

Esta estratégia é um sistema de negociação inovador baseado em médias móveis exponenciais (EMA), capturando oportunidades de mercado através de duas cadeias de negociação independentes definidas em diferentes prazos.

Princípios de estratégia

A estratégia emprega um projeto de dupla cadeia, com cada cadeia tendo sua lógica única de entrada e saída:

A cadeia 1 (Tendência a longo prazo) utiliza prazos semanais e diários:

  • Signais de entrada: gerados quando o preço de fechamento ultrapassa a EMA num período semanal
  • Sinal de saída: gerado quando o preço de fechamento cruza abaixo da EMA num período diário
  • Período de EMA por defeito é de 10, ajustável conforme necessário

A cadeia 2 (Momentum de curto prazo) usa prazos de 12 horas e 9 horas:

  • Sinal de entrada: gerado quando o preço de fechamento ultrapassa a EMA num período de 12 horas
  • Sinal de saída: gerado quando o preço de fechamento cruza abaixo da EMA num período de 9 horas
  • Período EMA por defeito é 9, ajustável conforme necessário

Vantagens da estratégia

  1. Análise multidimensional do mercado: captura abrangente da tendência do mercado através de combinações de prazos
  2. Alta flexibilidade: duas cadeias podem ser ativadas ou desativadas independentemente
  3. Controlo de riscos robusto: a confirmação de vários prazos reduz os falsos sinais
  4. Forte adaptabilidade aos parâmetros: os períodos e os prazos da EMA são ajustáveis
  5. Funcionalidade completa de backtesting: configurações de períodos de teste integradas para verificação de estratégia

Riscos estratégicos

  1. Risco de reversão da tendência: pode manifestar atraso nos mercados voláteis
  2. Risco de configuração de prazos: mercados diferentes podem exigir combinações de prazos diferentes
  3. Risco de otimização de parâmetros: a otimização excessiva pode conduzir a um sobreajuste
  4. Risco de sobreposição de sinais: os disparadores simultâneos de ambas as cadeias podem aumentar o risco de posição

Sugestões de controlo de riscos:

  • Estabelecer níveis razoáveis de stop-loss
  • Ajustar os parâmetros com base nas características do mercado
  • Realizar um backtesting completo antes da negociação ao vivo
  • Posições de controlo por transacção

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

  1. Optimização de filtragem de sinal:
  • Adicionar mecanismo de confirmação de volume
  • Incorporar indicadores de volatilidade
  • Incluir confirmação da força da tendência
  1. Optimização do controlo de riscos:
  • Desenvolver um mecanismo dinâmico de stop-loss
  • Sistema de gestão de posição de projeto
  • Adicionar função de controle de extração
  1. Optimização de prazos:
  • Pesquisa combinações de prazos ideais
  • Desenvolver mecanismos de calendário adaptativo
  • Adicionar funcionalidade de reconhecimento do estado do mercado

Resumo

O sistema de negociação de impulso híbrido de cadeia dupla EMA alcança análise de mercado multidimensional através de uma combinação inovadora de estratégias de média móvel de longo e curto prazo. O projeto do sistema é flexível e pode ser ajustado de acordo com diferentes condições de mercado e estilos de comerciante, mostrando forte praticidade. Através de um controle de risco adequado e otimização contínua, esta estratégia tem o potencial de alcançar retornos estáveis na negociação real.


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

//@version=5
strategy(title='Dual Chain Strategy', shorttitle='DualChain', overlay=true)

// User inputs for enabling/disabling chains
enableChain1 = input.bool(true, title='Enable Chain 1')
enableChain2 = input.bool(true, title='Enable Chain 2')

// User inputs for the first chain
len1 = input.int(10, minval=1, title='Length Chain 1 EMA', group="Chain 1")
src1 = input(close, title='Source Chain 1', group="Chain 1")
tf1_entry = input.timeframe("W", title='Chain 1 Entry Timeframe', group="Chain 1")
tf1_exit = input.timeframe("D", title='Chain 1 Exit Timeframe', group="Chain 1")

// Weekly timeframe EMA for Chain 1
entryEMA1 = request.security(syminfo.tickerid, tf1_entry, ta.ema(src1, len1))

// Daily timeframe EMA for Chain 1
exitEMA1 = request.security(syminfo.tickerid, tf1_exit, ta.ema(src1, len1))

// User inputs for the second chain
len2 = input.int(9, minval=1, title='Length Chain 2 EMA', group="Chain 2")
src2 = input(close, title='Source Chain 2', group="Chain 2")
tf2_entry = input.timeframe("720", title='Chain 2 Entry Timeframe (12H)', group="Chain 2")  // 12 hours
tf2_exit = input.timeframe("540", title='Chain 2 Exit Timeframe (9H)', group="Chain 2")    // 9 hours

// Entry timeframe EMA for Chain 2
entryEMA2 = request.security(syminfo.tickerid, tf2_entry, ta.ema(src2, len2))

// Exit timeframe EMA for Chain 2
exitEMA2 = request.security(syminfo.tickerid, tf2_exit, ta.ema(src2, len2))

// Plotting Chain 1 EMAs
plot(enableChain1 ? entryEMA1 : na, title='Chain 1 Entry EMA', color=color.new(color.blue, 0))
plot(enableChain1 ? exitEMA1 : na, title='Chain 1 Exit EMA', color=color.new(color.yellow, 0))

// Plotting Chain 2 EMAs
plot(enableChain2 ? entryEMA2 : na, title='Chain 2 Entry EMA', color=color.new(color.green, 0))
plot(enableChain2 ? exitEMA2 : na, title='Chain 2 Exit EMA', color=color.new(color.red, 0))

// Backtesting period
startDate = input(timestamp('2015-07-27'), title="StartDate")
finishDate = input(timestamp('2026-01-01'), title="FinishDate")
time_cond = true

// Entry Condition (Chain 1)
bullishChain1 = enableChain1 and ta.crossover(src1, entryEMA1)
bearishChain1 = enableChain1 and ta.crossunder(src1, entryEMA1)

// Exit Condition (Chain 1)
exitLongChain1 = enableChain1 and ta.crossunder(src1, exitEMA1)
exitShortChain1 = enableChain1 and ta.crossover(src1, exitEMA1)

// Entry Condition (Chain 2)
bullishChain2 = enableChain2 and ta.crossover(src2, entryEMA2)
bearishChain2 = enableChain2 and ta.crossunder(src2, entryEMA2)

// Exit Condition (Chain 2)
exitLongChain2 = enableChain2 and ta.crossunder(src2, exitEMA2)
exitShortChain2 = enableChain2 and ta.crossover(src2, exitEMA2)

// Debugging: Plot entry signals for Chain 1
plotshape(bullishChain1, color=color.new(color.green, 0), style=shape.labelup, text='BUY C1', location=location.belowbar)
plotshape(bearishChain1, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C1', location=location.abovebar)

// Debugging: Plot entry signals for Chain 2
plotshape(bullishChain2, color=color.new(color.green, 0), style=shape.labelup, text='BUY C2', location=location.belowbar)
plotshape(bearishChain2, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C2', location=location.abovebar)

// Trade Execution for Chain 1
if bullishChain1 and time_cond
    strategy.entry('BUY_Chain_1', strategy.long)

if bearishChain1 and time_cond
    strategy.entry('SELL_Chain_1', strategy.short)

// Exit trades based on daily conditions for Chain 1
if exitLongChain1 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_1', when=exitLongChain1)

if exitShortChain1 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_1', when=exitShortChain1)

// Trade Execution for Chain 2
if bullishChain2 and time_cond
    strategy.entry('BUY_Chain_2', strategy.long)

if bearishChain2 and time_cond
    strategy.entry('SELL_Chain_2', strategy.short)

// Exit trades based on daily conditions for Chain 2
if exitLongChain2 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_2', when=exitLongChain2)

if exitShortChain2 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_2', when=exitShortChain2)

// Close all positions outside the backtesting period
if not time_cond
    strategy.close_all()


Relacionados

Mais.