Estratégia de negociação de criptomoedas baseada em indicadores MACD e estocásticos

Autora:ChaoZhang, Data: 2024-02-01 11:52:15
Tags:

img

Resumo

Esta estratégia é uma estratégia de negociação de criptomoedas baseada em uma combinação do indicador MACD e indicadores estocásticos.

Estratégia lógica

A estratégia primeiro calcula o indicador MACD. O MACD significa Moving Average Convergence Divergence, que é um indicador de tendência. Ele consiste em uma linha rápida e uma linha lenta, onde a linha rápida é uma média móvel exponencial de curto prazo e a linha lenta é uma média móvel exponencial de longo prazo. Quando a linha rápida cruza acima da linha lenta, ela gera um sinal de cruz dourada, indicando um mercado de alta. Quando a linha rápida cruza abaixo da linha lenta, ela gera um sinal de cruz da morte, indicando um mercado de baixa.

Após o cálculo do indicador MACD, a estratégia aplica o indicador estocástico %K no próprio MACD. A fórmula de cálculo para %K é:

% K = (Current Close - Lowest Low over N periods) / (Highest High over N periods - Lowest Low over N periods) * 100

O indicador estocástico reflete o desvio do preço de sua faixa recente. A flutuação de %K entre 20-80 representa o preço está sendo negociado em consolidação. Quando %K cruza acima de 20 de baixo, ele gera um sinal de compra. Quando %K cruza abaixo de 80 de cima, ele gera um sinal de venda.

Esta estratégia combina os sinais de negociação do MACD e do %K estocástico para negociar no mercado de criptomoedas.

Vantagens da estratégia

Esta estratégia combina análise de tendências e indicadores de sobrecompra-supervenda, que podem identificar efetivamente pontos de virada importantes no mercado.

Além disso, esta estratégia aplica indicadores técnicos comumente usados nos mercados de ações para negociação de criptomoedas.

Riscos e soluções

O maior risco desta estratégia é a alta volatilidade no mercado de criptomoedas, que facilmente produz sinais falsos e leva a perdas comerciais.

Para controlar esses riscos, é aconselhável usar stop loss móveis para bloquear lucros e evitar perdas adicionais.

Orientações de otimização

Em primeiro lugar, a estratégia pode tentar combinar médias móveis com indicadores de volatilidade, como as bandas de Bollinger, definindo parâmetros de volatilidade para identificar a validade das rupturas e evitar falsos sinais.

Em segundo lugar, os modelos de aprendizagem de máquina podem ser introduzidos para treinar em dados históricos e estabelecer modelos de rede neural de floresta aleatória ou LSTM para ajudar a julgar a eficácia dos sinais de indicador.

Em terceiro lugar, adicionar um mecanismo de stop loss. quando os preços se movem mais do que um certo intervalo em uma direção desfavorável, automaticamente acionar stop loss para controlar os riscos.

Conclusão

Esta estratégia combina o indicador MACD e o indicador estocástico %K, usando o método de verificação mútua de sinais de dois indicadores para formular uma estratégia de negociação de criptomoedas. Esta estratégia de indicador de combinação pode melhorar a precisão dos sinais até certo ponto.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Schaff Trend Cycle Strategy", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source", defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)
k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))
d = ema(k, d1Length)
kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

upper = input(75, defval=75)
lower = input(25, defval=25)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

//alertcondition(long_final, "Long", message="Long")
//alertcondition(short_final,"Short", message="Short")

//plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
//plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)


Mais.