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


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


Теги:


Спасибо:


1 2  >
Mikhail Sukhov

Фотография
Дата: 12.03.2010
Ответить


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

Спасибо:

Tauler

Фотография
Дата: 12.03.2010
Ответить


Да я уж не стакан отображаю, а просто 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 предпочтительнее и быстрее...

Спасибо:

Mikhail Sukhov

Фотография
Дата: 12.03.2010
Ответить


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

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

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

Спасибо:

Tauler

Фотография
Дата: 12.03.2010
Ответить


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

Спасибо:

Tauler

Фотография
Дата: 12.03.2010
Ответить


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

вот код

{

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());

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

Спасибо:

Tauler

Фотография
Дата: 12.03.2010
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Дата: 12.03.2010
Ответить


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

Спасибо:

Tauler

Фотография
Дата: 12.03.2010
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Дата: 12.03.2010
Ответить


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

Спасибо:

Tauler

Фотография
Дата: 12.03.2010
Ответить


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

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

Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy