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 ─ paraJavaScript
A estratégia de debuxo da linguagem é muito simples.Chrome
Os 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.Javascript
DEBUG quando a política da linguagem é reevaluada.Javascript
A estratégia da linguagem apoia esse método de debug.
debugger
InstruçõesInsira o código da política da linguagem JavaScript no FMZdebugger
Instruçõ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:
Continuando a olhar para o código da estratégia, podemos vervar t = exchange.GetTicker()
A partir daí, nós começamos a escrever:debugger
A instrução, é o equivalente a colocar um ponto de interrupção aqui, e o programa vai parar de executar até esse ponto.debugger
No 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.DevTools
Executar o retest, definido no código da política.debugger
O que é que isso significa?debugger
O programa de política não pode ser interrompido para parar no ponto de interrupção.DevTools
Após a revisão da política, o programa de política é interrompido na primeira configuração.debugger
Localização:debugger
Também pode ser configurado no escopo global do código da estratégia.
Então nós abrimos o navegador Chrome.DevTools
A ferramenta é usada de duas formas:
Primeiro, fazemos o clique direito para abrir o menu pop-up.
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.DevTools
O que aconteceu depois foi:
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.debugger
Instruções, políticas em posição de interrupção e espera. A retrospecção é como se estivesse presa, como mostra o gráfico abaixo:
Como você pode ver, na estratégiadebugger
Marque o local da interrupção, o programa inteiro executou apenas a atribuição n para 1, a atribuição t paraGetTicker
Os 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.
Podemos clicar no número da linha à esquerda do código e adicionar um ponto de interrupção.
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.
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.
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".
跳转到exchange.Buy函数调用中。
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.
FmzeroO quarto de banho, ainda assim, 666!