Модуль визуализации для построения торговых стратегий - продвинутый
Изучите торговую стратегию построения визуальных модулей (вводная глава) и получите концептуальное представление о построении и сращивании визуальных модулей.
Затем легко научиться использовать другие модули.
Некоторые более сложные функции можно комбинировать.
-
Модуль категории транзакций
В предыдущих исследованиях и тестах мы столкнулись с несколькими модулями «транзакционных категорий».
Например:
Модуль «Биржевые котировки»
Модуль «Обмен и получение K-линии»
...Я не буду вдаваться в подробности о тех, которые уже были использованы.
-
1. Получите количество обменов
При написании стратегии торговли с помощью робота можно добавить более одного объекта биржи, например, стратегию хеджирования.
Или вам необходимо обойти (обход означает посещение каждого объекта по отдельности) объекты биржи, чтобы получить доступ к рыночным условиям.
На данный момент вам необходимо использовать модуль для получения количества обменов.Сначала мы можем использовать простую структуру для вывода количества настроенных в данный момент обменов:

Фактически, это то же самое, что вызвать следующий код политики JavaScript:
function main () { Log(exchanges.length) }Давайте посмотрим на результаты работы этого комбинированного модуля:

Вы можете видеть, что мы добавили 3 объекта обмена, представляющих три разных счета обмена, и результат вывода журнала бэктеста — 3.
-
2. Получите название биржи
При добавлении трех объектов обмена в раскрывающемся списке будут показаны три варианта.
Изучите модуль цикла заранее, в типе цикла.

Давайте заранее изучим модуль условного суждения:

Условие суждения можно записать как:

Мы используем модуль цикла для перебора добавленных имен обмена.
Используйте модуль условного суждения, чтобы определить, соответствует ли текущее количество циклов названию обмена, которое будет напечатано.Как и код стратегии 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()) } } } -
3. Получить текущую торговую пару биржи
Простой пример получает торговую пару первого установленного в данный момент объекта обмена и присваивает ее текстовой переменной (созданной в категории переменных заранее).
Если вы вызываете код политики JavaScript:
function main () { var text = exchange.GetCurrency() Log(text) } -
4. Заказать модуль

Этот модуль очень важен и используется для операций заказа. Переменная цены встраивается в первую позицию шипа (паза) для указания цены заказа. Вы также можете напрямую ввести фиксированное значение.
Вторая позиция шипа (точка) встраивает переменную объема заказа, которая используется для указания объема заказа.Например, мы создадим пример размещения ордера на покупку на основе последней цены текущих тиковых рыночных данных с проскальзыванием в 10 юаней, установим объем ордера на 0,1 монеты и распечатаем идентификатор ордера.

Как в следующем коде политики JavaScript:
function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1) Log(id) } -
5. Модуль получения поручения на выполнение текущей торговой пары
Этот модуль вернет все незавершенные ордера для текущей торговой пары. Возвращаемая структура представляет собой список (массив), который может быть обработан модулями типа списка (операции обхода и т. д.).
Например: мы немного изменим приведенный выше пример модуля заказа [4] и изменим цену в 10 юаней, добавленную при размещении заказа, на вычитание цены в размере 10 юаней. Ордер не будет исполнен немедленно, а будет находиться в ожидании в глубине покупок и продаж (т. е. на определенном уровне между Buy 1, Buy 2 и Buy N), так что ордер находится в отложенном ордере, ожидая исполнения.
Затем мы используем модуль «Получить ордер на поручение текущей торговой пары» для получения списка ордеров в состоянии PENDING (ожидание исполнения).
Чтобы избежать исполнения ордеров в последующих рыночных условиях и повлиять на окончательное наблюдение бэктеста, после выполнения модуля «Получить ордер на доверительное управление текущей торговой парой» и распечатки списка ордеров мы немедленно используем «Выдать исключение "модуль для остановки программы.Цена ордера на покупку на 10 юаней ниже последней цены на тот момент, поэтому транзакция не будет завершена немедленно.
Затем получите ордера, ожидающие исполнения, и распечатайте их.
Наконец, выдается исключение для остановки программы.Весь собранный модуль подобен вызову стратегии JavaScript:
function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(id) Log(exchange.GetOrders()) throw "stop" } -
6. Модуль отмены заказа
Этот модуль используется для отмены заказа.
Существует множество сценариев, когда это требуется при написании политик:
Отменить все текущие заказы.
Несомненно, это потребует использования «модуля отмены ордера». Изучая модуль отмены ордера, мы можем использовать [5] для получения модуля для текущего ордера на доверительное управление торговой пары и объединить их для достижения этой функции.
Во-первых, чтобы протестировать отмену всех заказов, размещение заказа не очень очевидно, мы начнем с размещения двух заказов с разными ценами и количествами, чтобы различать два заказа.
Используйте модуль «Обход каждого элемента списка» в модуле типа цикла для обхода ордеров в текущем списке отложенных ордеров.

Во время обхода каждый выведенный заказ присваивается заказу переменного модуля (созданному в типе переменного модуля, как показано ниже:)

Используйте модуль типа инструмента:

Извлеките идентификатор заказа и передайте его в положение шипа (вогнутую часть) модуля отмены заказа, и модуль отмены заказа выполнит отмену заказа.Тестирование на исторических данных:

Использование описания политики 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. Модуль получения подробной информации о заказе по идентификатору заказа
Этот модуль может возвращать подробную информацию о заказе, подключив модуль переменной идентификатора заказа к положению паза и шипа.
Обратите внимание на порядок, возвращаемый после запуска:

Сравнивая результаты с результатами, полученными в примере [5], можно обнаружить, что напечатанный заказ представляет собой отдельную информацию о заказе.
[]Заключено в квадратные скобки.
Поскольку пример [5] возвращает список, этот пример возвращает информацию об одном заказе (полученную на основе модуля переменной ID в позиции шипа, переданной модулем).Приведенный выше пример эквивалентен выполнению политики JavaScript:
function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(exchange.GetOrder(id)) } -
8. Модуль торговли фьючерсами
Мы изучаем вышеуказанные модули один за другим и устанавливаем тестовую биржу на товарные фьючерсы.
Настройки бэктестинга:

Следующий пример тестирует эту настройку.-
Модуль для оценки состояния соединения между товарными фьючерсами CTP и серверами фьючерсной компании
У товарных фьючерсов есть время открытия и закрытия. Когда рынок закрыт, вы не можете подключиться.
-
Настройте модуль контракта
Если объект биржи настроен как фьючерсная биржа, и вы не устанавливаете контракт и не получаете рыночную информацию напрямую, будет выдано сообщение об ошибке:

Мы установили контракт на MA909, который в настоящее время является основным контрактом на метанол.

Таким образом, получается последнее значение цены на текущем тиковом рынке контракта MA909. -
Настройка модуля направления ордеров на фьючерсную торговлю
В модуле порядка выполнения

Направление ордера необходимо указывать, поскольку фьючерсы имеют:
купить: открыть длинную позицию
продажа: открыть короткую позицию
closebuy : закрыть длинную позицию
closesell : закрыть короткую позицию
Четыре направления (у товарных фьючерсов есть еще два направления: closebuy_today закрывает длинные позиции сегодня, closesell_today закрывает короткие позиции сегодня).Например, если модуль ордера настроен на покупку, то существует два значения: открыть длинную позицию и закрыть короткую позицию, что создает неоднозначность.
Поэтому для установки четкого направления ордера необходим модуль «Установка направления ордера для торговли фьючерсами».Как и код стратегии 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("未连接商品期货前置机") } Sleep(1000) } }
-
-
9. Модуль торговли фьючерсами на криптовалюту
Использование фьючерсов на цифровые валюты в основном такое же, как использование товарных фьючерсов в [8] выше.
-
На примере OKEX код контракта может быть следующим:
- this_week : на этой неделе
- next_week : следующая неделя
- квартал : квартал
- своп: бессрочный
-
BitMEX :
- XBTUSD
- ETHUSD
-
Настройка модуля кредитного плеча
Используется для установки кредитного плеча для фьючерсов на цифровые валюты.
# 注意 : 回测不支持。Как в стратегии JavaScript:
function main () { exchange.SetMarginLevel(10) }
-
-
Пример стратегии визуализации:
- https://www.fmz.com/strategy/121404
- https://www.fmz.com/strategy/129895
- https://www.fmz.com/strategy/123904
- https://www.fmz.com/strategy/122318
Больше стратегий доступно на сайте: https://www.fmz.com/square
Другие статьи этой серии
- Модуль визуализации для построения торговых стратегий - подробно
- Модуль визуализации для построения торговой стратегии — первый взгляд





















