
Para las estrategias de depuración en un sistema de backtesting, generalmente soloLog()función. Este tipo de eficiencia de DEBUG es muy baja y resulta difícil para principiantes que tienen poca experiencia en pruebas de programas. paraJavaScriptDepuración de estrategias del lenguajeChromeLos navegadores tienen un mejor soporte. Puede realizar depuración de puntos de interrupción, depuración de un solo paso, monitoreo de valores variables, monitoreo de expresiones, etc. durante las pruebas retrospectivas. Entonces aprendamos cómo utilizar este método para controlar el FMZ.JavascriptDEBUG al realizar pruebas retrospectivas de estrategias en el lenguaje. Tenga en cuenta que solo en FMZJavascriptLas políticas del lenguaje respaldan este enfoque de depuración.
debuggerinstrucciónInsertar en el código de política el lenguaje JavaScript en FMZdebuggerInstrucción que puede interrumpir la ejecución del programa durante el backtesting.
Utilizamos el siguiente código de estrategia de prueba:
/*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)
}
}
Desde el código de configuración de 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"}]
*/
Puedes ver que el intercambio que agregamos durante la prueba retrospectiva es Binance spot, y la configuración es como se muestra en la captura de pantalla:

Continuando mirando el código de estrategia, podemos ver quevar t = exchange.GetTicker()Debajo de esta frase escribimosdebuggerLa instrucción es equivalente a establecer un punto de interrupción aquí, y el programa se detendrá cuando alcance esta posición. Se pueden utilizar múltiples políticas en el código de estrategia.debugger, pero no se recomienda hacerlo. Simplemente establezca un punto de interrupción en una ubicación determinada. Los puntos de interrupción posteriores se pueden establecer en la función de depuración de DevTools del navegador.
Primero debes abrir el navegador ChromeDevToolsLuego realice el backtest, el código de estrategia establecidodebuggerentrará en vigor, de lo contrariodebuggerSe ignorará y el programa de estrategia de backtest no se podrá interrumpir ni detener en el punto de interrupción. AbiertoDevToolsDespués de realizar pruebas retrospectivas de la estrategia, el programa de estrategia se interrumpirá en el primer conjunto.debuggerUbicación,debuggerTambién se puede configurar en el ámbito global del código de política.
Abrimos el navegador ChromeDevToolsHay dos tipos de herramientas:

Cuando hacemos clic en “Inspeccionar”, se mostrará la interfaz de DevTools.
También puedes utilizar la tecla de acceso directo para abrirlo.Command+Option+I (Mac)oControl+Shift+I(Windows、Linux)Abierto DevTools。
AbiertoDevToolsPosteriormente, como se muestra en la figura:

Siguiendo la prueba anterior, cuando hacemos clic en el botón “Iniciar backtesting” para probar la estrategia, debido a la configuración en el códigodebuggerInstrucción, la estrategia interrumpe y espera en la posición correspondiente. El backtest parece estar bloqueado, como se muestra a continuación:

Se puede observar que en la estrategiadebuggerMarca la posición de interrupción. Todo el programa solo ejecuta n asignado a 1 y t asignado aGetTickerLos datos de mercado devueltos por la función. En el cuadro rojo de la imagen de arriba, puedes ver los valores de las variables específicas, lo que hace que sea muy conveniente observar los valores de varias variables cuando se ejecuta la estrategia.
Podemos hacer clic en el número de línea en el lado izquierdo del código para agregar un punto de interrupción.

Haga clic en “Reanudar ejecución de script” para reanudar la ejecución del script. El programa se ejecutará hasta el siguiente punto de interrupción. Si no hay ningún punto de interrupción o el programa tiene un error y provoca una excepción, la prueba retrospectiva finalizará.

También hay botones que se pueden usar para: omitir la siguiente función, pasar a la siguiente llamada de función, salir de la llamada de función actual, realizar un solo paso, ignorar todos los puntos de interrupción, etc.


En este punto, cuando continuamos haciendo clic en el botón “reanudar ejecución del script” para continuar la ejecución, el programa de estrategia tendrá una excepción, la prueba retrospectiva finaliza y se imprime un mensaje de error de excepción.
main:17:31 - TypeError: Cannot convert "undefined" to double
Este es un error común cometido por los novatos, que no distinguen entre mayúsculas y minúsculas para un nombre de atributo de estructura.
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
Como resultado, el precio pasó al intercambio. La función de compra es una variable no definida, lo que provoca una excepción de programa y finaliza la prueba retrospectiva.
Cuando el programa se detiene en un punto de interrupción, esta línea de código no se ejecuta. Continuamos haciendo clic en el botón “pasar a la siguiente llamada de función”.

Saltar a la llamada de función de intercambio.Comprar.

Observe que el precio es una variable indefinida.
Usando el método anterior, es fácil encontrar errores del programa paso a paso. Muchos errores que los novatos suelen cometer: por ejemplo, acceso fuera de límites a índices de matrices, referencias a variables no definidas, escritura incorrecta de expresiones, etc. De esta manera es fácil depurar el programa.