Hemos aprendido el módulo de visualización para construir estrategia de comercio - Primer conocimiento, y tenemos una comprensión conceptual de la construcción de módulos visuales y empalme, A continuación, es fácil aprender a utilizar otros módulos. Es posible combinar algunas funciones más complejas.
En el aprendizaje y las pruebas anteriores, hemos estado expuestos a varios módulos de
Estos se han utilizado no se repetirán aquí.
Al escribir estrategias para usar el comercio de robots, puede agregar más de un objeto de intercambio, como estrategias de cobertura. O usted necesita atravesar (cruzar significa visitar los objetos de intercambio uno por uno) los objetos de intercambio para acceder al mercado. Aquí es donde el módulo para obtener el número de intercambios entra en juego.
Podemos imprimir el número de intercambios actualmente configurados en una estructura simple:
De hecho, es como llamar a tal código de estrategia JavaScript:
function main () {
Log(exchanges.length)
}
Veamos los resultados de este módulo combinado:
Podemos ver que hemos agregado tres objetos de intercambio, que representan tres cuentas de intercambio diferentes, y el resultado de salida del registro de backtest es 3.
Al agregar tres objetos de intercambio, el cuadro desplegable mostrará tres opciones. Aprende un módulo de bucle en el tipo de bucle por adelantado.
Aprenda un módulo de evaluación de condiciones con anticipación:
Las condiciones de juicio pueden escribirse como sigue:
Usamos el módulo de bucle para recorrer los nombres de intercambio añadidos. Usamos el módulo de juicio de condición para juzgar si el conteo de bucles actual corresponde al nombre del intercambio que se va a imprimir.
Resultados de las operaciones de ensayo posterior:
Como el código de estrategia de JavaScript:
function main () {
for (var i = 1 ; i <= exchanges.length ; i++) {
if (i == 1) {
Log(exchanges[0].GetName())
} else if (i == 2) {
Log(exchanges[1].GetName())
} else {
Log(exchanges[2].GetName())
}
}
}
Un ejemplo simple es obtener el par de operaciones del primer objeto de intercambio actualmente establecido y asignarlo a la variable de texto (creada en la categoría de variable con anticipación).
Resultados de las pruebas de retroceso:
Si llama código de estrategia JavaScript:
function main () {
var text = exchange.GetCurrency()
Log(text)
}
Este módulo es muy importante para la operación de pedidos. La primera posición tenon (cóncava) está incrustada con una variable de precio, que se utiliza para especificar el precio del pedido. También puede ingresar un valor fijo directamente. La segunda posición del tenón (cóncava) está incrustada con la variable de cantidad de pedido, que se utiliza para especificar la cantidad de pedido.
Por ejemplo, un ejemplo de colocar una orden de compra en la adición de un precio móvil de 10 yuanes basado en el último precio de los datos del mercado de ticks actuales, con la cantidad de orden establecida en 0.1 monedas, e imprimir la orden ID.
Resultados de las operaciones de ensayo posterior:
Como el siguiente código de estrategia JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
Log(id)
}
Este módulo devuelve todas las órdenes pendientes en el estado inacabado del par de operaciones actual.
Por ejemplo, modificamos ligeramente el módulo de pedido de ejemplo anterior[4], y cambiamos el precio de 10 yuanes agregados al colocar un pedido a menos 10 yuanes. El pedido no se cerrará inmediatamente, sino que se colocará en la profundidad de la transacción (es decir, comprar uno, comprar dos, comprar un cierto nivel en N), de esta manera, el pedido estará en el estado de órdenes pendientes esperando ser completadas.
Luego utilizamos el módulo de
Las pruebas posteriores muestran que:
El precio de la orden de compra fue 10 yuanes más bajo que el precio más reciente en ese momento, por lo que no se cumplirá de inmediato. Luego obtenga el pedido en el estado de transacción pendiente, y imprimirlo. Por último, se lanza una excepción para detener el programa.
Todo el módulo ensamblado es como una llamada a la estrategia JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
Log(exchange.GetOrders())
throw "stop"
}
Este módulo se utiliza para cancelar la orden.
Hay muchos escenarios que requieren tales operaciones al escribir estrategias:
Cancele todas las órdenes pendientes.
No hay duda de que el módulo
En primer lugar, con el fin de probar la cancelación de todos los pedidos, no es obvio para realizar un pedido.
Utilice el módulo
Durante el recorrido, a cada orden recuperada se le asigna un valor al orden del módulo variable (creado en el tipo de módulo variable, como se muestra a continuación:)
Utilice el módulo
Saque el ID de pedido, pase a la posición tenon (cóncava) del módulo
Operación de prueba posterior:
Utilice la descripción de la estrategia de JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
Log(id2)
var orders = exchange.GetOrders()
Log(orders)
for (var i in orders) {
var order = orders[i]
Log(exchange.CancelOrder(order.Id))
}
}
La posición del tenón (cóncava) del módulo está conectada con un módulo de variable de orden ID, y los detalles del orden se pueden devolver.
Observe el orden devuelto después de ejecutar:
En comparación con los resultados de ejecución del ejemplo [5], se puede constatar que el pedido impreso es una información de pedido separada sin paréntesis []. Debido a que el ejemplo [5] devuelve una lista, pero este ejemplo devuelve una información de orden separada (obtenida sobre la base del módulo de variable ID en la posición del tenón pasada por el módulo).
El ejemplo anterior es similar a la ejecución de la estrategia JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(exchange.GetOrder(id))
}
Aprenderemos los módulos anteriores uno por uno y estableceremos el intercambio de prueba como futuros de productos básicos.
Configuración de pruebas de retroceso:
El siguiente ejemplo realiza backtest basado en la configuración.
Los futuros de materias primas tienen hora de apertura y hora de cierre. Cuando el mercado está cerrado, no puede conectarse.
Cuando el objeto del intercambio está configurado como un intercambio de futuros, si el intercambio no establece un contrato y obtiene la información del mercado directamente, se notificará un error.
Hemos establecido el contrato como MA909, el principal contrato de metanol en la actualidad.
De este modo, se obtiene el último valor del precio del contrato MA909 en el mercado de ticks actual.
En el módulo de ejecución de órdenes
La dirección de la orden debe especificarse, porque los futuros tienen: compra: posiciones largas abiertas Vender: posiciones cortas abiertas closebuy: cierre de posiciones largas cierre de venta: cierre de posiciones cortas Cuatro direcciones (hay dos direcciones más para los futuros de materias primas: closebuy_today para cerrar posiciones largas hoy y closeesell_today para cerrar posiciones cortas hoy).
Por ejemplo, si el módulo de orden está establecido como
Display de pruebas de retroceso:
Como el código de estrategia JavaScript:
function main () {
while (true) {
if (exchange.IO("status")) {
exchange.SetContractType("MA909")
Log(exchange.GetTicker().Last)
exchange.SetDirection("buy")
Log(exchange.Buy(1000, 1))
throw "stop"
} else {
Log("The commodity futures front-end processor is not connected")
}
Sleep(1000)
}
}
El uso de futuros de divisas digitales es básicamente el mismo que el de futuros de materias primas en [8] anterior
Se utiliza para establecer el apalancamiento de los futuros de moneda digital.
#Note: Backtesting is not supported.
Como la estrategia de JavaScript:
function main () {
exchange.SetMarginLevel(10)
}
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