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.JavaScript
A linguagem, oChrome
O 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.Javascript
Observe que este método de depuração é suportado apenas paraJavaScript
estratégias linguísticas na plataforma FMZ.
debugger
comando na plataforma FMZIntrodução dodebugger
O 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:
Continuando a olhar para o código de estratégia, podemos ver que nós escrevemos odebugger
Comando 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.debugger
s 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 oDevTools
do navegador Chrome antes de executar o backtest, em seguida, odebugger
O Conselho Europeu de Lisboa adoptou, em 15 de Dezembro, uma decisão relativa à aplicação do artigo 107.° do Tratado CE.debugger
O programa de estratégia de backtesting não pode ser interrompido ou interrompido no ponto de interrupção.DevTools
para testar a estratégia, o programa de estratégia será interrompido na primeira configuraçãodebugger
posição, e odebugger
O âmbito global do código de estratégia também pode ser definido.
Há duas maneiras de abrirmos oDevTools
ferramenta do navegador Chrome:
Nós clicamos
Você também pode usar as teclas de atalho para abrirDevTools
pressionandoCommand+Option+I (Mac)
ouControl+Shift+I (Windows, Linux)
.
Após a aberturaDevTools
Tal como mostrado na figura:
Após o teste acima, quando clicamos no botão debugger
O backtest parece estar preso, da seguinte forma:
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 sendoGetTicker
Pode 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.
Podemos clicar no número de linha no lado esquerdo do código para adicionar um ponto de interrupção.
Clique em
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.
Neste ponto, quando continuarmos a clicar no botão
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
Vai para a câmara. Compra a chamada da função.
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.