4
Подписаться
1271
Подписчики

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Создано: 2019-09-02 09:39:59, Обновлено: 2024-12-17 20:42:42
comments   2
hits   4298

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Когда вы только начинаете разрабатывать количественные стратегии торговли цифровой валютой, у вас часто возникают различные требования к стратегии. Независимо от того, какой язык или платформу вы используете, вы столкнетесь с требованиями к разработке стратегии для различных ситуаций. Например, иногда необходимо чередовать несколько сортов, иногда необходимо хеджировать несколько платформ, а иногда необходимо торговать разными сортами одновременно и т. д. Давайте поделимся опытом проектирования при реализации стратегических требований. Обучающая платформа по-прежнему использует платформу количественной торговли Inventor (https://www.fmz.com), а выбранным рынком является рынок цифровой валюты.

  • ### Разработка «мультивалютной» стратегии

Этот тип спроса часто требует написания многовариантной трендовой стратегии, многовариантной сеточной стратегии и т. д., что требует итеративного выполнения логики стратегии с использованием различных торговых пар. Обычно проектируется так:

  function Process (symbol) {
      exchange.IO("currency", symbol)
      var ticker = _C(exchange.GetTicker)
      Log("已经切换交易对,按照策略逻辑处理交易对 :", symbol, "行情:", ticker)
      // ...
      // ..
      // .
  }  

  function main(){
      var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
      while (true) {
          for (var i = 0 ; i < symbols.length; i++) {
              Process(symbols[i])
              Sleep(500)
          }
      }
  }

Настраиваем робота: Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Как вы можете видеть, это позволяет настраивать объект обмена на роботе, переключать торговые пары, получать рыночные условия различных торговых пар, проводить многовариантные рыночные условия и выполнять действия в соответствии с стратегической логикой. Видно, что три торговые пары, которые мы определили: BTC_USDT, LTC_USDT, ETH_USDT, поочередно повторяются в цикле для получения рыночной информации. После получения рыночной информации мы можем специально обнаружить рыночную информацию и запустить торговую логику, разработанную по стратегии.

Некоторые студенты могут сказать: «Мне не нравится переключать торговые пары. Это немного хлопотно, и структура стратегии неясна». На самом деле существуют и другие методы проектирования, один из которых мы рассмотрим ниже.

  • ### Настройте несколько объектов обмена для робота с одной и той же учетной записью обмена

Получайте рыночные данные для различных торговых пар через несколько объектов обмена и выполняйте их в логике итеративной стратегии. Например, настройте робота следующим образом: настройте три объекта обмена для робота и установите торговые пары BTC_USDT, LTC_USDT и ETH_USDT соответственно. Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Объект обмена с именем «OKEX Spot V3 Test» находится в центре управления, на странице конфигурации обмена: Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты Уже настроено.

Измените код, поскольку на этот раз мы добавили в робота несколько объектов обмена, а именно объекты обмена с торговыми парами BTC_USDT, LTC_USDT и ETH_USDT.

  function Process (e) {
      var ticker = _C(e.GetTicker)
      Log("交易所", e.GetName(), "按照策略逻辑处理交易对 :", e.GetCurrency(), "行情:", ticker)
      // ...
      // ..
      // .
  }  

  function main(){
      while (true) {
          for (var i = 0 ; i < exchanges.length; i++) {
              Process(exchanges[i])
              Sleep(500)
          }
      }
  }

Запустите робота: Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Описанные выше примеры касаются переключения торговых пар или добавления объекта обмена с несколькими различными торговыми парами в настроенную учетную запись. Все они настраиваются с использованием только одной учетной записи биржи (использующей настроенную биржу). Так как же использовать несколько биржевых счетов в одной стратегии?

  • ### Стратегии использования нескольких биржевых счетов

Некоторые стратегии включают, например, кросс-рыночное хеджирование на нескольких биржах, стратегии с несколькими счетами в рамках одной биржи и т. д.

  • Настроено несколько бирж, но это разные биржи. Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты Например, я настроил 2 обмена на странице Центр управления->Обмен->Добавить обмен. Я могу получить доступ к информации об активах счетов, настроенных на этих двух биржах в стратегии.

    Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

    function main(){
        Log(exchanges[0].GetAccount())    // 打印第一个 交易所对象的账户资产信息,即火币期货 这个交易所的资产信息。
        Log(exchanges[1].GetAccount())    // ... 打印Bit-Z这个交易所的资产信息
    }
    

    Конечно, я также могу добавить конфигурацию обмена второго и третьего аккаунтов в обмен.

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

    Например, давайте добавим еще один счет Huobi Futures. Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

    Как вы видите, настроены два аккаунта биржи Huobi Futures.

    Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

    При создании стратегии объект Huobi Futures Exchange появляется в опции «Изменить конфигурацию» робота для выбора.

    Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

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

    На примере двух вышеприведенных примеров

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

    На первый взгляд, это чем-то похоже на пример «Настройка нескольких объектов обмена для робота с одной учетной записью обмена», описанный выше, но есть и отличия. Разница в том, что приведенный выше пример представляет собой конфигурацию обмена, то есть:

    Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

    При настройке объекта обмена в роботе всегда используйте: Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты Такая конфигурация.

    Просто настройки торговой пары при добавлении объекта обмена отличаются. Если вы вызовете функцию GetAccount, вы всегда получите доступ к информации об активах того же счета.

    Однако: Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты Два объекта Huobi Futures Exchange, настроенные таким образом, хотя оба являются Huobi Futures, представляют собой разные биржевые счета.

  • Эффективно используйте конфигурацию биржи, чтобы упростить разработку стратегий фьючерсов на цифровые валюты.

Иногда при реализации стратегии хеджирования контрактов на цифровую валюту для использования мимолетных торговых возможностей требуется множество одновременных ордеров. Однако, поскольку контракты разные, при получении рыночной информации и размещении заказов вам необходимо переключиться на соответствующий контракт. Использование функции exchange.Go для одновременного выполнения функций ордеров или получения рыночной информации не обеспечивает высокой скорости из-за проблем с синхронизацией. А структура контрактов на переключение делает логику не такой уж простой. Так есть ли лучший способ?

Конечно, есть выход! Мы можем добавить два объекта обмена к роботу в соответствии с приведенным выше описанием «Настройка нескольких объектов обмена для робота с одной учетной записью обмена». Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты Затем, по-прежнему используя эту конфигурацию обмена, добавьте еще один объект обмена. В этот момент появится окно с подсказкой! Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты Конфигурация биржевого счета не может добавлять объекты биржи с той же валютой и торговой парой.

Что мне делать в этом случае? Похоже, что невозможно разрешить стратегическому роботу использовать два объекта обмена и привязать объект обмена к одному коду счета обмена? Выход все еще есть!

Переходим в «Центр управления» -> «Биржа» и добавляем конфигурацию фьючерсной биржи OKEX.

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

После настройки нажмите Сохранить.

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

### 「Выделение」Теперь у нас есть две конфигурации обмена, но используется одна и та же информация о конфигурации API KEY.

Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

Какие преимущества это дает? Конечно, при написании стратегии дизайн очень прост!

  function main(){
      exchanges[0].SetContractType("quarter")        // 设置第一个添加的交易所对象 当前的合约为季度合约
      exchanges[1].SetContractType("this_week")      // 设置第二个添加的交易所对象,当前的合约为当周合约

      while (true) {
          var beginTime = new Date().getTime()       // 记录这次获取行情时起始的时间戳。
          var rA = exchanges[0].Go("GetTicker")      // 创建并发 线程去获取 第一个交易所对象,也就是季度合约的行情数据。
          var rB = exchanges[1].Go("GetTicker")      // 创建并发 线程去获取 第二个交易所对象,也就是当周合约的行情数据。

          var tickerA = rA.wait()                    // 并发的两个线程各自执行自己的任务,这里等待获取数据,A 等待时,B任务也在执行。
          var tickerB = rB.wait()                    // 所以这里看似是顺序执行,实际在底层是并发的。只不过获取的时候是顺序先获取A,在获取B。
          var endTime = new Date().getTime()         // 记录并发获取两个合约行情结束时的时间戳。

          if (tickerA && tickerB) {                  // 如果获取的数据没有问题,执行以下逻辑。
              var diff = tickerA.Last - tickerB.Last // 计算差价
              $.PlotLine("diff", diff)               // 使用画线类库把差价画在图表上。
              if (diff > 500) {                      // 如果差价大于500, 对冲套利(当然设置500 的差价是比较大的,很少见。)
                  // 对冲
                  rA = exchanges[0].Go("Sell", tickerA.Buy, 1)     // 并发线程创建 季度合约下卖单
                  rB = exchanges[1].Go("Buy", tickerB.Sell, 1)     // 并发线程创建 当周合约下买单

                  var idA = rA.wait()           // 等待 返回下单结果,返回的是订单ID
                  var idB = rB.wait()           // ...
              }

              // ...
          }

          LogStatus(_D(), "并发获取两个合约行情耗时:", endTime - beginTime, "毫秒。")    // 显示在状态栏上时间,以便知道程序在执行。
          Sleep(500)
      }
  }

Ощущается ли эта стратегия дизайна намного проще, а идеи — яснее?

Реальная работа диска: Подробное объяснение конфигурации количественной торговой стратегии цифровой валюты

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