Estratégia de acompanhamento de tendência de cruzamento de MA duplo


Data de criação: 2023-12-21 16:10:22 última modificação: 2023-12-21 16:10:22
cópia: 1 Cliques: 611
1
focar em
1623
Seguidores

Estratégia de acompanhamento de tendência de cruzamento de MA duplo

Visão geral

Esta estratégia utiliza um método típico de rastreamento de tendências de duplo equilíbrio, em combinação com mecanismos de gestão de risco como stop loss, stop-loss e tracking stop loss, com o objetivo de capturar o lucro resultante de uma tendência.

Princípio da estratégia

  1. Calcule a média EMA de n dias de um período rápido, como a média de curto prazo;
  2. Calcule a média do EMA em m dias de tempo lento como média de longo prazo;
  3. Quando a média curta-prazo ultrapassa a média de longo prazo de baixo para cima, faça mais; quando a média de longo prazo ultrapassa a média de cima para baixo, faça menos;
  4. Condição de equilíbrio: Reverso de ruptura (se você fizer várias rupturas, a ruptura reversa equilibra a posição).
  5. Gerenciar o risco por meio de stop loss, stop loss e tracking stop loss.

Análise de vantagens

  1. O uso de uma linha média de duas EMAs permite uma melhor determinação do ponto de viragem da tendência de preços, capturando a situação da tendência.
  2. A combinação de stop loss, stop-loss e stop-loss tracking permite controlar efetivamente a perda individual, bloquear o lucro e reduzir a retração.
  3. Os parâmetros podem ser personalizados e podem ser ajustados e otimizados para diferentes variedades e contextos.
  4. A lógica da estratégia é simples e clara, fácil de entender e modificar.
  5. Suporta várias operações de vazio, adaptando-se a diferentes tipos de situações.

Análise de Riscos

  1. A estratégia de dupla linha é muito sensível a falsas brechas e é fácil de ser bloqueada.
  2. A configuração inadequada dos parâmetros pode levar a uma maior frequência de transações, aumentando os custos de transação e a perda de pontos de deslizamento.
  3. A estratégia por si só não é capaz de determinar o ponto de viragem da tendência, mas deve ser combinada com outros indicadores para ser mais eficaz.
  4. A tendência é de que os sinais de negociação sejam mais fáceis em situações de turbulência, mas a capacidade de lucro real é menor.
  5. Os parâmetros precisam ser otimizados para adaptar-se a diferentes variedades e contextos.

Os riscos podem ser reduzidos através das seguintes medidas:

  1. Combinação de outros indicadores com filtragem de falhas.
  2. Optimizar a configuração dos parâmetros e reduzir a frequência de transação.
  3. Aumentar os indicadores de tendência e evitar oscilações.
  4. Ajustar o gerenciamento de posições para reduzir o risco individual.

Direção de otimização

A estratégia pode ser melhorada em alguns aspectos:

  1. Otimizar os parâmetros de ciclo da linha média lenta e rápida para adaptar-se a diferentes variedades e condições de mercado.
  2. Adicionar outros indicadores para julgar tendências e filtrar falsos sinais de ruptura. Tipicamente, pode ser adicionado MACD, KDJ, etc.
  3. Pode-se considerar a mudança de EMA para SMA ou média móvel ponderada WMA.
  4. Adaptação da distância de parada baseada no ATR.
  5. A flexibilidade de ajuste de posições individuais é baseada na forma como as posições são geridas.
  6. Optimizar os parâmetros de auto-adaptação com base em uma combinação de indicadores de correlação e volatilidade.

Resumir

Esta estratégia é, em geral, uma típica estratégia de seguimento de tendências de linha de equilíbrio de duas EMAs. Com os benefícios de capturar tendências, além de combinar meios de gestão de risco como parada, parada e rastreamento de perdas. Mas também há alguns problemas típicos, como alta sensibilidade à situação de ruído e vibração, que são facilmente encaixados.

Código-fonte da estratégia
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)