Estratégia de acompanhamento de tendência de Triple EMA


Data de criação: 2023-09-27 17:19:26 última modificação: 2023-09-27 17:19:26
cópia: 0 Cliques: 770
1
focar em
1617
Seguidores

Visão geral

Esta estratégia foi modificada com base na estratégia Amazing scalper for majors with risk management da SoftKill21 para reduzir o atraso com a substituição da original média móvel simples por uma média móvel de índice triplo. A estratégia se aplica ao ciclo de 1 minuto dos principais pares de moedas, usando um método de acompanhamento de tendências para comprar e vender operações de acordo com o cruzamento e o cruzamento do ouro do EMA rápido, EMA padrão e EMA lento.

Princípio da estratégia

A estratégia usa três médias móveis de índices de diferentes períodos: 25 EMAs rápidas, 50 EMAs padrão e 100 EMAs lentas. Quando a EMA rápida atravessa a EMA padrão e a EMA lenta, gera um sinal de compra; Quando a EMA rápida atravessa a EMA padrão e a EMA lenta, gera um sinal de venda.

Especificamente, a estratégia calcula primeiro as três linhas de EMA e, em seguida, julga se a EMA rápida forma um cruzamento ou uma forquilha de ouro com a EMA padrão e a EMA lenta, gerando um sinal de compra ou venda se simultaneamente forem cumpridas as condições de coincidência com o horário de abertura do mercado em Londres ou Nova York. Ao determinar o tamanho da posição, a estratégia calcula primeiro a porcentagem fixa de juros da conta como uma abertura de risco e, em seguida, a conversão para o número de contratos e o número de horas padrão, ajustando dinamicamente a posição de cada pedido.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O uso de três EMAs, que permitem a suavização efetiva dos dados de preços e a identificação da direção da tendência. O EMA rápido é sensível às mudanças de preço, o EMA padrão é de acompanhamento estável e o EMA lento filtra o ruído.

  2. Aplicação da técnica de suavização de índice secundário para calcular o EMA, reduzindo a latência e tornando o sinal mais sensível.

  3. Combinação com os horários principais de negociação para evitar sinais enganosos em horários não principais de negociação.

  4. Adotar princípios de gerenciamento de risco e ajustar as posições de acordo com os direitos e interesses da conta.

  5. A lógica da estratégia é simples, clara, fácil de entender e apropriada para quem está começando.

  6. Pode ser ajustado de forma otimizada para diferentes pares de moedas e períodos de tempo.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A EMA não consegue filtrar eficazmente as falsas rupturas de curto prazo causadas por surtos, que podem gerar sinais errados. É recomendável analisar a filtragem em combinação com outros indicadores.

  2. As posições de porcentagem fixa não podem ser ajustadas dinamicamente às flutuações do mercado, existem problemas de posições excessivamente grandes ou pequenas. Pode-se considerar a introdução de posições de ajuste dinâmico de indicadores como a taxa de flutuação.

  3. Considerando apenas os dois principais períodos de negociação, pode-se perder oportunidades de negociação em outros períodos.

  4. Não tem mecanismo de parada de perda, não é possível controlar efetivamente o prejuízo unilateral. Pode ser configurado o prejuízo móvel ou o tempo de parada.

  5. O cruzamento EMA tem um certo atraso e pode perder o melhor momento de entrada. Pode ser considerado reduzir o ciclo EMA ou combinar com outros indicadores de antecedência.

  6. A eficácia pode ser afetada pelo custo de transação. Recomenda-se ajustar adequadamente o stop loss e a posição de parada.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Teste diferentes parâmetros de ciclo EMA para encontrar a combinação de parâmetros mais ótima. Pode-se introduzir tecnologias de otimização dinâmica do ciclo EMA, como o auto-adaptado EMA.

  2. Adicionar outros indicadores de filtragem, como RSI, faixa de Brin, etc., para melhorar a qualidade do sinal.

  3. Introdução de mecanismos de gestão de posições dinâmicas, ajustando as posições de acordo com a volatilidade do mercado e a rentabilidade.

  4. Adicionar o stop móvel e o stop temporal para limitar os prejuízos. Ajustar adequadamente o ponto de stop.

  5. Teste diferentes períodos de negociação para encontrar o melhor momento de negociação. Pode ser combinado com um período de filtragem de indicadores como a volatilidade.

  6. Otimizar o nível de parada e perda, equilibrar o tamanho do ganho e a taxa de vitória. Introduzir paradas inteligentes, como a parada da linha de paralelo.

  7. Tente modificar e melhorar os métodos de cálculo do EMA, como o EMA com ponderação linear, para reduzir o atraso.

  8. Busca de parâmetros ótimos em combinação com métodos de aprendizagem automática.

  9. Modelagem de custos de transação, ajuste do sistema para maximizar o lucro líquido.

Através destas otimizações, pode-se aumentar a rentabilidade do sistema, controlar a retração e ampliar o alcance de aplicação, resultando numa estratégia de negociação mais forte e estável.

Resumir

Esta estratégia é clara, usando a identificação de tendências de EMAs triplos, para operar com os principais momentos de negociação, e usando a proporção da conta para determinar a posição, pertence a uma estratégia típica de seguimento de tendências. A estratégia tem um grande espaço para otimização, através de parâmetros de otimização, melhorias no mecanismo, introdução de tecnologia, etc.

Código-fonte da estratégia
/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// original author SoftKill21
//@version=4
//@capam 

strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true)
strategy.initial_capital = 50000
len1 = input(25, minval=1, title="Length")
len2 = input(50, minval=1, title="Length")
len3 = input(100, minval=1, title="Length")

src = input(close, title="Source")
tmp1 = ema(src, len1)
tmp2 = ema(src, len2)
tmp3 = ema(src, len3)
fastemaOut = 2*tmp1 - ema(tmp1, len1)
standardemaOut = 2*tmp2 - ema(tmp2, len2)
slowemaOut = 2*tmp3 - ema(tmp3, len3)
//fastemaOut = sma(src, len1)
//standardemaOut = sma(src, len2)
//slowemaOut = sma(src, len3)

plot(fastemaOut, color=color.black, title="First EMA")
plot(standardemaOut, color=color.yellow, title="Second EMA")
plot(slowemaOut, color=color.blue, title="Third EMA")


timeinrange(res, sess) => time(res, sess) != 0


londopen = timeinrange(timeframe.period, "0300-1100") 
nyopen = timeinrange(timeframe.period, "0800-1600") 

longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen)
shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen)

longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen
shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen
tp = input(50,title="TP")
sl = input(100, title="SL")

tradeLondon =  input(title="Trade london session?", type=input.bool, defval=true)
tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true)

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000        

if(tradeLondon==true)
    strategy.entry("long",1,when=longCondition)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

if(tradeNewyork==true)
    strategy.entry("long",1,when=longCondition2)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition2)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

// strategy.risk.max_intraday_filled_orders(2)