Перепрыгнеть в содержание


* * * * * 6 голосов

Betfair API-NG на русском. Примеры, описание


24 ответов в эту тему

#1 OFFLINE   VBman

    Специалист


  • Участник II
  • ПипПипПип
  • 203 сообщения
44

Добавлено 26 February 2016 - 21:54

Начну пожалуй потихоньку. Просьба не писать в этой теме ничего!
Обсуждение ведется Ссылка Здесь



При копировании текста темы ссылка на www.moneypunter.com/ обязательна

#2 OFFLINE   VBman

    Специалист


  • Участник II
  • ПипПипПип
  • 203 сообщения
44

Добавлено 26 February 2016 - 22:44

Вступление.

Биржа Betfair дает возможность программистам иметь доступ к данным через специальный программный интерфейс, называемый API-NG для написания собственных интерфейсов рынка или автоматических программ (ботов).

Это вторая обновленная версия API, и если вы находите в сети исходники или описание так называемой Betfair API 6.0 - она уже не актуальна на сегодняшний день.



Для того чтобы обычный пользователь получил программный доступ к бирже необходимо:
  • Аккаунт Betfair
  • Application Key - ключ(электронный) - служит идентификатором клиента API
  • sessionToken - сессия авторизации - имеет три возможных метода
Аккаунт Betfair у вас есть, раз вы читаете эту тему. Как получить Application Key и sessionToken мы рассмотрим далее.

Когда мы авторизуемся - мы получим доступ к функциям биржи, отправляя определенный запрос мы получаем определенный ответ. Это основа общения клиента(он же бот) и сервера(в данном случае API)

Данные между клиентом и сервером передаются в формате JSON и JSON-RPC

JSON - текстовый формат обмена данными, схож с XML. По сути это структура данных. Может быть очень сложна.
JSON-RPC - протокол удалённого вызова процедур

Пример запроса JSON-RPC:
{
   "params": {
	  "filter": {
		 "eventTypeIds": [1]
	  }
   },
   "jsonrpc": "2.0",
   "method": "SportsAPING/v1.0/listCompetitions",
   "id": 1
}


И пример ответа:
{
   "jsonrpc": "2.0",
   "result": [
	  {
		 "eventType": {
			"id": "468328",
			"name": "Handball"
		 },
		 "marketCount": 59
	  }
   ],
   "id": 1
}


Вот такими сообщениями будет общаться наш бот с биржей. Отправил запрос - получил ответ.


Далее мы рассмотрим процесс авторизации (логина) к API-NG

#3 OFFLINE   VBman

    Специалист


  • Участник II
  • ПипПипПип
  • 203 сообщения
44

Добавлено 06 March 2016 - 22:12

Application Keys

Чтобы иметь доступ к работе с API необходим так называемый Application Key. Это уникальный электронный ключ, который является идентификатором вашего клиента(софта), который подключается к API.

Биржа дает два ключа:
  • live App Key - его мы будем использовать для работы
  • delayed App Key - возвращает цены с задержкой и не позволяет производить транзакции ставок (размещение ставок, отмена их и т.д.)
Как создать/просмотреть Application Key

1. Пройти по ссылке https://myaccount.be.../accountsummary.
Spoiler
Авторизоваться (ввести логин-пароль, нажать Login). Нам нужна сесиия. В двух словах - Каждый раз при авторизации браузер сохраняет сессию, чтобы мы могли перемещаться внутри сайта и не вводить постоянно логин и пароль.

2. Пройти по ссылке https://developers.b...unt-operations/
Spoiler
Это демонстрационная утилита от Betfair в которой можно сгенерировать Application Key протестировать его. К слову, так выглядит сессия (выделено красным)

3. Выбрать createDeveloperAppKeys и ввести уникальное имя вашего будущего приложения. Чтобы имя было точно уникальным - можно создать, например имя MyBot_xxxxx, где ххххх будет ваш логин к бирже.
Spoiler
Нажать Execute:
Spoiler


Если все сделано верно - биржа сгенерирует вам два ключа:
Spoiler

Для дальнейшей работы нам понадобится ключ выделенный зеленым цветом. Сохраните его.




Если вы уже получали ключ ранее или вам необходимо его "вспомнить" делаем как выше до пункта 3, далее:
3. Выбрать getDeveloperAppKeys и нажать Execute:
Spoiler


Теперь мы готовы идти далее и работать с Betfair API.


Биржа генерирует ключи только для личного использования, всё коммерческое использование данных или API должно быть утверждено Betfair.
Никогда и никому не сообщайте свои логин/пароль от биржи и свой Application Key

#4 OFFLINE   VBman

    Специалист


  • Участник II
  • ПипПипПип
  • 203 сообщения
44

Добавлено 07 March 2016 - 00:06

Еще пару важных моментов перед большим стартом


Сессия
Когда мы будем подключаться к API и получать сессию, она не будет жить вечно. Для .com биржи время жизни сессии = 4 часа. Чтобы продлить сессию нужно отправить запрос Keep Alive, иначе наша сессия закончится и бот просто-напросто встанет от невозможности получить ответ для не авторизованного клиента. Как послать Keep Alive рассмотрим далее.

Изменить время жизни сессии можно в аккаунте биржи по пути - > My Account > My Betfair Account > My Details > Security Settings > Logout Preferences
Spoiler


Expect: 100-Continue
При отправке POST запроса в header запрос добавляется заголовок "Expect: 100-Continue", из-за которого сервер выдает ошибку "The remote server returned an error: (417) Expectation Failed."
Если вы используете .Net Framework решается это или глобально указав перед началом работы с API:
System.Net.ServicePointManager.Expect100Continue = false;
или непосредственно правим заголовок при отправке запроса:
var req = (HttpWebRequest) WebRequest.Create(...);
req.ServicePoint.Expect100Continue = false;


Enabling HTTP Compression
Биржа может дать вам ответ в сжатом виде GZIP. GZIP основан на алгоритме DEFLATE и обеспечивает сжатие без потерь, иными словами, исходные данные можно полностью восстановить при распаковке. Чтобы включить сжатие при получении больших ответов от биржи необходимо в заголовок запроса добавлять:
var req = (HttpWebRequest) WebRequest.Create(...);
req.Headers.Add("Accept-Encoding: gzip, deflate");


HTTP Persistent Connection
Так же биржа рекомендует добавлять во все запросы заголовок Connection: keep-alive для гарантированного постоянного соединения. Когда сервер получает такой запрос и генерирует ответ, он также добавляет в заголовок ответа Connection: keep-alive. После этого соединение не разрывается, а остаётся открытым. Когда клиент отправляет ещё один запрос, он использует это же соединение. Так будет продолжаться до тех пор, пока клиент или сервер не решат, что обмен окончен, и одна из сторон завершит соединение.
var req = (HttpWebRequest) WebRequest.Create(...);
req.Headers.Add("Connection: keep-alive");


#5 OFFLINE   VBman

    Специалист


  • Участник II
  • ПипПипПип
  • 203 сообщения
44

Добавлено 07 March 2016 - 20:26

Авторизация и управление сессией

Итак, ранее мы получили Application Key, и теперь для того чтобы начать работать с API нам необходимо получить сессию, то есть авторизоваться и получить токен (sessionToken)

Betfair дает возможность нам сделать это тремя способами:

1. Не интерактивный логин (Non-Interactive login) - авторизация с помощью личного сертификата, который необходимо создать и загрузить его на свой аккаунт биржи. Реализацию этого метода делал, если уж очень необходим могу показать по запросу, но нежелательно) уж много вижу росписи в этом методе что и как делать..

2. Интерактивный логин (Interactive login)
2.1. Вариант 1 - с использованием стандартной страницы ввода логина и пароля. В нашем приложении добавляется компонент веб-браузера, может быть любой или стандартный(WebControl) или сторонняя разработка (Gecko, Awesomium и т.д.). Выглядеть будет так:
Spoiler
Пользователь вводит логин и пароль и и получает sessionToken (ssoid). Помните мы выше получали Application Key, когда заходили в аккаунт биржи и переходили в демонстрационную утилиту (Accounts API Visualiser) а там уже была получена сессия. Вот этот метод один в один и реализуется.
2.2. Вариант 2 - метод авторизации через POST. Это самый простой метод, однако для многих он почему-то кажется проблематичным в реализации. Вот его и рассмотрим.



Запрос для успешной авторизации выглядит следующим образом:
curl -k -i -H "Accept: application/json" -H "X-Application: <AppKey>" -X POST -d 'username=<username>&password=<password>' https://identitysso.betfair.com/api/login



Создадим две глобальные переменные:
Spoiler
, где вместо xxxxxxxxxx вставим свой Application Key полученный ранее. В переменную mSsoid бы будем получать sessionToken

И функцию которая будет производить авторизацию и возвращать sessionToken:
Spoiler


Вызываем функцию с кнопки:
Spoiler
, где MyLogin - ваш логин, а MyPassword - пароль.


Если все сделано верно - в режиме отладки в переменной mSsoid увидим sessionToken:
Spoiler




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



Далее мы рассмотрим функции продления сессии и выхода из логина.


Прикрепленный файл  BetfairNG.zip   23.02K   103 Количество загрузок
SHA256: bcec8f793d3ac49a01e022226ac72b76a07e9cd0f598e495dc04f521af8d7d00

#6 OFFLINE   VBman

    Специалист


  • Участник II
  • ПипПипПип
  • 203 сообщения
44

Добавлено 21 March 2016 - 22:16

Авторизация и управление сессией. Версия 2

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


В исходниках, в глобальном модуле необходимо ввести свой ключ, логин и пароль:
Spoiler


Проверить можно следующим образом..

1. Запускаем проект, нажимаем Login:
Spoiler

2. Получаем сессию и статус логина:
Spoiler

3. Можем получить баланс, Get Balance:
Spoiler

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

5. Разорвем соединение, нажав на Logout
Spoiler

6. Снова закроем программу на крестик и перезапустим проект.. Все, сессия уже недействительна, статус FAIL:
Spoiler
Нужно снова нажимать Login, чтобы продолжить работу.



Далее я буду наполнять проект функционалом и некоторые теоретические моменты рассматривать подробнее.

Прикрепленный файл  BetfairNG.zip   55.33K   124 Количество загрузок
Прикрепленный файл  7.png   2.64K   22 Количество загрузок

#7 OFFLINE   amazon

    Пунтер


  • Участник II
  • ПипПип
  • 74 сообщения
0

Добавлено 15 June 2016 - 19:39

жесть, а что нормальные языки у бетторов не в тренде?
обязательно юзать древний visual ?

#8 OFFLINE   Expari

    Пунтер


  • Участник
  • ПипПип
  • 36 сообщения
5

Добавлено 10 September 2016 - 13:58

Парни, приветствую. Нужен специалист в API Betfair сделать небольшой инструмент для себя в вебе. ТЗ напишу, в личной беседе расскажу что нужно. Работу оплачу. Работы там на 1-2 дня )

#9 OFFLINE   amazon

    Пунтер


  • Участник II
  • ПипПип
  • 74 сообщения
0

Добавлено 15 September 2016 - 19:57

СообщенияExpari, on 10 September 2016 - 13:58, сказал:

Парни, приветствую. Нужен специалист в API Betfair сделать небольшой инструмент для себя в вебе. ТЗ напишу, в личной беседе расскажу что нужно. Работу оплачу. Работы там на 1-2 дня )
есть опыт работы с апи бетфаира, скидывай в ЛС свой скайп

#10 OFFLINE   Артений

    воин добра и света


  • Участник II
  • ПипПипПип
  • 336 сообщения
0
  • МестоположениеРоссия, Центральное Черноземье

Добавлено 16 September 2016 - 09:11

СообщенияExpari, on 10 September 2016 - 13:58, сказал:

Парни, приветствую. Нужен специалист в API Betfair сделать небольшой инструмент для себя в вебе. ТЗ напишу, в личной беседе расскажу что нужно. Работу оплачу. Работы там на 1-2 дня )
пишите

#11 OFFLINE   amazon

    Пунтер


  • Участник II
  • ПипПип
  • 74 сообщения
0

Добавлено 22 September 2016 - 22:12

СообщенияАртений, on 16 September 2016 - 09:11, сказал:

пишите
подскажи плиз в чем может быть проблема.
1. вызываю метод placeOrders, выполняется без ошибок и со статусом SUCCESS.
2. вызываю метод cancelOrders, тоже SUCCESS
3. вызываю метод replaceOrders, возвращает ошибку CANCELLED_NOT_PLACED "Bet cancelled but replacement bet was not placed".
что примечательно, в истории ставок нету ничего с упоминанием betId который вернул метод placeOrders в первом шаге.

#12 OFFLINE   Артений

    воин добра и света


  • Участник II
  • ПипПипПип
  • 336 сообщения
0
  • МестоположениеРоссия, Центральное Черноземье

Добавлено 25 September 2016 - 12:32

Имел в виду пишите по контактам если хотите заказать инструмент. По поводу ваших ошибок не могу подсказать.

#13 OFFLINE   spiker14

    Новичок


  • Участник
  • Пип
  • 3 сообщения
0

Добавлено 16 January 2018 - 02:23

Дошел ли прогресс в 2018 году до того, чтобы софт для автоматической торговли учитывал ход матча (live-стату в разных видах спорта)? Иными словами, маркетфидер, где в триггер можно вписывать условия на основе live-статистики с сайта биржи?

#14 OFFLINE   santjay

    Новичок


  • Участник
  • Пип
  • 13 сообщения
0

Добавлено 29 October 2019 - 20:24

С помощью какой функции и метода можно получить стакан объемов сматченных денег на все кэфы. GetMarketTradedVolume (написанный на форуме) я не нашел в описании API.

Отредактировано santjay, 29 October 2019 - 20:25.


#15 OFFLINE   Ь2ек2ерег

    Пунтер


  • Участник II
  • ПипПип
  • 62 сообщения
27
  • МестоположениеЖелезнодорожный

Добавлено 30 October 2019 - 18:21

Сообщенияsantjay, on 29 October 2019 - 20:24, сказал:

С помощью какой функции и метода можно получить стакан объемов сматченных денег на все кэфы. GetMarketTradedVolume (написанный на форуме) я не нашел в описании API.


listMarketBook

https://docs.develop.../listMarketBook

#16 OFFLINE   santjay

    Новичок


  • Участник
  • Пип
  • 13 сообщения
0

Добавлено 30 October 2019 - 20:36

СообщенияЬ2ек2ерег, on 30 October 2019 - 18:21, сказал:

Вроде как ясно, но GetMarketTradedVolume отсутствует. Если можно подробнее расписать, как это сделать. В долгу не останусь, очень нужно.

Я так понимаю, данная функция была в старом API.
Но marketbook выдает нулевой объем.

Attached File(s)



#17 OFFLINE   Ь2ек2ерег

    Пунтер


  • Участник II
  • ПипПип
  • 62 сообщения
27
  • МестоположениеЖелезнодорожный

Добавлено 31 October 2019 - 08:35

Сообщенияsantjay, on 30 October 2019 - 20:36, сказал:

Вроде как ясно, но GetMarketTradedVolume отсутствует. Если можно подробнее расписать, как это сделать. В долгу не останусь, очень нужно.

Я так понимаю, данная функция была в старом API.
Но marketbook выдает нулевой объем.


мысли (может это поможет ?):


- ключ должен быть REAL

- при вызове listMarketBook мы формируем строку с запросом
там есть параметр : "priceData", относящийся к "priceProjection"
параметр "priceData" может принимать значения

{""priceData"":[""EX_BEST_OFFERS""], лучшие цены
или
{""priceData"":[""EX_TRADED""], суммы по торгам



попробуйте вызвать listMarketBook в качестве теста
сначала : с EX_BEST_OFFERS
по идее должна быть инфа с предложениями и ценами

а если повторно вызвать listMarketBook но уже с параметром "priceData"":[""EX_TRADED""],
то полагаю что будут отображены суммы торгов по кэфам






ориентировочные фрагменты строк запросов :

..... """priceProjection"":{""priceData"":[""EX_BEST_OFFERS""],""virtualise"":""true""," & """exBestOffersOverrides"":{""bestPricesDepth"":""6"",""rollupModel"":""NONE""}" & "}}"

...... """priceProjection"":{""priceData"":[""EX_TRADED""],""virtualise"":""true""," & """exBestOffersOverrides"":{""bestPricesDepth"":""6"",""rollupModel"":""NONE""}" & "}}"

Отредактировано Ь2ек2ерег, 31 October 2019 - 08:38.


#18 OFFLINE   Ь2ек2ерег

    Пунтер


  • Участник II
  • ПипПип
  • 62 сообщения
27
  • МестоположениеЖелезнодорожный

Добавлено 31 October 2019 - 09:01

могу привести выдержку из логов :


запрос на EX_BEST_OFFERS и ответ


REQUEST
{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listMarketBook", "params": {"marketIds":["1.120080674"],"priceProjection":{"priceData":["EX_BEST_OFFERS"],"virtualise":"true","exBestOffersOverrides":{"bestPricesDepth":"6","rollupModel":"NONE"}}}, "id": 1}

REPLY
{"jsonrpc":"2.0","result":[{"marketId":"1.120080674","isMarketDataDelayed":false,"status":"OPEN","betDelay":0,"bspReconciled":false,"complete":true,"inplay":false,"numberOfWinners":1,"numberOfRunners":10,"numberOfActiveRunners":10,"lastMatchTime":"2015-08-17T10:50:05.886Z","totalMatched":21359.39,"totalAvailable":68545.54,"crossMatching":false,"runnersVoidable":false,"version":1060748205,"runners":[{"selectionId":10162701,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":25.525,"lastPriceTraded":3.95,"totalMatched":3527.79,"ex":{"availableToBack":[{"price":3.9,"size":78.47},{"price":3.85,"size":36.77},{"price":3.8,"size":30.14},{"price":3.75,"size":257.8},{"price":3.7,"size":41.45},{"price":3.65,"size":6.12}],"availableToLay":[{"price":3.95,"size":6.26},{"price":4.0,"size":7.48},{"price":4.1,"size":722.34},{"price":4.3,"size":26.74},{"price":4.4,"size":46.95},{"price":4.5,"size":9.39}],"tradedVolume":[]}},{"selectionId":10162699,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":24.088,"lastPriceTraded":4.3,"totalMatched":7488.48,"ex":{"availableToBack":[{"price":4.3,"size":35.3},{"price":4.2,"size":15.64},{"price":4.1,"size":16.18},{"price":3.95,"size":6.75},{"price":3.85,"size":12.5},{"price":3.8,"size":181.54}],"availableToLay":[{"price":4.5,"size":17.1},{"price":4.6,"size":17.36},{"price":4.9,"size":25.22},{"price":5.0,"size":20.34},{"price":5.4,"size":71.99},{"price":8.2,"size":23.47}],"tradedVolume":[]}},{"selectionId":9928392,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":21.739,"lastPriceTraded":4.4,"totalMatched":8099.75,"ex":{"availableToBack":[{"price":4.3,"size":34.23},{"price":4.2,"size":106.67},{"price":4.1,"size":26.27},{"price":4.0,"size":164.01},{"price":3.95,"size":9.39},{"price":3.9,"size":136.09}],"availableToLay":[{"price":4.4,"size":214.75},{"price":4.5,"size":15.64},{"price":4.6,"size":15.64},{"price":4.7,"size":52.71},{"price":4.8,"size":109.55},{"price":5.1,"size":76.68}],"tradedVolume":[]}},{"selectionId":9493944,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":9.091,"lastPriceTraded":11.0,"totalMatched":808.13,"ex":{"availableToBack":[{"price":10.5,"size":19.99},{"price":10.0,"size":44.24},{"price":9.8,"size":16.66},{"price":9.0,"size":43.05},{"price":8.8,"size":53.21},{"price":8.6,"size":207.64}],"availableToLay":[{"price":12.0,"size":23.89},{"price":12.5,"size":68.86},{"price":13.5,"size":10.59},{"price":15.0,"size":26.76},{"price":36.0,"size":4.69},{"price":38.0,"size":23.47}],"tradedVolume":[]}},{"selectionId":10162698,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":8.192,"lastPriceTraded":11.5,"totalMatched":1010.96,"ex":{"availableToBack":[{"price":11.0,"size":23.04},{"price":10.5,"size":6.15},{"price":10.0,"size":37.99},{"price":9.6,"size":48.95},{"price":9.2,"size":21.05},{"price":9.0,"size":56.4}],"availableToLay":[{"price":11.5,"size":14.64},{"price":12.0,"size":12.52},{"price":12.5,"size":43.82},{"price":13.0,"size":9.39},{"price":13.5,"size":25.03},{"price":15.0,"size":42.25}],"tradedVolume":[]}},{"selectionId":10110482,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":5.31,"lastPriceTraded":21.0,"totalMatched":179.73,"ex":{"availableToBack":[{"price":18.5,"size":6.26},{"price":18.0,"size":14.03},{"price":17.0,"size":11.7},{"price":16.5,"size":5.16},{"price":15.0,"size":26.62},{"price":14.0,"size":109.78}],"availableToLay":[{"price":36.0,"size":12.92},{"price":50.0,"size":17.54},{"price":65.0,"size":6.26},{"price":140.0,"size":23.47}],"tradedVolume":[]}},{"selectionId":335819,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":3.084,"lastPriceTraded":34.0,"totalMatched":59.67,"ex":{"availableToBack":[{"price":21.0,"size":7.47},{"price":20.0,"size":37.53},{"price":19.5,"size":95.49},{"price":19.0,"size":7.65},{"price":18.5,"size":97.58},{"price":17.5,"size":93.9}],"availableToLay":[{"price":65.0,"size":14.89},{"price":75.0,"size":7.82},{"price":290.0,"size":23.47}],"tradedVolume":[]}},{"selectionId":10139608,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":1.437,"lastPriceTraded":75.0,"totalMatched":35.29,"ex":{"availableToBack":[{"price":70.0,"size":6.24},{"price":60.0,"size":6.46},{"price":50.0,"size":7.82},{"price":44.0,"size":7.82},{"price":40.0,"size":13.3},{"price":36.0,"size":102.92}],"availableToLay":[{"price":540.0,"size":23.47}],"tradedVolume":[]}},{"selectionId":10162700,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":1.205,"lastPriceTraded":85.0,"totalMatched":43.02,"ex":{"availableToBack":[{"price":32.0,"size":7.8},{"price":30.0,"size":4.19},{"price":24.0,"size":94.92},{"price":22.0,"size":93.9},{"price":20.0,"size":112.68},{"price":16.0,"size":4.69}],"availableToLay":[{"price":140.0,"size":4.69},{"price":340.0,"size":23.47}],"tradedVolume":[]}},{"selectionId":9834085,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":0.33,"lastPriceTraded":120.0,"totalMatched":106.52,"ex":{"availableToBack":[{"price":120.0,"size":8.09},{"price":110.0,"size":5.24},{"price":100.0,"size":15.64},{"price":95.0,"size":5.22},{"price":90.0,"size":7.82},{"price":75.0,"size":7.82}],"availableToLay":[],"tradedVolume":[]}}]}],"id":1}



.


.


.



затем идет запрос на EX_TRADED и ответ


REQUEST
{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listMarketBook", "params": {"marketIds":["1.120080674"],"priceProjection":{"priceData":["EX_TRADED"],"virtualise":"true","exBestOffersOverrides":{"bestPricesDepth":"6","rollupModel":"NONE"}}}, "id": 1}

REPLY
{"jsonrpc":"2.0","result":[{"marketId":"1.120080674","isMarketDataDelayed":false,"status":"OPEN","betDelay":0,"bspReconciled":false,"complete":true,"inplay":false,"numberOfWinners":1,"numberOfRunners":10,"numberOfActiveRunners":10,"lastMatchTime":"2015-08-17T10:50:05.886Z","totalMatched":21359.39,"totalAvailable":68545.54,"crossMatching":false,"runnersVoidable":false,"version":1060748205,"runners":[{"selectionId":10162701,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":25.525,"lastPriceTraded":3.95,"totalMatched":3527.79,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":3.35,"size":3.91},{"price":3.4,"size":6.19},{"price":3.45,"size":2.4},{"price":3.55,"size":45.69},{"price":3.6,"size":7.31},{"price":3.65,"size":90.05},{"price":3.7,"size":22.14},{"price":3.75,"size":139.23},{"price":3.8,"size":521.19},{"price":3.85,"size":369.0},{"price":3.9,"size":621.5},{"price":3.95,"size":581.52},{"price":4.0,"size":382.96},{"price":4.1,"size":389.62},{"price":4.2,"size":157.17},{"price":4.3,"size":100.05},{"price":4.4,"size":73.64},{"price":4.5,"size":13.68},{"price":4.7,"size":0.46}]}},{"selectionId":10162699,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":24.088,"lastPriceTraded":4.3,"totalMatched":7488.48,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":2.28,"size":111.1},{"price":2.36,"size":6.26},{"price":2.96,"size":4.44},{"price":2.98,"size":31.29},{"price":3.0,"size":62.59},{"price":3.05,"size":31.83},{"price":3.1,"size":203.85},{"price":3.15,"size":432.38},{"price":3.2,"size":49.2},{"price":3.25,"size":515.4},{"price":3.3,"size":425.3},{"price":3.35,"size":443.01},{"price":3.4,"size":532.97},{"price":3.45,"size":244.85},{"price":3.5,"size":318.22},{"price":3.55,"size":86.41},{"price":3.6,"size":13.12},{"price":3.65,"size":8.36},{"price":3.7,"size":856.25},{"price":3.75,"size":627.22},{"price":3.8,"size":669.5},{"price":3.85,"size":330.18},{"price":3.9,"size":300.81},{"price":3.95,"size":274.59},{"price":4.0,"size":407.15},{"price":4.1,"size":295.09},{"price":4.2,"size":75.7},{"price":4.3,"size":102.53},{"price":4.4,"size":28.73}]}},{"selectionId":9928392,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":21.739,"lastPriceTraded":4.4,"totalMatched":8099.75,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":4.3,"size":614.27},{"price":4.4,"size":591.35},{"price":4.5,"size":1122.26},{"price":4.6,"size":722.31},{"price":4.7,"size":664.79},{"price":4.8,"size":551.42},{"price":4.9,"size":343.75},{"price":5.0,"size":607.83},{"price":5.1,"size":870.79},{"price":5.2,"size":675.31},{"price":5.3,"size":341.76},{"price":5.4,"size":195.15},{"price":5.6,"size":6.22},{"price":5.7,"size":27.39},{"price":5.8,"size":92.74},{"price":5.9,"size":201.82},{"price":6.0,"size":85.79},{"price":6.2,"size":114.87},{"price":6.4,"size":196.68},{"price":6.6,"size":30.59},{"price":6.8,"size":6.24},{"price":7.0,"size":18.58},{"price":7.2,"size":9.44},{"price":7.4,"size":3.46},{"price":7.6,"size":0.15},{"price":8.0,"size":0.15},{"price":8.4,"size":2.4},{"price":8.6,"size":2.1}]}},{"selectionId":9493944,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":9.091,"lastPriceTraded":11.0,"totalMatched":808.13,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":9.0,"size":7.94},{"price":9.2,"size":6.19},{"price":9.4,"size":2.53},{"price":9.6,"size":2.11},{"price":10.0,"size":41.17},{"price":10.5,"size":120.29},{"price":11.0,"size":349.69},{"price":11.5,"size":199.36},{"price":12.0,"size":47.22},{"price":12.5,"size":31.58}]}},{"selectionId":10162698,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":8.192,"lastPriceTraded":11.5,"totalMatched":1010.96,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":10.0,"size":1.62},{"price":10.5,"size":2.85},{"price":11.0,"size":169.2},{"price":11.5,"size":107.44},{"price":12.0,"size":99.21},{"price":12.5,"size":81.73},{"price":13.0,"size":149.79},{"price":13.5,"size":106.33},{"price":14.0,"size":62.17},{"price":14.5,"size":80.89},{"price":15.0,"size":13.08},{"price":15.5,"size":59.54},{"price":16.0,"size":16.43},{"price":17.0,"size":16.27},{"price":17.5,"size":9.7},{"price":18.0,"size":23.94},{"price":18.5,"size":6.19},{"price":19.0,"size":2.4},{"price":20.0,"size":2.1}]}},{"selectionId":10110482,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":5.31,"lastPriceTraded":21.0,"totalMatched":179.73,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":15.5,"size":1.72},{"price":16.0,"size":6.29},{"price":16.5,"size":18.05},{"price":17.0,"size":12.5},{"price":17.5,"size":21.0},{"price":18.0,"size":5.3},{"price":18.5,"size":6.29},{"price":19.0,"size":42.87},{"price":19.5,"size":31.56},{"price":21.0,"size":13.15},{"price":22.0,"size":6.29},{"price":24.0,"size":13.63},{"price":25.0,"size":1.02}]}},{"selectionId":335819,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":3.084,"lastPriceTraded":34.0,"totalMatched":59.67,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":16.0,"size":15.64},{"price":20.0,"size":12.14},{"price":21.0,"size":3.51},{"price":24.0,"size":0.03},{"price":25.0,"size":1.19},{"price":27.0,"size":2.09},{"price":29.0,"size":12.78},{"price":30.0,"size":10.45},{"price":32.0,"size":0.9},{"price":34.0,"size":0.87}]}},{"selectionId":10139608,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":1.437,"lastPriceTraded":75.0,"totalMatched":35.29,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":36.0,"size":5.48},{"price":38.0,"size":0.78},{"price":40.0,"size":9.39},{"price":55.0,"size":0.78},{"price":60.0,"size":15.95},{"price":65.0,"size":2.5},{"price":75.0,"size":0.4}]}},{"selectionId":10162700,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":1.205,"lastPriceTraded":85.0,"totalMatched":43.02,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":28.0,"size":6.27},{"price":32.0,"size":2.81},{"price":34.0,"size":0.87},{"price":36.0,"size":6.26},{"price":44.0,"size":5.57},{"price":50.0,"size":12.51},{"price":55.0,"size":0.53},{"price":60.0,"size":1.56},{"price":85.0,"size":6.26},{"price":90.0,"size":0.34}]}},{"selectionId":9834085,"handicap":0.0,"status":"ACTIVE","adjustmentFactor":0.33,"lastPriceTraded":120.0,"totalMatched":106.52,"ex":{"availableToBack":[],"availableToLay":[],"tradedVolume":[{"price":65.0,"size":3.52},{"price":70.0,"size":8.41},{"price":75.0,"size":6.26},{"price":95.0,"size":2.1},{"price":110.0,"size":36.68},{"price":120.0,"size":15.15},{"price":160.0,"size":20.34},{"price":190.0,"size":14.03}]}}]}],"id":1}

#19 OFFLINE   santjay

    Новичок


  • Участник
  • Пип
  • 13 сообщения
0

Добавлено 31 October 2019 - 10:33

Спасибо, буду пробовать.

#20 OFFLINE   santjay

    Новичок


  • Участник
  • Пип
  • 13 сообщения
0

Добавлено 31 October 2019 - 19:39

СообщенияЬ2ек2ерег, on 31 October 2019 - 09:01, сказал:


затем идет запрос на EX_TRADED и ответ

То есть сначала EX_BEST_OFFERS нужно запросить а потом EX_TRADED или вместо EX_BEST_OFFERS ?