En la carga de los recursos... Cargando...

Implementar rápidamente una herramienta de negociación cuantitativa semiautomática

El autor:La bondad, Creado: 2020-08-30 10:11:02, Actualizado: 2023-10-08 19:54:06

Quickly implement a semi-automatic quantitative trading tool

Implementar rápidamente una herramienta de negociación cuantitativa semiautomática

En el comercio de futuros de materias primas, el arbitraje intertemporal es un método comercial común. Este tipo de arbitraje no está libre de riesgos. Cuando la dirección unilateral del spread continúa expandiéndose, la posición de arbitraje estará en un estado de pérdida flotante. Sin embargo, siempre que la posición de arbitraje esté correctamente controlada, sigue siendo muy operativa y factible.

En este artículo, tratamos de cambiar a otra estrategia de negociación, en lugar de construir una estrategia de negociación totalmente automatizada, nos dimos cuenta de una herramienta de negociación cuantitativa interactiva semiautomática para facilitar el arbitraje intertemporal en el comercio de futuros de productos básicos.

El enfoque de este artículo es cómo construir estrategias semiautomáticas con funciones interactivas.

El arbitraje intertemporal es un concepto muy simple.

Concepto de arbitraje intertemporal

  • Cita de Wikipedia


# Strategy Design

The strategy framework is as follows:

Función principal Mientras que es cierto. If(exchange.IO(status)) { // Determina el estado de conexión del protocolo CTP. LogStatus(_D(), Ya conectado a CTP!) // Tiempo de apertura del mercado, la conexión de inicio de sesión es normal. No lo sé. LogStatus(_D(), CTP no está conectado!) // No ha iniciado sesión en el front-end comercial. ¿ Por qué? ¿ Por qué? ¿ Por qué?


If the CTP protocol is connected properly, then we need to set up the trading contract and then get the market quote. After obtaining the quotes, we can use the FMZ Quant platform build-in "line drawing" library to draw the difference.

Función principal Mientras que es cierto. If(exchange.IO(status)) { // Determina el estado de conexión del protocolo CTP. exchange.SetContractType ((rb2001) // Establezca el contrato de mes lejano Var tickerA = exchange.GetTicker() // Datos de cotización del contrato del último mes - ¿ Qué? exchange.SetContractType ((rb1910) // Establezca el contrato del mes más cercano Var tickerB = exchange.GetTicker() // Datos de cotización de contratos cercanos al mes - ¿ Qué? Var diff = tiempo A. Último - tiempo B. Último $. PlotLine ((diferencia, diferencia)

LogStatus(_D(), Ya conectado a CTP!) // Tiempo de apertura del mercado, la conexión de inicio de sesión es normal. No lo sé. LogStatus(_D(), CTP no está conectado!) // No ha iniciado sesión en el front-end comercial. ¿ Por qué? ¿ Por qué? ¿ Por qué?


Get the market data, calculate the difference, and draw the graph to record. let it simply reflects the recent fluctuations in the price difference.
Use the function of "line drawing" library ```$.PlotLine```

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e286fea238b8266dd13.png) 

# Interactive part

On the strategy editing page, you can add interactive controls directly to the strategy:

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e9b91112616d444b964.png) 

Use the function ```GetCommand``` in the strategy code to capture the command that was sent to the robot after the above strategy control was triggered.

After the command is captured, different commands can be processed differently.

The trading part of the code can be packaged using the "Commodity Futures Trading Class Library" function. First, use ```var q = $.NewTaskQueue()``` to generate the transaction control object ```q``` (declared as a global variable).

Var cmd = ObtenerComando (() si (cmd) { si (cmd == plusHedge) { Q.PushTask ((intercambio, rb2001, sell, 1, función(tarea, ret) { En el caso de las empresas de servicios de telecomunicaciones, el número de unidades de producción es el siguiente: si (ret) { Q.PushTask ((intercambio, rb1910, buy, 1, 123, función ((tarea, ret) { Log ((q, tarea.desc, ret, tarea.arg) ¿ Por qué? ¿ Por qué? ¿ Por qué? } de otro modo si (cmd == minusHedge) { Q.PushTask ((intercambio, rb2001, buy, 1, función(tarea, ret) { En el caso de las empresas de servicios de telecomunicaciones, el número de unidades de producción es el siguiente: si (ret) { Q.PushTask ((intercambio, rb1910, sell, 1, 123, función ((tarea, ret) { Log ((q, tarea.desc, ret, tarea.arg) ¿ Por qué? ¿ Por qué? ¿ Por qué? } de otro modo si (cmd == coverPlus) { Q.PushTask ((intercambio, rb2001, closesell, 1, función ((tarea, ret) { En el caso de las empresas de servicios de telecomunicaciones, el número de unidades de producción es el siguiente: si (ret) { Q.PushTask ((intercambio, rb1910, closebuy, 1, 123, función ((tarea, ret) { Log ((q, tarea.desc, ret, tarea.arg) ¿ Por qué? ¿ Por qué? ¿ Por qué? } de otro modo si (cmd == coverMinus) { Q.PushTask ((intercambio, rb2001, closebuy, 1, función ((tarea, ret) { En el caso de las empresas de servicios de telecomunicaciones, el número de unidades de producción es el siguiente: si (ret) { Q.PushTask ((intercambio, rb1910, closesell, 1, 123, función ((tarea, ret) { Log ((q, tarea.desc, ret, tarea.arg) ¿ Por qué? ¿ Por qué? ¿ Por qué? ¿ Por qué? ¿ Por qué? Q.poll (() `


Contenido relacionado

Más contenido