Estratégia de negociação cruzada da SMA

Autora:ChaoZhang, Data: 2023-12-25 16:03:48
Tags:

img

Resumo

Esta estratégia é projetada com base nos princípios de cruz de ouro e cruz morta da média móvel simples (SMA). A estratégia usa dois SMA, ou seja, SMA rápido e SMA lento. Quando o SMA rápido cruza acima do SMA lento de baixo, um sinal de compra é gerado. Quando o SMA rápido cruza abaixo do SMA lento de cima, um sinal de venda é gerado.

Estratégia lógica

A estratégia baseia-se principalmente em duas linhas de indicador SMA. A SMA rápida tem um período mais curto e pode capturar mudanças de preço mais rapidamente. A SMA lenta tem um período mais longo e pode filtrar algum ruído. Quando a SMA rápida cruza acima da SMA lenta de baixo, ela indica que a velocidade de crescimento de curto prazo é mais rápida e gera um sinal de compra. Quando a SMA rápida cruza abaixo da SMA lenta de cima, ela indica que a velocidade de queda de curto prazo é mais rápida e gera um sinal de venda.

Ao definir diferentes parâmetros do período SMA, os parâmetros da estratégia podem ser ajustados em certa medida para se adaptarem a diferentes ambientes de mercado.

Análise das vantagens

  • Utiliza o conhecido indicador SMA com lógica simples
  • Parâmetros de período de SMA personalizáveis com forte adaptabilidade
  • Intervalo de tempo de backtesting pode ser definido para otimização de parâmetros
  • Usar o crossover para gerar sinais tem um certo efeito de filtragem e pode reduzir os negócios errados

Análise de riscos

  • A própria SMA tem um efeito de atraso e pode perder oportunidades de curto prazo
  • Incapaz de determinar o ímpeto da tendência, a eficácia da geração de sinal pode ser instável
  • Ajustes incorretos dos parâmetros do período SMA aumentarão os falsos sinais

Para combater os riscos acima referidos, podem ser tomadas as seguintes medidas:

  • Encurtar adequadamente o ciclo da SMA para melhorar a sensibilidade
  • Incorporar outros indicadores para determinar a dinâmica da tendência
  • Encontre a combinação ideal de parâmetros usando ferramentas de otimização de parâmetros

Orientações de otimização

  • Adicionar estratégia de stop loss para controlar perdas únicas
  • Adicionar mecanismo de gestão de posições
  • Combinar com outros indicadores técnicos
  • Adicionar algoritmos de aprendizado de máquina para obter otimização de parâmetros dinâmicos

Resumo

Esta é uma estratégia típica de tendência. Aplicando o princípio simples de dupla cruzamento de média móvel, pode obter bons resultados de rastreamento quando os parâmetros são definidos adequadamente. No entanto, a SMA em si tem um certo efeito de atraso e não pode determinar o ímpeto da tendência. Portanto, na aplicação real, outras ferramentas auxiliares precisam ser introduzidas para formar uma combinação de indicadores e complementadas com meios automatizados de otimização de parâmetros e controle de risco, a fim de tornar a estratégia constantemente lucrativa.


/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//strategy(title="MA Cross Entry & Exit w/Date Range", overlay=true, initial_capital=10000, currency='USD')

strategy(title="SMA Cross Entry & Exit Strategy", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/


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

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


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

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === LOGIC ===
//enterLong = crossover(maFast, maSlow)
//exitLong = crossover(maSlow, maFast)
enterLong = crossover(maSlow, maFast)
exitLong = crossover(maFast, maSlow)


// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====

fill(fast, slow, color = maFast > maSlow ? green : red)

Mais.