
Esta estratégia é um sistema dinâmico de rastreamento de tendências baseado em um canal de média móvel duplo, combinado com um mecanismo de gerenciamento de risco. Essa estratégia usa duas médias móveis simples (MMS) para construir um canal de negociação, onde o trilho superior usa a média móvel calculada pelo preço mais alto, e o trilho inferior usa a média móvel calculada pelo preço mais baixo. O sistema usa cinco preços de fechamento consecutivos da linha K rompendo a faixa superior como um sinal de entrada e cinco preços de fechamento consecutivos da linha K caindo abaixo da faixa inferior ou recuando 25% do ponto mais alto como um sinal de saída, para atingir uma tendência dinâmica. rastreamento e controle de riscos. .
O princípio central da estratégia é capturar tendências de preços por meio do canal de média móvel dupla e estabelecer um mecanismo rigoroso de entrada e saída:
Esta estratégia cria um sistema de negociação completo de rastreamento de tendências por meio de um canal de média móvel dupla, combinado com mecanismos rigorosos de confirmação de entrada e saída dupla, para obter rastreamento de tendências eficaz e controle de risco eficaz. As vantagens da estratégia são lógica de execução clara e controle de risco perfeito, mas ela ainda precisa de otimização de parâmetros para diferentes ambientes de mercado e pode ser melhorada ainda mais adicionando filtragem de ambiente de mercado, confirmação de vários períodos de tempo, etc. No geral, esta é uma estratégia de negociação quantitativa com uma estrutura completa e lógica rigorosa, adequada para aplicação em um ambiente de mercado com tendências óbvias.
/*backtest
start: 2025-01-02 00:00:00
end: 2025-01-09 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Parameters for Moving Averages
upperMALength = input.int(10, title="Upper MA Length")
lowerMALength = input.int(8, title="Lower MA Length")
stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100
// Calculate Moving Averages
upperMA = ta.sma(high, upperMALength)
lowerMA = ta.sma(low, lowerMALength)
// Plot Moving Averages
plot(upperMA, color=color.red, title="Upper Moving Average")
plot(lowerMA, color=color.green, title="Lower Moving Average")
// Initialize variables
var int upperCounter = 0
var int lowerCounter = 0
var float entryPrice = na
var float highestPrice = na
// Update counters based on conditions
if (low <= upperMA)
upperCounter := 0
else
upperCounter += 1
if (high >= lowerMA)
lowerCounter := 0
else
lowerCounter += 1
// Entry condition: 5 consecutive bars above the Upper MA
if (upperCounter == 5 and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
highestPrice := high // Initialize highest price
// Update the highest price after entry
if (strategy.position_size > 0)
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Exit condition: 5 consecutive bars below the Lower MA
if (lowerCounter == 5 and strategy.position_size > 0)
strategy.close("Long", comment="Exit: 5 bars below Lower MA")
// Stop-loss condition: Exit if market closes below 25% of the highest price since entry
stopLossCondition = low < highestPrice * (1 - stopLossPercent)
if (stopLossCondition and strategy.position_size > 0)
strategy.close("Long", comment="Exit: Stop Loss")