Betfair API-NG на русском. Примеры, описание
#1 OFFLINE
Добавлено 26 February 2016 - 21:54
Обсуждение ведется Ссылка Здесь
При копировании текста темы ссылка на www.moneypunter.com/ обязательна
#2 OFFLINE
Добавлено 26 February 2016 - 22:44
Биржа Betfair дает возможность программистам иметь доступ к данным через специальный программный интерфейс, называемый API-NG для написания собственных интерфейсов рынка или автоматических программ (ботов).
Это вторая обновленная версия API, и если вы находите в сети исходники или описание так называемой Betfair API 6.0 - она уже не актуальна на сегодняшний день.
Для того чтобы обычный пользователь получил программный доступ к бирже необходимо:
- Аккаунт Betfair
- Application Key - ключ(электронный) - служит идентификатором клиента API
- 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
Добавлено 06 March 2016 - 22:12
Чтобы иметь доступ к работе с API необходим так называемый Application Key. Это уникальный электронный ключ, который является идентификатором вашего клиента(софта), который подключается к API.
Биржа дает два ключа:
- live App Key - его мы будем использовать для работы
- delayed App Key - возвращает цены с задержкой и не позволяет производить транзакции ставок (размещение ставок, отмена их и т.д.)
1. Пройти по ссылке https://myaccount.be.../accountsummary.
2. Пройти по ссылке https://developers.b...unt-operations/
3. Выбрать createDeveloperAppKeys и ввести уникальное имя вашего будущего приложения. Чтобы имя было точно уникальным - можно создать, например имя MyBot_xxxxx, где ххххх будет ваш логин к бирже.
Если все сделано верно - биржа сгенерирует вам два ключа:
Для дальнейшей работы нам понадобится ключ выделенный зеленым цветом. Сохраните его.
Если вы уже получали ключ ранее или вам необходимо его "вспомнить" делаем как выше до пункта 3, далее:
3. Выбрать getDeveloperAppKeys и нажать Execute:
Теперь мы готовы идти далее и работать с Betfair API.
Биржа генерирует ключи только для личного использования, всё коммерческое использование данных или API должно быть утверждено Betfair.
Никогда и никому не сообщайте свои логин/пароль от биржи и свой Application Key
#4 OFFLINE
Добавлено 07 March 2016 - 00:06
Сессия
Когда мы будем подключаться к API и получать сессию, она не будет жить вечно. Для .com биржи время жизни сессии = 4 часа. Чтобы продлить сессию нужно отправить запрос Keep Alive, иначе наша сессия закончится и бот просто-напросто встанет от невозможности получить ответ для не авторизованного клиента. Как послать Keep Alive рассмотрим далее.
Изменить время жизни сессии можно в аккаунте биржи по пути - > My Account > My Betfair Account > My Details > Security Settings > Logout Preferences
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
Добавлено 07 March 2016 - 20:26
Итак, ранее мы получили Application Key, и теперь для того чтобы начать работать с API нам необходимо получить сессию, то есть авторизоваться и получить токен (sessionToken)
Betfair дает возможность нам сделать это тремя способами:
1. Не интерактивный логин (Non-Interactive login) - авторизация с помощью личного сертификата, который необходимо создать и загрузить его на свой аккаунт биржи. Реализацию этого метода делал, если уж очень необходим могу показать по запросу, но нежелательно) уж много вижу росписи в этом методе что и как делать..
2. Интерактивный логин (Interactive login)
2.1. Вариант 1 - с использованием стандартной страницы ввода логина и пароля. В нашем приложении добавляется компонент веб-браузера, может быть любой или стандартный(WebControl) или сторонняя разработка (Gecko, Awesomium и т.д.). Выглядеть будет так:
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
Создадим две глобальные переменные:
И функцию которая будет производить авторизацию и возвращать sessionToken:
Вызываем функцию с кнопки:
Если все сделано верно - в режиме отладки в переменной mSsoid увидим sessionToken:
Полученную сессию можно сохранить в файл, чтобы постоянно при написании бота не авторизоваться а сразу работать с данными. Чтение/запись в файл здесь показывать не буду, в исходниках будет походу реализовано и прокомментировано. Исходники после каждого нового поста будут наполнятся до финального.
Далее мы рассмотрим функции продления сессии и выхода из логина.
BetfairNG.zip 23.02K 103 Количество загрузок
SHA256: bcec8f793d3ac49a01e022226ac72b76a07e9cd0f598e495dc04f521af8d7d00
#6 OFFLINE
Добавлено 21 March 2016 - 22:16
Переписал метод авторизации, добавил сохранение, проверку/продление сессии, функцию выхода и получение баланса. Все вызовы API сделаны в отдельных потоках. Будет некий шаблон, чтобы эти потоки можно было вызывать при необходимости не подвешивая основной поток программы.
В исходниках, в глобальном модуле необходимо ввести свой ключ, логин и пароль:
Проверить можно следующим образом..
1. Запускаем проект, нажимаем Login:
2. Получаем сессию и статус логина:
3. Можем получить баланс, Get Balance:
4. Закрываем программу на "крестик" и снова запускаем проект:
Через мгновение программа проверит сессию, и мы также можем получить баланс. Но уже не нажимая на Login, ведь сессия у нас была сохранена ранее
5. Разорвем соединение, нажав на Logout
6. Снова закроем программу на крестик и перезапустим проект.. Все, сессия уже недействительна, статус FAIL:
Далее я буду наполнять проект функционалом и некоторые теоретические моменты рассматривать подробнее.
BetfairNG.zip 55.33K 124 Количество загрузок
7.png 2.64K 22 Количество загрузок
#7 OFFLINE
Добавлено 15 June 2016 - 19:39
обязательно юзать древний visual ?
#8 OFFLINE
Добавлено 10 September 2016 - 13:58
#9 OFFLINE
Добавлено 15 September 2016 - 19:57
Expari, on 10 September 2016 - 13:58, сказал:
#10 OFFLINE
#11 OFFLINE
Добавлено 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
Добавлено 25 September 2016 - 12:32
#13 OFFLINE
Добавлено 16 January 2018 - 02:23
#14 OFFLINE
Добавлено 29 October 2019 - 20:24
Отредактировано santjay, 29 October 2019 - 20:25.
#15 OFFLINE
Добавлено 30 October 2019 - 18:21
santjay, on 29 October 2019 - 20:24, сказал:
listMarketBook
https://docs.develop.../listMarketBook
#16 OFFLINE
Добавлено 30 October 2019 - 20:36
Ь2ек2ерег, on 30 October 2019 - 18:21, сказал:
Я так понимаю, данная функция была в старом API.
Но marketbook выдает нулевой объем.
Attached File(s)
#17 OFFLINE
Добавлено 31 October 2019 - 08:35
santjay, on 30 October 2019 - 20:36, сказал:
Я так понимаю, данная функция была в старом 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
Добавлено 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
Добавлено 31 October 2019 - 10:33