•         

- - - - -

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


#1   maxspeed

    Специалист


  • Участник II
  • 508
37

21 April 2015 - 06:48

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

#2   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   denvb

    Специалист


  • Участник II
  • 382
90

21 April 2015 - 13:18

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

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

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

#4   Brain

    Пунтер


  • Участник II
  • 81
30

21 April 2015 - 13:53

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

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

#5   Brain

    Пунтер


  • Участник II
  • 81
30

21 April 2015 - 14:18

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

#6   maxspeed

    Специалист


  • Участник II
  • 508
37

21 April 2015 - 16:55

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

#7   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.


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


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

#8   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   Brain

    Пунтер


  • Участник II
  • 81
30

21 April 2015 - 21:01

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

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   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

поочередно:
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   maxspeed

    Специалист


  • Участник II
  • 508
37

23 April 2015 - 02:12

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

#12   Brain

    Пунтер


  • Участник II
  • 81
30

23 April 2015 - 06:41

еще проблема:
при обработке результата с помощью 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

#13   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 с нуля
будем изучать шарп вместе, пригодится)

#14   denvb

    Специалист


  • Участник II
  • 382
90

23 April 2015 - 09:44

еще проблема:
при обработке результата с помощью 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   maxspeed

    Специалист


  • Участник II
  • 508
37

23 April 2015 - 11:06

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

#16   denvb

    Специалист


  • Участник II
  • 382
90

23 April 2015 - 11:55

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

#17   maxspeed

    Специалист


  • Участник II
  • 508
37

23 April 2015 - 15:38

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

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

#18   Brain

    Пунтер


  • Участник II
  • 81
30

23 April 2015 - 15:56

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

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

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

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

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

#19   maxspeed

    Специалист


  • Участник II
  • 508
37

23 April 2015 - 16:02

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

#20   Brain

    Пунтер


  • Участник II
  • 81
30

23 April 2015 - 16:08

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

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


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

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

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

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

  }
}


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