Фьючерсы на сырьевые товары CTP и обмен криптовалют API имеют существенные различия. Знакомство с программированием криптовалютной биржи не означает знакомство с программированием на сырьевые товары CTP. мы не можем просто скопировать метод и опыт.
CTP не предоставляет историческую рыночную котировку, и историческая рыночная котировка должна быть решена через агентство рыночных котировок. Если рыночные данные теряются из-за неспособности войти в систему, CTP не предоставляет механизм пополнения рынка. Исторические рыночные котировки могут быть получены только через агентство третьей стороны. Большинство криптовалютных бирж обычно предоставляют интерфейс для получения K-линии и истории транзакций.
API обмена криптовалютами обычноREST
иwebsocket
CTP внутренне инкапсулирует логику, связанную с сетью, и общается с фоном CTP с использованием протокола FTD, основанного на протоколе TCP. Разделен на три режима:
Режим ответа на запрос: клиент инициирует запрос, а CTP-фон принимает и отвечает на запрос.
Режим трансляции: после того, как клиент подписывается на котировку рынка контракта, CTP пересылает котировки рынка через трансляцию.
Режим частной связи: после того, как клиент заключает контракт, информация о заказе, возврат транзакции и т. д. передаются CTP от точки к точке.
Все котировки и транзакции с заказами соглашения CTP будут уведомлены после изменений, в то время как запросы, счета и позиции будут активно запрашиваться.
Глубина протокола CTP - это только последняя цена покупки и продажи, более глубокие рыночные котировки, такие как пять слоев цены покупки и продажи, дорогие, вам нужно заплатить дополнительные деньги на фьючерсную биржу, чтобы получить ее. с другой стороны, криптовалютная биржа обычно может получить полную глубину до 200 слоев цены покупки и продажи.
Кроме того, CTP не подталкивает реальные котировки транзакций, его можно обратить вспять только путем изменения позиции, а API криптовалютной биржи может получить реальные подробные котировки транзакций. Уровень тика рыночных данных платформы CTP составляет 2 тика в секунду.
Криптовалютные биржи, как правило, ограничены 10 тиками в секунду. Нет специальных требований к снятию заказов. CTP имеет строгие ограничения на запросы, которые должны быть отправлены активно. Как правило, один раз в 2 секунды довольно безопасно, и есть также требования к количеству снятий.
Протокол CTP очень стабилен и практически не имеет ошибок или проблем с сетью.
CTP по умолчанию режим для получения интерфейса рынка, такие какGetTicker
, GetDepth
, GetRecords
являются кэшированные данные, чтобы получить последние, если нет данных будет ждать, пока есть данные, так что стратегия не может использоватьSleep
Когда происходит изменение котировки на рынке,ticker
, depth
, иrecords
В этот момент любой интерфейс будет возвращен немедленно при его вызове. Затем состояние вызванного интерфейса настроится на ожидание режима обновления, когда в следующий раз будет вызван тот же интерфейс, он будет ждать возвращения новых данных.
Некоторые непопулярные торговые контракты или цена достигает ежедневной ограниченной цены произойдет в течение длительного времени без каких-либо торговых действий, что является нормальным для стратегии, чтобы застрять в течение длительного времени.
Если вы хотите получить данные каждый раз, когда вы получаете рыночную котировку, даже старые данные, вы можете переключиться на рынок немедленно обновлять режимexchange.IO ("mode", 0)
. На данном этапе, стратегия не может быть написана как драйвер события. Вам нужно добавитьSLeep
Некоторые низкочастотные стратегии могут использовать этот режим, и дизайн стратегии прост.exchange.IO("mode", 1)
чтобы вернуться в режим кэша по умолчанию.
При работе с одним контрактом, использовать режим по умолчанию будет в порядке. Однако, если есть несколько торговых контрактов, возможно, что один контракт не был обновлен, что приводит к блокировке интерфейса рынка, и другие торговые котировки рынка не доступны. Чтобы решить эту проблему, вы можете использовать режим немедленного обновления, но не удобно писать стратегию высокой частоты. В этот момент вы можете использовать режим push-события, чтобы получить push-заказы и котировки.exchange.IO("wait")
. Если несколько обменных объектов добавлены, это редкая ситуация в товарных фьючерсных торгов, вы можете использоватьexchange.IO ("wait_any")
, и возвращенныеindex
будет указывать индекс возвращенного обмена.
Котировка на рынкеtick
Нажмите на перемены:
{Event:"tick", Index: exchange index (in the order of robot exchange added), Nano: event nanosecond time, Symbol: contract name}
Приказ " толкать ".
{Event:"order", Index: Exchange Index, Nano: Event Nanosecond Time, Order: Order Information (consistent with 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")){ //Determine the link status
exchange.IO("mode", 0)
_C (exchange.SetContractType, "MA888") // subscribe to the MA, only the first time is the real request to send a subscription, the following are just program switch, won't consume any time.
_C(exchange.SetContractType, "rb888") // Subscribe 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)
}
}
}