La programación visual siempre ha sido un objetivo aspiracional de los desarrolladores de software, incluso en el campo del comercio cuantitativo. Porque el método de "lo que ves es lo que obtienes" en la visualización reduce el umbral técnico del desarrollo de programación en gran medida. Los usuarios ya no tienen que lidiar con una pila de códigos aburridos, sólo usan su imaginación y pensamiento lógico para centrarse en el negocio en sí. Puedes realizar cualquier programa que quieras. ¿No es increíble?
¡Vamos a entrar juntos en el campo de la programación visual de la estrategia comercial cuantitativa!
Después de iniciar sesión enhttps://www.fmz.com, registre su cuenta (si ya está registrado, inicie sesión directamente) y haga clic en: Panel -> Estrategia -> Agregar estrategia.
Podemos ver una estrategia de visualización inicial. Solo se utiliza para emitir la información del activo de la cuenta del intercambio configurado por defecto (el primer objeto de intercambio agregado en el backtest o robot). (Véase el cuadro de abajo)
Puede arrastrar el módulo
El módulo de cálculo de raíz cuadrada como este sale los resultados de cálculo de este módulo.
Como se puede ver, si la posición del parámetro de entrada es predeterminada, el valor predeterminado 9 se utilizará como parámetro de entrada para calcular la raíz cuadrada de 9.
Por supuesto, si desea utilizar un módulo variable como parámetro de entrada, puede empalmar el módulo variable en la posición tenón (cóncava) directamente.
Se puede ver que hay muchas clasificaciones de módulos en el lado izquierdo del área de edición visual, y hay muchos módulos visuales disponibles en cada proyecto de clasificación.
Hay 11 categorías.
Modulo de uso:
Se puede introducir una cadena en el módulo de texto, de modo que cuando se ejecuta el módulo de información de salida, el contenido de la cadena en el módulo de texto se imprimirá.
Pruebas de retroceso:
Como el código del lenguaje JavaScript:
function main(){
Log("Hello, Blockly!")
}
Como el código del lenguaje JavaScript:
function main () {
Log("WeChat Push!@")
}
Del mismo modo, en la estrategia JavaScript, la función principal ejecuta la función
function main () {
throw "The first sentence throws an exception to stop the program!"
}
Resultados de las pruebas de retroceso:
Por lo general, se utiliza más en el depuración. Por ejemplo, si desea que el programa se detenga bajo ciertas condiciones e imprima algunos datos en ese momento para su observación. O puedes colocar un módulo de excepción en el flujo de código donde puedan ocurrir problemas, dejar que el programa informe errores y encuentre algunos errores.
Como en la estrategia de JavaScript:
function main () {
Sleep(1000 * 5)
}
Prueba el módulo de sueño:
Resultados de las pruebas de retroceso:
Este módulo, al igual que la función API LogProfit en FMZ Quant Trading Platform, que imprime el registro de devoluciones y dibuja la curva de retorno según los parámetros de entrada automáticamente.
Por ejemplo:La ejecución del backtesting se muestra en la figura siguiente:
El código de estrategia JavaScript correspondiente es el siguiente:
function main () {
LogProfit(1)
Sleep(1000 * 5)
LogProfit(2)
Sleep(1000 * 5)
LogProfit(3)
Sleep(1000 * 5)
LogProfit(2)
Sleep(1000 * 5)
LogProfit(5)
}
Puede ser empalmado en cualquier posición donde quieras obtener información de retorno.
Prueba:Resultados de las pruebas de retroceso:
Podemos ver que la combinación de módulos que consiste en
Ejecución del bucle cada N segundosEl uso de este módulo es básicamente el mismo que el del módulo de bucle. La única diferencia es que el módulo tiene su propio sueño.
Procesamiento de precisiónEste módulo se puede utilizar cuando el módulo variable o el valor numérico necesita controlar la precisión. El valor numérico de la parte del parámetro de entrada se emitirá como el valor numérico del lugar decimal especificado según los ajustes.
Por ejemplo, el procesamiento de precisión se realiza en el valor 3.1415926535897.
Display de pruebas de retroceso:
Se utiliza para borrar registros, algunos registros pueden ser retenidos según los parámetros de entrada. Como en el documento de la API:
LogReset()
Se utiliza para borrar el registro de retorno. Algunos registros se pueden conservar de acuerdo con los parámetros de entrada. Como en el documento de la API:
LogProfitReset()
Como el código de estrategia de JavaScript:
function main () {
Log(exchange.GetTicker().Last)
}
Primero, creamos un módulo variable llamado K-line.Luego obtenemos los datos de la línea K, usamos el módulo de datos de la línea K para obtenerlo y asignamos el valor al módulo variable:
La marca de tiempo de la última barra de la línea K se imprime cuando se ejecuta la prueba de retroceso.
Como el código de estrategia de JavaScript:
function main () {
Log(exchange.GetDepth().Asks[0])
}
Como el código de estrategia de JavaScript:
function main () {
Log(exchange.GetAccount().Stocks)
}
Resultados de las pruebas de retroceso:
Como el código de estrategia de JavaScript:
function main () {
Log(exchange.GetDepth().Asks[0].Price)
}
También se puede utilizar para obtener un atributo en la información de orden devuelta por el módulo de detalles de pedido de consulta (que se explicará en el capítulo avanzado).
Habiendo aprendido tanto, combinemos una operación de cobertura, es decir, la cobertura de contratos a corto plazo y a plazo.
Hacemos una cobertura de arbitraje positivo, es decir, abrir un contrato de posición corta para el contrato a plazo, y abrir un contrato de posición larga para el contrato reciente.
Resultados de las pruebas de retroceso:
Ejemplos de estrategias de visualización:
https://www.fmz.com/strategy/121404 https://www.fmz.com/strategy/129895 https://www.fmz.com/strategy/123904 https://www.fmz.com/strategy/122318Para más estrategias, consulte:https://www.fmz.com/square
Otros artículos de esta serie
-Módulo de visualización para la elaboración de estrategias comerciales - En profundidad (https://www.fmz.com/digest-topic/9509) y - Módulo de visualización para la construcción de estrategias comerciales - Comprensión avanzada (https://www.fmz.com/bbs-topic/9815)
La programación aburrida puede completarse fácilmente con bloques de construcción.