Беда с GetMarketDepth
Atom Reply
6/24/2010


Здравствуйте. такая проблема с GetMarketDepth . есть код

private void button1_Click_1(object sender, EventArgs e)
{
btnStartVolumeMeter.Enabled = false;
edtMarketDepthAfter.Items.Clear();
edtMarketDepthBefore.Items.Clear();
code = edtAssetCode.Text;

trader.NewTrades += trader_NewTrades;
dealsList.Clear();

}

void trader_NewTrades(IEnumerable<Trade> obj)
{
List<DealContainer> list2 = new List<DealContainer>();
if (obj.Count() == 1)
if (obj.First().Security.Code == code)
{
MarketDepth md = trader.GetMarketDepth(sec);

и так далее

проблеиа в том, что md всегда один и тот же - тот что был в момент
первго вызова trader_NewTrades.

запскаю шлюз так.
try
{
btnConnectToQuik.Enabled = false;
if (trader == null)
trader = new QuikTrader(edtPathToQuik.Text);
if (!trader.IsConnected)
trader.Connect();
if (trader.IsConnected)
addToLog("Подключился");
((QuikTrader)trader).StartDde(new[]
{ ((QuikTrader)trader).TradesTable,
((QuikTrader)trader).SecuritiesTable});
sec = trader.Securities.First(security =>
security.Code == edtAssetCode.Text);
((QuikTrader)trader).StartDde(sec);
}

таблицы, стаканы все есть

может быть проблема изза того, что я в обработчике события пытаюсь
получить стакан?

Tags:


Thanks:




18 Answers
Tauler

Avatar
Date: 6/25/2010
Reply


А иногда сткана вообще пустой - как будто ни разу от квика он не
пришел. Это может быть изза того, что ДДЕ забит выводом сделок?

Topic starter
Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


Нарыл на сайте

9. Сделал стакан MarketDepth потоковых. Это значит, что вызывая метод
MarketDepth.SetQuote можно не задавать индекс глубины. Для этого сам
стакан будет определять, какая это котировка (лучшая или нет), и тем
самым вытеснять старые котировки.

может тут какой то трабл? у меня версия 2.0

Topic starter
Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


ÓÄÅÌÁÌ ÐÒÏÓÔÏÊ ÔÅÓÔ

private void button1_Click(object sender, EventArgs e)
{
edtMarketDepthAfter.Items.Clear();
edtMarketDepthBefore.Items.Clear();
MarketDepth md1 = trader.GetMarketDepth(sec);
DateTime d1 = DateTime.Now;
Thread.Sleep(4000);

DateTime d2 = DateTime.Now;
MarketDepth md2 = trader.GetMarketDepth(sec);
setListBoxItems(edtMarketDepthBefore,
marketDepthVisualizator(md1, d1));
setListBoxItems(edtMarketDepthAfter,
marketDepthVisualizator(md2, d2));
}

ÓÔÁËÁÎÙ ÏÄÉÎÁËÏ×ÙÅ. âÕÍÁÇÁ - RIU0 - ÌÉË×ÉÄÎÁÑ, ÓÔÁËÁÎ ÚÁ 4 ÓÅËÕÎÄÙ
ÔÏÞÎÏ ÍÅÎÑÌÓÑ.

ÓËÒÉÎ ×ÙÌÏÖÉÌ × ÆÁÊÌÙ ÓÔÁËÁÎÙ.jpg

Topic starter
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/25/2010
Reply


1. Объект стакана MarketDepth создается всегда один раз и более не
пересоздается. Quote - создается всегда новая.
2. Конечно, если в момент запуска экспорта по стакану еще и
параллельно тысячами экспортируются все сделки, то вывод будет забит.
3. Потоковость MarketDepth.SetQuote не используется для текущих
ITrader. Это для новых версий.

Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


1. Объект стакана MarketDepth создается всегда один раз и более не
пересоздается. Quote - создается всегда новая.

поподробнее плиз. почему же у меня сткана всегда один и тот же? и как
это вылечить?
вродеиспользую GetMarketDepth...

Topic starter
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/25/2010
Reply


Запускали пример Sample? Стаканы там работают?

Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


я верю что работают :) щас полезу посмотрю как там сделано.

Topic starter
Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


Но вы все таки намекните, как взять из стакана текущие котировки в
текущий момент

Topic starter
Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


Совсем ничего не пойму. как же с MarketDepth то работать? для
получения актуальн остаканая его как то принудительно рефрешить надо?
или он сам рефрешится, по аналогии SecuritiesTable?

Topic starter
Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


Походу разобрался. сколько бы я не создавал экземпляров MarketDepth,
все они будут показывать текущее состояние стакана, а не его
отпечаток?

Topic starter
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/25/2010
Reply


Не надо ничего создавать. Подписывайтесь за событие
ITrader.QuotesChanged и пробегайтесь по стакану. Всегда будут новые
котировки. Или как в примере. Таймер создавайте, по таймеру бегите по
стакану. В упор не вижу, где может быть проблема. =)

Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


нет, не прокатит. мне нужен стакан в момент появления сделкиЮ причем
сохранять историю вида сделка/времясделки/снимок стакана. Проблемы
нет, было неполное понимание работы MarketDepth :)

Topic starter
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/25/2010
Reply


Есл говорить про квик, то лента сделок и стаканы обновляются
независимо друг от друга.

Thanks:

Tauler

Avatar
Date: 6/25/2010
Reply


Я к тому что способ похожий. просто я думал что GetMarketDepth
возвращает снимок стакана, а не объект, кторый транслирует котировки

Topic starter
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/25/2010
Reply


Что такое снимок и что значит трансляция?

Thanks:

Tauler

Avatar
Date: 6/28/2010
Reply


Снимок - это сохраненныое состояние стакана в момент времени.
трансляция - это как реализован класс MarketDepth - есть экземпляр, и
данные в нем все время меняются.То есть чтобы мне сохранить историю
сканаов за 10 секунд с периодом в одну секунду не прокатит делать

list.Add(GetMarketDepth(sec));

а надо будет сохранить данные в какой то класс, уже эти данные
добавлят ьв коллекцию

Topic starter
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/28/2010
Reply


Вот так можно копировать состояние стакана

list.Add(new MarketDepth(sec, GetMarketDepth(sec).ToArray()));

Thanks:

Tauler

Avatar
Date: 6/28/2010
Reply


Спасибо! :) чет и не догадался :)

Topic starter
Thanks:


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

loading
clippy