Задержка вывода стакана

Задержка вывода стакана
Atom
3/12/2010
Tauler


Здравствуйте. Скажите - а стакан выводится в событии ITrader.QuotesChanged с какойто заданной частотой или при любом изменении стакана? Я спрашиваю потому , что у меня стакан отображается с небольшой задержкой.на полсекунды отстает от квика. паралельно бид и аск из таблицы Инструменты появляются в тот же момент.


Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 3/12/2010
Reply


при любом изменении стакана... отображение тоже кушает время. по одному этмоу факту мерять бесполезно (робот то все равно не считывает визуальные данные). Посмотрите, с какой скоростью вызывается сам QuotesChanged. Если одновременно, просто оптимизируйте отображение стакана.

Thanks:

Tauler

Avatar
Date: 3/12/2010
Reply


Да я уж не стакан отображаю, а просто BestBid вывожу в TextEdit. все равно задержка.

Делаю это так (.NET 2.0 стиль)

internal delegate void SetString(string str);

private SetString setStakanBid

public Form1() { InitializeComponent(); ... setStakanBid = setStakanBestBid; } void setStakanBestBid(string bid) private void Form1_Load(object sender, EventArgs e) { ..... waitHandle.WaitOne(); waitHandle.Close();

       trader.SecuritiesChanged += new

Action<IEnumerable>(trader_SecuritiesChanged); trader.QuotesChanged += new Action(trader_QuotesChanged); }

void trader_QuotesChanged(MarketDepth obj) { if (obj.Security.Code == "LKOH") { if (edtStakanBestBid.InvokeRequired) edtStakanBestBid.BeginInvoke(setStakanBid, new object[] { obj.BestBid.Price.ToString() }); } }

вроде особых накладных расходов не должно быть, но задержки все равно наблюдаются.

а бид/аск из Инстроментов момент в момент выводятся.

Хотя ниже я в одной тееме прочитал что юзать MarketDepth предпочтительнее и быстрее...

Thanks:

Mikhail Sukhov

Avatar
Date: 3/12/2010
Reply


Ага, теперь видно. Смотрите на код:

edtStakanBestBid.BeginInvoke(setStakanBid, new object[] { obj.BestBid.Price.ToString() });

Он говорит, что обновление поля будет не мгновенно, а поставиться в очередь с другими windows событиями... Поэтому лучше проверять через консольное приложение. Там никаких синхронизаций нет. Появилось событие - вывелось в Console.WriteLine

Thanks:

Tauler

Avatar
Date: 3/12/2010
Reply


Хм, щас попробую. я уже думал об этом, просто в консоли неудобно наблюдать...

Thanks:

Tauler

Avatar
Date: 3/12/2010
Reply


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

вот код

{

trader.StartDde(lkoh);

trader.QuotesChanged += new Action(trader_QuotesChanged); waitHandle.WaitOne();

static void trader_QuotesChanged(MarketDepth obj) { if (obj.Security.Code == "LKOH") Console.WriteLine(obj.BestBid.Price.ToString());

на глаз видно, что ктоировки изменились несколько раз в стакане, а бестБид в консоль один раз выскочил

Thanks:

Tauler

Avatar
Date: 3/12/2010
Reply


Может я стакан как то не так получаю?

Thanks:

Mikhail Sukhov

Avatar
Date: 3/12/2010
Reply


Все правильно. Посмотрю позднее.

Thanks:

Tauler

Avatar
Date: 3/12/2010
Reply


Вопрос решился сам собой путем прописывания в info.ini [excel] price-timeout=10

Thanks:

Mikhail Sukhov

Avatar
Date: 3/12/2010
Reply


Ага, документацию не до конца читаете!

Thanks:

Tauler

Avatar
Date: 3/12/2010
Reply


Да просто забыл об этом. этот же пункт сначала документации, а на этапе написания вывода стакана об этом уже и не помнилось. так что не "не до конца читаете", а "не с начала" :) попутно возник вопрос.

как лучше сакан слушать - подписаться на событие trader.QuotesChanged или получить объект класса MarketDepth, и подписаться на его событие Changed? и вопрос 2 - а нафига метод ITrader..::.RegisterQuotes метод, если есть GetMarketDepth?

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy