Иван З.
|
Date: 3/8/2013
Здравствуйте! Я делаю так. Code
Security _securityDefault = new Security()
{
Id = "SPFB.RTS@RTS",
Code = "RTS",
Class = "SPFB",
MinStepSize = 5,
MinStepPrice = 2,
ExchangeBoard = ExchangeBoard.Forts,
};
|
|
|
|
|
MyNick
|
Date: 3/8/2013
Спасибо, так только я еще и не пробовал - в понедельник попробую.
|
|
Thanks:
|
|
|
|
|
MyNick
|
Date: 3/11/2013
Попробовал,- к сожалению и ваш вариант у меня не работает.
Далее при попытке запустить экспорт стакана if (_security != null) _trader.RegisterMarketDepth(_security);
Выдает что-то типа "Ссылка на объект не указывает на экземпляр объекта. Для создания экземпляров объектов воспользуйтесь зарезервированным словом new" :-(
|
|
Thanks:
|
|
|
|
|
Иван З.
|
Date: 3/12/2013
|
|
|
|
Здравствуйте! Прочитал ваш пост внимательнее, и понял, что ввел вас в заблуждение. Изначально посчитал что вам нужен инструмент для тестирования, и тот вариант, что я написал вполне подойдет для тестирования без подключения к терминалу (конечно зависит от того что и как тестировать). При работе с подключением к терминалу лучше воспользоваться вашим первым вариантом, либо если вам нужен только один заранее известный инструмент, то можно еще сделать, так как показано в SampleRealTimeTesting Code
_trader.NewSecurities += securities => this.GuiAsync(() =>
{
// находим нужную бумагу
var lkoh = securities.FirstOrDefault(s => s.Code == "LKOH");
if (lkoh != null)
{
_lkoh = lkoh;
}
});
При таком варианте у вас будет вся информация о инструменте полученная из терминала. Если инструмент создавать вручную, то легко ошибиться. Либо изменяться параметры инструмента, например шаг цены как уже было с фьючерсном на индекс РТС. По поводу ошибки то, скорее всего вы создаете инструмент в одном методе, а пользоваться пытаетесь в другом. Создайте Security полем класса. Code
private Security _securityDefault = new Security()
{
Id = "SPFB.RTS@RTS",
Code = "RTS",
Class = "SPFB",
MinStepSize = 5,
MinStepPrice = 2,
ExchangeBoard = ExchangeBoard.Forts,
};
Если вас интересовало тестирование на исторических данных то, посмотрите здесь http://stocksharp.com/do...a-a699-da47b666194a.htm в пункте №4 про инструмент написано, в пункте №6 описано получение стакана.
|
|
Thanks:
|
|
|
|
|
MenDel
|
Date: 3/12/2013
MyNick Попробовал,- к сожалению и ваш вариант у меня не работает.
Далее при попытке запустить экспорт стакана if (_security != null) _trader.RegisterMarketDepth(_security);
Выдает что-то типа "Ссылка на объект не указывает на экземпляр объекта. Для создания экземпляров объектов воспользуйтесь зарезервированным словом new" :-( Я так пишу Code
public Security MySecurity { get; set; }
_trader.NewSecurities += sec => this.GuiAsync(() => sec.ForEach(s => { if (s.Code == "RIH3") MySecurity = s; }));
а _trader.RegisterMarketDepth(MySecurity); _trader.RegisterSecurity(MySecurity); _trader.RegisterTrades(MySecurity); я запускаю только тогда, когда экспорт будет работать на 100%. Потому что когда вы запускаете экспорт, проходит еще какое то время прежде чем, вы получите нужный портфель, инструмент, позиции.
|
|
Thanks:
|
|
|
|
|
MyNick
|
Date: 3/12/2013
Спасибо за ответы. Тестированием я не занимаюсь, а торгую на реальном счете. Вот как раз делать "так как показано в SampleRealTimeTesting" я и не хочу. От этой _trader.NewSecurities += securities => this.GuiAsync(() => хренотени я и пытаюсь избавиться. Я не хочу получать инструменты из квика, а хочу просто задавать у себя в программе, создав объект Security. >По поводу ошибки то, скорее всего вы создаете инструмент в одном методе, а пользоваться пытаетесь в другом Вот-вот что-то с областью видимости у меня неправильно. Я создаю объект после: Code
namespace StockSharpWpf
{
public partial class MainWindow : Window
{
Security _security = new Security
{
Code = "RIH3",
};
а использую далее в разных обработчиках. Кстати объект "Portfolio" я создал точно таким же образом. И он работает! Code
Portfolio _portfolio = new Portfolio
{
Name = "",
};
|
|
Thanks:
|
|
|
|
|
Иван З.
|
Date: 3/12/2013
Ну тогда здесь без кода и пол литра не разберешься! [biggrin] Просим код на суд!
|
|
Thanks:
|
|
|
|
|
MyNick
|
Date: 3/12/2013
|
|
|
|
Вот мой гениальный код [biggrin] : Code
private void QuikTraderGo_Click(object sender, RoutedEventArgs e)
{
if (terminal == null) terminal = QuikTerminal.Get(QuikPath);
if (!terminal.IsLaunched) // если QUIK не запущен
{
MessageBox.Show("QUIK не запущен");
}
else
{
if (_trader != null)
{
_trader.Disconnect();
QuikTraderGo.Content = "QuikTrader Go";
}
else
{
//создаем квик трейдера, передавая ему сразу место расположения нашего терминала
_trader = new QuikTrader(QuikPath);
if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
// подписываемся на событие обновления стакана
_trader.MarketDepthsChanged += depths => this.GuiAsync(() =>
{
//PRICE.Text = _security.BestBid.Price.ToString();//лучшая цена покупки в стакане
if (_depth == null && _security != null)
{
_depth = depths.FirstOrDefault(d => d.Security == _security);
if (_depth != null)
{
//MessageBox.Show("Стакан " + _security + " появился.");
}
}
});
//подписываемся на событие подключения, как только подключимся, сразу запустим Экспорт
_trader.Connected += () => this.GuiAsync(() =>
{
//_trader.StartExport(); //получение он-лайн данных из квика Инструменты, Заявки, Портфели и так далее
//MessageBox.Show("Подключение по DDE произведено успешно.");
});
// подключаем квик
_trader.Connect();
QuikTraderGo.Content = "QuikTrader Stop";
}
}
}
ошибку указывает на строку "if (_security != null) _trader.RegisterMarketDepth(_security)"
|
|
Thanks:
|
|
|
|
|
VassilSanych
|
Date: 3/13/2013
MyNick От этой _trader.NewSecurities += securities => this.GuiAsync(() => хренотени я и пытаюсь избавиться. Боюсь, избавляясь от этой хренотени, вам придётся нагородить намного больше другой инициализирующей хренотени. GuiAsync, кстати, совсем не обязательно.
|
|
Thanks:
|
|
|
|
|
Иван З.
|
Date: 3/13/2013
Ваш код не последователен, т.е. вы создаете трейдер Code
//создаем квик трейдера, передавая ему сразу место расположения нашего терминала
_trader = new QuikTrader(QuikPath);
и сразу же запускаете стакан Code
if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
а к Quikу подключаетесь потом, как же он запустит экспорт стакана если он еще к Quikу не подключен? Запускайте экспорт стакана тогда когда Quik подключен. VassilSanych как всегда прав, без этой хренотени ни как.
|
|
Thanks:
|
|
|
|