Estratégia de hora de início de backtesting personalizada


Data de criação: 2023-09-26 20:53:15 última modificação: 2023-09-26 20:53:15
cópia: 4 Cliques: 651
1
focar em
1617
Seguidores

Visão geral

O objetivo desta política é permitir que o usuário personalize o tempo de inicialização do retorno, permitindo um retorno mais flexível e personalizado.

Princípio da estratégia

A estratégia permite a criação de um tempo de inicialização de retorno personalizado usando as funções de tempo e timestamp do script pine.

Primeiro, ele permite que o usuário insira os anos, meses, datas, horas e minutos de inicialização do retorno personalizados nas configurações. Em seguida, ele usa essas entradas para gerar uma coluna de tempo e armazená-la na variável startTime.

Na determinação das condições da estratégia, ele adiciona uma nova condição de startTime. A estratégia só será iniciada se o tempo atual for maior ou igual a startTime.

Por exemplo:

longCondition = crossover(sma(close, 14), sma(close, 28)) 

if (longCondition and startTime) 

  strategy.entry("My Long Entry Id", strategy.long)

Isso permite que o tempo de inicialização de retrocesso seja personalizado. O usuário pode configurar o tempo de início de retrocesso de acordo com a necessidade de flexibilidade, e não apenas o tempo de codificação rígida.

Análise de vantagens

A estratégia de personalizar a detecção do tempo de inicialização tem as seguintes vantagens:

  1. Mais flexibilidade: o usuário pode personalizar completamente o tempo de inicialização do feedback, não mais limitado a um ponto de tempo fixo.

  2. Mais realista: pode-se configurar o tempo de início do retorno como o tempo de execução da estratégia, tornando o retorno mais próximo da situação real do mercado.

  3. Facilitar o feedback baseado em eventos: o tempo de inicialização pode ser definido com base no tempo de ocorrência de um evento, para que o feedback seja direcionado a eventos específicos.

  4. Facilidade de ajuste de condições: é possível ajustar com muita facilidade as condições de início da retomada, de modo a realizar uma retomada direcionada para diferentes fases.

  5. Repetível e confiável: parameterizar o tempo de inicialização da detecção para obter resultados confiáveis.

Análise de Riscos

O uso de um tempo de inicialização de retroalimentação personalizado também apresenta alguns riscos:

  1. Os resultados da ressonância dependem do tempo de inicialização: diferentes tempos de inicialização podem causar grandes diferenças nos resultados da ressonância.

  2. O tempo de inicialização deve ser escolhido com cuidado: o tempo de inicialização imprudente pode causar distorções no feedback e não refletir a realidade.

  3. Aumento do risco de curva de ajuste: é fácil de ajustar os dados históricos por meio de ajustes no tempo de inicialização, gerando risco de sobreajuste.

  4. Diminuir a comparabilidade dos resultados dos testes: Os resultados dos testes com esta estratégia não são muito comparáveis com os resultados dos testes com um tempo de inicialização fixo.

Resolução:

  1. Refazer o teste várias vezes para avaliar a influência da mudança no tempo de inicialização nos resultados.

  2. Selecionar a data de ocorrência de um evento importante como a data de inicialização para minimizar a falha de retrocesso.

  3. A partir de agora, o Google pode usar o Google Earth como um local de pesquisas, mas não como um local de pesquisas.

  4. Manter o feedback de tempo de inicialização fixo como referência, para comparação com o feedback personalizado.

Direção de otimização

A estratégia de tempo de inicialização de retorno de mensuração personalizada também pode ser otimizada em:

  1. Suporte para a personalização de horários de início e término, permitindo a configuração flexível de uma janela de tempo de retrospecção completa.

  2. Suporte para vários modos de tempo: data específica, data relativa, evento-driven, etc., para tornar a configuração de tempo de retrospecção mais inteligente.

  3. Suporte para interface de configuração gráfica, para que a configuração de parâmetros de tempo seja mais intuitiva.

  4. Suporta diferentes configurações de grãos de tempo: ano, mês, dia, hora, minuto, segundo, etc.

  5. Registre a configuração do tempo de resposta para que os resultados sejam reproduzíveis, rastreáveis e comparáveis.

  6. Aumentar a verificação de configuração de tempo inadequada, evitando que a configuração de tempo irracional afete a qualidade do feedback.

  7. Fornece função de ligação do tempo de inicialização, com um único toque para copiar o tempo de inicialização para várias estratégias.

Resumir

Esta estratégia permite uma configuração de tempo de inicialização de retrospectiva personalizada e flexível, que pode reduzir as restrições de retrospectiva, tornando-a mais próxima da situação real. Mas também é necessário estar atento à dependência dos resultados de retrospectiva do tempo de inicialização, adotar medidas de retrospectiva múltipla e event drive para reduzir a falha de retrospectiva.

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

//@version=3
strategy("C320up Strategy Tester Start Time", overlay = true)
// Copy and paste below into your strategy
// Strategy Tester Start Time
xYear = input(2018, title = "Start Year")
xMonth = input(01, title = "Start Month", minval = 01, maxval = 12)
xDay = input(01, title = "Start Day", minval = 01, maxval = 31)
xHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
xMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = time >= timestamp(xYear, xMonth, xDay, xHour, xMinute)
// End copy and paste
// Add (and startTime) at the end of your condition/s to activate

// The strategy below is just an example
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition and startTime)
    strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition and startTime)
    strategy.entry("My Short Entry Id", strategy.short)
// Happy trading!