Estratégia de negociação da EMA e MACD com stop loss

Autora:ChaoZhang, Data: 2023-09-20 11:21:14
Tags:

Resumo

Esta estratégia combina a média móvel exponencial (EMA) e os indicadores de divergência de convergência média móvel (MACD) para gerar sinais de negociação e adota stop loss para controlar os riscos.

Estratégia lógica

Quando a linha EMA rápida cruza acima da linha EMA lenta e o histograma MACD vira de baixa, a estratégia é longa. Quando existe uma posição longa, uma linha de stop loss descendente é definida. Se o preço cair abaixo da linha de stop loss por uma certa porcentagem, a posição longa será interrompida.

Especificamente, a estratégia usa a EMA de 7 dias e a EMA de 14 dias para construir as EMAs rápidas e lentas. O valor do MACD é obtido subtraindo a EMA de 26 dias da EMA de 12 dias e a linha de sinal é obtida com uma EMA de 9 dias do MACD. Quando a EMA de 7 dias cruza acima da EMA de 14 dias e o valor do MACD cruza acima da linha de sinal, uma posição longa é aberta. Em seguida, uma linha de stop loss descendente é definida. Se o preço cair de níveis mais altos por uma certa porcentagem, a posição longa será interrompida.

Análise das vantagens

Esta estratégia combina os indicadores EMA e MACD, que podem efetivamente filtrar falhas. A EMA julga a direção da tendência e o MACD determina os pontos de entrada. A combinação dos dois pode reduzir a frequência de negociação enquanto melhora a qualidade do sinal.

Os testes de retrospectiva mostram que esta estratégia pode gerar retornos decentes mesmo em mercados de baixa, indicando certa robustez.

Análise de riscos

A estratégia baseia-se principalmente em indicadores, com o risco de ser esmagada. Durante as consolidações de faixa, o EMA e o MACD podem gerar sinais falsos excessivos, levando a excesso de negociação e perdas.

A expansão dos períodos de EMA adequadamente poderia reduzir os falsos sinais. Outros indicadores também poderiam ser combinados para filtrar sinais, como indicadores de volume ou volatilidade. Além disso, a porcentagem de stop loss pode ser ajustada com base nas condições do mercado, para equilibrar os riscos de stop loss e whipsaw.

Orientações de otimização

  1. Poderiam ser testadas diferentes combinações de períodos da EMA para encontrar parâmetros mais adequados.

  2. Outros indicadores, como RSI, KD, poderiam ser adicionados para filtragem de sinais e melhoria da qualidade.

  3. As percentagens de stop loss podem ser ajustadas com base em diferentes produtos, com paradas de trailers dinâmicas.

  4. O breakout, o reconhecimento de padrões e outras técnicas podem ser incorporados para regras de entrada e saída mais personalizáveis.

  5. O aprendizado de máquina poderia ajudar a prever a direcção geral da tendência para ajudar a EMA.

Resumo

Em geral, a estratégia é bastante robusta, gerando retornos decentes mesmo em mercados de baixa. Mas existem certos riscos de serrilho, que exigem ajuste de parâmetros e filtragem de sinal.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-19 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Coinrule

//@version=5
strategy('EMA and MACD with Trailing Stop Loss',
         overlay=true,
         initial_capital=1000,
         process_orders_on_close=true,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=30,
         commission_type=strategy.commission.percent,
         commission_value=0.1)

showDate = input(defval=true, title='Show Date Range')
timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0)
notInTrade = strategy.position_size <= 0

// EMAs 
fastEMA = ta.ema(close, 7)
slowEMA = ta.ema(close, 14)
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.green)
//buyCondition1 = ta.crossover(fastEMA, slowEMA)
buyCondition1 = fastEMA > slowEMA


// DMI and MACD inputs and calculations
[macd, macd_signal, macd_histogram] = ta.macd(close, 12, 26, 9)
buyCondition2 = ta.crossover(macd_signal, macd)


// Configure trail stop level with input options
longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01
shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01

// Determine trail stop loss prices
longStopPrice = 0.0
shortStopPrice = 0.0

longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + shortTrailPerc)
    math.min(stopValue, shortStopPrice[1])
else
    999999
    

if (buyCondition1 and buyCondition2 and notInTrade and timePeriod)
    strategy.entry(id="Long", direction = strategy.long)

strategy.exit(id="Exit", stop = longStopPrice, limit = shortStopPrice)


//if (sellCondition1 and sellCondition2 and notInTrade and timePeriod)
//strategy.close(id="Close", when = sellCondition1 or sellCondition2)


Mais.