avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Criado em: 2022-06-22 14:23:26, atualizado em: 2023-09-18 20:24:01
comments   1
hits   1736

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Para estratégias de depuração em um sistema de backtesting, geralmente apenasLog()função. Esse tipo de eficiência de DEBUG é muito baixa e difícil para iniciantes com pouca experiência em testes de programas. paraJavaScriptEstratégia de depuração da linguagemChromeOs navegadores têm melhor suporte. Ele pode realizar depuração de ponto de interrupção, depuração de etapa única, monitoramento de valor de variável, monitoramento de expressão, etc. durante o backtesting. Então vamos aprender como usar esse método para controlar a FMZ.JavascriptDEBUG ao testar estratégias na linguagem. Observe que somente na FMZJavascriptAs políticas da linguagem dão suporte a essa abordagem de depuração.

Na plataforma FMZdebuggerinstrução

Inserir no código de política da linguagem JavaScript no FMZdebuggerInstrução que pode interromper a execução do programa durante o backtesting.

Usamos o seguinte código de estratégia de teste:

/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

function main() {
    var n = 1 
    while (true) {
        var t = exchange.GetTicker()
        debugger
        var r = exchange.GetRecords()
        if (n == 1) {
            // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性,属性名区分大小写
            var id = exchange.Buy(t.buy, 0.1)    
            var orderBuy = exchange.GetOrder(id)
        }
        Sleep(500)
    }
}

Do código de configuração do backtest

/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

Você pode ver que a exchange que adicionamos durante o backtest é a Binance Spot, e a configuração é como mostrada na captura de tela:

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Continuando a olhar para o código da estratégia, podemos ver quevar t = exchange.GetTicker()Abaixo desta frase escrevemosdebuggerA instrução é equivalente a definir um ponto de interrupção aqui, e o programa irá parar quando atingir essa posição. Múltiplodebugger, mas não é recomendado fazer isso. Basta definir um ponto de interrupção em um determinado local. Os pontos de interrupção subsequentes podem ser definidos na função de depuração DevTools do navegador.

Você precisa abrir o navegador Chrome primeiroDevToolsEm seguida, execute o backtest, o conjunto de códigos de estratégiadebuggerentrará em vigor, caso contráriodebuggerEle será ignorado e o programa de estratégia de backtest não poderá ser interrompido e parado no ponto de interrupção. AbrirDevToolsApós o backtest da estratégia, o programa de estratégia será interrompido no primeiro conjuntodebuggerLocalização,debuggerTambém pode ser definido no escopo global do código de política.

Abrimos o navegador ChromeDevToolsExistem dois tipos de ferramentas:

  • 1. Clicamos com o botão direito na página para abrir o menu pop-up

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Quando clicarmos em “Inspecionar”, a interface do DevTools será exibida.

  • 2. Use teclas de atalho

Você também pode usar a tecla de atalho para abri-lo.Command+Option+I (Mac)ouControl+Shift+I(Windows、Linux)Abrir DevTools

AbrirDevToolsDepois, conforme mostrado na figura:

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

A interface de depuração no navegador da estratégia de linguagem JavaScript

Após o teste acima, quando clicamos no botão “Start Backtesting” para fazer o backtest da estratégia, devido à configuração no códigodebuggerInstrução, a estratégia interrompe e espera na posição correspondente. O backtest parece estar travado, conforme mostrado abaixo:

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Pode-se observar que na estratégiadebuggerMarque a posição de interrupção. O programa inteiro executa apenas n atribuído a 1 e t atribuído aGetTickerOs dados de mercado retornados pela função. Na caixa vermelha na imagem acima, você pode ver os valores de variáveis ​​específicas, o que torna muito conveniente observar os valores de várias variáveis ​​quando a estratégia está em execução.

Definir manualmente pontos de interrupção para depuração

Podemos clicar no número da linha no lado esquerdo do código para adicionar um ponto de interrupção.

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Clique em “resumir execução do script” para retomar a execução do script. O programa será executado até o próximo ponto de interrupção. Se não houver ponto de interrupção ou se o programa tiver um erro e causar uma exceção, o backtest será encerrado.

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Também há botões que podem ser usados ​​para: pular a próxima função, entrar na próxima chamada de função, sair da chamada de função atual, dar um passo a mais, ignorar todos os pontos de interrupção, etc.

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Dê este código de teste DEBUG

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Neste ponto, quando continuamos clicando no botão “retomar execução do script” para continuar a execução, o programa de estratégia terá uma exceção, o backtest será encerrado e uma mensagem de erro de exceção será impressa.

main:17:31 - TypeError: Cannot convert "undefined" to double

Este é um erro comum cometido por novatos, que não distinguem entre letras maiúsculas e minúsculas em um nome de atributo de estrutura.

var id = exchange.Buy(t.buy, 0.1)  //  下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。

Como resultado, o preço passou para a bolsa. A função Buy é uma variável indefinida, causando uma exceção no programa e o backtest termina.

Quando o programa para em um ponto de interrupção, esta linha de código não é executada. Continuamos clicando no botão “entrar na próxima chamada de função”.

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Vá para a chamada da função exchange.Buy.

Depuração de backtesting de estratégia JavaScript no navegador Chrome DevTools

Veja que o preço é uma variável indefinida.

Usando o método acima, é fácil encontrar bugs no programa passo a passo. Muitos erros que novatos costumam cometer: por exemplo, acesso fora dos limites a índices de array, referências a variáveis ​​indefinidas, escrita incorreta de expressões, etc. Dessa forma, é fácil depurar o programa.