Масса благодарностей за библиотеку!
Создал класс
[DdeCustomTable("Деривативы")]
//[Ignore(FieldName = "IsDisposed")]
public class DerivativesDDETable
{
[DdeCustomColumn("Бумага сокр.", Order = 0)]
//[Identity]
public string SecurityName { get; set; }
[DdeCustomColumn("Код бумаги", Order = 1)]
public string SecurityCode { get; set; }
[DdeCustomColumn("До погашения", Order = 2)]
public int TillExpiration { get; set; }
[DdeCustomColumn("Шаг цены", Order = 3)]
public double PriceStep { get; set; }
[DdeCustomColumn("Ст. шага цены", Order = 4)]
public double PriceStepPice { get; set; }
[DdeCustomColumn("Страйк", Order = 5)]
public double Strike { get; set; }
[DdeCustomColumn("Баз. актив", Order = 6)]
public string Asset { get; set; }
[DdeCustomColumn("ГО покупателя", Order = 7)]
public double BuyerMargin { get; set; }
[DdeCustomColumn("ГО продавца", Order = 8)]
public double SellerMargin { get; set; }
[DdeCustomColumn("Дата исп.", Order = 9)]
public DateTime FinalExpiration { get; set; }
[DdeCustomColumn("Погашение", Order = 10)]
public DateTime Expiration { get; set; }
[DdeCustomColumn("Пред. оц", Order = 11)]
public DateTime RC { get; set; }
}
После
protected override void OnConnect()
{
ProcessCustomTables += (type, objects) =>
{
// нас интересует только CustomPortfolio
if (type == typeof(DerivativesDDETable))
{
}
};
Terminal.StartDde("Деривативы");
Terminal.StartDde(ListenedTables);
base.OnConnect();
}
на ProcessDataError приходит ArgumentOutOfRangeException
Деривативы Имя параметра: category
Что это значит? Пытался работать только с одной колонкой - то же самое. По форуму ничего не нашел =(
评论 (38)
登录 或 创建账户, 登录或注册以发表评论
А пункт 3 http://stocksharp.com/doc/help/html/7d73f7bf-ae8b-4d76-9895-cffb6342203f.htm выполнили?
Спасибо, прошу прощения за невнимательность =)
Тоже есть вопрос. При создании описания портфеля имеют значения названия полей? Они должны быть такими же, как и в Quik? У меня так: Описание полей на QPile:
описание полей на S#:
В итоге после показа портфеля в программе окно есть, но пустое. Соединение происходит нормально.
В начале QuikTrader.ProcessCustomTables вызывается? QuikTrader.ProcessDataError что-нибудь пишет?
ProcessCustomTables вызывается, как в примере
а как использовать ProcessDataError?
this.Trader.ProcessCustomTables += (type, objects) => { if (type == typeof(CustomPortfolio)) _portfolioWindow.Portfolios.AddRange(objects.Cast());
};
С событиями вроде разобралась, что такое += поняла, как подписываться на ошибки тоже. Только где именно надо использовать ProcessDataError? есть еще ConnectionError. Какие именно функции надо проверять и где?
Это не функции, а обработчики событий.
Подпишитесь на событие ITrader.ProcessDataError, и, если в его обработчик что-нибудь придет, сохраните ошибку (или просто запустите под Debug и поставьте точку останова).
ConnectionError - это другое событие, связанное с ошибкой соединения. Вы подключиться смогли к Квик?
Да, обработчики, я не совсем правильно сформулировала вопрос =) нужно подписаться на это событие, но где? В какой момент? К квику подключилась. Есть функция Connect_Click, но, раз подключение успешно выполняется, но надо это делать не там? Хотя работа с портфелем вроде осуществляется там, до старта DDE
Извиняюсь за столь глупые вопросы, пытаюсь понять все с наскока :-[
Попробуйте там же где Вы на все остальные подписываетесь.
в итоге получилось это:
текст целиком (не вытащить во время дебага, у error'а столько всего внутри)
все равно не понимаю - мы подписываемся на событие ProcessDataError в функции коннекта к quik'у, а ошибка вылезает при начале DDE, как оно так?
Хм, переделала это дело под другую таблицу, и оно внезапно заработало, без нареканий.
Я посмотрел причину такой ошибки. Она может быть только в том случае, если у колонки индекс больше допустимого. Например, пришло меньше полей по ДДЕ.
Посмотрела - там немного другая ситуация, уже полученные данные не меняются, должны добавляться новые.
upd:
Оказалось, не описан NotifyPropertyChanged (да уж, а еще жду от программы чего-то)
Делаю, как в примере
Вылезает такая штука:
Только данные не обновляются после обновления таблицы в quick - где нужно проверить?
Посмотрите соседний топик. Я думаю такая же ситуация.
Сталкивался с такой штукой - класс нужно отнаследовать от INotifyPropertyChanged
Сделала =) Закомпилилось, работает. Вроде обновляется (у меня сейчас одна колонка с данными, ползунок ползет), но данные те же самые! Ничего не понимаю.
код в итоге такой
Причем при каждом запуске ощущение такое, что данные одни и те же, хотя в квике они давно поменялись.
Какой ползунок ? А где проверяете обновление данных ? Если в ProcessCustomTables то оно не приходит при изменении существующих данных.
Михаил, а Вы не подскажете нормальный источник где можно про технологию DDE почитать ?
Как Вы определяете что не меняются данные ? А NotifyPropertyChanged вызывается ? Где храните полученные данные ?
http://stocksharp.com/doc/help/html/7d73f7bf-ae8b-4d76-9895-cffb6342203f.htm Посмотрите, как нужно использовать INotifyPropertyChanged. Лучше даже откройте соответствующий пример http://stocksharp.com/doc/help/html/4efd0545-a100-44ed-bdf5-4588e5665199.htm SampleDdeCustomTable.
я ничего не понимаю .... Привязку данных делаете ? this.Portfolios это что ? Какой компонент используете для вывода данных ?
Привязку делаю, данные выводятся в GridView.
А коллекция в который Вы храните данные поддерживает выдачу уведомления при получении и удалении элементов или при обновлении коллекции ? Попробуйте использовать ObservableCollection... А Вы пишете приложение WindowsForms или WPF ?
WPF Это приложение взято из примеров Stock#, я до конца в нем не разобралась еще =) уведомление вроде есть, CollectionChanged это то? тип вроде ThreadSaveObservableCollection http://stocksharp.com/doc/help/html/AllMembers_T_Ecng_Trading_BusinessEntities_Portfolio.htm
А код не можете выложить ?
http://codepaste.ru/4744/
сделала вместо
вот так
Все равно все также, данные добавляются, но все те же, а не новые.
Если помечено атрибутом IdentityAttr, то данные обновляются, а не добавляются.
Вроде нет такого у меня. Сейчас, например, цена в квике уже 173к и больше, а в моей таблице она все в пределах 171-172к, и причем все время добавляется. Такое ощущение, что какие были получены данные в первый раз, все добавляются туда.
Если это Ваш код http://codepaste.ru/4744/, то есть. Причем добавлен зачем-то на цену.
Мой, но я это убрала уже, еще до добавления NotifyPropertyChanged. Сейчас точно нет =)
Ок, тогда если только это поменялось, то поведение Вашей программы должно быть: каждое обновление или добавление в Квике трактуется как добавление новой записи у Вас. У Вас не так?
Мистика, еще раз просмотрела код, перекомпилила, теперь все работает как надо =) спасибо за помощь =)
Добрый день!
Вот у меня тоже проблема с выводом исторических свечек. Только у меня проблема еще раньше: я загружаю портфель qpile, добавляю таблицу на этот портфель, а она пустая. Пытаюсь просмотреть историю Сбербанка,последние 50 часовых свечек. <mark>secClass = "EQBR" secCode = "SBER03" timeFrame = 60 candleMaxCount = 50</mark>Остальные данные в qpile скрипте не менял. Пробовал и на стандартном файле, идущем в примере, но результат такой же - пустая таблица. Что я делаю не правильно?