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

Противоречия между API товарных фьючерсов и цифровых валютных бирж

Автор:Трава, Создано: 2019-09-21 17:37:21, Обновлено: 2024-12-17 20:41:43

商品期货与数字货币交易所API的异同

Существуют существенные различия между CTP на товарные фьючерсы и API на цифровые валюты.

Исторические данные

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

Соглашение разное

API криптовалют, как правило, REST и websocket протоколы, внутри которых CTP вкладывает сетевую логику, используют протокол FTD, основанный на протоколе TCP, для общения с CTP в фоновом режиме.

  • Режим ответа на запрос: клиент инициирует запрос, CTP в фоновом режиме принимает и отвечает на запрос
  • Модель радиокоммуникаций: после подписания клиента на контрактный рынок, CTP продвигает информацию о рынке через радио.
  • Модель частной связи: после того, как клиент поручает выполнение операции по контракту, информация о заявке, возврате сделки и т. д. перемещаются между точками CTP.

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

Различается точность данных.

CTP-протоколы имеют глубину покупки-продажи, платформы платят за пять типов, цифровые валюты обычно доступны в полной глубине или 200-ти. CTP не продвигает реальные транзакции, а может отталкивать их только с помощью изменений в состоянии, а API цифровых валютных бирж получает реальные транзакции. Внутренний CTP-платформа имеет уровень тика данных транзакций в 1 секунду.

Различные ограничения

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

Устойчивость

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

FMZ - платформа для количественной оценки лучших практик протокола CTP

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

Если вы хотите получить данные каждый раз, когда вы получаете данные, даже старые данные, вы можете переключиться на режим мгновенного обновления рынка exchange.IO ((mode кнопка, 0) ). В этом случае политика не может быть написана как управляемая событиями, необходимо добавить событие SLeep, чтобы избежать быстрого мертвого цикла.

При работе с отдельными контрактами можно использовать режим по умолчанию; но если это несколько контрактов, возможно, что один контракт не обновляет рынка, что приводит к блокировке доступа к интерфейсу рынка, и другие контракты не могут получить обновления рынка. Чтобы решить эту проблему, можно использовать режим немедленного обновления, но не удобно писать высокочастотную стратегию.

Процесс тика изменения push: {Event: tick, Index: индекс биржи ((в порядке добавления роботом биржи), Nano: время наносекундного масштаба события, Symbol: название контракта} Публикация ордера: {Event: order, Index: индекс биржи, Nano: время наносекундного масштаба события, Order: информация о заказе ((совместимо с получением GetOrder) }

В этом случае стратегическая структура может быть написана так:

function on_tick(symbol){
    Log("symbol update")
    exchange.SetContractType(symbol)
    Log(exchange.GetTicker())
}

function on_order(order){
    Log("order update", order)
}

function main(){
    while(true){
        if(exchange.IO("status")){ //判断链接状态
            exchange.IO("mode", 0)
            _C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
            _C(exchange.SetContractType, "rb888")//订阅rb
            while(True){
                var e = exchange.IO("wait")
                if(e){
                    if(e.event == "tick"){
                        on_tick(e.Symbol)
                    }else if(e.event == "order"){
                        on_order(e.Order)
                    }
                }
           }
        }else{
            Sleep(10*1000)
        }
    }
}

Содержание

Больше информации