Estratégia de swing trading baseada em momentum


Data de criação: 2024-02-05 10:44:19 última modificação: 2024-02-05 10:44:19
cópia: 0 Cliques: 329
1
focar em
1166
Seguidores

Estratégia de swing trading baseada em momentum

Visão geral

Esta estratégia é uma estratégia de negociação de oscilação intermitente baseada em tecnologia dinâmica, usando o ATR Stop Loss. A estratégia foi criada por Kory Hoang, da Stably.

A estratégia utiliza o indicador de dinâmica para identificar a direção da tendência e, em combinação com o indicador ATR, estabelece uma linha de parada para a estratégia de negociação de choque de compra baixa e venda alta.

Princípio da estratégia

O código define primeiro o intervalo de tempo para a detecção.

Em seguida, a parte de indicadores, com os seguintes indicadores:

  • atr(): Calcula o indicador ATR para a configuração de stop loss;
  • max_/min_O preço mais alto/mais baixo de uma linha K;
  • is_uptrend: determina se a tendência está subindo;
  • Entradas: linha de stop loss;

A principal lógica para julgar as tendências é:

Se o fechamento for superior à linha de parada vstop anterior à queda, será considerado uma tendência ascendente; se o fechamento for inferior à linha de parada vstop anterior à alta, será considerado uma tendência descendente.

Ajustar a posição da linha de stop loss quando a tendência muda.

Especificamente, em uma tendência ascendente, a linha de parada é definida como o preço mais alto da linha K anterior menos o valor do ATR; em uma tendência descendente, a linha de parada é definida como o preço mais baixo da linha K anterior mais o valor do ATR.

Isso permite a realização de um stop loss de acompanhamento de tendências.

Na parte de regras de negociação, faça um extra-caos ao abrir uma posição e quebrar a linha de stop-loss.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Utilize a tecnologia de dinâmica para determinar a direção da tendência, capturar pontos de inflexão em tempo hábil e evitar falsas rupturas.
  2. ATR Stop Loss traz o preço mais alto/mais baixo para um bom controle de risco.
  3. A lógica da estratégia é simples, clara e fácil de entender.
  4. A tendência é de que o preço de um commodity seja mais baixo do que o preço de um commodity.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A escolha inadequada de valores ATR pode levar a um estenose muito leve ou muito apertado.
  2. A tendência de tremores pode sofrer fortes oscilações e uma parada contínua.
  3. O número de transações pode ser maior e os custos de processamento mais elevados.

Otimizar o conteúdo pode ser feito de várias maneiras:

  1. Teste os diferentes parâmetros ATR para encontrar a combinação de parâmetros mais eficiente.
  2. Linha de parada de otimização combinada com um indicador de taxa de flutuação baseado no ATR.
  3. A combinação de filtragem de tendências e a ausência de um mercado em choque não é uma boa opção.

Direção de otimização

A estratégia pode ser otimizada em várias direções:

  1. Teste diferentes parâmetros de ATR para encontrar a combinação de parâmetros mais adequada.

  2. A linha de parada de otimização combinada com os indicadores de taxa de flutuação com base no ATR. Indicadores de taxa de flutuação podem ser introduzidos, permitindo a flexibilização apropriada da parada de perda quando a flutuação aumenta.

  3. A combinação de filtragem de tendências evita que os mercados de turbulência possam abrir posições. Pode-se aumentar os indicadores de julgamento de tendências, abrindo posições apenas quando a tendência é clara.

  4. Aumento do mecanismo de gerenciamento de posições. A posição pode ser ajustada de acordo com a utilização de fundos, o número de paradas de perdas contínuas, etc.

  5. Aumentar o controle de risco do intervalo noturno. Pode-se parar ativamente antes do fechamento, evitando que os preços da noite saltem para cima.

Resumir

Esta estratégia serve como uma base para a estratégia de negociação de oscilação intradiária, com um pensamento geral claro, usando a técnica de dinâmica para julgar a tendência e usando o indicador ATR para traçar o ponto de parada de perdas, para controlar o risco de forma eficaz.

Ainda há muito espaço para otimização, e a estratégia pode ser melhorada em vários aspectos, como o julgamento de tendências, o modo de parar perdas e o gerenciamento de posições, para que a estratégia seja mais adequada para a negociação em ações reais. No geral, a estratégia fornece uma boa estrutura básica para a negociação quantitativa.

Código-fonte da estratégia
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)

/////////////////////////////////////////////////////////////
//START - SET DATE RANGE

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2010, title = "From Year")
ToMonth   = input(defval = 12, title = "To Month", minval = 1)
ToDay     = input(defval = 31, title = "To Day", minval = 1)
ToYear    = input(defval = 2020, title = "To Year")

startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true

/////////////////////////////////////////////////////////////
//END - SET DATE RANGE



/////////////////////////////////////////////////////////////
//START - INDICATORS

length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)

/////////////////////////////////////////////////////////////
//END - INDICATORS



/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange

strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)

/////////////////////////////////////////////////////////////
//END - TRADING RULES