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


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


Здравствуйте. Скажите - а стакан выводится в событии
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)
{
edtStakanBestBid.Text = bid;
}
private void Form1_Load(object sender, EventArgs e)
{
.....
waitHandle.WaitOne();
waitHandle.Close();

trader.SecuritiesChanged += new
Action<IEnumerable<Security>>(trader_SecuritiesChanged);
trader.QuotesChanged += new
Action<MarketDepth>(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<MarketDepth>(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