Estratégia de cruzamento de média móvel com padrões de velas intradiárias

Autora:ChaoZhang, Data: 2024-02-29 12:07:21
Tags:

img

Resumo

Estratégia lógica

Quando a média móvel de curto prazo (9 dias MA) cruza acima da média móvel de longo prazo (15-dia MA), indica um impulso ascendente de curto prazo mais forte para ir longo. Quando a MA de curto prazo cruza abaixo da MA de longo prazo, sinaliza um impulso descendente de curto prazo mais forte para ir curto. Além disso, o ângulo da MA precisa ser maior que 30 graus para garantir poder ascendente ou descendente suficiente. Padrões específicos de velas intradiárias são usados para filtrar sinais falsos.

Esta estratégia utiliza principalmente a capacidade de seguir tendências de médias móveis e as características de certos padrões de velas.

Análise das vantagens

Esta estratégia combina indicadores de média móvel e padrões de velas intradiários para efetivamente filtrar o ruído e tornar os sinais de negociação mais confiáveis. Especialmente com o limiar de ângulo, garante que haja um momento de mudança de preço suficiente antes de gerar sinais, evitando sinais falsos desnecessários. Além disso, os níveis de stop loss e take profit podem limitar automaticamente a perda máxima e a redução de lucro. Estas medidas melhoram tanto a estabilidade quanto a lucratividade.

Como um indicador de tendência, a média móvel pode capturar tendências de preços de médio a longo prazo. Os velas intradiários refletem a comparação de poder dos participantes do mercado de curto prazo. Usá-los juntos pode obter implicações comerciais em diferentes prazos. Esta estratégia integra os pontos fortes de vários indicadores e deve alcançar um bom desempenho na negociação real.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. Risco de ruptura falsa. Durante a consolidação do mercado, as médias móveis podem ter várias cruzadas, a maioria das quais são sinais falsos.

  2. Risco de otimização de parâmetros. Diferentes mercados se adaptam de forma diferente às configurações de parâmetros. A aplicação direta de um conjunto de parâmetros sem ajuste pode levar a perdas. Parâmetros adequados precisam ser encontrados por meio de backtesting e negociação de papel.

Em geral, esta estratégia pode gerar alguns sinais falsos e perseguir riscos elevados/baixos sem considerar as condições do mercado.

Orientações de otimização

Os seguintes aspectos desta estratégia podem ser melhorados:

  1. Adicionar análise das principais tendências, por exemplo, confirmar canais de médio/longo prazo, para evitar negociações contra tendências.

  2. Combine a análise dos fundamentos, selecione ações com melhores perspectivas e ganhos para melhorar a taxa de ganho.

As orientações de otimização acima referidas deverão melhorar significativamente a rentabilidade e a estabilidade desta estratégia.

Resumo

O próximo passo é melhorar ainda mais a taxa de vitória e a lucratividade através da otimização de parâmetros. Adicionar mais indicadores também pode fortalecer a robustez.


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

//@version=4
strategy("Moving Average Crossover Strategy with Candlestick Patterns", overlay=true)

// Define input parameters
fast_length = input(9, "Fast MA Length")
slow_length = input(15, "Slow MA Length")
stop_loss_percent = input(0.25, "Stop Loss (%)")
target_percent = input(0.25, "Target (%)")
angle_threshold = input(30, "Angle Threshold (degrees)")

// Calculate moving averages
fast_ma = sma(close, fast_length)
slow_ma = sma(close, slow_length)

// Define candlestick patterns
is_pin_bar() =>
    pin_bar = abs(open - close) > 2 * abs(open[1] - close[1])
    high_tail = max(open, close) - high > abs(open - close) * 1.5
    low_tail = low - min(open, close) > abs(open - close) * 1.5
    pin_bar and high_tail and low_tail

is_marubozu() =>
    marubozu = abs(open - close) > abs(open[1] - close[1]) * 0.75
    no_upper_shadow = high == max(open, close)
    no_lower_shadow = low == min(open, close)
    marubozu and no_upper_shadow and no_lower_shadow

is_full_body() =>
    full_body = abs(open - close) > abs(open[1] - close[1]) * 0.95
    full_body

// Plot moving averages
plot(fast_ma, color=color.blue, title="Fast MA")
plot(slow_ma, color=color.red, title="Slow MA")

// Calculate angle of slow moving average
ma_angle = abs(180 * (atan(slow_ma[1] - slow_ma) / 3.14159))

// Generate buy/sell signals based on angle condition and candlestick patterns
buy_signal = crossover(fast_ma, slow_ma) and ma_angle >= angle_threshold and (is_pin_bar() or is_marubozu() or is_full_body())
sell_signal = crossunder(fast_ma, slow_ma)

// Calculate stop-loss and target levels
stop_loss_level = close * (1 - stop_loss_percent / 100)
target_level = close * (1 + target_percent / 100)

// Execute trades based on signals with stop-loss and target
strategy.entry("Buy", strategy.long, when=buy_signal)
strategy.exit("Exit", "Buy", stop=stop_loss_level, limit=target_level)

// Plot buy/sell signals on chart (optional)
plotshape(series=buy_signal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sell_signal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Plot angle line
hline(angle_threshold, "Angle Threshold", color=color.black, linestyle=hline.style_dashed)


Mais.