Estratégia de negociação de risco controlado pelo MACD

Autora:ChaoZhang, Data: 2023-10-26 15:51:34
Tags:

img

Resumo

Esta estratégia projeta uma estratégia de negociação de longo prazo que controla o risco de cada negociação com base no indicador MACD. Em comparação com as estratégias tradicionais de flipping longo-curto, esta estratégia se concentra mais no controle do risco de cada negociação. Ao calcular níveis razoáveis de stop loss e take profit e definir tamanhos de posição apropriados, limita a perda máxima para cada negociação. Isso pode controlar efetivamente os drawdowns e alcançar lucros estáveis a longo prazo.

Princípios

A estratégia primeiro calcula a linha MACD e a linha de sinal do indicador MACD. Quando a linha MACD cruza acima da linha de sinal, ela é determinada como um sinal de compra. Para filtrar falhas, a estratégia requer barsince ((crossover ((macd_line, signal_line)) <= 5, o que significa que a quebra ocorreu dentro das 5 barras mais recentes. Também requer que tanto a linha MACD quanto a linha de sinal estejam abaixo de 0, indicando uma condição de sobrevenda, e o fechamento esteja acima da linha WMA, indicando uma tendência de alta. Quando as condições acima são atendidas, uma posição longa é aberta.

Para cada negociação, a estratégia calcula níveis razoáveis de stop loss e take profit. O stop loss é definido na menor das 3 barras mais recentes. O take profit é definido no preço de entrada mais 4 vezes a distância entre o stop loss e o preço de entrada.

A chave é que a estratégia calcula o tamanho da posição específica com base no risco máximo acessível. O parâmetro capital_risk define a porcentagem do capital total que pode ser perdido para cada negociação. O tamanho da posição em USD é então calculado com base no intervalo de stop loss.

O risco de cada transacção é controlado no limite de 1% do capital total, o que permite controlar eficazmente os drawdowns.

Vantagens

  • O controlo do risco tem prioridade, o risco por transacção é controlado
  • Dimensão da posição otimizada para maximizar o uso do capital
  • A estratégia de stop loss controla de forma eficaz os drawdowns
  • Um lucro razoável permite um elevado potencial de lucro

Riscos e melhorias

  • MACD tem atraso, pode perder mudanças rápidas de tendência
  • A definição de "stop loss" ou "take profit" pode reduzir os lucros ou aumentar o risco.
  • A alta frequência de negociação pode aumentar os custos de transacção

Melhorias possíveis:

  • Incorporar outros indicadores para determinar a tendência, evitar o atraso do MACD
  • Otimizar os algoritmos de stop loss e take profit para serem mais flexíveis
  • Relaxar a frequência de negociação para reduzir os custos de transacção

Resumo

Esta estratégia determina a direção da tendência usando o MACD, e toma o controle de risco como a prioridade para negociar com o dimensionamento de posição otimizado. As chaves são o controle de risco e o dimensionamento de posição, que podem alcançar lucros constantes a longo prazo. Mas o MACD tem algumas falhas, e os mecanismos de stop loss/take profit precisam de mais otimização. A otimização adicional do uso do indicador, as configurações de stop loss/take profit e a redução da frequência de negociação podem tornar a estratégia ainda mais poderosa.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD )

capital_risk    = input( 1.0, "% capital risk per trade" ) / 100
r_exit          = input( 4.0, "Take Profit in 'R'" )
wma_length      = input( 150, 'WMA Bias Length' )

[macd_line, signal_line, hist ] = macd(close, 12, 26, 9)

w_line = wma( close, wma_length )

golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0

float stop = na
float tp = na

// For a stop, use a recent low 
stop := golong ? lowest(low, 3)[1] : stop[1]
range = abs(close - stop)
tp := golong ? close + (r_exit * range) : tp[1]


// This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity`
how_much_willing_to_lose = strategy.equity * capital_risk
// Spread the risk across the stop range 
position_size_in_usd = how_much_willing_to_lose / (range / close)
// Sized specified in base contract
position_size_in_contracts = position_size_in_usd / close

// Enter the position
if golong
    strategy.entry("long", strategy.long, qty=position_size_in_contracts)
    strategy.exit("long exit","long", stop=stop, limit=tp)

// experimental exit strategy
// hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' )
// if hist < 0 and hist_strength == 'strong' and falling( hist, 8 )
//     strategy.close("long")


plot( strategy.equity,  color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )

Mais.