Estratégias de compra e venda seguindo tendências


Data de criação: 2023-10-17 12:59:59 última modificação: 2023-10-17 12:59:59
cópia: 0 Cliques: 628
1
focar em
1617
Seguidores

Estratégias de compra e venda seguindo tendências

Visão geral

A estratégia de compra e venda de seguimento de tendências é uma estratégia simples de negociação diária. A idéia básica da estratégia é determinar a direção da tendência com base na média móvel e comprar e vender com oscilações na tendência.

Princípio da estratégia

A estratégia usa uma média móvel simples (SMA) para determinar a direção da tendência. Em uma tendência ascendente, quando a linha K aparece em um ponto baixo, a estratégia faz mais para quebrar o ponto mais alto da linha K anterior; em uma tendência descendente, quando a linha K aparece em um ponto alto, a estratégia faz zero para quebrar o ponto mais baixo da linha K anterior.

A estratégia também usa o indicador de tendência de Blanchflower, %K e %D, para determinar a tendência. A estratégia também usa o MACD e a curva de sinal como condições de filtragem e executa a transação apenas quando o MACD e o sinal correspondem à direção da tendência.

A estratégia pode ser apenas mais, apenas vazio ou fazer mais vazio ao mesmo tempo. A data de início pode ser definida como o mês e o ano de início da retomada. Todos os parâmetros, como o período de média móvel, o período K, o período D, o parâmetro MACD, etc., podem ser personalizados.

Análise de vantagens

  • A utilização de médias móveis para determinar a direção da tendência pode filtrar oscilações e evitar erros de negociação.
  • A aplicação do indicador Blanchflower permite determinar a reversão da tendência em tempo hábil para controlar o risco
  • Filtragem do MACD e do Signal reduz o ruído de negociação fora da direção da tendência
  • Parâmetros personalizáveis para se adaptar ao comportamento de preços de diferentes variedades
  • Pode apenas fazer mais, apenas fazer de lado ou de duas maneiras, pode ser flexível para adaptar-se ao mercado

Análise de Riscos

A estratégia tem os seguintes riscos:

  • O risco de quebrar significativamente a média móvel pode causar grandes perdas. Aumente o ciclo da média móvel de forma apropriada para reduzir o risco.
  • A frequência de negociação em uma tendência de choque causa overtrading. Pode-se aumentar o ciclo% K para reduzir a frequência de negociação.
  • A configuração incorreta dos parâmetros MACD e Signal invalida a filtragem. Os parâmetros devem ser otimizados de acordo com a variedade específica.
  • A acumulação de posições em excesso causou grandes perdas nas negociações bilaterais. O tamanho das posições deve ser limitado.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  • Otimizar o ciclo das médias móveis, filtrando oscilações ao mesmo tempo em que se mantém o juízo de tendência
  • Optimizar os parâmetros %K,%D, reduzindo o whipsaw enquanto mantém a reversão da tendência de captura
  • Optimizar os parâmetros MACD para melhor filtragem e redução de transações de ruído
  • Aumentar o controle de posições, como a abertura de posições de quantidade fixa, posições flutuantes, etc.
  • Aumentar estratégias de stop loss, como stop loss móvel, stop loss de tempo, stop loss ATR, etc.

Resumir

A estratégia de compra e venda de seguimento de tendências é simples e clara, determina a direção da tendência através da média móvel e usa filtros de indicadores para bloquear oportunidades de negociação na tendência. A estratégia pode obter bons resultados com a otimização de parâmetros, mas ainda requer o encapsulamento do código Combine para reduzir o risco de otimização e aumentar a estabilidade.

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

//@version=4
strategy("Higher High / Lower Low Strategy", overlay=true)

// Getting inputs
longOnly = input(true, title="Long or Short Only")
useMACD = input(true, title="Use MACD Filter")
useSignal = input(true, title="Use Signal Filter")
//Filter backtest month and year
startMonth = input(10, minval=1, maxval=12, title="Month")
startYear = input(2020, minval=2000, maxval=2100, title="Year")
//Filter funtion inputs
periodA = input(20, minval=1, title="Period SMA")
periodK = input(5, minval=1, title="Period %K")
fast_length = input(title="Period Fast", type=input.integer, defval=5)
slow_length = input(title="Period Slow", type=input.integer, defval=20)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 30)

//Calculations
smoothD = 3 //input(3, minval=1, title="Smooth %D")
smoothK = 2 //input(2, minval=1, title="Smooth %K")
ma50 = sma(close, periodA)
k = sma(stoch(close, high, low, periodK), smoothK) - 50
d = sma(k, smoothD)
macd = ema(close,fast_length) - ema(close,slow_length)
signal = ema(macd,signal_length)
hist = macd - signal

if (not na(k) and not na(d) and not na(macd) and not na(signal) and longOnly and month>=startMonth and year>=startYear)//	if(k > k[1] and k[2] >= k[1] and (ma50 > ma50[1]) and (not useK or k[1] <= -threshold_k) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]) and (not useHHLL or close >= high[1]) and (not useD or d <= -threshold_d))
    if(high[2] >= high[1] and high > high[1] and (ma50 > ma50[1]) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]))
		strategy.order("HH_LE", strategy.long, when=strategy.position_size == 0, comment="HH_LE")
    if (k < k[1])
		strategy.order("HH_SX", strategy.short, when=strategy.position_size != 0, comment="HH_SX")

if (not na(k) and not na(d) and not na(macd) and not na(signal) and not longOnly and month>=startMonth and year>=startYear)
    if(low[2] <= low[1] and low < low[1] and (ma50 < ma50[1]) and (not useMACD or macd < macd[1]) and (not useSignal or signal < signal[1]))
		strategy.order("HH_SE", strategy.short, when=strategy.position_size == 0, comment="HH_SE")
    if (k > k[1])
		strategy.order("HH_LX", strategy.long, when=strategy.position_size != 0, comment="HH_LX")

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)