Tendência de seguir a estratégia de compra e venda

Autora:ChaoZhang, Data: 2023-10-17 12:59:59
Tags:

img

Resumo

A estratégia de compra e venda de tendência é uma estratégia de negociação de tendência simples. A premissa é determinar a direção da tendência com base na média móvel e comprar / vender as quedas e quedas na tendência.

Estratégia lógica

A estratégia usa a média móvel simples (SMA) para determinar a direção da tendência. Em uma tendência de alta, quando a ação da vela oferece um dip, a estratégia vai longo quando o máximo da vela atual quebra o máximo da vela anterior. Em uma tendência de baixa, quando a ação da vela oferece um blip, a estratégia vai curta quando o mínimo da vela atual quebra o mínimo da vela anterior.

A estratégia também usa %K e %D do oscilador Blanchflower para determinação da tendência. Ele fechará a posição e negociará na direção oposta quando %K cruzar acima de %D. Além disso, o MACD e a linha de sinal atuam como filtros para aceitar apenas negociações alinhadas com a direção da tendência determinada pelo MACD e pelo sinal.

A estratégia pode ser apenas longa, curta ou ambas. O mês de início e o ano permitem backtesting a partir desse ponto até agora. Todos os parâmetros, como período SMA, período %K, período %D, parâmetros MACD etc., são personalizáveis.

Análise das vantagens

  • Usando SMA para determinar a tendência evita whipssaws e negociações incorretas
  • A aplicação do oscilador Blanchflower detecta a reversão da tendência e controla o risco
  • O MACD e o filtro de sinal reduzem as negociações ruidosas contra a tendência
  • Parâmetros personalizáveis adaptados a diferentes comportamentos de preços
  • A negociação apenas de longo prazo, apenas de curto prazo ou bidireccional adapta-se aos regimes de mercado

Análise de riscos

Os principais riscos desta estratégia são:

  • Um grande risco de perda de uma enorme penetração da SMA pode aumentar o período da SMA para reduzir o risco.
  • Aumento da frequência de negociação e o excesso de negociação no mercado de intervalo.
  • Filtragem ineficaz devido a configuração de parâmetros MACD e sinal inadequados. Deve otimizar parâmetros por instrumento.
  • Uma grande posição acumulada de negociação bidirecional causando perdas.

Oportunidades de melhoria

A estratégia pode ser melhorada nos seguintes aspectos:

  • Otimizar o período de SMA para filtrar a serra de fenda mantendo a capacidade de detecção de tendências
  • Otimizar os parâmetros %K, %D para capturar a reversão da tendência, reduzindo os whipsaws
  • Otimizar os parâmetros MACD para uma filtragem de ruído mais eficaz
  • Adicionar controlo de dimensionamento da posição, por exemplo quantidade fixa, percentagem variável de capital próprio, etc.
  • Adicionar mecanismos de stop loss, por exemplo, trailing stop, time stop, ATR stop, etc.

Conclusão

A estratégia de compra e venda segue uma lógica simples e direta para negociar pullbacks em tendências identificadas pela SMA e filtradas por indicadores. Parâmetros de ajuste fino e controles de risco podem levar a resultados decentes, mas a encapsulamento combinado ainda é necessário para evitar o excesso de ajuste e melhorar a robustez.


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

//@version=4
strategy("Higher High / Lower Low Strategy", overlay=true)

// Getting inputs
longOnly = input(true, title="Long or Short Only")
useMACD = input(true, title="Use MACD Filter")
useSignal = input(true, title="Use Signal Filter")
//Filter backtest month and year
startMonth = input(10, minval=1, maxval=12, title="Month")
startYear = input(2020, minval=2000, maxval=2100, title="Year")
//Filter funtion inputs
periodA = input(20, minval=1, title="Period SMA")
periodK = input(5, minval=1, title="Period %K")
fast_length = input(title="Period Fast", type=input.integer, defval=5)
slow_length = input(title="Period Slow", type=input.integer, defval=20)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 30)

//Calculations
smoothD = 3 //input(3, minval=1, title="Smooth %D")
smoothK = 2 //input(2, minval=1, title="Smooth %K")
ma50 = sma(close, periodA)
k = sma(stoch(close, high, low, periodK), smoothK) - 50
d = sma(k, smoothD)
macd = ema(close,fast_length) - ema(close,slow_length)
signal = ema(macd,signal_length)
hist = macd - signal

if (not na(k) and not na(d) and not na(macd) and not na(signal) and longOnly and month>=startMonth and year>=startYear)//	if(k > k[1] and k[2] >= k[1] and (ma50 > ma50[1]) and (not useK or k[1] <= -threshold_k) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]) and (not useHHLL or close >= high[1]) and (not useD or d <= -threshold_d))
    if(high[2] >= high[1] and high > high[1] and (ma50 > ma50[1]) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]))
		strategy.order("HH_LE", strategy.long, when=strategy.position_size == 0, comment="HH_LE")
    if (k < k[1])
		strategy.order("HH_SX", strategy.short, when=strategy.position_size != 0, comment="HH_SX")

if (not na(k) and not na(d) and not na(macd) and not na(signal) and not longOnly and month>=startMonth and year>=startYear)
    if(low[2] <= low[1] and low < low[1] and (ma50 < ma50[1]) and (not useMACD or macd < macd[1]) and (not useSignal or signal < signal[1]))
		strategy.order("HH_SE", strategy.short, when=strategy.position_size == 0, comment="HH_SE")
    if (k > k[1])
		strategy.order("HH_LX", strategy.long, when=strategy.position_size != 0, comment="HH_LX")

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


Mais.