Estratégia de seleção de intervalo de tempo de backtesting adaptável baseada em superposição de MA dupla


Data de criação: 2024-01-05 12:12:10 última modificação: 2024-01-05 12:12:10
cópia: 0 Cliques: 589
1
focar em
1621
Seguidores

Estratégia de seleção de intervalo de tempo de backtesting adaptável baseada em superposição de MA dupla

Visão geral

A ideia central da estratégia é implementar uma estrutura que permita a escolha flexível do intervalo de tempo de resposta, permitindo que o usuário configure automaticamente ou manualmente o tempo de início da resposta de acordo com as diferentes necessidades.

A estratégia fornece quatro opções de data range através de parâmetros de entrada: usar todos os dados históricos, o número de dias mais recente, o número de semanas mais recente ou manualmente a data range. A estratégia configura a janela de retorno de forma dinâmica de acordo com a data range selecionada, enquanto a lógica de negociação permanece inalterada, para que as diferenças de desempenho da estratégia em diferentes janelas de tempo possam ser comparadas.

Princípio da estratégia

A estratégia é composta por um módulo de seleção de intervalos de data de retracção e um módulo de estratégia de negociação de MA duplo.

Seleção de módulos de detecção de data

  1. Existem quatro opções de data: Data Total Histórico (ALL), Data Última (DAYS), Data Última (WEEKS) e Data Última (MANUAL).
  2. Dependendo do escopo selecionado, a configuração dinâmica de conversão da barra do tempo de retorno do tempo de início e término.
  3. A função tempo condicional window ((() filtra as linhas K e faz a retrospectiva somente no intervalo de data selecionado.

Módulo de estratégia de negociação de MA duplo

  1. Durante o MA rápido é fastMA, padrão 14; durante o MA lento é slowMA, padrão 28.
  2. Quando o MA rápido atravessa o MA lento, faça mais; quando o MA rápido atravessa o MA lento, equilibre a posição.
  3. Desenhe a curva de MA.

Análise de vantagens estratégicas

  1. Pode-se escolher flexivelmente diferentes intervalos de tempo de resposta, sem restrições, para atender a diferentes necessidades experimentais.
  2. Pode-se testar a eficácia de diferentes parâmetros de ciclo no mesmo período de tempo, com resultados comparáveis.
  3. Modificar a lógica de negociação é simples e pode ser usado como uma estrutura para outras estratégias.
  4. A estratégia de Dual MA é simples e fácil de entender.

Análise de riscos e soluções

  1. A estratégia de MA dupla é mais grosseira, com problemas frequentes de compra e venda. Optimizações como a inclusão de um mecanismo de parada de perdas podem ser consideradas.
  2. A configuração manual do intervalo de datas requer cuidado para evitar o uso de datas erradas. Pode ser exibida uma mensagem de aviso.
  3. O tempo de retrospecção de todo o histórico pode aumentar o período de teste. Pode-se considerar aumentar o ponto de deslizamento ou reduzir as taxas de transação frequentes.

Direção de otimização da estratégia

  1. Aumentar o julgamento lógico de stop loss e reduzir o risco de perdas.
  2. Adicionar filtros de estoque, preferência para ações com forte correlação com o índice, aumentando a estabilidade.
  3. Aumentar os filtros de sinais de transação, filtrando os sinais que são instáveis em um determinado período, reduzindo as transações desnecessárias.
  4. Teste o desempenho de ações relacionadas a diferentes índices de classificação para encontrar as melhores variedades.

Resumir

A estratégia, como um quadro geral de data de retestamento, é flexível e personalizável para atender às diferentes necessidades de teste dos usuários. Com uma lógica de negociação de MA dupla simples e eficaz, a estratégia pode ser verificada e comparada rapidamente.

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

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA