Estratégia de negociação baseada na combinação de EMA Breakthrough e padrão K-line

Autora:ChaoZhang, Data: 2024-02-21 15:00:06
Tags:

img

Resumo

Esta estratégia integra múltiplos indicadores de EMA de prazo e julgamentos de padrões de linha K para alcançar captura de sinal relativamente sensível a longo prazo e saídas de stop-loss.

Princípio da estratégia

A estratégia baseia-se principalmente nos seguintes indicadores de avaliação:

  1. EMA: utiliza 2 conjuntos de 13 e 21 ciclos de EMA para determinar o sinal de negociação quando o preço avança.

  2. Padrão de linha K: julga a direção da entidade de linha K e a utiliza com o indicador EMA para filtrar falsas rupturas.

  3. Resistência de suporte: construída pelos pontos mais altos nos últimos 10 ciclos para determinar se o avanço passa por esta área para melhorar a confiabilidade do sinal.

  4. Rise in Time Division: 120 ciclo de fechamento está acima aberto para julgar como aumento na divisão de tempo, como um julgamento auxiliar.

As regras para a geração de sinais de negociação são:

  1. Sinal de alta: A EMA rápida rompe a EMA lenta para cima com uma linha Yang K-line, fechar posição curta e abrir longa.

  2. Sinal de baixa: EMA rápida quebra através de EMA lenta com uma linha Yin-linha K, posição longa plana.

  3. Saída de stop loss: saída de stop loss na posição atual quando aparece o sinal de reversa.

Vantagens

  1. Os indicadores de EMA de vários prazos julgam a tendência de forma mais fiável e evitam falsos avanços.
  2. Combinado com a direção da entidade da linha K para filtragem para identificar as tendências com mais precisão.
  3. Aumentar os julgamentos de divisão temporal e apoiar os julgamentos de resistência para garantir a qualidade do sinal.
  4. Usar sinais de reversão como stop loss para reduzir o risco de perda.

Riscos

  1. O risco de avanços inválidos que resultem em perdas: os julgamentos da EMA e das entidades da linha K sobre os quadros de tempo múltiplos ainda não podem evitar completamente o impacto dos avanços inválidos na estratégia.
  2. Risco de selecção inadequada de parâmetros: configurações inadequadas dos ciclos de EMA, dos ciclos de julgamento da linha K levarão a uma diminuição da qualidade do sinal.
  3. Risco de falha na resistência de suporte. Falha histórica de resistência de suporte é comum, isso também levará à falta de impulso quando os sinais são gerados.
  4. Risco de falha da divisão do tempo: a situação da divisão do tempo muda e não pode ser totalmente baseada nela para o julgamento.

Os riscos acima podem ser mitigados através de métodos como evitar otimização excessiva, seleção cuidadosa de parâmetros, controlo rigoroso do dimensionamento da posição.

Orientações de otimização

  1. Introduzir modelos de aprendizagem de máquina para ajudar no julgamento. Treinar modelos de classificação para julgar as direções de entidades de linha K para maior precisão.
  2. Aumentar o mecanismo de stop loss adaptativo, como trailing stops ou stops baseados em volatilidade.
  3. Combinar análises sentimentais, introduzir certos julgamentos de opinião da mídia para evitar grandes impactos negativos das notícias.
  4. Adicionar um módulo de gestão de posições, introduzir proporções fixas de posições ou uma gestão baseada em posições.

Conclusão

A estratégia integra múltiplos julgamentos de EMA de período de tempo e de entidade de linha K para julgamentos de tendência relativamente confiáveis. Julgamentos auxiliares usando resistência de suporte e divisão de tempo garantem a qualidade do sinal. Usando sinais reversos para stop loss pode controlar efetivamente a perda de stop único. Otimizações futuras podem ser feitas através da introdução de modelos de aprendizado de máquina, paradas adaptativas, análise sentimental e módulos de gerenciamento de tamanho de posição para tornar a estratégia mais robusta.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100)

open_long = 0
close_position = 0
last_long=close
last_short=close

//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=false

//-----------------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)

//--------------------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

//-------------------- 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

//=============Hull MA//
show_hma = false
hma_src = input(close, title="HullMA Source:")
hma_base_length = input(8, minval=1, title="HullMA Base Length:")
hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))

//============ signal Generator ==================================//
Period=input(title='Period', defval='120')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)

// Signals//
long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short) ? 1 : -1
short_signal = crossover(last_short, last_long) ? -1 : 1

if (long_signal == 1)
    strategy.entry("Long Open", strategy.long)

if (short_signal == -1)
    strategy.close("Long Open")
    
if (long_signal[1] == 1 and short_signal[1] == 1)
    open_long := 1
    close_position := 0

if (short_signal[1] == -1 and long_signal[1] == -1)
    open_long := 0
    close_position := 1

plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10)
plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10)
//plot(0, title="Trigger", color=white)

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

Mais.