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

Конфигурация криптовалюты

Автор:Изобретатели количественного измерения - мечты, Создано: 2019-09-02 09:39:59, Обновлено: 2024-12-17 20:42:42

img

Конфигурация криптовалюты

При разработке первичных стратегий количественной торговли криптовалютами часто возникает множество различных стратегических потребностей, которые возникают в разных ситуациях, независимо от языка и платформы. Например, иногда требуется многообразие оборотов, иногда требуется многообразие хеджировок, иногда требуется многообразие параллельных операций и т. Д. Ниже мы поделимся некоторыми опытами разработки при реализации стратегических потребностей. Учебные платформы по-прежнему используют квантовые торговые платформы изобретателей.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)
            }
        }
    }
    

    Мы конфигурируем роботов:img

    img

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

    Некоторые ученики могут сказать: "Я не люблю обменять пары, это немного сложно, так как стратегия не очень понятна". Но есть и другие варианты, которые мы покажем ниже.

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

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

    Название объекта биржи - "ОКЕКС Тест V3", на странице конфигурации биржи в Центре управления:imgВ этом случае мы не будем делать никаких ошибок.

    Измените код, потому что в этот раз мы добавили боту несколько обменных объектов, в том числе обменные объекты 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)
            }
        }
    }
    

    "Это не так просто, потому что мы не знаем, что делать.img

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

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

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

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

      img

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

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

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

      Например, мы добавили счет для торгового фьючерса.img

      Как видите, так настраиваются счета двух "токенных фьючерсов".

      img

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

      img

      Например, это позволяет двум аккаунтам использовать одну стратегию покупки-продажи-начальника ("вверх") и одну стратегию покупки-продажи-начальника ("вниз").

      Мы можем использовать эти два примера.

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

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

      img

      Всегда используются следующие объекты при конфигурации роботов:imgЭта конфигурация.

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

      Однако:imgДва токенов, конфигурированных таким образом, являются объектами фьючерсных бирж, хотя и являются токенными фьючерсами.

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

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

    Конечно, есть способ! Мы можем добавить к боту два объекта биржи, как мы говорили выше: "Одна и та же учетная запись на бирже может быть настроена для бота с несколькими объектами биржи".imgЗатем используйте эту конфигурацию для добавления объекта обмена. В этом случае появляется поле подсказок!imgКонфигурация счета биржи не позволяет добавлять обменные объекты с одинаковой валютой.

    Как это сделать? Не кажется ли, что можно сделать тактический робот с двумя объектами биржи и связать объекты биржи с одним кодом счета? Но есть и другие варианты!

    Мы добавили конфигурацию фьючерсной биржи OKEX в "Контроль-центр" - "Биржа".

    img

    Нажмите "Сохранить" для конфигурации.

    img

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

    img

    Что вы получаете от этого? Конечно, когда дело доходит до написания стратегии, дизайн простой!

    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)
        }
    }
    

    Подобная стратегия дизайна кажется нам очень простой и ясной.

    Диск работает:img

    Как видите, каждое одновременное получение двух контрактов занимает около 50 миллисекунд.


Связанные

Больше

Стремиться к количествуИ последнее решение было бы очень хорошим.

БвксяокУдивительно, это очень помогло!