Ранее делал так:
_trader.NewSecurities += securities => this.GuiAsync(() =>
{
Securitites.ItemsSource = _trader.Securities;
if (_security == null)
{
_security = securities.FirstOrDefault(sec => sec.Code == secCode);
}
});
Но инструмент один и хочу задать константным образом. Пытаюсь так:
Security _security = new Security
{
Code = "RIH3",
};
не работает 😢
Комментарии (20)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте! Я делаю так.
Спасибо, так только я еще и не пробовал - в понедельник попробую.
Попробовал,- к сожалению и ваш вариант у меня не работает.
Далее при попытке запустить экспорт стакана if (_security != null) _trader.RegisterMarketDepth(_security);
Выдает что-то типа "Ссылка на объект не указывает на экземпляр объекта. Для создания экземпляров объектов воспользуйтесь зарезервированным словом new" :-(
Я так пишу
а _trader.RegisterMarketDepth(MySecurity); _trader.RegisterSecurity(MySecurity); _trader.RegisterTrades(MySecurity); я запускаю только тогда, когда экспорт будет работать на 100%. Потому что когда вы запускаете экспорт, проходит еще какое то время прежде чем, вы получите нужный портфель, инструмент, позиции.
Здравствуйте! Прочитал ваш пост внимательнее, и понял, что ввел вас в заблуждение. Изначально посчитал что вам нужен инструмент для тестирования, и тот вариант, что я написал вполне подойдет для тестирования без подключения к терминалу (конечно зависит от того что и как тестировать). При работе с подключением к терминалу лучше воспользоваться вашим первым вариантом, либо если вам нужен только один заранее известный инструмент, то можно еще сделать, так как показано в SampleRealTimeTesting
При таком варианте у вас будет вся информация о инструменте полученная из терминала. Если инструмент создавать вручную, то легко ошибиться. Либо изменяться параметры инструмента, например шаг цены как уже было с фьючерсном на индекс РТС.
По поводу ошибки то, скорее всего вы создаете инструмент в одном методе, а пользоваться пытаетесь в другом. Создайте Security полем класса.
Если вас интересовало тестирование на исторических данных то, посмотрите здесь http://stocksharp.com/doc/?topic=html/5b90a23e-24b9-474a-a699-da47b666194a.htm в пункте №4 про инструмент написано, в пункте №6 описано получение стакана.
Спасибо за ответы.
Тестированием я не занимаюсь, а торгую на реальном счете.
Вот как раз делать "так как показано в SampleRealTimeTesting" я и не хочу. От этой _trader.NewSecurities += securities => this.GuiAsync(() => хренотени я и пытаюсь избавиться. Я не хочу получать инструменты из квика, а хочу просто задавать у себя в программе, создав объект Security.
а использую далее в разных обработчиках.
Кстати объект "Portfolio" я создал точно таким же образом. И он работает!
Ну тогда здесь без кода и пол литра не разберешься! 😀 Просим код на суд!
Вот мой гениальный код 😀 :
ошибку указывает на строку "if (_security != null) _trader.RegisterMarketDepth(_security)"
Ваш код не последователен, т.е. вы создаете трейдер
и сразу же запускаете стакан
а к Quikу подключаетесь потом, как же он запустит экспорт стакана если он еще к Quikу не подключен? Запускайте экспорт стакана тогда когда Quik подключен.
VassilSanych как всегда прав, без этой хренотени ни как.
Уж не хотите ли вы сказать, что в этом коде:
происходит подключение к квику? Почему вы думаете, что к квику я не подключен?
_trader.NewSecurities += securities => this.GuiAsync(() => { Securitites.ItemsSource = _trader.Securities;
});
Вроде выглядит легко и просто, указал код инструмента, а дальше все само. в этом коде как раз можно и стакан сразу зарегистрировать
Сейчас все объясню.
Я правильно думаю, что этот код:
ищет инструмент "RIH3" из таблицы "Инструменты" квика полученные по DDE???
Насчет экспорта я понял, сейчас попробовал так:
Выдает ту же ошибку "Ссылка на объект не указывает на экземпляр объекта. Для создания экземпляров объектов воспользуйтесь зарезервированным словом new"
Область видимости вроде не при чем. Похоже этот код просто не создает объект. Тогда что он делает?
Я полагая чтоб создать инструмент одного его кода мало. Вы же не берете его из квика, а создаете с 0, так что надо все его необходимые параметры заполнить, как Иван З написал выще.
Проверил ошибки не вылетело Путем экспериментов, я так понял, что стакан регистрируется по Id.
Сначала создадим инструмент
Потом после создания трейдера, инициализируем инструмент
ну а экспорт стакана запустить можно и так(хотя что то подсказывает мне что это не совсем корректно)
Quik подключает следующая строка, весь код который выполнен до этой строки выполняется без подключения к Quik.
Я попробовал на SampleSMA таким образом, _trader.RegisterMarketDepth(_security); прошел, вопросов не задал. Приходят ли события по стакану не проверял, но по крайней мере ошибок не выдавал.
создал и инициализировал так:
У меня на этом этапе ошибку тоже не выдал, но далее события НЕ ПРИХОДЯТ и обращение к _security вызывает все ту же "Ссылка на объект не указывает на экземпляр объекта" 😢
Что делает код securities.FirstOrDefault(sec => sec.Code == secCode); ?
http://msdn.microsoft.com/ru-ru/library/bb549039.aspx Возвращает первый элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
в пример Sample добавил инструмент
строку
заменил на
Больше ничего не делал, все работает нормально, экспорт стакана идет. Можете проверить сами.
Спасибо вам большое за ваши ответы, они многое прояснили для меня. К сожалению решить проблему так пока и не удалось.
Спасибо вам Иван З. за ваш пример - он помог мне решить другую проблему.
Вчера лазая по форуму нашел такой код:
вроде так кто-то создавал объект Security, но при попытке его использовать получил сообщение об ошибке: "невозможно преобразовать объект SelectedItem в Security", что-то в этом роде.
Главная задача избавиться от _trader.NewSecurities += securities => или найти инструмент в ComboBox.
Возможно VassilSanych был прав и "избавляясь от этой хренотени, придется нагородить намного больше другой инициализирующей хренотени".
Я просто плохо знаю C# и StockSharp, так как раньше на них не программировал, но чувствую, что проблему можно решить.
Ладно не буду больше мучить вас вопросами.
SelectedItem имеет отношение к выпадающему списку Securities на форме. Надо заменить это своей реализацией.
Можно создать объект Security из ComboBox, который заполняется вручную? Как?