В процессе загрузки ресурсов... загрузка...

Быстро внедрить полуавтоматический инструмент количественной торговли

Автор:Доброта, Создано: 2020-08-30 10:11:02, Обновлено: 2023-10-08 19:54:06

Quickly implement a semi-automatic quantitative trading tool

Быстро внедрить полуавтоматический инструмент количественной торговли

В товарных фьючерсных сделках межвременный арбитраж является распространенным методом торговли. Этот вид арбитража не является безрисковым. Когда одностороннее направление спреда продолжает расширяться, арбитражная позиция будет находиться в состоянии плавающей потери.

В этой статье мы попытаемся переключиться на другую торговую стратегию, вместо того, чтобы построить полностью автоматизированную торговую стратегию, мы реализовали интерактивный полуавтоматический инструмент количественной торговли, чтобы облегчить межвременный арбитраж в товарной фьючерсной торговле.

Платформа разработки мы будем использовать платформу FMZ Quant. Основное внимание в этой статье уделяется созданию полуавтоматических стратегий с интерактивными функциями.

Межвременный арбитраж - очень простая концепция.

Концепция межвременного арбитража

  • Цитата из Википедии


# Strategy Design

The strategy framework is as follows:

Функция основной В то время как ((правда) { If(exchange.IO(status)){ // Определяет статус соединения протокола CTP. LogStatus(_D(), Уже подключен к CTP!) // Время открытия рынка, подключение к логину нормальное. { \ cHFFFFFF } еще { \ cHFFFFFF } LogStatus(_D(), CTP не подключен!) // Не вписан в торговый фронт-энд. Я не знаю. Я не знаю. Я не знаю.


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.

Функция основной В то время как ((правда) { If(exchange.IO(status)){ // Определяет статус соединения протокола CTP. exchange.SetContractType ((rb2001) // Установите контракт на далекий месяц Var tickerA = exchange.GetTicker() // данные о котировках контрактов за далекий месяц - Я не знаю. exchange.SetContractType ((rb1910) // Установите ближайший месяц контракта Var tickerB = exchange.GetTicker() // данные о котировках контрактов ближайшего месяца - Я не знаю. Var diff = тикерA.Последний - тикерB.Последний $.Плотно-линейный ((diff, diff)

LogStatus(_D(), Уже подключен к CTP!) // Время открытия рынка, подключение к логину нормальное. { \ cHFFFFFF } еще { \ cHFFFFFF } LogStatus(_D(), CTP не подключен!) // Не вписан в торговый фронт-энд. Я не знаю. Я не знаю. Я не знаю.


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 = GetCommand (() если (cmd) { если (cmd == plusHedge) { q.pushTask ((обмен, rb2001, sell, 1, функция ((задача, ret) { Журнал (задачи, задания, резюме) если (ret) { q.pushTask ((обмен, rb1910, buy, 1, 123, функция ((задача, ret) { Log ((q, task.desc, ret, task.arg) - Нет. Я не знаю. { \ cHFFFFFF }) } иначе если (cmd == минусHedge) { q.pushTask ((обмен, rb2001, buy, 1, функция ((задача, ret) { Журнал (задачи, задания, резюме) если (ret) { q.pushTask ((обмен, rb1910, sell, 1, 123, функция ((задача, ret) { Log ((q, task.desc, ret, task.arg) { \ cHFFFFFF }) Я не знаю. - Нет. } иное если (cmd == coverPlus) { q.pushTask ((обмен, rb2001, closesell, 1, функция ((задача, ret) { Журнал (задачи, задания, резюме) если (ret) { q.pushTask ((обмен, rb1910, closebuy, 1, 123, функция ((задача, ret) { Log ((q, task.desc, ret, task.arg) { \ cHFFFFFF }) Я не знаю. { \ cHFFFFFF }) } иное если (cmd == coverMinus) { q.pushTask ((обмен, rb2001, closebuy, 1, функция ((задача, ret) { Журнал (задачи, задания, резюме) если (ret) { q.pushTask ((обмен, rb1910, closesell, 1, 123, функция ((задача, ret) { Log ((q, task.desc, ret, task.arg) - Нет. Я не знаю. - Нет. Я не знаю. Я не знаю. q.poll ((() `


Содержание

Больше информации