Type/to search
8
Follow
1364
Followers
Модуль визуализации для построения торговых стратегий - продвинутый
Original
Created 2019-07-17 10:22:20  Updated 2023-10-24 21:40:50
 3
 4790

img

Модуль визуализации для построения торговых стратегий - продвинутый

Изучите торговую стратегию построения визуальных модулей (вводная глава) и получите концептуальное представление о построении и сращивании визуальных модулей.
Затем легко научиться использовать другие модули.
Некоторые более сложные функции можно комбинировать.

  • Модуль категории транзакций

    В предыдущих исследованиях и тестах мы столкнулись с несколькими модулями «транзакционных категорий».
    Например:
    Модуль «Биржевые котировки»
    Модуль «Обмен и получение K-линии»
    ...

    Я не буду вдаваться в подробности о тех, которые уже были использованы.

    • 1. Получите количество обменов

      img

      При написании стратегии торговли с помощью робота можно добавить более одного объекта биржи, например, стратегию хеджирования.
      Или вам необходимо обойти (обход означает посещение каждого объекта по отдельности) объекты биржи, чтобы получить доступ к рыночным условиям.
      На данный момент вам необходимо использовать модуль для получения количества обменов.

      Сначала мы можем использовать простую структуру для вывода количества настроенных в данный момент обменов:
      img

      Фактически, это то же самое, что вызвать следующий код политики JavaScript:

      function main () { Log(exchanges.length) }

      Давайте посмотрим на результаты работы этого комбинированного модуля:
      img

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

    • 2. Получите название биржи

      img

      При добавлении трех объектов обмена в раскрывающемся списке будут показаны три варианта.
      Изучите модуль цикла заранее, в типе цикла.
      img

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

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

      img

      Результаты бэктестинга:
      img

      Как и код стратегии 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. Получить текущую торговую пару биржи

      img

      Простой пример получает торговую пару первого установленного в данный момент объекта обмена и присваивает ее текстовой переменной (созданной в категории переменных заранее).

      img
      Результаты бэктестинга:
      img

      Если вы вызываете код политики JavaScript:

      function main () { var text = exchange.GetCurrency() Log(text) }
    • 4. Заказать модуль

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

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

      Результаты бэктестинга:
      img

      Как в следующем коде политики JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1) Log(id) }
    • 5. Модуль получения поручения на выполнение текущей торговой пары

      img

      Этот модуль вернет все незавершенные ордера для текущей торговой пары. Возвращаемая структура представляет собой список (массив), который может быть обработан модулями типа списка (операции обхода и т. д.).
      Например: мы немного изменим приведенный выше пример модуля заказа [4] и изменим цену в 10 юаней, добавленную при размещении заказа, на вычитание цены в размере 10 юаней. Ордер не будет исполнен немедленно, а будет находиться в ожидании в глубине покупок и продаж (т. е. на определенном уровне между Buy 1, Buy 2 и Buy N), так что ордер находится в отложенном ордере, ожидая исполнения.
      Затем мы используем модуль «Получить ордер на поручение текущей торговой пары» для получения списка ордеров в состоянии PENDING (ожидание исполнения).
      Чтобы избежать исполнения ордеров в последующих рыночных условиях и повлиять на окончательное наблюдение бэктеста, после выполнения модуля «Получить ордер на доверительное управление текущей торговой парой» и распечатки списка ордеров мы немедленно используем «Выдать исключение "модуль для остановки программы.

      img

      Бэктестинг показывает:
      img

      Цена ордера на покупку на 10 юаней ниже последней цены на тот момент, поэтому транзакция не будет завершена немедленно.
      Затем получите ордера, ожидающие исполнения, и распечатайте их.
      Наконец, выдается исключение для остановки программы.

      Весь собранный модуль подобен вызову стратегии JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(id) Log(exchange.GetOrders()) throw "stop" }
    • 6. Модуль отмены заказа

      img

      Этот модуль используется для отмены заказа.

      Существует множество сценариев, когда это требуется при написании политик:

      Отменить все текущие заказы.

      Несомненно, это потребует использования «модуля отмены ордера». Изучая модуль отмены ордера, мы можем использовать [5] для получения модуля для текущего ордера на доверительное управление торговой пары и объединить их для достижения этой функции.

      Во-первых, чтобы протестировать отмену всех заказов, размещение заказа не очень очевидно, мы начнем с размещения двух заказов с разными ценами и количествами, чтобы различать два заказа.

      img

      Используйте модуль «Обход каждого элемента списка» в модуле типа цикла для обхода ордеров в текущем списке отложенных ордеров.
      img
      Во время обхода каждый выведенный заказ присваивается заказу переменного модуля (созданному в типе переменного модуля, как показано ниже:)
      img
      Используйте модуль типа инструмента:
      img
      Извлеките идентификатор заказа и передайте его в положение шипа (вогнутую часть) модуля отмены заказа, и модуль отмены заказа выполнит отмену заказа.

      Тестирование на исторических данных:
      img

      Использование описания политики 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. Модуль получения подробной информации о заказе по идентификатору заказа

      img

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

      img

      Обратите внимание на порядок, возвращаемый после запуска:
      img

      Сравнивая результаты с результатами, полученными в примере [5], можно обнаружить, что напечатанный заказ представляет собой отдельную информацию о заказе.[] Заключено в квадратные скобки.
      Поскольку пример [5] возвращает список, этот пример возвращает информацию об одном заказе (полученную на основе модуля переменной ID в позиции шипа, переданной модулем).

      Приведенный выше пример эквивалентен выполнению политики JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(exchange.GetOrder(id)) }
    • 8. Модуль торговли фьючерсами

      Мы изучаем вышеуказанные модули один за другим и устанавливаем тестовую биржу на товарные фьючерсы.

      Настройки бэктестинга:
      img
      Следующий пример тестирует эту настройку.

      • Модуль для оценки состояния соединения между товарными фьючерсами CTP и серверами фьючерсной компании

        img

        У товарных фьючерсов есть время открытия и закрытия. Когда рынок закрыт, вы не можете подключиться.

      • Настройте модуль контракта

        img

        Если объект биржи настроен как фьючерсная биржа, и вы не устанавливаете контракт и не получаете рыночную информацию напрямую, будет выдано сообщение об ошибке:
        img

        Мы установили контракт на MA909, который в настоящее время является основным контрактом на метанол.
        img
        Таким образом, получается последнее значение цены на текущем тиковом рынке контракта MA909.

      • Настройка модуля направления ордеров на фьючерсную торговлю

        В модуле порядка выполнения
        img
        Направление ордера необходимо указывать, поскольку фьючерсы имеют:
        купить: открыть длинную позицию
        продажа: открыть короткую позицию
        closebuy : закрыть длинную позицию
        closesell : закрыть короткую позицию
        Четыре направления (у товарных фьючерсов есть еще два направления: closebuy_today закрывает длинные позиции сегодня, closesell_today закрывает короткие позиции сегодня).

        Например, если модуль ордера настроен на покупку, то существует два значения: открыть длинную позицию и закрыть короткую позицию, что создает неоднозначность.
        Поэтому для установки четкого направления ордера необходим модуль «Установка направления ордера для торговли фьючерсами».

        img

        Бэктестинг показывает:
        img

        Как и код стратегии 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
      • Настройка модуля кредитного плеча

        img

        Используется для установки кредитного плеча для фьючерсов на цифровые валюты.

        # 注意 : 回测不支持。

        Как в стратегии JavaScript:

        function main () { exchange.SetMarginLevel(10) }

Пример стратегии визуализации:

Больше стратегий доступно на сайте: https://www.fmz.com/square

Другие статьи этой серии

Скучное программирование можно легко завершить с помощью строительных блоков. Попробуйте, это очень интересно!

Related Recommendations
Comment
All comments (2)

    学了一个多月编程还是写不了策略,,现在全靠积木了!

    7 years ago

    感谢支持,这个系列文章会继续做的。
    其实根据每个范例后面对应的JavaScript策略代码,很容易就能掌握用JS 写策略的。

    7 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)