Tendência na sequência de uma estratégia baseada no cruzamento da média móvel

Autora:ChaoZhang, Data: 2023-10-24 11:02:52
Tags:

img

Resumo

Esta estratégia usa principalmente a cruz de ouro e a cruz morta das médias móveis e o avanço do candelabro das médias móveis para tomar decisões longas e curtas.

Princípios

  1. Calcular duas médias móveis, EMA1 e EMA2, com períodos diferentes.

  2. Determine se a EMA1 cruza a EMA2, se sim, vá longo.

  3. Determine se a EMA1 cruza abaixo da EMA2, se for sim, vá para curto.

  4. Determinar se o preço de fechamento atravessa a EMA1 como sinal de entrada.

  5. Mecanismo de saída: definir stop loss fixo ou utilizar o canal de Donchian para definir stop loss.

Funções principais utilizadas:

  • ema ((): calcular a média móvel exponencial
  • cruzamento ((): determinar se a EMA1 cruza a EMA2
  • crossunder ((): determinar se a EMA1 cruza abaixo da EMA2
  • crescente (() / decrescente ((): determinar se o preço está a subir ou a cair
  • valuewhen(): retorna valores diferentes com base na condição

Vantagens

  1. Lógica simples, fácil de entender e implementar.

  2. Utilize a tendência de seguir a característica das médias móveis para rastrear efetivamente as tendências.

  3. Combinando o avanço do preço de fechamento do candelabro ajuda a evitar falsos avanços.

  4. Utilização flexível de diferentes combinações de médias móveis adaptáveis a diferentes períodos.

  5. O mecanismo de stop loss controla o risco.

Riscos

  1. Frequentes cruzadas de ouro e cruzadas mortas durante a consolidação do mercado causam problemas.

  2. Os pontos de stop loss fixos podem ser demasiado rígidos para serem ajustados com base nas alterações do mercado.

  3. As médias móveis estão atrasadas e podem perder sinais de reversão em pontos de virada.

  4. Julgamento preciso da inclinação média móvel necessária para filtrar falsos avanços.

  5. A selecção de parâmetros requer cautela, uma frequência inadequada ou um atraso podem afetar o desempenho da estratégia.

Optimização

  1. O cruzamento da linha zero do MACD pode ajudar a determinar as tendências e a filtrar as consolidações.

  2. Adicionar o canal Donchian para a linha de stop loss dinâmica para melhorar a stop loss fixa.

  3. Adicionar Bandas de Bollinger para julgar tendências fortes ou fracas, evitando negociações ineficazes durante as consolidações de mercado.

  4. Otimizar as combinações de parâmetros da média móvel e testar o desempenho real de diferentes estratégias de período.

  5. Considere a adição de médias móveis ancoradas para reduzir o atraso.

Conclusão

A lógica geral desta estratégia é simples e clara, utilizando técnicas clássicas de negociação de crossover de média móvel e combinando breakout de velas para entrada para filtrar efetivamente sinais falsos.


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

//@version=2
strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
period = input('720')
ch1 = request.security(syminfo.tickerid, period, open)
ch2 = request.security(syminfo.tickerid, period, close)
longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Mais.