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


- - - - -

listCurrentOrders помогите с реализацией


27 ответов в эту тему

#1 OFFLINE   maxspeed

    Специалист


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

Добавлено 21 April 2015 - 06:48

PLS помогите на c#
вызвать listCurrentOrders
без параметров не получается
нужно просто получить список всех ставок
спасибо

#2 OFFLINE   maxspeed

    Специалист


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

Добавлено 21 April 2015 - 07:12

ISet<OrderBy> orderBy = new HashSet<OrderBy>();//{OrderBy.BY_MARKET};
orderBy.Add(OrderBy.BY_MARKET);
var listcurrentorders = client.listCurrentOrders(null,null,orderBy) ;

не работает

#3 OFFLINE   denvb

    Специалист


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

Добавлено 21 April 2015 - 13:18

Сообщенияmaxspeed, on 21 April 2015 - 07:12, сказал:

не работает
что говорит?

не могу понять, что означает этот ваш паттерн
client.listCurrentOrders(null,null,orderBy);

1. как он накладывается на спецификацию ?
2. и разве не ругается, что вы подсовываете набор (Set) вместо одного OrderBy ?

#4 OFFLINE   Brain

    Пунтер


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

Добавлено 21 April 2015 - 13:53

Сообщенияmaxspeed, on 21 April 2015 - 06:48, сказал:

PLS помогите на c#
вызвать listCurrentOrders
без параметров не получается
нужно просто получить список всех ставок
спасибо

вот такой запрос нужно передать
mRequest = "{""jsonrpc"": ""2.0"",""method"":""SportsAPING/v1.0/listCurrentOrders"",""params"": {""marketIds"":[""" & mMarketId & " ""],""orderProjection"":""ALL"",""dateRange"":{}}, ""id"": 1}"
чтобы получить ответ в виде списка всех ставок, где mMarketId - MarketID нужного рынка

#5 OFFLINE   Brain

    Пунтер


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

Добавлено 21 April 2015 - 14:18

соответственно на вашем языке будет
client.listCurrentOrders(null,marketId,null);
если придерживаться этому описанию класса https://github.com/j...irClientSync.cs

Отредактировано Brain, 21 April 2015 - 14:19.


#6 OFFLINE   maxspeed

    Специалист


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

Добавлено 21 April 2015 - 16:55

marketId это если я уже знаю какой конкретно рынок меня интересует
задача вызвав listCurrentOrders узнать какие ставки на данный момент у меня есть
если вызываю с 8-ю параметрами Null то выдает все ставки но хотелось отсортировать по рынку

#7 OFFLINE   Brain

    Пунтер


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

Добавлено 21 April 2015 - 19:03

неверно сформулировали вопрос тогда с первого поста

Цитата

PLS помогите на c#
вызвать listCurrentOrders
без параметров не получается
нужно просто получить список всех ставок
спасибо

Цитата

если вызываю с 8-ю параметрами Null то выдает все ставки но хотелось отсортировать по рынку




Цитата

но хотелось отсортировать по рынку
чтобы отсортировать по рынку так и так необходим marketId


отсортировать вы можете ответ сервиса по следующим параметрам:
BY_BET
@Deprecated Use BY_PLACE_TIME instead. Order by placed time, then bet id.
BY_MARKET
Order by market id, then placed time, then bet id.
BY_MATCH_TIME
Order by time of last matched fragment (if any), then placed time, then bet id. Filters out orders which have no matched date. The dateRange filter (if specified) is applied to the matched date.
BY_PLACE_TIME
Order by placed time, then bet id. This is an alias of to be deprecated BY_BET. The dateRange filter (if specified) is applied to the placed date.
BY_SETTLED_TIME
Order by time of last settled fragment (if any due to partial market settlement), then by last match time, then placed time, then bet id. Filters out orders which have not been settled. The dateRange filter (if specified) is applied to the settled date.
BY_VOID_TIME
Order by time of last voided fragment (if any), then by last match time, then placed time, then bet id. Filters out orders which have not been voided. The dateRange filter (if specified) is applied to the voided date.


по времени размещения ставки, по времени сматчивания, по рынку и т.д.


Сообщенияdenvb, on 21 April 2015 - 13:18, сказал:

2. и разве не ругается, что вы подсовываете набор (Set) вместо одного OrderBy ?
попробуйте подсунуть только одну строковую переменную BY_MARKET

#8 OFFLINE   maxspeed

    Специалист


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

Добавлено 21 April 2015 - 20:39

да неправильно выразился
надо ответ сервиса отсортировать по рынку

CurrentOrderSummaryReport listCurrentOrders(ISet<String> betIds, ISet<String> marketIds, OrderProjection? orderProjection = null, TimeRange placedDateRange = null, OrderBy? orderBy = null, SortDir? sortDir = null, int? fromRecord = null, int? recordCount = null);
вот что в объявлении
не пойму какие аргументы обязательные а какие можно пропустить

#9 OFFLINE   Brain

    Пунтер


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

Добавлено 21 April 2015 - 21:01

Сообщенияmaxspeed, on 21 April 2015 - 20:39, сказал:

да неправильно выразился
надо ответ сервиса отсортировать по рынку

CurrentOrderSummaryReport listCurrentOrders(ISet<String> betIds, ISet<String> marketIds, OrderProjection? orderProjection = null, TimeRange placedDateRange = null, OrderBy? orderBy = null, SortDir? sortDir = null, int? fromRecord = null, int? recordCount = null);
вот что в объявлении
не пойму какие аргументы обязательные а какие можно пропустить
поочередно:
null, null, ALL, null, BY_MARKET, null, 0, 100

#10 OFFLINE   maxspeed

    Специалист


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

Добавлено 21 April 2015 - 21:38

var listcurrentorders = client.listCurrentOrders(new HashSet<string>(){"ALL"},new HashSet<string> (){"BY_MARKET"});
вот попробовал выдает:
You supplied one or more malformed bet IDs. Bet IDs are of the form "<exchangeId>:<betId>" where both the exchange ID and the bet ID parts are non-negative integers

СообщенияBrain, on 21 April 2015 - 21:01, сказал:

поочередно:
null, null, ALL, null, BY_MARKET, null, 0, 100
c# не пропускает такую конструкцию
var listcurrentorders = client.listCurrentOrders(new HashSet<string>(){"ALL"},new HashSet<string> (){"BY_MARKET"});
эту пропускает но при выполнении ошибка
You supplied one or more malformed bet IDs. Bet IDs are of the form "<exchangeId>:<betId>" where both the exchange ID and the bet ID parts are non-negative integers

а вот так получилось:
var listcurrentorders = client.listCurrentOrders(null, null,OrderProjection.ALL, null, OrderBy.BY_MARKET, null, 0, 100);
спасибо большое за помощь

#11 OFFLINE   maxspeed

    Специалист


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

Добавлено 23 April 2015 - 02:12

еще проблема:
при обработке результата с помощью foreach
Ошибка 5 Оператор foreach не может использоваться для переменных типа "SearchMarket.TO.CurrentOrderSummaryReport", так как "SearchMarket.TO.CurrentOrderSummaryReport" не содержит открытого определения для "GetEnumerator"

#12 OFFLINE   Brain

    Пунтер


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

Добавлено 23 April 2015 - 06:41

Сообщенияmaxspeed, on 23 April 2015 - 02:12, сказал:

еще проблема:
при обработке результата с помощью foreach
Ошибка 5 Оператор foreach не может использоваться для переменных типа "SearchMarket.TO.CurrentOrderSummaryReport", так как "SearchMarket.TO.CurrentOrderSummaryReport" не содержит открытого определения для "GetEnumerator"
foreach служит для итерации по элементам массива или любой перечислимой коллекции.
CurrentOrderSummaryReport у вас класс, не может "перебраться" этим оператором.


Снова неверно вопрос задан)
Скорее всего обрабатываете вы какой-то список(массив)

Проверте в цикле foreach ,верно ли объявляются переменные списка которые хотите обработать
https://msdn.microso...y/bb383973.aspx

или подкорректировать foreach
или используйте for

www.dotnetperls.com/list

Отредактировано Brain, 23 April 2015 - 06:42.


#13 OFFLINE   Brain

    Пунтер


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

Добавлено 23 April 2015 - 07:12

немного теории

отправив серверу listCurrentOrders (проблема выше была) - вы дали запрос бирже, - "дай ка мне список ставок, отсортированных по marketid"
listCurrentOrders классами формирует верный запрос в строку в формате json и отправляет тудысь, что-то вроде:


[{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listCurrentOrders", "params": {"marketIds":["1.117020524"],"orderProjection":"ALL","dateRange":{}}, "id": 1}]


Биржа говорит - "на те список", и присылает ответ одной длинной срокой в формате json, соответсвеннно вашему запросу


[{"jsonrpc":"2.0","result":{"currentOrders":[{"betId":"45496907354","marketId":"1.117020524","selectionId":9170340,"handicap":0.0,"priceSize":{"price":10.0,"size":5.0},"bspLiability":0.0,"side":"BACK","status":"EXECUTABLE","persistenceType":"LAPSE","orderType":"LIMIT","placedDate":"2015-01-22T13:01:53.000Z","averagePriceMatched":0.0,"sizeMatched":0.0,"sizeRemaining":5.0,"sizeLapsed":0.0,"sizeCancelled":0.0,"sizeVoided":0.0,"regulatorCode":"GIBRALTAR REGULATOR"}],"moreAvailable":false},"id":1}]

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


все остальное это классы вашего "движка" по обработке запросов и ответов.
тут уже идет изучение языка C#, как правильно подсунуть переменные и обработать ответ.

в синтаксисе шарпа я не понимаю, поэтому подсказать не могу, для себя писал на php с нуля
будем изучать шарп вместе, пригодится)

Отредактировано Brain, 23 April 2015 - 07:15.


#14 OFFLINE   denvb

    Специалист


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

Добавлено 23 April 2015 - 09:44

Сообщенияmaxspeed, on 23 April 2015 - 02:12, сказал:

еще проблема:
при обработке результата с помощью foreach
Ошибка 5 Оператор foreach не может использоваться для переменных типа "SearchMarket.TO.CurrentOrderSummaryReport", так как "SearchMarket.TO.CurrentOrderSummaryReport" не содержит открытого определения для "GetEnumerator"
предположу, что вы пытаетесь итерировать сразу по CurrentOrderSummaryReport, а надо по списку, который он содержит, т.е. как-то так

CurrentOrderSummaryReport result = listCurrentOrders(bla-bla-bla);
foreach (CurrentOrderSummary order in result.currentOrders)
{
	Console.WriteLine(order);
}

не знаю как у вас сделан доступ к полю класса, может result.currentOrders или result.currentOrders() или result.getCurrentOrders() или ещё как, это во второй строчке подправите если надо

#15 OFFLINE   maxspeed

    Специалист


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

Добавлено 23 April 2015 - 11:06

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

#16 OFFLINE   denvb

    Специалист


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

Добавлено 23 April 2015 - 11:55

Сообщенияmaxspeed, on 23 April 2015 - 11:06, сказал:

как связать матчи со ставками которые сделаны?
например, запросить рынки у listMarketCatalogue и сопоставлять по marketId

#17 OFFLINE   maxspeed

    Специалист


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

Добавлено 23 April 2015 - 15:38

сделать сначала listCurrentOrders потом listMarketCatalogue
и выбрать из listMarketCatalogue те marketId которые содержаться в ListCurrentOrders?

это лучше сделать через LINQ?
если это не будет наглостью можно пример через LINQ?

#18 OFFLINE   Brain

    Пунтер


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

Добавлено 23 April 2015 - 15:56

Сообщенияmaxspeed, on 23 April 2015 - 15:38, сказал:

сделать сначала listCurrentOrders потом listMarketCatalogue
и выбрать из listMarketCatalogue те marketId которые содержаться в ListCurrentOrders?

без разницы в каком порядке.
получаете одним запросом listMarketCatalogue - массив рынков, в нем будут названия матчей, время начала, и marketid для каждого рынка и т.д.

далее получаете запросом список ставок через ListCurrentOrders

будете иметь два массива (списка)

Далее перебираете оба списка циклом for. Где в первом и втором списке совпадают marketid, там и будет соответсвие названия матча и ваших ставок

#19 OFFLINE   maxspeed

    Специалист


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

Добавлено 23 April 2015 - 16:02

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

#20 OFFLINE   Brain

    Пунтер


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

Добавлено 23 April 2015 - 16:08

Сообщенияmaxspeed, on 23 April 2015 - 15:38, сказал:

это лучше сделать через LINQ?
если это не будет наглостью можно пример через LINQ?

линк штука классная, но в данном случае проще сделать два цикла вложенных чтобы решить эту задачу.


синстаксисом не владею, код такой

есть:
список MarketCatalogue
список CurrentOrders

foreach (var currentOrder in CurrentOrders) {
   foreach (var Market in MarketCatalogue) {

	  ЕСЛИ Market.marketId = currentOrder.marketId ТО вывод в таблицу Market.НАЗВАНИЕ РЫНКА + currentOrder.ВРЕМЯ СТАВКИ (итд)

  }
}


вот этот говнокод переделайте под себя и будет работать

Отредактировано Brain, 23 April 2015 - 16:09.