Перейти к содержимому


Фото
* - - - - 1 голосов

Пару слов о CQG API


  • Please log in to reply
15 ответов в этой теме

#1 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 22 January 2012 - 03:53 PM

За время работы я познакомился со многими "трейдерскими" API: AllorTrade, SmartCom, Plaza-2, Zen-Fire, Ninjia (не путайте с инструментом для
написания МТС, у Нинзи есть именно API), TWS, CQG и может чего то забыл.. По моему мнению, из перечисленного списка самым удобным, самым
логичным, самым понятным, самодостаточным, а то бишь самым лучшим является CQG API. Поэтому за него деньги и берут.

Чтобы не быть голословным, приведу пример со способами получения биржевых данных в CQG API. Так в таких API как AllorTrade, SmartCom, Plaza-2,
Zen-Fire, TWS мы будем получать в неких событиях цены, объемы или "стакан" построчно, а затем вынуждены их собирать в объекты более высокого
уровня.В CQG API в определенном событии мы можем сразу получить объект Instrument и получить доступ ко множеству его свойств. Насколько это
легко это делается показано ниже.

VB
Private Sub CEL_InstrumentChanged(ByVal instrument As CQGInstrument, _
ByVal quotes As CQGQuotes, _
ByVal props As CQGInstrumentProperties)

Dim lastTradePrice As Double = instrument.Trade.Price ' Цена последней сделки
Dim bestDomAskPrice As Double = instrument.DOMAsks(0).Price ' Лучшая цена Аск в очереди заявок
Dim bestDomAskVolume As Double = instrument.DOMAsks(0).Volume ' Объем заявки с лучшей ценой Аск в очереди заявок
Dim tickSize As Double = instrument.Properties(eInstrumentProperty.ipTickSize).Value ' Минимальное изменение цены

End Sub

С#
private void CEL_InstrumentChanged(CQGInstrument instrument, CQGQuotes quotes, CQGInstrumentProperties props)
{

double lastTradePrice = instrument.Trade.Price; // Цена последней сделки
double bestDomAskPrice = instrument.DOMAsks(0).Price; // Лучшая цена Аск в очереди заявок
double bestDomAskVolume = instrument.DOMAsks(0).Volume; // Объем заявки с лучшей ценой Аск в очереди заявок
double tickSize = instrument.Properties(eInstrumentProperty.ipTickSize).Value; // Минимальное изменение цены
}

Ссылки на все подписанные инструменты храняться в коллекции CQGInstruments. Поэтому, если Ваш робот не критичек к скорости получения данных,
то можно вообще не подписываться на событие InstrumentChanged, а просто опрашивать коллекцию CQGInstruments в таймере с определенным
интервалом. Ниже показано, как можно получить цену последней сделки по фьючерсу на Лукойл.

VB
Dim lastTradePrice = cel.Instruments("LKOH-03.12").Trade.Price ' Цена последней сделки по LKOH. cel - ссылка на корневой объект API типа
CQGCEL

С#
double lastTradePrice = cel.Instruments("LKOH-03.12").Trade.Price; // Цена последней сделки по LKOH. cel - ссылка на корневой объект API
типа CQGCEL

Объекты такого же высокого уровня существуют для заявок (CQGOrder), позиций (CQGPosition), сделок (CQGTrades), счетов (CQGAccount). Все это
значительно упрощает программирование и критически сокращает объем кода. Данный факт опосредованно влияет на корректность и надежность ваших
программ.

В последние версии CQG API была внедрена концепция "парного трейдинга". Суть ее заключается в том, что Вы по определенным правилам создаете
синтетический инструмент, состоящий из ног (Leg), а затем манипулируете им как единой сущностью. Если в инструменте только одна нога, то это
фактически будет обычный инструмент. Если несколько ног с завками в одном направлении - инструмент корзины ЦБ. Если одна из ног будет иметь
отличное от других ног направление, это будет спред. По этому синтетическому инструменту вы можете получать котировки, выставлять и снимать
заявки.

Честно говоря, с такими инструментами в CQG API я сам не работал, да и появились они недавно и описаны в документации очень скудно. Вообще если
говорить о документации к CQG API, то его "ядерная" часть (коннект, подписки, получение данных, выставление заявок, наблюдение за позициями и
счетом) описаны достаточно подробно и понятно. А вот, что касается "специальных" разделов, скажем таких как алгоритмические заявки (класс
CQGAlgorithmicOrder), торговые системы (класс CQGTradingSystem) и уже упомянутый парный трейдинг описаны до дого скудно, что как это работает,
и что с этим делать непонятно. Так, что метод "тыка" рулит.
  • PMaster, berierbummato, WeexDermHesse and 3 others like this

#2 valenock

valenock

    Новичок

  • Трейдеры
  • Pip
  • 38 сообщений

Отправлено 23 January 2012 - 05:41 AM

спасибо, Сергей - очень интересно

а вы не могли бы поделиться информацией по стабильности-скорости API CQG ?
Скажем, бывают ли сбои в работе и какой характер они носят. Что передаёт АПИ в случае сбоя на бирже-одном из промсерверов-остановке торгов ?
например, что они передавали 20 декабря ?

А то по плазе есть более менее объективная информация, но реальных пользователей CQG очень мало

#3 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 23 January 2012 - 10:55 AM

спасибо, Сергей - очень интересно

а вы не могли бы поделиться информацией по стабильности-скорости API CQG ?
Скажем, бывают ли сбои в работе и какой характер они носят. Что передаёт АПИ в случае сбоя на бирже-одном из промсерверов-остановке торгов ?
например, что они передавали 20 декабря ?

А то по плазе есть более менее объективная информация, но реальных пользователей CQG очень мало

Я сам через CQG API не торгую. Пользовался им во время разработки приложения для клиента. Во время разработки и при последующей работе никаких проблем со стабильностью со стороны CQG API не было.
В CQG API своя встроенная система обработки ошибок. Что оно передало 20 декабря по изложенной выше причине я не знаю, но может быть "Unexpected error" :lol:
Насчет скорости не знаю. Единственное могу сказать, что CQG, а то бишь и его API взаимодействует с торговой системой биржи через fix-протокол.

#4 Михаил Евграфов

Михаил Евграфов

    Новичок

  • Moderators
  • 59 сообщений

Отправлено 31 January 2012 - 12:47 PM




#5 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 31 January 2012 - 01:43 PM

Добавлю пару ложек дегтя в большую бочку меда. В первом посте я писал о непонятках с классами TradeSystem, AlgorithmisOrder и т.п. Сейчас я с работой этих классов немнорго разобрался. Делов том, что существуют два API один привязан к CQGIC другой с CQGTrader. Первый в отношении своего функционала тесно связан с CQGIC. Другими словами, торговые системы, индикаторы(у них это называется Study), пользовательская графика (Curve) все это создается в самом CQGIG при помощи его внутреннего языка, а в API только импортируется, т.к. в CQG Trader данный функционал отсутствует, то и работать с этими классами мы не сможем. Второй более грусный момент связан с отсутствием в API к CQG Trader возможности получения исторических данных. Если без функционала торговых систем, индикаторов и т.п. можно вполне обойтись, то отсутствие истории - это уже серьёзно...

#6 valenock

valenock

    Новичок

  • Трейдеры
  • Pip
  • 38 сообщений

Отправлено 31 January 2012 - 01:52 PM

Второй более грусный момент связан с отсутствием в API к CQG Trader возможности получения исторических данных. Если без функционала торговых систем, индикаторов и т.п. можно вполне обойтись, то отсутствие истории - это уже серьёзно...

Так у CQG Trader и так с историей не очень - он больше для скальпинга чистого, да и по стоимости совсем разные продукты получаются - там на порядок, по-моему, или даже больше разница

#7 twilight

twilight

    Новичок

  • Трейдеры
  • Pip
  • 10 сообщений

Отправлено 31 January 2012 - 04:55 PM

Второй более грусный момент связан с отсутствием в API к CQG Trader возможности получения исторических данных. Если без функционала торговых систем, индикаторов и т.п. можно вполне обойтись, то отсутствие истории - это уже серьёзно...

Отсутствие истории для западных рынков не проблема. Поскольку существуют недорогие датафиды (esignal, iqfeed), в том числе с API и адаптерами под практически все популярные программы ТА, которые полноценно закрывают эту брешь.

#8 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 31 January 2012 - 05:13 PM

Так у CQG Trader и так с историей не очень - он больше для скальпинга чистого, да и по стоимости совсем разные продукты получаются - там на порядок, по-моему, или даже больше разница

В самом то API этот функционал есть, причем очень богатый... Но дело в том, что CQG используется такое понятие, как "уровень подписки". Так в CQGIC за каждую дополнительную опцию нужно платить. Возможно и в CQG Trader, что типа того..

#9 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 31 January 2012 - 06:12 PM

Отсутствие истории для западных рынков не проблема. Поскольку существуют недорогие датафиды (esignal, iqfeed), в том числе с API и адаптерами под практически все популярные программы ТА, которые полноценно закрывают эту брешь.

Буржуйскую историю можно и бесплатно забрать.Кому интереcно могу сказать, где лежит классная библиотека (оболочка к Yahoo Query Language API). Позволяет забрать практически все, что лежит на Yahoo Finance. Её писал немец и написана по немецки дотошно, хорошо документирована, примеры и т.п.. Работает очень неплохо.. А вот где у нас сервер с данными родного отечества?

#10 twilight

twilight

    Новичок

  • Трейдеры
  • Pip
  • 10 сообщений

Отправлено 31 January 2012 - 06:31 PM

А вот где у нас сервер с данными родного отечества?

В esignal есть FORTS, правда дорого ($70).

И еще, в качестве примера:
Finam Static/Streaming Data Provider for Wealth-Lab:
http://www.wealth-la...JpRvExaq4nDIag=
PS. Качество данных отдельный вопрос...

#11 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 31 January 2012 - 06:43 PM

В esignal есть FORTS, правда дорого ($70).

И еще, в качестве примера:
Finam Static/Streaming Data Provider for Wealth-Lab:
http://www.wealth-la...JpRvExaq4nDIag=
PS. Качество данных отдельный вопрос...

В таком контекте в эту категорию можно отнести и Smartcom и AlorTrade и Quik. Речь идет о провайдере исторической Market Data с сопутствующим инструментарием... Где у нас такой лежит?

#12 twilight

twilight

    Новичок

  • Трейдеры
  • Pip
  • 10 сообщений

Отправлено 31 January 2012 - 06:59 PM

В таком контекте в эту категорию можно отнести и Smartcom и AlorTrade и Quik. Речь идет о провайдере исторической Market Data с сопутствующим инструментарием... Где у нас такой лежит?

В Quik нет исторических данных.
Приведенный в качестве примера Finam Static/Streaming Data Provider берет исторические данные с сайта Финама, примерно аналогично тому как это делается с Yahoo Finance.

#13 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 31 January 2012 - 07:12 PM

В Quik нет исторических данных.
Приведенный в качестве примера Finam Static/Streaming Data Provider берет исторические данные с сайта Финама, примерно аналогично тому как это делается с Yahoo Finance.

Он предоставляет этот сервис всем желающим, а не только подписчикам Welth-Lab?

#14 Сергей Гаврилов

Сергей Гаврилов

    Активный участник

  • Трейдеры
  • PipPipPip
  • 808 сообщений

Отправлено 31 January 2012 - 07:20 PM

В Quik нет исторических данных.

В квике при помощи QPILE можно создать пользовательскую таблицу, в которую выводится история. А эту таблицу использовать в API..

#15 Француз

Француз

    Новичок

  • Трейдеры
  • Pip
  • 8 сообщений

Отправлено 21 February 2013 - 12:50 PM

Здравствуйте.

Правильно ли я понял, что теперь можно использовать API с CQG Trader: http://www.itinvest....cqg/cqg-trader/
и что при использовании 3-х инструментов ФОРТС это будет стоить 2 к рублей/мес ?

Так же в личном кабинете можно выбрать опцию "Тест". Могу ли я протестировать CQG Trader с API ?
Сколько длится тест ?

#16 AlinaQuaps

AlinaQuaps

    Новичок

  • Трейдеры
  • Pip
  • 3 сообщений

Отправлено 06 March 2017 - 02:02 PM

я это тему не для того создавал. Просто напишите пару хороших и благодарных слов.




Rambler's Top100 Яндекс.Метрика