Módulo de visualización para construir estrategias comerciales - Comprensión avanzada

El autor:- ¿ Por qué?, Creado: 2022-12-13 14:11:36, Actualizado: 2023-09-20 09:53:59

img

Módulo de visualización para construir estrategias comerciales - Comprensión avanzada

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.

Modulo de categoría de negociación

En el aprendizaje y las pruebas anteriores, hemos estado expuestos a varios módulos de categoría de comercio. Por ejemplo: Exchange Get Ticker módulo Exchange Get OHLC módulo - ¿ Qué?

Estos se han utilizado no se repetirán aquí.

Obtener el número de intercambios

img

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:

img

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:

img img img

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.

2. Obtener los nombres de los intercambios

img

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.

img

Aprenda un módulo de evaluación de condiciones con anticipación:

img

Las condiciones de juicio pueden escribirse como sigue:

img

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.

img

Resultados de las operaciones de ensayo posterior:

img

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())
        }
    }
}

Obtener el par de operaciones actual del intercambio

img

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

img

Resultados de las pruebas de retroceso:

img img img

Si llama código de estrategia JavaScript:

function main () {
    var text = exchange.GetCurrency()
    Log(text)
}

4. Módulo de orden

img

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.

img

Resultados de las operaciones de ensayo posterior:

img

Como el siguiente código de estrategia JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
    Log(id)
}

Obtener órdenes pendientes del módulo de pares de operaciones actuales

img

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 Obtener órdenes pendientes del par de operaciones actual para obtener la lista de órdenes en estado PENDING (esperando a ser llenado). Con el fin de evitar el impacto en la observación final de la backtest debido a las órdenes que se cumplen en el mercado posterior, después de que el módulo Obtener órdenes pendientes del par de negociación actual se ejecuta, imprimimos la lista de órdenes, y utilizar el módulo Lanzar excepción inmediatamente para detener el programa.

img

Las pruebas posteriores muestran que:

img

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"
}

6. Cancelar el módulo de pedido

img

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 Cancel order debe usarse. Mientras aprendemos el módulo de orden de cancelación, podemos usar [5] para obtener órdenes pendientes del módulo de par de operaciones actual, y combinar para lograr esta función.

En primer lugar, con el fin de probar la cancelación de todos los pedidos, no es obvio para realizar un pedido.

img

Utilice el módulo Traverse every element in the list en el módulo Loop para recorrer las órdenes en la lista actual de órdenes pendientes.

img

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:)

img

Utilice el módulo Util:

img

Saque el ID de pedido, pase a la posición tenon (cóncava) del módulo Cancel order, y el módulo Cancel order ejecute la cancelación del pedido.

Operación de prueba posterior:

img

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))
    }
}

7. Módulo para obtener los detalles de un pedido basado en su ID de pedido

img

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.

img

Observe el orden devuelto después de ejecutar:

img

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))
}

8. Módulo de negociación de futuros

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:

img

El siguiente ejemplo realiza backtest basado en la configuración.

  • Juzgar el módulo de estado de conexión entre los futuros de productos básicos CTP y el servidor de la empresa de futuros

img

Los futuros de materias primas tienen hora de apertura y hora de cierre. Cuando el mercado está cerrado, no puede conectarse.

  • Modulo de contrato conjunto

img

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.

  • Configurar el módulo de dirección de orden para la negociación de futuros

En el módulo de ejecución de órdenes

img

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 buy, hay dos significados de apertura de posiciones largas y cierre de posiciones cortas, lo cual es ambiguo. Por lo tanto, se requiere el módulo Establecer la dirección de la orden para la negociación de futuros para establecer una dirección clara de la orden.

img

Display de pruebas de retroceso:

img

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)
    }
}

9. Módulo de negociación de futuros de moneda digital

El uso de futuros de divisas digitales es básicamente el mismo que el de futuros de materias primas en [8] anterior

  • Tomando como ejemplo a OKEX, el código del contrato puede ser:
    • esta_semana: esta semana
    • next_week: la semana que viene
    • Cuarto: cuarto
    • cambio: perpetuo
  • BitMEX:
    • XBTUSD
    • ETHUSD
  • Modulo de apalancamiento establecido

img

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


Relacionados

Más.