Estratégia de negociação quantitativa baseada na SMA e na linha de tendência

Autora:ChaoZhang, Data: 2024-02-04 15:18:12
Tags:

img

Resumo

Esta estratégia combina a média móvel simples (SMA) e a linha de tendência de regressão linear rolante. Ela define a condição de entrada longa quando o preço de fechamento está acima da SMA e da linha de tendência, e a condição de saída quando o preço de fechamento está abaixo deles.

Estratégia lógica

Os principais componentes desta estratégia incluem:

  1. SMA: média móvel simples, que calcula o preço médio de fechamento durante um período (smaPeriod) como linha de sinal.

  2. Linha de tendência rolante: ajuste da melhor linha de regressão linear sobre uma janela (janela) como sinal de tendência.

  3. Condição de entrada: longo quando o preço de fechamento > SMA e linha de tendência.

  4. Condição de saída: fechar posição quando o preço de fechamento for < SMA e linha de tendência.

A estratégia baseia-se principalmente na breakout do sinal SMA para entrada e na breakout do canal para saída.

Análise das vantagens

Esta estratégia integra um filtro duplo de MA e linha de tendência, o que pode efetivamente reduzir as operações falsas de ruptura.

  1. O mecanismo de filtro duplo evita a falsa fuga e melhora a precisão da decisão.
  2. A linha de tendência rolante oferece suporte dinâmico ao canal para uma negociação de canal mais precisa.
  3. Lógica de negociação simples e intuitiva, fácil de compreender e implementar.
  4. Os parâmetros personalizáveis adaptam-se aos diferentes ambientes de mercado.

Análise de riscos

Há também alguns riscos desta estratégia:

  1. Os parâmetros inadequados da SMA e da linha de tendência podem conduzir a transações em falta ou a demasiados falsos breakouts.
  2. Em mercados altamente voláteis, o suporte do canal pela SMA e pela linha de tendência pode enfraquecer.
  3. Uma ruptura falhada pode levar a perdas, é necessário um stop loss rigoroso.

Algumas direcções de otimização para estes riscos:

  1. Otimizar parâmetros para diferentes produtos.
  2. Aumentar o intervalo de stop loss para reduzir a perda única.
  3. Suspenda as negociações em mercados voláteis para evitar ficar preso.

Optimização da Estratégia

Esta estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar funções de ajustamento dinâmico para o período SMA, parâmetros de deslizamento baseados em regimes de mercado.

  2. Desenvolver um mecanismo elástico de stop loss.

  3. Adicionar filtro de outros indicadores, por exemplo, volume, RSI para melhorar a precisão da decisão.

  4. Desenvolva uma versão de reversão, vá longo quando o preço se aproxima do fundo e quebra o canal de baixa.

Conclusão

Esta estratégia integra os sinais de negociação de média móvel e suporte de canal da linha de tendência rolante para implementar operações de tendência seguinte. O filtro duplo reduz a probabilidade de falha de ruptura e melhora a qualidade da decisão. Tem configurações de parâmetros simples e lógica clara, que é fácil de implementar e otimizar. Em resumo, esta estratégia forma um sistema de negociação de ruptura de tendência confiável, simples e intuitivo.


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

//@version=4
strategy("SMA Strategy with Rolling Trendline", overlay=true)

// Input parameters
smaPeriod = input(14, title="SMA Period")
window = input(20, title="Trendline Window")
startDate = input(timestamp("2023-01-01"), title="Start Date")
endDate = input(timestamp("2023-12-31"), title="End Date")

// Calculating SMA
sma = sma(close, smaPeriod)

// Function to calculate linear regression trendline for a window
linreg_trendline(window) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to window - 1
        sumX := sumX + i
        sumY := sumY + close[i]
        sumXY := sumXY + i * close[i]
        sumX2 := sumX2 + i * i
    slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / window
    slope * (window - 1) + intercept

// Calculating the trendline
trendline = linreg_trendline(window)

// Entry and Exit Conditions
longCondition = close > sma and close < trendline
exitLongCondition = close < sma and close > trendline

// Strategy logic
if (true)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if (exitLongCondition)
        strategy.close("Long")

// Plotting
plot(sma, title="Simple Moving Average", color=color.blue)
plot(trendline, title="Rolling Trendline", color=color.red)
plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)


Mais.