Здравствуйте. такая проблема с 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); }
таблицы, стаканы все есть
может быть проблема изза того, что я в обработчике события пытаюсь получить стакан?
Kommentare (18)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
А иногда сткана вообще пустой - как будто ни разу от квика он не пришел. Это может быть изза того, что ДДЕ забит выводом сделок?
Нарыл на сайте
может тут какой то трабл? у меня версия 2.0
ÓÄÅÌÁÌ ÐÒÏÓÔÏÊ ÔÅÓÔ
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);
marketDepthVisualizator(md1, d1)); setListBoxItems(edtMarketDepthAfter, marketDepthVisualizator(md2, d2)); }
ÓÔÁËÁÎÙ ÏÄÉÎÁËÏ×ÙÅ. âÕÍÁÇÁ - RIU0 - ÌÉË×ÉÄÎÁÑ, ÓÔÁËÁÎ ÚÁ 4 ÓÅËÕÎÄÙ ÔÏÞÎÏ ÍÅÎÑÌÓÑ.
ÓËÒÉÎ ×ÙÌÏÖÉÌ × ÆÁÊÌÙ ÓÔÁËÁÎÙ.jpg
поподробнее плиз. почему же у меня сткана всегда один и тот же? и как это вылечить? вродеиспользую GetMarketDepth...
Запускали пример Sample? Стаканы там работают?
я верю что работают :) щас полезу посмотрю как там сделано.
Но вы все таки намекните, как взять из стакана текущие котировки в текущий момент
Совсем ничего не пойму. как же с MarketDepth то работать? для получения актуальн остаканая его как то принудительно рефрешить надо? или он сам рефрешится, по аналогии SecuritiesTable?
Походу разобрался. сколько бы я не создавал экземпляров MarketDepth, все они будут показывать текущее состояние стакана, а не его отпечаток?
Не надо ничего создавать. Подписывайтесь за событие ITrader.QuotesChanged и пробегайтесь по стакану. Всегда будут новые котировки. Или как в примере. Таймер создавайте, по таймеру бегите по стакану. В упор не вижу, где может быть проблема. =)
нет, не прокатит. мне нужен стакан в момент появления сделкиЮ причем сохранять историю вида сделка/времясделки/снимок стакана. Проблемы нет, было неполное понимание работы MarketDepth :)
Есл говорить про квик, то лента сделок и стаканы обновляются независимо друг от друга.
Я к тому что способ похожий. просто я думал что GetMarketDepth возвращает снимок стакана, а не объект, кторый транслирует котировки
Что такое снимок и что значит трансляция?
Снимок - это сохраненныое состояние стакана в момент времени. трансляция - это как реализован класс MarketDepth - есть экземпляр, и данные в нем все время меняются.То есть чтобы мне сохранить историю сканаов за 10 секунд с периодом в одну секунду не прокатит делать
list.Add(GetMarketDepth(sec));
а надо будет сохранить данные в какой то класс, уже эти данные добавлят ьв коллекцию
Вот так можно копировать состояние стакана
list.Add(new MarketDepth(sec, GetMarketDepth(sec).ToArray()));
Спасибо! :) чет и не догадался :)