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


* * * * * 1 голосов

Betfair API-NG, тонкости


256 ответов в эту тему

#101 OFFLINE   Артений

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


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

Добавлено 03 August 2015 - 13:22

Сообщенияmaxspeed, on 03 August 2015 - 09:25, сказал:

может кто сталкивался
делаю запрос listmarketbook по определенному market_id
пытаюсь получить ExchangePrices AvailableToBack и AvailableToLay
иногда возвращает пусто back либо lay
хотя на сайте есть кэф
А что за рынок, не AH случаем? С ними да, наблюдаются странности подобного рода (цены пропадают постоянно и тут же появляются снова)

#102 OFFLINE   maxspeed

    Специалист


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

Добавлено 03 August 2015 - 16:57

нет тоталы 2.5 3.5

#103 OFFLINE   bardmauzer

    Специалист


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

Добавлено 04 August 2015 - 22:08

Сообщенияmaxspeed, on 03 August 2015 - 09:25, сказал:

может кто сталкивался
делаю запрос listmarketbook по определенному market_id
пытаюсь получить ExchangePrices AvailableToBack и AvailableToLay
иногда возвращает пусто back либо lay
хотя на сайте есть кэф

Может быть,что ты в запросе не указываешь получение виртуальных цен.Тогда у тебя получается пустая ячейка,так как там реально нет денег.А на сайте всегда показывает виртуальную цену.В запросе listMarketBook при заполнении PriceProjection ,поле virtualise став в true.

#104 OFFLINE   maxspeed

    Специалист


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

Добавлено 05 August 2015 - 07:43

я понял

Сообщенияbardmauzer, on 04 August 2015 - 22:08, сказал:

Может быть,что ты в запросе не указываешь получение виртуальных цен.Тогда у тебя получается пустая ячейка,так как там реально нет денег.А на сайте всегда показывает виртуальную цену.В запросе listMarketBook при заполнении PriceProjection ,поле virtualise став в true.
я понял а как сделать так чтобы в запросе просто не выдавал пустые ячейки?
и еще вопрос
кто каким сервисом или api пользуется для текущего счета времени матча?

#105 OFFLINE   bardmauzer

    Специалист


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

Добавлено 05 August 2015 - 08:24

Сообщенияmaxspeed, on 05 August 2015 - 07:43, сказал:

я понял
я понял а как сделать так чтобы в запросе просто не выдавал пустые ячейки?
и еще вопрос
кто каким сервисом или api пользуется для текущего счета времени матча?

Ну я же не знаю,как ты делаешь запросы.В строке это будет так:

"priceProjection" : { "virtualise" : "true" }

Отредактировано bardmauzer, 05 August 2015 - 08:27.


#106 OFFLINE   maxspeed

    Специалист


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

Добавлено 05 August 2015 - 19:10

Сообщенияbardmauzer, on 05 August 2015 - 08:24, сказал:

Ну я же не знаю,как ты делаешь запросы.В строке это будет так:

"priceProjection" : { "virtualise" : "true" }
про virualise я понял
но мне нужны реальные кэфы
и если их нет то чтобы в результате не было пустых ячеек

#107 OFFLINE   maxspeed

    Специалист


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

Добавлено 05 August 2015 - 19:41

Сообщенияmaxspeed, on 05 August 2015 - 19:10, сказал:

про virualise я понял
но мне нужны реальные кэфы
и если их нет то чтобы в результате не было пустых ячеек
или может вопрос по другому как избежать ошибки nullreference
при получении ExchangePrice как правильно его обработать?

#108 OFFLINE   bardmauzer

    Специалист


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

Добавлено 05 August 2015 - 22:42

Сообщенияmaxspeed, on 05 August 2015 - 19:41, сказал:

или может вопрос по другому как избежать ошибки nullreference
при получении ExchangePrice как правильно его обработать?

Не понимаю,почему ты отказываешься от виртуальных цен.Решить думаю можно так:

try
{
//Здесь код выполнения программы
}
catch(NullReferenceException e)
{
//Здесь то,что ты собираешься делать при ошибки.А еще лучше в скобках указать вместо NullReferenceException , просто Exception.Тогда все ошибки выполнения программы будешь вылавливать
}

Отредактировано bardmauzer, 05 August 2015 - 22:43.


#109 OFFLINE   maxspeed

    Специалист


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

Добавлено 06 August 2015 - 09:02

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

#110 OFFLINE   bardmauzer

    Специалист


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

Добавлено 06 August 2015 - 15:34

Сообщенияmaxspeed, on 06 August 2015 - 09:02, сказал:

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

Взять ты его сможешь без проблем.Вот на примере тб и тм.Когда ты берешь бэк тб,то это все равно,что ты берешь лей тм.Вот когда нет предложений, на бэк тб,то БФ тебе подсовывает лей тм.Это и называется виртуальные ставки.А торговля по этому принципу называется кроссматчинг.А еще виртуальные ставки позволяют тебе заключать пари по более выгодным ценам.Например на бэк тб лежат 100 евро.На лей тм лежат 200 евро.Ты хочешь поставить 300 евро на бэк тб.Так вот,без виртуальной цены,ты возмешь 100 евро,которые лежат на бэк тб,а остальные 200 будут ждать,когда появится желающий у тебя их взять.А с виртуальной ценой ты возмешь 100 евро с клетки бэк тб и двести с лей тм.А если ты соберешься ставить на бэк по цене чуть ниже предложенной,то без виртуальной цены вообще жопа.Будешь брать всегда заниженный бэк,даже не смотря на то,что будут иметься более выгодные цены на лей.
Что касается исключения.Ты от этого не избавишься.По любому надо его ловить и там,где ссылка указывает на null,подставлять нужное тебе значение.То есть,если поле double ,то значение 0.00.Хотя я же не заню как ты обрабатываешь строку ответа.Покажи что-ли кусочек кода.И что за компонент ты используешь для визуального отображения кефоф?

Отредактировано bardmauzer, 06 August 2015 - 15:35.


#111 OFFLINE   denvb

    Специалист


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

Добавлено 06 August 2015 - 15:59

Сообщенияbardmauzer, on 06 August 2015 - 15:34, сказал:

Взять ты его сможешь без проблем....А еще виртуальные ставки позволяют тебе заключать пари по более выгодным ценам.
да ладно!! инфа 100% и есть пруф???

Только удивительно, почему БФ сделал эти чудесные виртуальные цены опцией? Ведь, если всё так, то ни один нормальный чел не захочет и смотреть на не виртуальные цифры, логично же?

Как уже писали, на сайте цены всегда виртуальные. Да только смысл этих виртуальных цен - нарисовать ликвидность там, где её нет в реальности. Ты видишь 100 баксов на кэфе, ставишь и... а ставка не матчится, и 100 баксов продолжают висеть. Потом чужой бот увидит - о, кто-то пихнул живую сумму, мне подходит, беру. В этом и смысл

#112 OFFLINE   BotBeetle

    Специалист


  • Участник II
  • ПипПипПипПип
  • 589 сообщения
262
  • МестоположениеМинск, Беларусь

Добавлено 06 August 2015 - 16:09

Сообщенияdenvb, on 06 August 2015 - 15:59, сказал:

да ладно!! инфа 100% и есть пруф???

https://api.develope...ni/Virtual+Bets

#113 OFFLINE   bardmauzer

    Специалист


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

Добавлено 06 August 2015 - 17:37

Сообщенияdenvb, on 06 August 2015 - 15:59, сказал:

да ладно!! инфа 100% и есть пруф???

Только удивительно, почему БФ сделал эти чудесные виртуальные цены опцией? Ведь, если всё так, то ни один нормальный чел не захочет и смотреть на не виртуальные цифры, логично же?

Как уже писали, на сайте цены всегда виртуальные. Да только смысл этих виртуальных цен - нарисовать ликвидность там, где её нет в реальности. Ты видишь 100 баксов на кэфе, ставишь и... а ставка не матчится, и 100 баксов продолжают висеть. Потом чужой бот увидит - о, кто-то пихнул живую сумму, мне подходит, беру. В этом и смысл

BotBeetle меня опередил

Если БФ таким образом (рисуя ликвидность,там где ее нет) заманивает людей на рынок,то пожалуйста объясни,почему существуют рынки с ликвидностью всего 300 евро и огромным спредом?БФ выборочно рисует кефы?Или они сраными 300 еврами пытаются заманить миллионы?

Отредактировано bardmauzer, 06 August 2015 - 17:38.


#114 OFFLINE   denvb

    Специалист


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

Добавлено 07 August 2015 - 07:52

Ребят, не хочу спорить, тем более задаваться разумностью, цитирую ссылку - ставить очень большую сумму за 1,01 (там и кэф 5 невыгоден).

Просто задайтесь вопросами:
1. почему виртуальные цены - опция?
2. что вам это даст, как повлияет на ставку? в placeOrders никаких virtualise нет

Я остаюсь при мнении, что виртуальные кэфы рисуются на слабых рынках, чтобы сориентировать человека куда лучше пихаться, где вероятней найти пару

Сообщенияbardmauzer, on 06 August 2015 - 17:37, сказал:

БФ выборочно рисует кефы?
не вижу ничего странного, что разные рынки рисуются по разному

#115 OFFLINE   maxspeed

    Специалист


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

Добавлено 08 August 2015 - 07:23

подскажите новичку как правильно вызвать keep alive в c# в API-NG?

#116 OFFLINE   bardmauzer

    Специалист


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

Добавлено 08 August 2015 - 08:26

Сообщенияmaxspeed, on 08 August 2015 - 07:23, сказал:

подскажите новичку как правильно вызвать keep alive в c# в API-NG?

Вариант первый:

public void KeepAlive(string SessToken, string AppKey = "")
{
string Url = " https://identitysso.betfair.com/api/keepAlive";
WebRequest request = null;
WebResponse response = null;
string strResponseStatus = "";
try {
request = WebRequest.Create(new Uri(Url));
request.Method = "POST";
request.ContentType = "application/json-rpc";
request.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-1,utf-8");
request.Headers.Add("X-Authentication", SessToken);
if (!string.IsNullOrEmpty(AppKey)) {
request.Headers.Add("X-Application", AppKey);
}
//~~> Get the response.
response = request.GetResponse();
//~~> Display the status below
strResponseStatus = "Status is " + ((HttpWebResponse)response).StatusDescription;
} catch (Exception ex) {
Interaction.MsgBox("CreateRequest Error" + Constants.vbCrLf + ex.Message);
}
Interaction.MsgBox(strResponseStatus);
//~~~Clean Up
response.Close();
}

Вариант второй:

public void KeepAlive2(string SessToken, string AppKey)
{
string Url = "https://identitysso.betfair.com/api/keepAlive";
System.Net.HttpWebRequest request = null;
System.Net.HttpWebResponse response = null;
string strResponseContent = "";
try
{
request = System.Net.HttpWebRequest.Create(new Uri(Url));
request.Accept = "application/json"; // Tells API-NG to respond in Json not Html
request.Method = "POST";
request.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-1,utf-8");
request.Headers.Add("X-Authentication", SessToken);
if (!string.IsNullOrEmpty(AppKey)) equest.Headers.Add("X-Application", AppKey);
// Get the response using io stream
using (System.Net.HttpWebResponse wr = request.GetResponse())
{
using (System.Io.StreamReader sr = new System.Io.StreamReader(wr.GetResponseStream()))
{
strResponseContent = sr.ReadToEnd().ToString;
sr.Close();
}
wr.Close();
}
Console.WriteLine(strResponseContent);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + Environment.NewLine + ex.Message);
}
// Expect to print out {"token":"4bnwldH;gf+jemndUIjmndGbCc=","product":"Your Product ID","status":"SUCCESS","error":""}
}

и вот ссылка:

forum.bdp.betfair.com/showthread.php?p=9036

Отредактировано bardmauzer, 08 August 2015 - 08:27.


#117 OFFLINE   maxspeed

    Специалист


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

Добавлено 08 August 2015 - 08:59

а кто-то проверял этот код?
у меня и первый и второй вариант вызывает кучу ошибок еще до компиляции
куда лучше поместить и как вызывать?

например
request = System.Net.HttpWebRequest.Create(new Uri(Url));
Severity Code Description Project File Line
Error CS0266 Cannot implicitly convert type 'System.Net.WebRequest' to 'System.Net.HttpWebRequest'. An explicit conversion exists (are you missing a cast?) SearchMarket C:\Users\maxspeed1976\Dropbox\SearchMarket2\Form1.cs 981

using (System.Net.HttpWebResponse wr = request.GetResponse())
Severity Code Description Project File Line
Error CS0266 Cannot implicitly convert type 'System.Net.WebResponse' to 'System.Net.HttpWebResponse'. An explicit conversion exists (are you missing a cast?) SearchMarket C:\Users\maxspeed1976\Dropbox\SearchMarket2\Form1.cs 989

catch (Exception ex)
Severity Code Description Project File Line
Error CS0104 'Exception' is an ambiguous reference between 'SearchMarket.TO.Exception' and 'System.Exception' SearchMarket C:\Users\maxspeed1976\Dropbox\SearchMarket2\Form1.cs 1000

#118 OFFLINE   bardmauzer

    Специалист


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

Добавлено 08 August 2015 - 11:15

Блин,ну у меня уже слов не хватает.Ну конечно же не надо все тупо копировать!Это же общий пример.Каждый разрабатывает программу по своему и у каждого ошибки будут разными.
Вместо этого :

request = WebRequest.Create(new Uri(Url));

Надо это:

request = (HttpWebRequest)WebRequest.Create(new Uri(Url));

В этом уже какая-то твоя ошибка:

catch (Exception ex)
Severity Code Description Project File Line
Error CS0104 'Exception' is an ambiguous reference between 'SearchMarket.TO.Exception' and 'System.Exception' SearchMarket C:\Users\maxspeed1976\Dropbox\SearchMarket2\Form1.cs 1000


Попробуй так¨

catch (System.Exception ex)

или так:

catch (SearchMarket.TO.Exception ex)

Сам keepAlive запускай в при помощи таймера,каждые 20 минут (или любое время до 4-рех часов).Запускай его,только после того ка удачно залогинелся на БФ.

Отредактировано bardmauzer, 08 August 2015 - 11:17.


#119 OFFLINE   maxspeed

    Специалист


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

Добавлено 08 August 2015 - 12:09

спасибо за помощь
извините если кого-то вывел из себя
родившиеся программистами меня простят

#120 OFFLINE   bardmauzer

    Специалист


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

Добавлено 08 August 2015 - 13:48

Сообщенияmaxspeed, on 08 August 2015 - 12:09, сказал:

спасибо за помощь
извините если кого-то вывел из себя
родившиеся программистами меня простят

Да я не выхожу из себя.Просто,если собираешься писать себе программу,то надо понимать,что в программировании даже обычные вещи можно решать тысячами способов,поэтому кусочки примеров кода естественно не будут работать в конкретном проекте.Значит надо все примеры тщательно изучать и переделывать под себя.И надо выкладывать примеры своего неработающего кода,чтобы увидеть наглядно в чем проблема.На этом форуме никто вроде в помощи и советами не отказывает.Поэтому помогут без проблем.

Отредактировано bardmauzer, 08 August 2015 - 13:49.