Estratégia de rompimento de média móvel dupla


Data de criação: 2023-12-11 15:21:58 última modificação: 2023-12-11 15:21:58
cópia: 0 Cliques: 637
1
focar em
1621
Seguidores

Estratégia de rompimento de média móvel dupla

Visão geral

A estratégia de ruptura de dupla linha de equilíbrio é uma estratégia de acompanhamento de tendências baseada na intersecção de médias móveis em dois períodos diferentes como um sinal de compra e venda. A estratégia usa a média rápida e a média lenta como pontos de entrada de negociação, após a intersecção, determina a direção da tendência e estabelece uma posição correspondente de overhead ou de overhead.

Princípio da estratégia

A estratégia usa duas médias móveis: uma média rápida e uma média lenta. A média rápida é geralmente definida como um período mais curto (como um período de 15), para capturar mudanças de preços de curto prazo. A média lenta é geralmente definida como um período mais longo (como um período de 21), para determinar a direção da tendência principal.

A estratégia pode ser ajustada para capturar tendências por meio da configuração de diferentes combinações de períodos de MA. Uma combinação de MA mais curta pode capturar oportunidades de mudanças de preço em períodos mais curtos; uma combinação de MA mais longa pode filtrar oscilações e capturar apenas tendências em níveis de linha mais longa.

A estratégia também inclui módulos de gestão de risco: stop loss, stop loss, stop loss móvel. Isso pode limitar a perda máxima de uma única transação, ajudando a proteger o lucro geral.

Vantagens estratégicas

A estratégia de dupla linha de equilíbrio tem as seguintes vantagens:

  1. O conceito é simples, fácil de entender e de implementar.
  2. Pode capturar tendências em diferentes períodos de tempo, adaptando-se a diferentes ambientes de mercado, ajustando os ciclos de MA;
  3. A taxa de câmbio é mais estável, evitando transações muito frequentes.
  4. A combinação com o Stop Loss Stopper permite um controlo eficaz do risco.
  5. É fácil de otimizar, pode ajustar o ciclo de MA, parâmetros de gestão de risco, etc, para melhorar ainda mais a eficácia.

Análise de Riscos

A estratégia de dupla linha de equilíbrio também apresenta alguns riscos, principalmente nos seguintes aspectos:

  1. Durante a fase de equilíbrio de turbulência, os sinais de cruzamento de MA podem ser muito frequentes, levando a problemas de alta frequência de negociação;
  2. O retardo entre as duas linhas de equilíbrio pode ter sido o ponto de reversão do preço, que não foi detido em tempo;
  3. A falta de filtragem eficaz de brechas falsas pode levar a prejuízos desnecessários;
  4. A MA é muito lenta em reagir aos preços e não consegue acompanhar a evolução dos mesmos.

Esses riscos podem ser melhorados e otimizados por meio de ajustes nos parâmetros de MA, adição de condições de filtragem e otimização da lógica de stop-loss.

Direção de otimização

A estratégia de dupla linha de equilíbrio pode ser otimizada em vários aspectos:

  1. Adicionar filtros, como volume de transação ou indicadores de flutuação, para evitar a construção frequente de depósitos em tremores e falsas brechas;
  2. Os ciclos e combinações de MA podem ser variados e adaptados às características de diferentes ciclos e variedades;
  3. Pode testar diferentes tipos de MA, como EMA, LWMA, etc., selecionando a forma de MA mais sensível à reação do preço;
  4. A adição de algoritmos de aprendizagem de máquina para buscar automaticamente os parâmetros MA e os parâmetros super, como a amplitude de parada;
  5. Pode-se testar diferentes métodos de parada, como parada de salto, parada de rastreamento, parada média, etc.

Com essas otimizações e melhorias, é possível aumentar significativamente a taxa de vitória, a taxa de retorno e a taxa de retorno do risco.

Resumir

A estratégia de ruptura de dupla linha é, em geral, uma estratégia de acompanhamento de tendências que é fácil de implementar e otimizar. Ela possui vantagens como facilidade de operação, flexibilidade e controle de risco, e é ideal para ser uma estratégia de entrada para negociação quantitativa.

Código-fonte da estratégia
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)

maFastSource   = input(defval = ohlc4, title = "Fast MA Source")
maFastLength   = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource   = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit   = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
startYear       = input(defval = 2018, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() =>
    inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    timeOk = time > inputTime ? true : false
    r = (useTimeLimit and timeOk) or not useTimeLimit

maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)

fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)

aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

if( startTimeOk() )
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    //strategy.close( id = "Long", when = exitLong )
    
    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.exit("Exit Long", from_entry = "Long",  profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
    strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)