
Visão geral
A estratégia toma decisões de negociação com base na inclinação da média móvel (MA) e no preço em relação à posição da MA. A estratégia é comprada quando a inclinação da MA é maior do que o mínimo de inclinação e o preço é maior que a MA.
Princípio da estratégia
- Calcule a média móvel simples (SMA) de um período especificado como o principal indicador de tendência.
- Calcule a inclinação do SMA durante um período de janela especificado para determinar a intensidade da tendência atual.
- Quando o SMA é maior do que o mínimo e o preço é mais alto do que o SMA, a estratégia de compra é assumir que o mercado está em alta.
- Uma vez em jogo, a estratégia usa o mecanismo de rastreamento de stop loss e ajusta dinamicamente o preço de stop loss de acordo com o preço atual e a porcentagem indicada.
- Se o preço atingir o ponto de parada de rastreamento, a estratégia de liquidação e marcação de parada ocorreu.
- Quando um stop loss ocorre, a estratégia é reiniciada se o preço retroceder para uma determinada porcentagem abaixo do SMA.
- A estratégia é simplesmente fechar a posição se o preço cair abaixo da SMA.
Análise de vantagens
- Acompanhamento de tendências: A estratégia de ganhar dinheiro em uma tendência ascendente é ajudada por um cálculo de tendências através da inclinação do SMA e da posição do preço em relação ao SMA.
- Stop loss dinâmico: O mecanismo de stop loss de rastreamento, que ajusta a posição de stop loss de acordo com a dinâmica das mudanças de preço, pode proteger melhor os lucros e limitar as perdas.
- Retorno de entrada: Após a ocorrência de um stop loss, a estratégia retorna quando o preço retorna para uma determinada porcentagem abaixo do SMA para capturar uma potencial oportunidade de rebote.
- Flexibilidade de parâmetros: A estratégia oferece vários parâmetros ajustáveis, como o ciclo SMA, o mínimo de inclinação, o percentual de parada de rastreamento, etc., que podem ser otimizados para diferentes condições de mercado.
Análise de Riscos
- Sensibilidade de parâmetros: o desempenho da estratégia pode ser sensível à configuração de parâmetros, e a escolha inadequada de parâmetros pode levar ao mau desempenho da estratégia.
- Identificação de tendências: a estratégia depende principalmente da inclinação do SMA e da posição do preço em relação ao SMA para determinar as tendências, podendo ocorrer sinais errados em certas condições de mercado.
- Frequência de Stop Loss: O mecanismo de rastreamento de stop loss pode levar a frequência de stop loss, especialmente em situações de grande volatilidade do mercado, afetando a performance geral da estratégia.
- Risco de reintrodução: o mecanismo de reintrodução pode, em alguns casos, levar a estratégias de reintrodução para sofrer uma queda adicional, aumentando os prejuízos.
Direção de otimização
- Reconhecimento de tendências: pode ser usado em combinação com outros indicadores técnicos ou padrões de comportamento de preços para melhorar a precisão da identificação de tendências.
- Optimização de Stop Loss: Pode-se explorar outros métodos de stop loss, como stop loss baseado em taxa de flutuação ou posições de suporte/resistência, para se adaptar melhor a diferentes condições de mercado.
- Condições de reentrada: pode-se otimizar as condições de reentrada, levando em conta fatores como a amplitude e a duração do retorno de preços, para filtrar alguns sinais de reentrada desfavoráveis.
- Gerenciamento de posições: introdução de mecanismos de gerenciamento de posições, ajustando o tamanho das posições de cada transação de acordo com a volatilidade do mercado ou outros indicadores de risco para controlar o risco geral.
Resumir
A estratégia julga a tendência através da inclinação da média móvel e da posição relativa do preço em relação à média móvel e administra as transações usando mecanismos de rastreamento de parada e reentrada condicional. A vantagem da estratégia reside na capacidade de acompanhar a tendência, proteger a parada dinâmica e capturar oportunidades de reentrada. No entanto, a estratégia também apresenta problemas potenciais, como sensibilidade a parâmetros, erro de identificação de tendências, frequência de parada e risco de reentrada.
Código-fonte da estratégia
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Incline Strategy with Trailing Stop-Loss and Conditional Re-Entry", overlay=true, calc_on_every_tick=true)
// Input parameters
windowSize = input.int(10, title="Window Size")
maLength = input.int(150, title="Moving Average Length")
minSlope = input.float(0.001, title="Minimum Slope")
trailingStopPercentage = input.float(2.8, title="Trailing Stop Percentage (%)") / 100
reEntryPercentage = input.float(4.2, title="Re-Entry Percentage Above MA (%)") / 100
// Calculate the moving average
ma = ta.sma(close, maLength)
// Calculate the slope of the moving average over the window size
previousMa = ta.sma(close[windowSize], maLength)
slopeMa = (ma - previousMa) / windowSize
// Check conditions
isAboveMinSlope = slopeMa > minSlope
isAboveMa = close > ma
// Variables to track stop loss and re-entry condition
var bool stopLossOccurred = false
var float trailStopPrice = na
// Buy condition
buyCondition = isAboveMinSlope and isAboveMa and ((not stopLossOccurred) or (stopLossOccurred and low < ma * (1 + reEntryPercentage)))
// Execute strategy
if (buyCondition and strategy.opentrades == 0)
if (stopLossOccurred and close < ma * (1 + reEntryPercentage))
strategy.entry("Long", strategy.long)
stopLossOccurred := false
else if (not stopLossOccurred)
strategy.entry("Long", strategy.long)
// Trailing stop-loss
if (strategy.opentrades == 1)
// Calculate the trailing stop price
trailStopPrice := close * (1 - trailingStopPercentage)
// Use the built-in strategy.exit function with the trailing stop
strategy.exit("Trail Stop", "Long", stop=close * (1 - trailingStopPercentage))
// Exit condition
sellCondition = ta.crossunder(close, ma)
if (sellCondition and strategy.opentrades == 1)
strategy.close("Long")
// Check if stop loss occurred
if (strategy.closedtrades > 0)
lastExitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1)
if (not na(trailStopPrice) and lastExitPrice <= trailStopPrice)
stopLossOccurred := true
// Reset stop loss flag if the price crosses below the MA
if (ta.crossunder(close, ma))
stopLossOccurred := false