
En los artículos anteriores, hemos aprendido que el llamado comercio programado y cuantitativo es un programa de script que realiza algunas operaciones basadas en los datos obtenidos del intercambio después de una serie de cálculos, juicios y desencadenantes para operar la cuenta de intercambio para el comercio. Estas acciones de obtención de datos y operaciones de cuentas se realizan todas a través de la interfaz API de intercambio. En términos simples, es la interacción entre el programa de script y el intercambio. Como es una interacción, debe haber una interacción normal y una interacción anormal. Cuando ocurre una interacción anormal, la interfaz devuelve la información de excepción.
Por supuesto, los sistemas de comercio programados y cuantitativos en el mercado, o los programas desarrollados por nosotros mismos, tendrán varios avisos y mensajes de error. Estos mensajes de error no se limitan a los mensajes de error informados por la interfaz API de intercambio. También existen cosas como: errores de excepción en tiempo de ejecución del programa, errores de configuración, errores de sintaxis del programa, etc.
En la plataforma de negociación cuantitativa de Inventor, los mensajes de error se pueden dividir en varias categorías:

El código carece de caracteres como corchetes. Este tipo de error generalmente es visible en la página de edición de políticas y la política no se puede ejecutar (se informará un error directamente durante el tiempo de ejecución, como se muestra en la siguiente figura).
Entonces, después de escribir la estrategia, habitualmente echo un vistazo a la página de edición de la estrategia de la plataforma para ver si hay una pequeña XX roja. Si la hay, debe haber un error obvio.


Estos errores provocarán que el programa falle y deje de ejecutarse.
En la plataforma FMZ, los pares comerciales se definen uniformemente comoX_YEn este formato, X representa el nombre de la moneda de negociación, e Y representa el nombre de la moneda denominada (la moneda denominada de los pares de negociación de contratos de futuros basados en divisas generalmente se expresa en USD, que se ha presentado en artículos anteriores). Por ejemploBTC_USDT, si escribo el par comercial al azar,BTC-USDT。

Error reportado en el sistema de backtesting de la plataforma FMZ:

Reportar un error en el trading real:

Además, un error común que cometen los novatos:
https://www.fmz.com
Este tipo de error es causado por cambiar la contraseña de la cuenta de la plataforma FMZ, lo que generaAPI KEYNo válido (la CLAVE API del usuario está encriptada en el navegador y luego configurada en la plataforma FMZ), no se puede iniciar la estrategia y se informa un error.
A menudo se producen errores de llamadas de interfaz al ejecutar estrategias. En artículos anteriores, aprendimos que las interfaces en la plataforma FMZ se dividen enInterfaz para generar solicitudes de red、Interfaz que no genera solicitudes de red. Los errores de interfaz no harán que el programa de políticas se detenga. Esto suele deberse a una excepción de llamada de interfaz, que devuelve datos incorrectos. En ese caso, la política no tiene tolerancia a fallos y el error de excepción del programa causado por los datos incorrectos hace que el programa se detenga. (El concepto de tolerancia a fallos se ha discutido en artículos anteriores).
A continuación se muestran algunos mensajes de error de interfaz que generan solicitudes de red:
Tiempo de espera de la red

Uno de los mensajes de error con los que se encuentran a menudo los novatos es el uso de dispositivos de red domésticos (sus propios ordenadores o servidores domésticos). Dado que la mayoría de los intercambios están bloqueados, muchos de ellos son básicamente inaccesibles desde la red doméstica y la interfaz de acceso informará un tiempo de espera. (mencionado en artículos anteriores)
Error http 429
https://www.fmz.com
Uno de los mensajes de error clásicos. El motivo es que se llama a la interfaz de intercambio con demasiada frecuencia, superando el límite de frecuencia del intercambio. (mencionado en artículos anteriores)
Algunos estudiantes nuevos podrían decir: “Solicitaré más intercambios”.API KEYO simplemente puedo solicitar unas cuantas cuentas de intercambio más. Debemos saber que los exchanges suelen limitar la frecuencia de acceso a la interfaz en función de las direcciones IP. En pocas palabras, siempre que todas las solicitudes enviadas desde una dirección IP se cuenten en esta dirección IP, si se supera el límite, el servidor de exchange denegará el acceso a la interfaz. solicitud enviada por esta dirección IP.
Informe de errores en el nivel empresarial de la interfaz de Exchange
El tiempo de espera y el 429 mencionados anteriormente son errores a nivel de red. También se informarán errores si se producen problemas en el nivel empresarial de la interfaz de intercambio. Por ejemplo, quiero obtener cotizaciones al contado, pero establezco un par de negociación que no existe. Lo probé en la herramienta de depuración de la plataforma FMZ. La herramienta de depuración es una herramienta de prueba muy conveniente, que es muy adecuada para pruebas en tiempo real de llamadas de funciones, adquisición de datos y otras necesidades.

No hay diferencia entre los resultados de ejecución de la herramienta de depuración y la ejecución real.

Huobi 错误 GetTicker: Invalid ticker: {"Info":{"err-code":"invalid-parameter","err-msg":"invalid symbol","status":"error","ts":1620872079355},"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}
El mensaje de error aquí significa que el par de transacciones no es válido (como se puede ver aquí)"err-msg":"invalid symbol")。
Por ejemplo, hay muchos errores relacionados con los negocios. Por ejemplo, al configurar el apalancamiento, algunas bolsas no admiten valores de apalancamiento con partes decimales. En este caso, si el valor del apalancamiento contiene una parte decimal, también provocará un error. Error de llamada de interfaz.
Enumere una llamada de interfaz que no genera una solicitud de red
Establecer el código del contrato de futuros Algunas interfaces solo establecen algunas variables globales en el sistema y no generan solicitudes de red, por ejemplo:

Sin embargo, se producirán errores si los parámetros se pasan incorrectamente o se escriben aleatoriamente.

Sin embargo, no importa qué tipo de error sea, el mensaje de error que se muestra es la información clave para encontrar el problema y, generalmente, el problema se puede ver a partir del mensaje de error. Puede utilizar herramientas de traducción para traducir mensajes de error y extraer información clave. Por ejemplo, en el ejemplo anterior"err-msg":"invalid symbol", traducción: “err msg”: “Símbolo inválido”. Probablemente sepa que la configuración de los pares comerciales es incorrecta, porque generalmente se utilizan símbolos ingleses para representar códigos comerciales y pares comerciales.
Analizaremos brevemente la información del error. Hay una publicación que seguirá recopilando preguntas frecuentes para consultar: https://www.fmz.com/bbs-topic/1427
El sistema de pruebas retrospectivas también es un punto clave en una herramienta cuantitativa. El sistema de pruebas retrospectivas permite probar de forma conveniente los prototipos de estrategia y comprobar de forma preliminar posibles errores y problemas lógicos en la estrategia. Necesitamos ser racionales respecto del sistema de backtesting. El sistema de backtesting puede reflejar algunos problemas de la estrategia hasta cierto punto.
A continuación explicaremos brevemente el sistema de backtesting en la plataforma FMZ desde la perspectiva de los diferentes lenguajes de estrategia soportados por FMZ. (En artículos anteriores se mencionaron algunas introducciones al sistema de backtesting)
La prueba retrospectiva del lado del navegador utiliza los recursos de hardware locales.
Al realizar pruebas retrospectivas en un custodio, puede elegir a qué custodio asignar (ya sea su propio custodio o el custodio público de la plataforma FMZ). Dada la gran carga de los custodios públicos en la plataforma FMZ, se recomienda utilizar el custodio local para realizar pruebas retrospectivas (esto también será más rápido). Al realizar pruebas retrospectivas con el custodio público, cuando hay demasiadas tareas que exceden la carga, algunas tareas de prueba retrospectiva se cancelará, lo que provocará una interrupción de la medición de backtesting).
A diferencia de los lenguajes de script, las políticas de C++ deben compilarse antes de poder ejecutarse. La estrategia del lenguaje C++ se compilará primero en la plataforma FMZ (servidor) (si hay un problema con el código, la compilación puede fallar y aparecerá un mensaje de error). Después de la compilación, realice una prueba retrospectiva en la plataforma FMZ (servidor).
La implementación subyacente es JavaScript y también se realizan pruebas retrospectivas en el lado del navegador.
La implementación subyacente es JavaScript y también se realizan pruebas retrospectivas en el lado del navegador.
El sistema de backtesting de la Plataforma de Trading Cuantitativo Inventor tiene dos modos de backtesting (este no distingue entre lenguajes de estrategia, este es la configuración del backtesting y el backtesting de la estrategia en varios lenguajes es el mismo).

Para obtener instrucciones sobre el sistema de backtesting, consulte la información en el tutorial de la plataforma:
https://www.fmz.com/bbs-topic/4158#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B
K线中一根柱子不是有高开低收么,构成了一个价格框架,在这个K线代表的时间范围内,价格都在这个价格框架内,所以只要生成的价格在这个K线高开低收框架范围内,这个模拟出来的价格就是合理的。
Tal como la simulación en la figura: https://www.fmz.com Por supuesto, cuando el sistema de backtesting real implementa esta simulación, la situación es un poco más complicada que la que se muestra en la figura. No profundizaremos en ello aquí. Es suficiente entender el mecanismo de backtesting a nivel de simulación. Conociendo este principio, debemos prestar atención a las desventajas del backtesting a nivel de simulación, aunque el backtesting a nivel de simulación es muy rápido (porque los precios generados por la simulación no son los precios reales publicados uno por uno segundo a segundo). Pero si la estrategia encajaTendencia de cambio de tick simuladaEsto hará que la estrategia funcione muy bien (pero en situaciones reales el precio puede no moverse de esta manera, aunque el precio esté dentro del marco de esta columna de la línea K). La línea K utilizada para generar datos de ticks simulados se denomina línea K subyacente, y el período de esta línea K se denominaCiclo de la línea K inferior, configúrelo como se muestra en la página de configuración de políticas:
La configuración de 1 minuto aquí significa que los datos de la línea K con un período de 1 minuto se utilizan como fuente de datos para generar ticks simulados.
Otro punto es que para las estrategias de alta frecuencia, obviamente no es apropiado utilizar pruebas retrospectivas a nivel de simulación. Sin embargo, para las estrategias de tendencia, el uso de pruebas retrospectivas a nivel de simulación aún puede reflejar el desempeño de la estrategia hasta cierto punto.

¿De dónde provienen los datos para el sistema de backtesting de Inventor Quantitative Trading Platform? El sistema de backtesting utiliza los datos del centro de datos de la plataforma FMZ de forma predeterminada. El centro de datos de la plataforma FMZ recopila automáticamente los datos de mercado de cada moneda de cada bolsa y los proporciona al sistema de backtesting de la plataforma.

También hay algunas instrucciones en la documentación de la API de FMZ sobre fuentes de datos personalizadas: https://www.fmz.com/api#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%BA%90
También hay algunas soluciones en la biblioteca FMZ:

Los novatos que estén interesados pueden estudiarlo y consultarlo.
El trading programático y cuantitativo son inseparablesestudiar、prueba、pensar。 No se puede pensar en los problemas en el vacío, eso sería ineficiente. La forma más eficaz de resolver los problemas y pensar en ellos esEncuentre información,EntoncesPruébelo usted mismo、Análisis del pensamientoSi el problema no se resuelve, repita los pasos anteriores.
Pero por lo general, cuando un novato se encuentra con un problema, siente:
“Oh~ La programación, la cuantificación y la redacción de estrategias son demasiado difíciles”. “Lo he estado mirando durante mucho tiempo, ¡pero todavía estoy confundido!” “¡Aún no he empezado y quiero rendirme!” ….
En realidad, es muy sencillo comenzar a utilizar la plataforma FMZ. En primer lugar, es necesario saber buscar información. Hay mucha información disponible para referencia en la Estrategia Plaza, la Comunidad y la Biblioteca de la Plataforma de Comercio Cuantitativo de Inventor.

Luego está la habilidad práctica. El uso del sistema de backtesting y de herramientas de depuración puede facilitar las pruebas. Esto no significa probar una estrategia completa. De hecho, si no tienes ningún conocimiento básico, incluso puedes aprender los conceptos básicos de programación en JavaScript en el sistema de backtesting cuantitativo FMZ.
Este es el sitio web tutorial donde a menudo aprendo JS: https://www.runoob.com/js/js-loop-for.html No se limita a JS, aquí se pueden buscar y aprender todo tipo de conocimientos de TI. Por ejemplo, no sé cómo utilizar la expresión regular de JS, ¿qué debo hacer? Por supuesto, primero verifique la información y luego pruébelo.
Vi un ejemplo como este:
Quiero probarlo, e incluso puedo usar el sistema de backtesting de la plataforma FMZ para probar y aprender.
Configurar un intercambio de forma aleatoria en el sistema de backtest

Pruebe el siguiente código:
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
function main() {
var strEmailAddress1 = "13512345678"
Log(strEmailAddress1, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress1))
var strEmailAddress2 = "[email protected]"
Log(strEmailAddress2, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress2))
}

¡Mira qué gran herramienta de aprendizaje! Por ejemplo, quiero aprender a escribir lógica de bucle en JavaScript, así que intentémoslo:
Recorrer los elementos de una variable de matriz en el orden en que aparecen en la matriz:
function main() {
var arr = [{coinName: "BTC", price: 10000}, {coinName: "LTC", price: 100}, {coinName: "ETH", price: 2000}, {coinName: "ETC", price: 500}]
for (var i = 0 ; i < arr.length ; i++) {
Log(arr[i])
}
}

¿Te sientes motivado a estudiar al instante? De hecho, en FMZ, puedes ver el tutorial de JavaScript mientras aprendes los conceptos básicos de JavaScript en el sistema de backtesting. La sintaxis de JavaScript está casi dominada. Para pasar a la siguiente etapa, es necesario utilizar la interfaz de intercambio para obtener datos para realizar pruebas. También se puede utilizar la plataforma FMZHerramientas de depuraciónRealizar pruebas de interfaz reales.
Luego hay que pensar más, sacar conclusiones de un ejemplo, probar y verificar, comparar y analizar, etc. De esta manera podrás empezar muy rápidamente.