Para las estrategias de depuración en los sistemas de backtesting, por lo general sólo elLog()
Para la estrategia de depuración en el sistema de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación de programación.JavaScript
La lenguaChrome
el navegador lo admite mejor, lo que puede implementar la depuración de punto de ruptura, depuración de un solo paso, monitoreo de valores variables, monitoreo de expresiones y así sucesivamente durante la backtesting.Javascript
Nota que este método de depuración es compatible sólo paraJavaScript
las estrategias lingüísticas en la plataforma FMZ.
debugger
mando en la plataforma FMZLa introducción de ladebugger
El comando en el código de estrategia del lenguaje JavaScript en FMZ permite que la ejecución del programa se interrumpa 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) {
// 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)
}
}
Configurar el código desde el 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"}]
*/
Aquí podemos ver que el intercambio que añadimos para backtesting es Binance spot, la configuración es como se muestra en la captura de pantalla:
Continuando mirando el código de la estrategia, podemos ver que escribimos eldebugger
el mando bajo elvar t = exchange.GetTicker()
sentencia, que es equivalente a golpear un punto de ruptura aquí, y la ejecución del programa se detendrá en esta posición.debugger
s se pueden usar en el código de estrategia, pero no se recomienda hacerlo, solo use un punto de interrupción en una ubicación determinada, y los puntos de interrupción posteriores se pueden establecer en la función de depuración de DevTools del navegador.
Necesitamos abrir elDevTools
del navegador Chrome antes de ejecutar el backtest, entonces eldebugger
En caso contrario, el Consejo de Ministros adoptará una decisión sobre la adopción de una nueva directiva.debugger
El programa de estrategia de backtesting no puede ser interrumpido o detenido en el punto de ruptura.DevTools
para retrospectivamente probar la estrategia, el programa de estrategia se interrumpirá en la primera configuracióndebugger
La posición y eldebugger
También puede establecerse en el ámbito global del código de estrategia.
Hay dos maneras de abrir elDevTools
herramienta del navegador Chrome:
Hacemos clic en
También puede usar las teclas de acceso directo para abrirDevTools
PresionandoCommand+Option+I (Mac)
o bienControl+Shift+I (Windows, Linux)
.
Después de la aperturaDevTools
como se muestra en la figura:
Después de la prueba anterior, cuando hacemos clic en el botón debugger
El comando está establecido en el código. El backtest parece estar atascado, como sigue:
Se puede ver que en la posición marcada interrumpida por la estrategiadebugger
, todo el programa sólo ejecuta los datos de mercado devueltos por la función con el valor de n es 1, y el valor de t esGetTicker
Puede ver los valores de las variables específicas en el cuadro rojo de la figura anterior, de modo que sea fácil observar el valor de cada variable cuando se ejecuta la estrategia.
Podemos hacer clic en el número de línea en el lado izquierdo del código para añadir un punto de interrupción.
Haga clic en
También hay algunos botones que se pueden implementar, por ejemplo, omitir la siguiente función, ir a la siguiente llamada de función, salir de la llamada de función actual, ejecutar el paso único, ignorar todos los puntos de interrupción, etc.
En este punto, cuando continuamos haciendo clic en el botón
main:17:31 - TypeError: Cannot convert "undefined" to double
No ser sensible a mayúsculas y minúsculas para un nombre de contribución de estructura es un error común cometido por los 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
La función Buy es una variable indefinida, que causa una excepción del programa y termina la prueba de retroceso.
Cuando el programa se detiene en la posición del punto de ruptura, esta línea de código no se ejecuta. Continuamos haciendo clic en el botón
Ve al intercambio. Compra la llamada de la función.
Aquí podemos ver que el precio es una variable indefinida.
Al usar el enfoque anterior, es fácil descubrir los errores del programa paso a paso. Muchos principiantes a menudo cometen errores, por ejemplo, el índice de una matriz se accede fuera de los límites, se hacen referencias a variables no definidas, se escriben expresiones incorrectamente, etc., todos ellos son fáciles de DEBUG el programa.