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

Debug da política JavaScript no navegador Chrome

Autora:Inventor quantificado - sonho pequeno, Criado: 2022-06-22 14:23:26, Atualizado: 2023-09-18 20:24:01

img

Debug da política JavaScript no navegador Chrome

Para a política de depuração em sistemas de retrospecção, normalmente só é usadoLog()A função ─ assim DEBUG é muito baixa eficiência, e tem uma certa dificuldade para novatos com pouca experiência no teste de programas ─ paraJavaScriptA estratégia de debuxo da linguagem é muito simples.ChromeOs navegadores têm melhor suporte. Pode-se fazer debugging de ponto de interrupção, debugging de um passo, monitoramento de valores de variáveis, monitoramento de expressões, etc. Então vamos aprender juntos como usar esse método em FMZ.JavascriptDEBUG quando a política da linguagem é reevaluada.JavascriptA estratégia da linguagem apoia esse método de debug.

A plataforma FMZ.debuggerInstruções

Insira o código da política da linguagem JavaScript no FMZdebuggerInstruções que permitem que o programa seja interrompido durante a revisão.

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

/*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)
    }
}

Código de configuração de retest

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

Como você pode ver, a troca que foi adicionada ao nosso retrospecto foi o Binance (Binancial) spot, configurado como em um screenshot:

img

Continuando a olhar para o código da estratégia, podemos vervar t = exchange.GetTicker()A partir daí, nós começamos a escrever:debuggerA instrução, é o equivalente a colocar um ponto de interrupção aqui, e o programa vai parar de executar até esse ponto.debuggerNo entanto, não é recomendado fazer isso, basta colocar um interruptor em um determinado local e os interruptores posteriores podem ser configurados no recurso de depuração do DevTools do navegador.

A primeira coisa que você precisa fazer é abrir o navegador Chrome.DevToolsExecutar o retest, definido no código da política.debuggerO que é que isso significa?debuggerO programa de política não pode ser interrompido para parar no ponto de interrupção.DevToolsApós a revisão da política, o programa de política é interrompido na primeira configuração.debuggerLocalização:debuggerTambém pode ser configurado no escopo global do código da estratégia.

Então nós abrimos o navegador Chrome.DevToolsA ferramenta é usada de duas formas:

  • Primeiro, fazemos o clique direito para abrir o menu pop-up.

    img

    Clique no botão "Examinar" e você verá a interface do DevTools.

  • 2 - Use o botão de atalho.

    O botão de acesso pode ser aberto com o botão de atalho.Command+Option+I (Mac)OuControl+Shift+I(Windows、Linux)Abre.DevTools

Abre.DevToolsO que aconteceu depois foi:

img

Interface para DEBUG no navegador da política da linguagem JavaScript

Então o teste acima, quando nós clicamos no botão "Começar a refazer", a política de refazer foi alterada devido a configurações no código.debuggerInstruções, políticas em posição de interrupção e espera. A retrospecção é como se estivesse presa, como mostra o gráfico abaixo:

img

Como você pode ver, na estratégiadebuggerMarque o local da interrupção, o programa inteiro executou apenas a atribuição n para 1, a atribuição t paraGetTickerOs dados de transação que a função retorna. Os valores das variáveis específicas podem ser vistos em uma caixa vermelha no gráfico acima, para que seja conveniente observar os valores das variáveis quando a política está sendo executada.

Configuração manual de depuração do ponto de interrupção

Podemos clicar no número da linha à esquerda do código e adicionar um ponto de interrupção.

img

Clique em "resume script execution" para reiniciar a execução do script, o programa será executado até o próximo ponto de interrupção, e o retestamento terminará se não houver ponto de interrupção ou se o programa tiver um erro que cause uma anomalia.

img

Há ainda alguns botões que podem ser implementados: pular para a próxima função, entrar para a próxima chamada de função, pular para fora da chamada atual, executar em uma única etapa, ignorar todos os pontos de interrupção, etc.

img

DEBUG para este código de teste.

img

Neste momento, quando continuamos a clicar no botão "resume script execution" para continuar a executar, o programa de políticas apresenta uma anomalia, o retorno termina e imprime um erro de anomalia.

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

Este é um erro frequentemente cometido por novatos: não se pode distinguir a letra maiúscula do nome de uma propriedade estrutural.

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

导致传入exchange.Buy函数的价格是一个undefined变量,引起程序异常,回测结束。

Quando o programa para no ponto de interrupção, esta linha de código não é executada. Continuamos clicando no botão "step into next function call".

img

跳转到exchange.Buy函数调用中。

img

Veja o preço como uma variável indefinida.

Usando a forma acima, é fácil encontrar um programa BUG passo a passo. Erros que muitos novatos cometem com frequência: por exemplo, o acesso ao índice do arquivo cruza a fronteira, cita variáveis não definidas, erros de ortografia de expressões, etc. Desta forma, é fácil fazer o DEBUG do programa.


Relacionados

Mais.

FmzeroO quarto de banho, ainda assim, 666!