← Back

Стакан. Вопросы новичка.

Извиняюсь сразу за глупые вопросы, но как и у многих начинающих, они возникают, а спросить не у кого.

в примере Sample , создаю новую форму, далее в ней код:

namespace Sample
{
	using System;
	using System.Collections.ObjectModel;
	using System.Linq;
	using System.Threading;
	using System.Windows;
	using System.Windows.Controls;

	using Ecng.Collections;
	using Ecng.Common;
	using Ecng.Xaml;

	using StockSharp.BusinessEntities;
	using StockSharp.Quik;
	using StockSharp.Algo;
	
	public partial class bot : Window
	{
		
		private static Security _lkoh;
		private static MarketDepth _depth;
		public bot()
		{
			
			
			InitializeComponent();
			_lkoh.Code="LKOH";
			MainWindow.Instance.Trader.RegisterQuotes(_lkoh);
			_depth=MainWindow.Instance.Trader.GetMarketDepth(_lkoh);
			st.Content=_depth.Asks[0].Price.ToString();
		}
		public ObservableCollection<Security> Securities { get; private set; }
	}
}

Соответственно после вызова окна ругается. Почему, понять не могу.

Comments (27)

Login or Create account, Log in or register to leave a comment

Кот Матроскин
Кот Матроскин

Что это есть такое:

_lkoh.Code="LKOH";

Ты бумагу ни получил с биржи, ни создал (как в эмуляции) Пытаясь просто присвоить ей код Лукойла, ты ничего не добьешься

nuan
nuan Author

Подскажите как нужно!

Alexander
Alexander

nuan: Подскажите как нужно!

Смотрите примеры что идут в архиве

nuan
nuan Author



namespace Sample
{
	using System;
	using System.Collections.ObjectModel;
	using System.Linq;
	using System.Threading;
	using System.Windows;
	using System.Windows.Controls;

	using Ecng.Collections;
	using Ecng.Common;
	using Ecng.Xaml;

	using StockSharp.BusinessEntities;
	using StockSharp.Quik;
	using StockSharp.Algo;
	
	public partial class bot : Window
	{
		
		private static Security _lkoh;
		private static MarketDepth _depth;
		public bot()
		{
			
			
			InitializeComponent();
			const string secCode = "LKOH";
			
			MainWindow.Instance.Trader.NewSecurities += securities =>
						{
							if (_lkoh == null)
							{
								// находим Лукойл и присваиваем ее переменной lkoh
								_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode);

								if (_lkoh != null)
								{
									//Console.WriteLine("Инструмент Лукойл появился.");

									// запускаем экспорт стакана
									MainWindow.Instance.Trader.RegisterQuotes(_lkoh);
									/*
									if (_portfolio != null && _depth != null)
										waitHandle.Set();*/
								}
							}
						};
			_depth=MainWindow.Instance.Trader.GetMarketDepth(_lkoh);
			st.Content=_depth.Asks[0].Price.ToString();
		}
		public ObservableCollection<Security> Securities { get; private set; }
	}
}

Делаю как в примере. Просто не совсем понимаю принцип получения стакана. Был бы подробный алгоритм. В документации все описано довольно скудно. Был бы простой пример.

OvcharenkoVI
OvcharenkoVI

А почему инструмент получается не в MainWindow?

Напиши скайп, вечерком скину свою программку работающую, напишу комментарии

Творог
Творог

А как получить цену и объём определённой очереди? Например цену 3-го бида в стакане.

Творог
Творог

Насколько я понимаю, нужно создать коллекцию и затем по индексу ретривить цену и объём заявок в стакане. В QPILE так, а в ООП также делается?

Кот Матроскин
Кот Матроскин

Под шумок и я задам вопросик для маленьких 😊. Что может означать двойной знак вопроса ?? в строке:

var result = value as IIndicatorValue ?? input.SetValue(value);
BigBen
BigBen

Кот Матроскин: Под шумок и я задам вопросик для маленьких 😊. Что может означать двойной знак вопроса ?? в строке:

var result = value as IIndicatorValue ?? input.SetValue(value);


В книгах, например, пишут об этом так:
"Попытка преобразовать обнуляемый объект в его базовый тип путем приведения типов обычно приводит к генерированию исключения System.InvalidOperationException, если обнуляемый объект содержит пустое значение. 
Это может произойти, например, в том случае, если значение обнуляемого объекта присваивается переменной его базового типа с помощью приведения типов. Появления данного исключения можно избежать, если воспользоваться оператором ??, называемым нулеобъединяющим оператором. Этот оператор позволяет указать значение, которое будет использоваться по умолчанию, если обнуляемый объект содержит пустое значение. Он также исключает потребность в приведении типов. 
Ниже приведена общая форма оператора ??. 

*обнуляемый_объект ?? значение_по_умолчанию* 

Если обнуляемый_объект содержит конкретное значение, то результатом операции ?? будет именно это значение. В противном случае результатом операции ?? *окажется значение_по_умолчанию*."

Читайте литературу!
Кот Матроскин
Кот Матроскин

Да я прежде чем написать вопрос вчера две книги просмотрел + MDSN + Yandex - кругом ни слова про "??" (((( Не подскажешь первоисточник))? За ответ большое спасибо

Alexander
Alexander

Кот Матроскин: Да я прежде чем написать вопрос вчера две книги просмотрел + MDSN + Yandex - кругом ни слова про "??" (((( Не подскажешь первоисточник))? За ответ большое спасибо

MSDN

BigBen
BigBen

Кот Матроскин: Да я прежде чем написать вопрос вчера две книги просмотрел + MDSN + Yandex - кругом ни слова про "??" (((( Не подскажешь первоисточник))? За ответ большое спасибо

Герберт Шилдт - C# 4.0. Полное руководство

Кот Матроскин
Кот Матроскин

Alexander Mukhanchikov:

Кот Матроскин: Да я прежде чем написать вопрос вчера две книги просмотрел + MDSN + Yandex - кругом ни слова про "??" (((( Не подскажешь первоисточник))? За ответ большое спасибо MSDN BigBen: Кот Матроскин: Да я прежде чем написать вопрос вчера две книги просмотрел + MDSN + Yandex - кругом ни слова про "??" (((( Не подскажешь первоисточник))? За ответ большое спасибо Герберт Шилдт - C# 4.0. Полное руководство Всем большое спасибо!

Творог
Творог

Сорри, как говорится, за серию риторических вопросов, на которые я так и не получу ответа. Похоже, что если нет ответа, как можно получить инфу по индексу очереди, значит такой возможности, получается, вообще нет, только лучший bid & ask. Какой тогда смысл переходить с QPILE... Либо ответ слишком очевиден, чтобы тратить время на его ответ, но в документации ничего похожего я не увидел.

Alexander
Alexander

Творог: Сорри, как говорится, за серию риторических вопросов, на которые я так и не получу ответа. Похоже, что если нет ответа, как можно получить инфу по индексу очереди, значит такой возможности, получается, вообще нет, только лучший bid & ask. Какой тогда смысл переходить с QPILE... Либо ответ слишком очевиден, чтобы тратить время на его ответ, но в документации ничего похожего я не увидел.

Для начала вы посмотрите что из себя представляет MarketDepth (стакан). Думаю при внимательном рассмотрении класса вопрос сам отпадёт.

Правильный ответ - второй, он настолько очевиден, что мы его даём лишь в поддержке, если по документации вы этого не видите.

Кот Матроскин
Кот Матроскин

Alexander Mukhanchikov:

Творог: Сорри, как говорится, за серию риторических вопросов, на которые я так и не получу ответа. Похоже, что если нет ответа, как можно получить инфу по индексу очереди, значит такой возможности, получается, вообще нет, только лучший bid & ask. Какой тогда смысл переходить с QPILE... Либо ответ слишком очевиден, чтобы тратить время на его ответ, но в документации ничего похожего я не увидел.

Для начала вы посмотрите что из себя представляет MarketDepth (стакан). Думаю при внимательном рассмотрении класса вопрос сам отпадёт.

Правильный ответ - второй, он настолько очевиден, что мы его даём лишь в поддержке, если по документации вы этого не видите.

Действительно, ответ то очевиден. Читал: http://stocksharp.com/doc/html/AllMembers_T_StockSharp_BusinessEntities_MarketDepth.htm

Творог
Творог

Alexander Mukhanchikov: Для начала вы посмотрите что из себя представляет MarketDepth (стакан). Думаю при внимательном рассмотрении класса вопрос сам отпадёт.

Спсб, сразу новичку в документации непросто сориентироваться, разобраться где что лежит. А в чём отличие Цены от Котировки?

nuan
nuan Author

Ребят , кому не лень, дайте пример, по моему вопросу. Буду крайне благодарен.

Moadip
Moadip

А в чём отличие Цены от Котировки? Цена это цена, а quote это класс. По котировке можно узнать, цену, объем, по какому инструменту эта котировка и т.д.

(http://stocksharp.com/doc/html/AllMembers_T_StockSharp_BusinessEntities_Quote.htm)

Смотрите раздел свойства.

Творог
Творог

А в чём отличие Цены от Котировки? Цена это цена, а quote это класс. По котировке можно узнать, цену, объем, по какому инструменту эта котировка и т.д.

А, ну по сути котировка - это ключ, по которому берётся значение из коллекции.

nuan
nuan Author

Спасибо за ответ, а как мне например получить цену третьего бида ?)

vader
vader

Допустим так decimal aa = _marketDepth.Bids[2].Price;

_marketDepth - это объект MarketDepth, получить его можно таким образом - _marketDepth = _security.Trader.GetMarketDepth(_security); ПОлучать каждый раз его не надо, он будет обновлятся автоматически. Только запустите предварительно получение стакана.

nuan
nuan Author

vader можете сделать пример?

OvcharenkoVI
OvcharenkoVI

Вроде все вполне очевидно )

В методе OnStarting стратегии делаете

md = Trader.GetMarketDepth(Security);

а потом уже в теле стратегии запрашивайте все что угодно )

Дока для кого?

nuan
nuan Author

фуф разобрался... ) все оказалось проще. Спасибо огромное :) просто с Си быстро перейти на C# , да еще и с незнакомым API трудно )

nuan
nuan Author

еще пара вопросов. я слышал, что чтобы на ММВБ выставить заявку, нужно сделать что-то особенное. var order = new Order ;

        Trader.RegisterOrder(order);

ошибку не пишет, но ордер не выставляет.

vader
vader

Добавьте Trader = this.Trader,

А у вас заявки на FORTS отправлялись?