Обсуждение туториалов под Betfair API
#1 OFFLINE
Posted 20 January 2012 - 17:13
Прошу здесь писать вопросы, предложения и комментарии по этой теме.
Спасибо.
#2 OFFLINE
Posted 20 January 2012 - 17:22
#3 OFFLINE
#4 Гость_Wikibet_*
Posted 20 January 2012 - 18:46
Jericho, on 20 January 2012 - 17:13, said:
Прошу здесь писать вопросы, предложения и комментарии по этой теме.
Спасибо.
Отличная тема Jericho !
Буду читать ваши tutorials
#5 OFFLINE
#6 OFFLINE
Posted 21 January 2012 - 03:02
Jericho, on 20 January 2012 - 17:52, said:
Первое, что нам пригодится для написания программы это - Betfair Sports Exchange Reference Guide v6 - открыть (pdf). Это справочник функций для доступа к сервисам BetFair API.
Все досконально описывать не буду, будем подразумевать, что читатель знаком с программированием и имеет общие понятия принципа типов данных и построения логики программы.
Создаем новый проект в VB2010 и выбираем шаблон "Windows Forms Application". Чтобы работать с Betfair API (далее API) и использовать функции описанные в справочнике, необходимо создать ссылки на сервисы:
1. Добавляем в проект сервис BFGlobalService:
- Открываем меню "Project"
- Выбираем "Add Service Reference"
- В текстовое поле "Address" вставляем: https://api.betfair....balService.wsdl
- Нажимаем "Go". VB2010 начнет искать сервис.
- В текстовое поле "Namespace" вместо "ServiceReference1" вводим "BFGlobal"
- Нажимаем "OK" и студия добавит в проект ссылку на сервис.
- Открываем меню "Project"
- Выбираем "Add Service Reference"
- В текстовое поле "Address" вставляем: https://api.betfair....ngeService.wsdl
- Нажимаем "Go". VB2010 начнет искать сервис.
- В текстовое поле "Namespace" вместо "ServiceReference1" вводим "BFUK"
- Нажимаем "OK" и студия добавит в проект ссылку на сервис.
006.png
Теперь мы с вами можем подключаться к бирже через API, получать рынки, делать ставки и т.д.
При добавлении ссылок на сервисы дополнение Дальше по коду с форума Betfair vb,net будут выскакивать ошибки. Правильно будет
- Открываем меню "Project"
- Выбираем "Add Service Reference" на русском "Добавить ссылку на сервис "
- В нижнем левом углу кнолка "Дополнительно"
- На следующей вкладке В нижнем левом углу кнолка"Добавить веб-ссылку"
- На вкладке "Добавить веб-ссылку" В текстовое поле "URL-Address" вставляем: https://api.betfair....balService.wsdl
- Нажимаем "Go". VB2010 начнет искать сервис.
- В текстовое поле "Namespace" вместо "ServiceReference1" вводим "BFGlobal"
- Нажимаем "OK" и студия добавит в проект ссылку на сервис.
- Аналогично и для BFExchangeService:
- Тогда дальше код уже идет без проблем.
#7 OFFLINE
Posted 21 January 2012 - 10:23
vlad56, on 21 January 2012 - 03:02, said:
Если по форому, то да. Там ссылки добавляются именно так как ты говоришь.
По кнопке "Advanced"(Дополнительно), студия предлогает тебе самостоятельно выбрать тип уровня для генерируемых классов(Public, Friend), тип коллекции и т.д....
Дело в том, что, после того как Студия нашла сервис, она самостоятельно генерирует огромный класс(460-470кб весом ). И вот "Advanced" - это для "настройки" генерации..
Ты же все-равно там оставляешь все по-умолчанию? Тогда смысл нажимания Дополнитльно?
Какие ошибки у тебя выскакивают?
Edited by Jericho, 21 January 2012 - 10:25.
#8 OFFLINE
Posted 21 January 2012 - 14:57
Jericho, on 21 January 2012 - 13:36, said:
Теперь мы сможем получить все рынки биржи. Добавляем следующую процедуру в содуль:
Public Sub GetSoccerEvents() Dim oMarketsReq As New BFUK.GetAllMarketsReq With oMarketsReq .header = oHeaderUK() ReDim .eventTypeIds(0) : .eventTypeIds(0) = 1 .fromDate = Today .toDate = Today.AddDays(1) .locale = "UK" End With With BetFairUK.getAllMarkets(oMarketsReq) CheckHeader(.header) If .errorCode = BFUK.GetAllMarketsErrorEnum.OK Then Dim AllMarkets As New UnpackAllMarkets(.marketData) Call PopulateListView(AllMarkets, frmMain.ListView1) End If End With End Sub
Здесь:
• Функцию Call PopulateListView(AllMarkets, frmMain.ListView1), которая будет заполнять элемент ListView1 деревон рынков мы рассмотрем чуть позднее.
• .eventTypeIds(0) = 1 - означает, что "выбранный спорт" - футбол
• .fromDate = Today .toDate = Today.AddDays(1) - время рынков. У нас здесь рынки на сегодня. В GeeksToy можно выбирать "Вчера, Сегодня, Завтра" и т.д... Вот именно в эти параметры и подставляется время(дата) выбора. Т.е. от такого-то числа до такого-то...
• .locale = "UK" для рынков Королевства...
_____________
Это получается на каждый рынок необходимо добавлять свою процедуру в модуль. И если рынков около тридцати то необходимо столько и процедур добавлять?
#9 OFFLINE
Posted 21 January 2012 - 15:08
vlad56, on 21 January 2012 - 14:57, said:
Нет. Достаточно одной. Делаешь функцию. При вызове параметром указываешь какой тебе нужен:
Public Function GetEvents(ByVal sport As Integer) Dim oMarketsReq As New BFUK.GetAllMarketsReq With oMarketsReq .header = oHeaderUK() ReDim .eventTypeIds(0) : .eventTypeIds(0) = sport .fromDate = Today .toDate = Today.AddDays(1) .locale = "UK" End With With BetFairUK.getAllMarkets(oMarketsReq) CheckHeader(.header) If .errorCode = BFUK.GetAllMarketsErrorEnum.OK Then Dim AllMarkets As New UnpackAllMarkets(.marketData) Call PopulateTreeView(AllMarkets, frmMain.TreeView1) End If End With End Function
Вызываешь так для скачек:
GetEvents(7)
для футбола:
GetEvents(1)
и т.д.
#10 OFFLINE
Posted 21 January 2012 - 15:18
Jericho, on 21 January 2012 - 10:23, said:
По кнопке "Advanced"(Дополнительно), студия предлогает тебе самостоятельно выбрать тип уровня для генерируемых классов(Public, Friend), тип коллекции и т.д....
Дело в том, что, после того как Студия нашла сервис, она самостоятельно генерирует огромный класс(460-470кб весом ). И вот "Advanced" - это для "настройки" генерации..
Ты же все-равно там оставляешь все по-умолчанию? Тогда смысл нажимания Дополнитльно?
Какие ошибки у тебя выскакивают?
А чтобы можно было работать и со старыми файлами как раз и добавили эти кнопки и 2 закладки.
Первая ошибка была, это нехватка буфера, то что ты исправляешь в файле App.config:А остальные сейчас не помню. Давно было.
Jericho, on 21 January 2012 - 15:08, said:
Public Function GetEvents(ByVal sport As Integer) Dim oMarketsReq As New BFUK.GetAllMarketsReq With oMarketsReq .header = oHeaderUK() ReDim .eventTypeIds(0) : .eventTypeIds(0) = sport .fromDate = Today .toDate = Today.AddDays(1) .locale = "UK" End With With BetFairUK.getAllMarkets(oMarketsReq) CheckHeader(.header) If .errorCode = BFUK.GetAllMarketsErrorEnum.OK Then Dim AllMarkets As New UnpackAllMarkets(.marketData) Call PopulateTreeView(AllMarkets, frmMain.TreeView1) End If End With End Function
Вызываешь так для скачек:
GetEvents(7)
для футбола:
GetEvents(1)
и т.д.
А почему ты для рынка футбол используешь отдельную процедуру, а не GetEvents(1)?
#11 OFFLINE
Posted 21 January 2012 - 15:26
vlad56, on 21 January 2012 - 15:18, said:
Немного не понял вопроса... Отдельную для футбола процедуру использую, потому-что необходим только футбол...
А если разные виды нужно, можно функцией сделать. Это творческий подход уже. Под конкретные нужды..
#12 OFFLINE
Posted 22 January 2012 - 17:14
#13 OFFLINE
Posted 22 January 2012 - 17:25
vlad56, on 22 January 2012 - 17:14, said:
Если скачал исходники из темы "Закономерность для торговли на тоталах в перерыве матча. Футбол"
То в этой процедуре работы другого потока:
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Dim oMarketReq As New BFUK.GetMarketPricesReq 'Create the request object Dim oMarketResp As BFUK.GetMarketPricesResp 'Create a varaible for the response object For i As Integer = 0 To UBound(mOdds) With oMarketReq .header = oHeaderUK() .marketId = mOdds(i).MarketId End With oMarketResp = BetFairUK.getMarketPrices(oMarketReq) With oMarketResp CheckHeader(.header) If .errorCode = BFUK.GetMarketPricesErrorEnum.OK Then With .marketPrices With .runnerPrices(0) With .bestPricesToBack(0) mOdds(i).b0 = .price mOdds(i).b0Amount = .amountAvailable End With mOdds(i).tAmount = .totalAmountMatched.ToString mOdds(i).SelId = .selectionId 'для vlad56 '.lastPriceMatched ''''''''''''''''''''''' End With End With End If End With System.Threading.Thread.Sleep(300) BackgroundWorker1.ReportProgress(CInt((i / (ListView1.Items.Count - 1)) * 100)) query_count = i Next End Sub
Пометил для тебя:
'для vlad56 '.lastPriceMatched '''''''''''''''''''''''
в .lastPriceMatched будет последний сматченный коэф. для рынка... сумма, незнаю... скорее всего вычесляется. Берется последняя из .totalAmountMatched и отнимается после нового сматчивания... Результат и будет число - сумма последнего купленного коэф.
#14 OFFLINE
Posted 23 January 2012 - 05:11
Еше вопрос. А как на рынке футбол получить купоны.Интересует купон Сегодня по ходу игры.
#15 OFFLINE
Posted 23 January 2012 - 08:53
#16 OFFLINE
Posted 23 January 2012 - 09:11
vlad56, on 23 January 2012 - 05:11, said:
Чтобы получить такой вид как в web интерфейсе:
019.png 23.47K 2 downloads
или такой-же как в GeeksToy:
018.png 34.72K 1 downloads
Алгоритм вызовов API следующий:
- Передать в GetAllMarketsReq идентификатор спорта(футбол) и время начала и конца отбора рынков (сегодня)
- Функцией getAllMarkets получить структуру рынков.
- Перебрать циклом всю структуру, и отобрать те, где параметр .turningInPlay истинный (true) и .marketName(название рынка) = "Match Odds"
- Получить в свою переменную (структуру) - .marketId (id рынка)
- Другим циклом передать в GetMarketPricesReq переменную, хранящую .marketId (id рынка)
- Получить через GetMarketPricesResp - .bestPricesToBack(0) и .bestPricesToLay(0) для всех подрынков (Победа1, Победа 2, Ничья)
Более подробно в туториалах сделаю такой шаг ближе к вечеру.
Edited by Jericho, 23 January 2012 - 09:13.
#17 OFFLINE
Posted 23 January 2012 - 09:22
vlad56, on 23 January 2012 - 08:53, said:
В названии ошибся - там события должны быть...
Давайте оговоримся - Event - события - это футбол, скачки, теннис и т.д... Все, что получается через GetEventTypesResp
Market - рынок - Тоталы, Ставки... Арсенал - Челси... Все это рынки. Все, что получается через getAllMarkets
#18 OFFLINE
Posted 23 January 2012 - 09:33
Если подскажешь как загрузить исходник, то присоединю исходник.
#19 OFFLINE
Posted 23 January 2012 - 09:42
vlad56, on 23 January 2012 - 09:31, said:
Т.е. ты исходники с Шаг №3. Часть №3. Исходники проекта проделанных шагов. скачал, а рынки получиь не можешь?
Перезапустил у себя - все работает...
Вот эти же исходники, версия уже с шагом №4 - Test_BF.zip 243.59K 23 downloads
Ты данные ввел свои в код?
015.png 8.28K 4 downloads
vlad56, on 23 January 2012 - 09:33, said:
Проект в .zip архивируешь... Открываешь полный редактор на форуме... В прикрепить файлы выбираешь архив.. Он загружается. Потом нажимаешь добавить в сообщение.
#20 OFFLINE
Posted 23 January 2012 - 10:18
vlad56, on 23 January 2012 - 10:13, said:
vlad56, on 23 January 2012 - 10:13, said:
Целиком, имею ввиду архивом.... В посте глаза сломаешь смотреть...(
Edited by Jericho, 23 January 2012 - 10:17.