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


* * * * * 3 голосов

Обсуждение туториалов под Betfair API


94 ответов в эту тему

#1 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 20 January 2012 - 17:13

Обсуждение темы - Туториалы по программированию под Betfair API. VB.Net

Прошу здесь писать вопросы, предложения и комментарии по этой теме.
Спасибо.

#2 OFFLINE   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 20 January 2012 - 17:22

Как раскрыть остальные рынки, кроме скачек?

#3 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 20 January 2012 - 17:57

Сообщенияvlad56, on 20 January 2012 - 17:22, сказал:

Как раскрыть остальные рынки, кроме скачек?

В 3м шаге туториалов напишу про это.

#4 Гость_Wikibet_*


  • Не Местный

Добавлено 20 January 2012 - 18:46

СообщенияJericho, on 20 January 2012 - 17:13, сказал:

Обсуждение темы - Туториалы по программированию под Betfair API. VB.Net

Прошу здесь писать вопросы, предложения и комментарии по этой теме.
Спасибо.

Отличная тема Jericho !

Буду читать ваши tutorials

#5 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 20 January 2012 - 21:46

Сообщенияvlad56, on 20 January 2012 - 17:22, сказал:

Как раскрыть остальные рынки, кроме скачек?

В туториалах частично ответил на твой вопрос, vlad56

Отредактировано Jericho, 20 January 2012 - 21:47.


#6 OFFLINE   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 21 January 2012 - 03:02

СообщенияJericho, on 20 January 2012 - 17:52, сказал:

Шаг №1. Часть №1. Подключение к сервисам BFGlobalService и BFExchangeService.

Первое, что нам пригодится для написания программы это - 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" и студия добавит в проект ссылку на сервис.
2. Добавляем в проект сервис BFExchangeService:
  • Открываем меню "Project"
  • Выбираем "Add Service Reference"
  • В текстовое поле "Address" вставляем: https://api.betfair....ngeService.wsdl
  • Нажимаем "Go". VB2010 начнет искать сервис.
  • В текстовое поле "Namespace" вместо "ServiceReference1" вводим "BFUK"
  • Нажимаем "OK" и студия добавит в проект ссылку на сервис.
После чего Solution Explorer у нас должен выглядить следующим образом:
привязанность 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   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 21 January 2012 - 10:23

Сообщенияvlad56, on 21 January 2012 - 03:02, сказал:

При добавлении ссылок на сервисы дополнение Дальше по коду с форума Betfair vb,net будут выскакивать ошибки. Правильно будет

Если по форому, то да. Там ссылки добавляются именно так как ты говоришь.
По кнопке "Advanced"(Дополнительно), студия предлогает тебе самостоятельно выбрать тип уровня для генерируемых классов(Public, Friend), тип коллекции и т.д....

Дело в том, что, после того как Студия нашла сервис, она самостоятельно генерирует огромный класс(460-470кб весом ). И вот "Advanced" - это для "настройки" генерации..

Ты же все-равно там оставляешь все по-умолчанию? Тогда смысл нажимания Дополнитльно?
Какие ошибки у тебя выскакивают?

Отредактировано Jericho, 21 January 2012 - 10:25.


#8 OFFLINE   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 21 January 2012 - 14:57

СообщенияJericho, on 21 January 2012 - 13:36, сказал:

Шаг №3. Часть №2. Получение списка рынков отдельного вида спорта

Теперь мы сможем получить все рынки биржи. Добавляем следующую процедуру в содуль:
    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   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 21 January 2012 - 15:08

Сообщенияvlad56, on 21 January 2012 - 14:57, сказал:

Это получается на каждый рынок необходимо добавлять свою процедуру в модуль. И если рынков около тридцати то необходимо столько и процедур добавлять?

Нет. Достаточно одной. Делаешь функцию. При вызове параметром указываешь какой тебе нужен:
    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   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 21 January 2012 - 15:18

СообщенияJericho, on 21 January 2012 - 10:23, сказал:

Если по форому, то да. Там ссылки добавляются именно так как ты говоришь.
По кнопке "Advanced"(Дополнительно), студия предлогает тебе самостоятельно выбрать тип уровня для генерируемых классов(Public, Friend), тип коллекции и т.д....

Дело в том, что, после того как Студия нашла сервис, она самостоятельно генерирует огромный класс(460-470кб весом ). И вот "Advanced" - это для "настройки" генерации..

Ты же все-равно там оставляешь все по-умолчанию? Тогда смысл нажимания Дополнитльно?
Какие ошибки у тебя выскакивают?
Я читал другое. Что файлы API функций делали под VS 2003. А потом с развитием VS произошли изменения в "Add Service Reference"
А чтобы можно было работать и со старыми файлами как раз и добавили эти кнопки и 2 закладки.
Первая ошибка была, это нехватка буфера, то что ты исправляешь в файле App.config:А остальные сейчас не помню. Давно было.

СообщенияJericho, on 21 January 2012 - 15:08, сказал:

Нет. Достаточно одной. Делаешь функцию. При вызове параметром указываешь какой тебе нужен:
	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   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 21 January 2012 - 15:26

Сообщенияvlad56, on 21 January 2012 - 15:18, сказал:

А почему ты для рынка футбол используешь отдельную процедуру, а не GetEvents(1)?

Немного не понял вопроса... Отдельную для футбола процедуру использую, потому-что необходим только футбол...
А если разные виды нужно, можно функцией сделать. Это творческий подход уже. Под конкретные нужды..

#12 OFFLINE   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 22 January 2012 - 17:14

А как узнать на какой кф была сделана последняя ставка и какая сумма этой ставки?

#13 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 22 January 2012 - 17:25

Сообщенияvlad56, on 22 January 2012 - 17:14, сказал:

А как узнать на какой кф была сделана последняя ставка и какая сумма этой ставки?

Если скачал исходники из темы "Закономерность для торговли на тоталах в перерыве матча. Футбол"
То в этой процедуре работы другого потока:
	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   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 23 January 2012 - 05:11

Спасибо.Очень большое дело делаешь.Первый форум в Рунете по ботам по vb net,
Еше вопрос. А как на рынке футбол получить купоны.Интересует купон Сегодня по ходу игры.

#15 OFFLINE   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 23 January 2012 - 08:53

Собрал твой исходник, немного переделал, но все рынки все равно не открываются. Как все таки открыть все рынки?

#16 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 23 January 2012 - 09:11

Сообщенияvlad56, on 23 January 2012 - 05:11, сказал:

Еше вопрос. А как на рынке футбол получить купоны.Интересует купон Сегодня по ходу игры.

Чтобы получить такой вид как в web интерфейсе:
Прикрепленный файл  019.png   23.47K   2 Количество загрузок

или такой-же как в GeeksToy:
Прикрепленный файл  018.png   34.72K   1 Количество загрузок

Алгоритм вызовов API следующий:
  • Передать в GetAllMarketsReq идентификатор спорта(футбол) и время начала и конца отбора рынков (сегодня)
  • Функцией getAllMarkets получить структуру рынков.
  • Перебрать циклом всю структуру, и отобрать те, где параметр .turningInPlay истинный (true) и .marketName(название рынка) = "Match Odds"
  • Получить в свою переменную (структуру) - .marketId (id рынка)
  • Другим циклом передать в GetMarketPricesReq переменную, хранящую .marketId (id рынка)
  • Получить через GetMarketPricesResp - .bestPricesToBack(0) и .bestPricesToLay(0) для всех подрынков (Победа1, Победа 2, Ничья)
Тем самым ты получишь список футбольных рынков на сегодня, которые пойдут в in-play и текущие коэф-ты рынка MatchOdds(Ставки)...

Более подробно в туториалах сделаю такой шаг ближе к вечеру.

Отредактировано Jericho, 23 January 2012 - 09:13.


#17 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 23 January 2012 - 09:22

Сообщенияvlad56, on 23 January 2012 - 08:53, сказал:

Собрал твой исходник, немного переделал, но все рынки все равно не открываются. Как все таки открыть все рынки?
Ты имеешь ввиду как в Шаг №3. Часть №1. Получение списка рынков?
В названии ошибся - там события должны быть...

Давайте оговоримся - Event - события - это футбол, скачки, теннис и т.д... Все, что получается через GetEventTypesResp
Market - рынок - Тоталы, Ставки... Арсенал - Челси... Все это рынки. Все, что получается через getAllMarkets

#18 OFFLINE   vlad56

    Специалист


  • Участник II
  • ПипПипПип
  • 460 сообщения
27
  • МестоположениеДнепропетровск

Добавлено 23 January 2012 - 09:33

Нет я имею в виду как в Шаг №3. Часть №2.Получение списка рынков отдельного вида спорта.

Если подскажешь как загрузить исходник, то присоединю исходник.

#19 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 23 January 2012 - 09:42

Сообщенияvlad56, on 23 January 2012 - 09:31, сказал:

Нет я имею в виду как в Шаг №3. Часть №2.Получение списка рынков отдельного вида спорта.

Т.е. ты исходники с Шаг №3. Часть №3. Исходники проекта проделанных шагов. скачал, а рынки получиь не можешь?

Перезапустил у себя - все работает...
Вот эти же исходники, версия уже с шагом №4 - Прикрепленный файл  Test_BF.zip   243.59K   23 Количество загрузок

Ты данные ввел свои в код? :)
Прикрепленный файл  015.png   8.28K   4 Количество загрузок

Сообщенияvlad56, on 23 January 2012 - 09:33, сказал:

Если подскажешь как загрузить исходник, то присоединю исходник.

Проект в .zip архивируешь... Открываешь полный редактор на форуме... В прикрепить файлы выбираешь архив.. Он загружается. Потом нажимаешь добавить в сообщение.

#20 OFFLINE   Jericho

    Иерихон


  • RSB
  • ПипПипПипПипПип
  • 2226 сообщения
859

Добавлено 23 January 2012 - 10:18

Сообщенияvlad56, on 23 January 2012 - 10:13, сказал:

Мои добавки
Тут наврядли, что разберу... Скидывай целиком..

Сообщенияvlad56, on 23 January 2012 - 10:13, сказал:

Не получается прикрепить файл. Ошибка : большой размер у меня 680к, а можно 350к,Как сделать исходник меньше?
Скопируй папку с проектом, зайди в копию и удали папки bin, obj, Service References. Они не нужны. Все остальное архивируй, получится меньше 350..

Целиком, имею ввиду архивом.... В посте глаза сломаешь смотреть...(

Отредактировано Jericho, 23 January 2012 - 10:17.