O recurso está a ser carregado... Carregamento...

Backtesting de estratégia JavaScript é depurado no DevTools do navegador Chrome

Autora:Inventor quantificado - sonho pequeno, Criado: 2022-06-24 14:10:02, Atualizado: 2023-09-25 19:50:23

img

Backtesting de estratégia JavaScript é depurado no DevTools do navegador Chrome

Para as estratégias de depuração em sistemas de backtesting, geralmente apenas oLog()Função pode ser usado, por isso DEBUG é muito ineficiente e difícil para os testadores de programas novatos com pouca experiência.JavaScriptA linguagem, oChromeO navegador suporta melhor, o que pode implementar a depuração de ponto de interrupção, depuração de uma única etapa, monitoramento de valor variável, monitoramento de expressão e assim por diante durante o backtesting.JavascriptObserve que este método de depuração é suportado apenas paraJavaScriptestratégias linguísticas na plataforma FMZ.

Odebuggercomando na plataforma FMZ

Introdução dodebuggerO comando no código de estratégia da linguagem JavaScript no FMZ permite que a execução do programa seja interrompida durante o backtesting.

Utilizamos 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) {
            // When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute
            var id = exchange.Buy(t.buy, 0.1)    
            var orderBuy = exchange.GetOrder(id)
        }
        Sleep(500)
    }
}

Configure código a partir do backtesting

/*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"}]
*/

Aqui podemos ver que a troca que adicionamos para backtesting é Binance spot, a configuração é como mostrado na captura de tela:

img

Continuando a olhar para o código de estratégia, podemos ver que nós escrevemos odebuggerComando sob ovar t = exchange.GetTicker()sentença, que é equivalente a atingir um ponto de interrupção aqui, e a execução do programa vai parar nesta posição.debuggers podem ser usados no código de estratégia, mas não é recomendável fazê-lo, basta usar um ponto de interrupção em um determinado local, e pontos de interrupção subsequentes podem ser definidos na função de depuração DevTools do navegador.

Precisamos de abrir oDevToolsdo navegador Chrome antes de executar o backtest, em seguida, odebuggerO Conselho Europeu de Lisboa adoptou, em 15 de Dezembro, uma decisão relativa à aplicação do artigo 107.° do Tratado CE.debuggerO programa de estratégia de backtesting não pode ser interrompido ou interrompido no ponto de interrupção.DevToolspara testar a estratégia, o programa de estratégia será interrompido na primeira configuraçãodebuggerposição, e odebuggerO âmbito global do código de estratégia também pode ser definido.

Há duas maneiras de abrirmos oDevToolsferramenta do navegador Chrome:

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

    Nós clicamos Check para exibir a interface DevTools.

    1. Use as teclas de atalho

    Você também pode usar as teclas de atalho para abrirDevToolspressionandoCommand+Option+I (Mac)ouControl+Shift+I (Windows, Linux).

Após a aberturaDevToolsTal como mostrado na figura:

img

Interface do DEBUG no navegador para a estratégia da linguagem JavaScript

Após o teste acima, quando clicamos no botão Start Backtest para testar a estratégia, a estratégia quebra e espera na posição correspondente porquedebuggerO backtest parece estar preso, da seguinte forma:

img

Pode-se ver que na posição marcada interrompida pela estratégiadebugger, todo o programa executa apenas os dados de mercado devolvidos pela função com o valor de n sendo 1, e o valor de t sendoGetTickerPode ver os valores das variáveis específicas na caixa vermelha da figura acima, de modo a que seja fácil observar o valor de cada variável quando a estratégia está em execução.

Defina pontos de interrupção para depuração manual

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

img

Clique em resume script execution para retomar a execução do script, o programa será executado para o próximo ponto de interrupção, se não houver ponto de interrupção ou o programa tiver um erro que cause uma exceção, o backtest terminará.

img

Há também alguns botões que podem ser implementados, por exemplo, pular a próxima função, ir para a próxima chamada de função, sair da chamada de função atual, executar o único passo, ignorar todos os breakpoints, etc.

img

Teste o código DEBUG

img

Neste ponto, quando continuarmos a clicar no botão resume script execution para continuar a execução, uma exceção ocorrerá no programa de estratégia, e o backtest terminará com uma mensagem de erro de exceção impressa.

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

Não ser sensível a maiúsculas e minúsculas para um nome de contribuição de estrutura é um erro comum cometido por novatos.

var id = exchange.Buy(t.buy, 0.1)  //  When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute

A função Buy é uma variável indefinida, que causa uma exceção do programa e termina o backtest.

Quando o programa para na posição do ponto de interrupção, esta linha de código não é executada. Continuamos a clicar no botão step into next function call.

img

Vai para a câmara. Compra a chamada da função.

img

Aqui podemos ver que o preço é uma variável indefinida.

Usando a abordagem acima, é fácil descobrir os bugs do programa passo a passo. Muitos novatos muitas vezes cometem erros, por exemplo, o índice de uma matriz é acessado fora dos limites, variáveis não definidas são referenciadas, expressões são escritas incorretamente, etc., todos eles são fáceis de DEBUG o programa.


Relacionados

Mais.