S#

Нет информации о главном окне Quik. Возможно, было неуспешное подключение.


Нет информации о главном окне Quik. Возможно, было неуспешное подключение.
Atom Ответить
08.06.2010


В чем может быть причина сообщения об ошибке?
Квик запущен, путь к нему прописан.

Теги:


Спасибо:




33 Ответов
< 1 2 
Mikhail Sukhov

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


Да, я уже писал о присутствующей ошибке в запуске ДДЕ. Это она. Квик
загружен, а S# - нет. S# нажимает на кнопки и ожидает моментального
появления окон. Квик же думает, и не всегда может реагировать
моментально. Я бы исправил ошибку, если бы она стабильно возникала. Но
дело в том, что на моем компе она не возникает практически никогда
(да, я шустр!).

Спасибо:

ddd888

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


Да, Вам больше повезло! Хотя вроде у меня тоже комп не слабый. :)
При первичном запуске стакана такая ошибка некритична. Хуже когда она
возникает уже в процессе от метода GetMarketDepth. В 1.8. такого точно
ни разу не было, а сейчас почему-то есть. При этом никак не могу
понять такое поведение. Вот, например код:

строка 801. this.BestBid = _marketDepth.Where(t => t.Bid != 0).Max(t
=> t.Price);
строка 802. this.BestAsk = _marketDepth.Where(t => t.Ask != 0).Min(t
=> t.Price);
строка 803. this.MinBid = _marketDepth.Where(t => t.Bid != 0).Min(t =>
t.Price);
строка 804. this.MaxAsk = _marketDepth.Where(t => t.Ask != 0).Max(t =>
t.Price);

И когда возникает ошибка ("последовательность не содержит элементов"),
смотрю куда она указывает и вот странность: каждый раз она указывает
на разные строки! Как это может быть? Ведь если коллекция пустая, то
ошибка всегда должна появляться на 1-й же строке, т.е. здесь например
на 801-й?

Спасибо:

Mikhail Sukhov

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


Стоп, Вы не разделяете проблемы. Есть ошибка с запуском ДДЕ. Я уже
описал симптомы. А есть по работе со стаканом. Я пока не могу понять,
у меня она или у Вас.

1. Лучший бид и аск вычисляются и так стаканом.
2. Ошибки могут быть на разных строчках, если, например, биды
заполнены, а офера еще нет.

Еще рас прочитал, что Вы писал выше. MarketDepth.Changed вызывается
при любом изменении стакана. Пришла новая котировка и т.д. Тоесть,
стакан может быть даже не заполнен, а событие будет выведено. По
вышепреведенному коду могу сказать, что Вам нужно событие
ITrader.QuotesChanged потому что Вам нужно вычислять по всему стакану
(иначе, просто код бессмыслен - вычисление будет показывать ерунду по
неполному стакану). Скорее всего, в этом и ошибка. И это точно не
зависит от версии.

Спасибо:

ddd888

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


Да, я понимаю, что это уже другая проблема. Про событие QuotesChanged
и MarketDepth.Changed тоже помню, но как это влияет на метод
GetMarketDepth?

1. Лучший бид и аск я стал так выводить потому, что у Вас BestBid и
BestAsk на самом деле выводят максимальную и минимальные цены стакана
почему-то.
2. Получается, что GetMarketDepth может выводить стакан не полностью
в зависимости от того на какое событие QuotesChanged и
MarketDepth.Changed подписался?

Спасибо:

Mikhail Sukhov

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


Что-то не так внутри метода GetMarketDepth? Как я понял, проблема с
наружи - использование результатов этого метода. Что делать, если
программа пытается обратиться к стакану слишком рано?

1. Ни разу такое не встречал. Как это проверили?
2. GetMarketDepth возвращает всегда стакан. И этот стакан параллельно
наполняется QuikTrader.

Спасибо:

ddd888

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


GetMarketDepth у меня вызывается по событию GetMarketDepth.Change. Там
же в коде я пытаюсь получить дополнительные данные из уже раз
вызванного GetMarketDepth. И в ходе торгов, когда экспорт уже давно
запущен и выскакивает периодически эта ошибка. Сам код примерно такой:

this.GuiAsync(() =>
{
this.Quotes.Clear();
var _marketDepth =
this._trader.GetMarketDepth(this.Security).OrderByDescending(q =>
q.Price)
.Select(q => new SampleQuote
{
Price = q.Price,
Ask = q.OrderDirection ==
OrderDirections.Buy ? q.Volume : 0,
Bid = q.OrderDirection ==
OrderDirections.Sell ? q.Volume : 0,
OwnVolume = q.ExtensionInfo != null ? (int)
(q.ExtensionInfo.TryGetValue("OwnVolume") ?? 0) : 0,
});
this.BestBid = _marketDepth.Where(t => t.Bid != 0).Max(t
=> t.Price);
this.BestAsk = _marketDepth.Where(t => t.Ask != 0).Min(t
=> t.Price);
...
this.Quotes.AddRange(_marketDepth);

Слишком рано - это когда?

1. Получал через _marketDepth.Select(q => q.BestBid). В отладчике
останавливал, проверял содержимое _trader и там тоже в
_marketdepth.BestBid.Price так же максимальное значение стакана.....
А!!! Похоже понял - наверное это зависит от настроек вида стакана? Я
привык, что у меня самая высокая цена - аск - всегда наверху - у вас
судя по инструкции - наоборот. :)
2. Т.е. возвращает полностью, как есть? Что значит "параллельно
наполняется"?

Спасибо:

ddd888

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


Для верности решил изменить вид стакана как в инструкции - все равно
BestBid - максимальная цена

Спасибо:

Andrey

Фотография
Благотворитель
Дата: 21.06.2010
Ответить


Михаил, добрый день!

Если Вы здесь описывали проблему, когда робот запускает экспорт по DDE
и при этом квик не успевает отреагировать быстро на нажатие всех
кнопок, т.е., например, остается открытым окно настроек экспорта по
DDE.
У меня такая проблема возникает достаточно часто при запуске с утра.
(робот сам запускается в 10-00 после автоматического подключение QUIK
к серверу).
Компьютер сравнительно мощный, правда на нем стоит виртуальный сервер.

Скажите, пожалуйста, фиксили ли Вы это как то в версии 2.0.1?

Спасибо:
< 1 2 

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

loading
clippy