La estrategia de backtesting de JavaScript está depurada en DevTools del navegador Chrome

El autor:Un sueño pequeño., Creado: 2022-06-24 14:10:02, Actualizado: 2023-09-25 19:50:23

img

La estrategia de backtesting de JavaScript está depurada en DevTools del navegador Chrome

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.JavaScriptLa lenguaChromeel 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.JavascriptNota que este método de depuración es compatible sólo paraJavaScriptlas estrategias lingüísticas en la plataforma FMZ.

Eldebuggermando en la plataforma FMZ

La introducción de ladebuggerEl 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:

img

Continuando mirando el código de la estrategia, podemos ver que escribimos eldebuggerel 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.debuggers 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 elDevToolsdel navegador Chrome antes de ejecutar el backtest, entonces eldebuggerEn caso contrario, el Consejo de Ministros adoptará una decisión sobre la adopción de una nueva directiva.debuggerEl programa de estrategia de backtesting no puede ser interrumpido o detenido en el punto de ruptura.DevToolspara retrospectivamente probar la estrategia, el programa de estrategia se interrumpirá en la primera configuracióndebuggerLa posición y eldebuggerTambién puede establecerse en el ámbito global del código de estrategia.

Hay dos maneras de abrir elDevToolsherramienta del navegador Chrome:

    1. Usamos el botón derecho en la página para abrir el menú emergente

    Hacemos clic en Check para mostrar la interfaz de DevTools.

    1. Usa las teclas de acceso directo.

    También puede usar las teclas de acceso directo para abrirDevToolsPresionandoCommand+Option+I (Mac)o bienControl+Shift+I (Windows, Linux).

Después de la aperturaDevToolscomo se muestra en la figura:

img

Interfaz de DEBUG en el navegador para la estrategia del lenguaje JavaScript

Después de la prueba anterior, cuando hacemos clic en el botón Start Backtest para backtest la estrategia, la estrategia se rompe y espera en la posición correspondiente porquedebuggerEl comando está establecido en el código. El backtest parece estar atascado, como sigue:

img

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 esGetTickerPuede 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.

Establecer puntos de interrupción para depuración manual

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.

img

Haga clic en resume script execution para reanudar la ejecución del script, el programa se ejecutará hasta el siguiente punto de interrupción, si no hay punto de interrupción o el programa tiene un error que causa una excepción, el backtest terminará.

img

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.

img

Prueba el código DEBUG

img

En este punto, cuando continuamos haciendo clic en el botón resume script execution para continuar la ejecución, se producirá una excepción en el programa de estrategia, y el backtest terminará con un mensaje de error de excepción impreso.

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 step into next function call.

img

Ve al intercambio. Compra la llamada de la función.

img

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.


Relacionados

Más.