Estratégia de ruptura da vela Kana baseada na média móvel e resistência de suporte

Autora:ChaoZhang, Data: 23 de dezembro de 2023
Tags:

img

Resumo

Esta é uma estratégia de ruptura rápida baseada na análise técnica do candelabro japonês, combinada com indicadores de média móvel e indicadores de resistência de suporte para determinar a tendência e a posição.

Estratégia lógica

A estratégia usa uma média móvel simples de 20 períodos (SMA) e uma média móvel exponencial de 200 períodos (EMA) para determinar a direção da tendência.

Com a confirmação da tendência e impulso, a estratégia espera por uma quebra rápida do preço e entra no mercado. O chamado breakout significa que o preço cruza a primeira linha do canal dos três canais ATR pré-definidos (calculados com base no ATR de 200 dias e coeficientes) e entra na segunda linha do canal. Este é um sinal de quebra de alta probabilidade.

Após entrar no mercado, as regras de captação de lucro e stop loss são muito simples. Contanto que o preço toque os limites externos do canal (como linha de captação de lucro ou linha de captação de perda), ele irá captar lucro ou stop loss imediatamente. Isso garante ganhos rápidos da estratégia.

Análise das vantagens

A maior vantagem desta estratégia é a rápida captação de lucros com um risco relativamente pequeno. Ao entrar no mercado rapidamente após o breakout, evita múltiplos ajustes de posições.

Em comparação com a detenção a longo prazo, este mecanismo de abertura e fechamento eficiente pode reduzir significativamente a taxa de inatividade da estratégia e melhorar ainda mais a eficiência do capital.

Análise de riscos

A estratégia baseia-se principalmente em indicadores de média móvel para determinar a direção da tendência, com o risco de retração e consolidação.

Além disso, a estratégia baseia-se demasiado em indicadores técnicos sem combinar a análise de eventos fundamentais e significativos.

Para controlar os riscos, podemos expandir adequadamente a gama de canais para reduzir a frequência de abertura; ou adicionar um módulo de gestão de posições para ajustar dinamicamente uma única posição com base no capital total.

Optimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar módulo de gestão de posições. Ajustar dinamicamente uma única posição de abertura com base no tamanho da conta para controlar a percentagem de perda única.

  2. Quando os indicadores técnicos desencadearem sinais de abertura, verifique os fundamentos da empresa e eventos significativos para evitar anormalidades.

  3. Combinar a gestão de estoque. Definir regras para ajustar dinamicamente o estoque. Selecionar o estoque ideal em diferentes estágios para melhorar a estabilidade.

  4. Combinar modelos de aprendizagem de máquina. Usar IA para prever tendências e níveis de preços-chave, ajudando a determinar a faixa de canais e o tempo de entrada.

Conclusão

A estratégia possui simplicidade e eficiência. Determina a tendência principal com médias móveis, a direção do impulso com velas japonesas, entra com ruptura rápida e sai com ganhos rápidos e stop loss. Permite ganhos de curto prazo adequados para negociação de alta frequência. Mas também tem o risco de retração e incerteza. A otimização contínua pode tornar a estratégia estável em diferentes ambientes de mercado.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Kana with S/R Strategy", title = "KANA with S/R", overlay=true)

len = input(20, minval=1, title="Length")
multiplier1 = input(1, minval=1, title="multiplier1")
multiplier2 = input(2, minval=1, title="multiplier2")
multiplier3 = input(3, minval=1, title="multiplier3") 
srTimeFrame = input(240, minval=1, title="Support Resistance TimeFrame")
useSR = input(true, type = bool, title="Use Support/Resistance")
tpPercent = input(0.5, type=float, title = "Take Profit Percent")
useTP = input(false, type=bool, title = "Use Take Profit")
tp = (close * tpPercent / 100) / syminfo.mintick

src = input(close, title="Source")
mid = sma(src, len)
plot(mid, title="SMA", color=blue)

trend = ema(close, 200)
plot(trend, title="Trend", color=green)


upper1 = mid + atr(200) * multiplier1
upper2 = mid + atr(200) * multiplier2
upper3 = mid + atr(200) * multiplier3

lower1 = mid - atr(200) * multiplier1
lower2 = mid - atr(200) * multiplier2
lower3 = mid - atr(200) * multiplier3

plot(upper1, color = orange)
plot(upper3, color = red)

plot(lower1, color = orange)
plot(lower3, color = red)

haClose = request.security(heikinashi(syminfo.tickerid), timeframe.period, close)
haOpen = request.security(heikinashi(syminfo.tickerid), timeframe.period, open)

resistance = request.security(syminfo.tickerid,tostring(srTimeFrame), high)
support  = request.security(syminfo.tickerid,tostring(srTimeFrame), low)
rsPos = (close - support[srTimeFrame]) / (resistance[srTimeFrame] - support[srTimeFrame])

MACD = ema(close, 120) - ema(close, 260)
aMACD = ema(MACD, 90)
hisline = MACD - aMACD

longCondition = (mid > trend) and (haOpen[1] < haClose[1]) and (mid > mid[1]) and (close < upper1) and hisline > 0 and (useSR == true ? (rsPos > 100) : true)
shortCondition = (mid < trend) and (haOpen[1] > haClose[1]) and (mid < mid[1]) and (close > lower1) and hisline < 0 and (useSR == true ? (rsPos < 0) : true)

longExit = (close > upper3 ) or (close < lower2)
shortExit = (close < lower3) or (close > upper2)

if (longCondition)
    strategy.entry("Long", strategy.long)
    if (useTP)
        strategy.exit("Exit Long", "Long", profit = tp)
        
if (longExit)
    strategy.close("Long")
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    if (useTP)
        strategy.exit("Exit Short", "Short", profit = tp)
    
if (shortExit)
    strategy.close("Short")

Mais.