Беда с GetMarketDepth
Atom Ответить
24.06.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);
}

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

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

Теги:


Спасибо:



Поздравляем именинников: Hydra User, sedor

18 Ответов
Tauler

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


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

Автор топика
Спасибо:

Tauler

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


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

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

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

Автор топика
Спасибо:

Tauler

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


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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.06.2010
Ответить


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

Спасибо:

Tauler

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


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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.06.2010
Ответить


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

Спасибо:

Tauler

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


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

Автор топика
Спасибо:

Tauler

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


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

Автор топика
Спасибо:

Tauler

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


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

Автор топика
Спасибо:

Tauler

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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.06.2010
Ответить


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

Спасибо:

Tauler

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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.06.2010
Ответить


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

Спасибо:

Tauler

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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.06.2010
Ответить


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

Спасибо:

Tauler

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


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

list.Add(GetMarketDepth(sec));

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.06.2010
Ответить


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

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

Спасибо:

Tauler

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


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

Автор топика
Спасибо:


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

loading
clippy