общий объем по бидам
Atom
05.01.2012
tmt


Объясните пожалуйста, как получить общий объем из стакана.

  1. нужно создать стакан? - как правильно его создать?

_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future); var stakan = MarketDepth(_lkoh); так ошибка, пробовал по разному.. 2) в консольном примере для смарт добавьте ввод ip'а, тк из-за этого я долго думал, почему он не коннектится.. Console.Write("Введите ip адрес торгового сервера: "); var ipv = Console.ReadLine();

            IPAddress ipadress = IPAddress.Parse(ipv);
            IPEndPoint ip = new IPEndPoint(ipadress, 8090);

  		using (var waitHandle = new AutoResetEvent(false))
  		{
  			// создаем шлюз к Smart-у
  			using (var trader = new SmartTrader(login, password, ip))

Теги:


Спасибо:


tmt

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


насколько я понял из примера для смарт, то стакан мы вызываем вот так

_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future); затем мы берем лучшую пару котировок var firstMid = _lkoh.BestPair.SpreadPrice / 2;

судя по всему чтобы показать общий объем бид.. надо как то вот так..

var firstMid = _lkoh.TotalBidsVolume; ведь надо же еще что то передавать (public decimal TotalBidsVolume { get; }) но вот мне пишет

Ошибка 1 "StockSharp.BusinessEntities.Security" не содержит определения для "TotalBidsVolume" и не был найден метод расширения "TotalBidsVolume", принимающий тип "StockSharp.BusinessEntities.Security" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\user\Desktop\StockSharp_4.0.14\Samples\Smart\SampleSmartConsole\Program.cs 138 46 SampleSmartConsole

подскажите пожалуйста

Спасибо:

BigBen

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


Для работы со стаканом в S# есть класс MarketDepth. У него есть свойства TotalBidsVolume (Получить общий объем по бидам) и TotalAsksVolume (Получить общий объем по офферам) - вот здесь и нужно копать.

Спасибо:

tmt

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


ну это понятно, но как? ведь если рассуждать отсюда http://www.stocksharp.com/doc/html/Properties_T_StockSharp_BusinessEntities_MarketDepth.htm , то BestPair тоже имеет класс MarketDepth (и я имею пример с этим BestPair, а как от него сделать TotalBidsVolume)

Спасибо:

BigBen

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


Примером, как я понимаю, является SampleSmartConsole. var firstMid = _lkoh.BestPair.SpreadPrice / 2; - здесь BestPair является свойством класса Security, экземпляр которого _lkoh имеет код = "LKOH". В данном примере класс MarketDepth не используется.

Спасибо:

tmt

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


а не мог бы подсказать пример где используется этот класс?

Спасибо:

fau

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


tmt: а не мог бы подсказать пример где используется этот класс? поиск по форуму?

Спасибо:

BigBen

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


Для SmartCOM стакан используется в примере SampleSmart.

Спасибо:

BigBen

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


Посмотри в примере для Quik http://stocksharp.com/doc/html/b6fea084-f43c-4eb7-ab63-ad3031d748a5.htm

Спасибо:

tmt

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


вобщем ошибок у меня больше не вылазиет. но вот программа не работает.. вся загвоздка с тем же.. добавил > private static MarketDepth _depth; и> // подписываемся на событие обновления стакана

                    trader.QuotesChanged += depths =>
                    {
                        if (_depth == null && _instrument != null)
                        {
                            _depth = depths.FirstOrDefault(d => d.Security == _instrument);

                            if (_depth != null)
                            {
                                Console.WriteLine("Стакан появился.");

                                if (_portfolio != null)
                                   waitHandle.Set();
                            }
                        }
                    };

ну и программа не идет дальше, тк depth у меня равное null остается

namespace SampleSmartConsole { using System; using System.Net; using System.Linq; using System.Threading;

using Ecng.Collections; using Ecng.Common;

using StockSharp.BusinessEntities; using StockSharp.Smart; using StockSharp.Algo;

class Program { private static Security _instrument; private static Portfolio _portfolio; private static MarketDepth _depth;

  static void Main()
  {
  	try
  	{
  		// для теста выбираем бумагу
  		const string secCode = "RIH2";

  		//Console.Write("Введите логин: ");
  		//var login = Console.ReadLine();
            var login = "ST12858";

  		//Console.Write("Введите пароль: ");
  		//var password = Console.ReadLine();
            var password = "8YDJ7E";

  		//Console.Write("Введите номер счета, через который будет выставлена заявка: ");
  		//var account = Console.ReadLine();
            var account = "ST12858-RF-01";

            IPAddress ipadress = IPAddress.Parse("95.131.26.246");
            IPEndPoint ip = new IPEndPoint(ipadress, 8090);

  		using (var waitHandle = new AutoResetEvent(false))
  		{
  			// создаем шлюз к Smart-у
  			using (var trader = new SmartTrader(login, password, ip))
  			{
  				// подписываемся на событие успешного подключения
  				// все действия необходимо производить только после подключения
  				trader.Connected += () =>
  				{
  					Console.WriteLine("Подключение было произведено успешно.");

  					// извещаем об успешном соединени
  					waitHandle.Set();
  				};

  				Console.WriteLine("Производим подключение...");

  				trader.Connect();

  				// дожидаемся события об успешном соединении
  				waitHandle.WaitOne();

  				// подписываемся на все портфели-счета
  				trader.NewPortfolios += portfolios =>
  				{
  					// необходимое условие работы в SmartCOM
  					portfolios.ForEach(trader.RegisterPortfolio);

  					if (_portfolio == null)
  					{
  						_portfolio = portfolios.FirstOrDefault(p => p.Name == account);

  						if (_portfolio != null)
  						{
  							Console.WriteLine("Портфель {0} появился.", account);

                                if (_instrument != null && _depth != null)
  								waitHandle.Set();
  						}
  					}
  				};

  				// подписываемся на событие появление инструментов
  				trader.NewSecurities += securities =>
  				{
  					if (_instrument == null)
  					{
                            // находим инструмент и присваиваем ее переменной _instrument
                            _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

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

                                if (_portfolio != null && _depth != null)
  								waitHandle.Set();
  						}
  					}
  				};

                    // подписываемся на событие обновления стакана
                    trader.QuotesChanged += depths =>
                    {
                        if (_depth == null && _instrument != null)
                        {
                            _depth = depths.FirstOrDefault(d => d.Security == _instrument);

                            if (_depth != null)
                            {
                                Console.WriteLine("Стакан появился.");

                                if (_portfolio != null)
                                   waitHandle.Set();
                            }
                        }
                    };

  				// подписываемся на событие появления моих новых сделок
  				trader.NewMyTrades += myTrades =>
  				{
  					foreach (var myTrade in myTrades)
  					{
  						var trade = myTrade.Trade;
  						Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
  					}
  				};

  				Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));

  				// запускаем экспорт по инструментам и портфелям
  				trader.StartExport();

  				// дожидаемся появления портфеля и инструмента
  				waitHandle.WaitOne();

  				trader.SecuritiesChanged += securities =>
  				{
  					// если инструмент хоть раз изменился (по нему пришли актуальные данные)
  					if (securities.Contains(_instrument))
  						waitHandle.Set();
  				};

  				Console.WriteLine("Дожидаемся обновления данных по инструменту...");

  				// запускаем обновление по инструменту
  				trader.RegisterSecurity(_instrument);
  				waitHandle.WaitOne();

  				// запоминаем первоначальное значение середины спреда
                    var totb = _depth.TotalBidsVolume;
                    var tota = _depth.TotalBidsVolume;
  				if (_instrument.BestBid == null)
  					throw new Exception("Нет лучшего бида для котировки.");

                    Console.WriteLine("общий объем bid", totb);
                    Console.WriteLine("общий объем ask", tota);

  				while (true)
  				{
  					var mid = _instrument.BestPair.SpreadPrice / 2;

  					// если спред вышел за пределы нашего диапазона
                        if (totb > tota)
                        {
                            var order = new Order
                            {
                                Portfolio = _portfolio,
                                Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                                Security = _instrument,
                                Volume = 1,
                                Direction = OrderDirections.Sell,
                            };
                            trader.RegisterOrder(order);
                            Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                            break;
                        }
                        else
                        {
                            var order = new Order
                            {
                                Portfolio = _portfolio,
                                Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
                                Security = _instrument,
                                Volume = 1,
                                Direction = OrderDirections.Buy,
                            };
                            trader.RegisterOrder(order);
                            Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                            break;
                        }
  						//Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);

  					// ждем 60 секунду
  					//Thread.Sleep(60000);
  				}

  				// останавливаем экспорт
  				trader.StopExport();
  			}
  		}
  	}
  	catch (Exception ex)
  	{
  		Console.WriteLine(ex);
  	}
  }

} }

Спасибо:

BigBen

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


Ты подписался на событие обновления стакана, но не вижу, где запустил экспорт стакана. Можно сделать так:

... // подписываемся на событие появление инструментов trader.NewSecurities += securities => { if (_instrument == null) { // находим инструмент и присваиваем ее переменной _instrument _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

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

trader.RegisterQuotes(_instrument); // запускаем экспорт стакана

if (_portfolio != null && _depth != null) waitHandle.Set(); } } }; ...

Спасибо: tmt


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

loading
clippy