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

Автор:Доброта, Создано: 2019-09-16 14:55:26, Обновлено: 2023-11-07 20:50:11

img

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

Учебная платформа по-прежнему использует торговую платформу FMZ Quant (https://www.fmz.com), и рынок выбран как рынок криптовалют.

Конструкция стратегии для нескольких криптовалют

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

Обычно дизайн такой:

function Process (symbol) {
     exchange.IO("currency", symbol)
     var ticker = _C(exchange.GetTicker)
     Log("has switched trading pairs, processing trading pairs according to strategy logic:", symbol, "quotes: ", 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

Название объекта обмена OKEX Spot V3 Test, на странице панели управления, странице конфигурации обмена:

img

Всё сделано.

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

function Process (e) {
    var ticker = _C(e.GetTicker)
    Log("exchange", e.GetName(), "Process trading pairs according to strategy logic:", e.GetCurrency(), "Quotes:", 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()) // Print the account asset information of the first exchange object.
     Log(exchanges[1].GetAccount()) // ... Print the asset information of the Bit-Z exchange
}

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

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

Например, мы добавляем еще один счет для Huobi Futures.

img

Как видите, это конфигурирует счета двух Huobi Futures бирж.

img

Когда стратегия создается, объект Huobi Futures Exchange появляется в опции Robots Modify Configuration для выбора.

img

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

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

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

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

Разница заключается в том, что приведенный выше пример представляет собой конфигурацию обмена, то есть:

img

Когда робот настраивает объект обмена, он всегда использует:

img

Эта конфигурация.

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

При вызове функции GetAccount доступ к информации о активе на том же счете всегда осуществляется.

однако:

img

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

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

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

Конечно, есть, мы можем добавить два обменных объекта к роботу, следуя Configure multiple exchange objects for the robot in the same exchange account.

img

Затем используйте эту конфигурацию обмена для добавления другого объекта обмена.

Появится поле с указанием!

img

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

Что мне делать? Кажется, что робот стратегии не может использовать два обменных объекта, и обменный объект связан с номером обменного счета?

Есть еще выход!

Давайте перейдем к Dashboard -> Exchange, а затем добавить конфигурацию биржи фьючерсов OKEX.

img

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

img

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

img

Какие преимущества это приносит?

Когда вы пишете стратегию, дизайн будет очень простым!

function main(){
    exchanges[0].SetContractType("quarter") // Set the first added exchange object. The current contract is a quarterly contract.
    exchanges[1].SetContractType("this_week") // Set the second added exchange object, the current contract is the current week contract
    
    while (true) {
        var beginTime = new Date().getTime() // Record the timestamp from which this time the market quote was taken.
        var rA = exchanges[0].Go("GetTicker") // Create a concurrent thread to get the first exchange object, which is the market data for the quarterly contract.
        var rB = exchanges[1].Go("GetTicker") // Create a concurrent thread to get the second exchange object, which is the market data for the weekly contract.
        
        var tickerA = rA.wait() // The two threads executing each other perform their own tasks, waiting to get the data. When A waits, the B task is also executing.
        var tickerB = rB.wait() // So it seems to be sequential execution, actually at the bottom of the concurrency. Only when you get the order is to get A first, and get B.
        var endTime = new Date().getTime() // Record the timestamp at the end of the two contract quotes.
        
        if (tickerA && tickerB) { // If there is no problem with the data obtained, execute the following logic.
            var diff = tickerA.Last - tickerB.Last // calculate the difference
            $.PlotLine("diff", diff) // Use the line drawing library to plot the difference on the chart.
            if (diff > 500) { // If the spread is greater than 500, hedge arbitrage (of course, the difference of 500 is relatively large, rarely seen.)
                // Hedging
                rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // Concurrent threads create a selling order under the quarterly contract
                rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // Concurrent thread create a buying order under the weekly contract
                
                var idA = rA.wait() // Waiting for the return of placing order results, returning the order ID
                var idB = rB.wait() // ...
            }
            
            // ...
        }
        
        LogStatus(_D(), "Concurrently get two contract quotes taking time:", endTime - beginTime, "millisecond.") // Shows the time on the status bar to know that the program is executing.
        Sleep(500)
    }

Эта стратегия дизайна гораздо проще и понятнее?

Реальная рыночная операция:

img

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


Связанные

Больше