← Zurück

Первый робот

День добры всем! У меня возникла проблема, изучаю S# (и параллельно C#, может поэтому до чего то не догоняю). Есть простой код:

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

	using Ecng.Collections;
	using Ecng.Common;

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

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

        
 
		static void Main()
		{
			try
			{
				сonst string secCode = "RIU3";

				var login = "*****";

				var password = "*****";

				var account = "*********";

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

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

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

						trader.Connect();

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

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

							if (_portfolio == null)
							{
								// находим нужный портфель и присваиваем его переменной _portfolio
								_portfolio = portfolios.FirstOrDefault(p => p.Name == account);

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

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

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

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

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

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

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

                                    if (_portfolio != null && _position != 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("Дожидаемся появления в программе инструмента RTS и портфеля {0}...".Put(account));

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

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

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

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

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

                        while (true)
                        {
                            MarketDepth x = new MarketDepth (_rts);

                            var totb = x.TotalBidsVolume;
                            var tota = x.TotalAsksVolume;
                         

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

                            Thread.Sleep(1000);
                        }
                        // останавливаем экспорт
                        trader.StopExport();
                        Console.WriteLine("StopExport");
                        Console.ReadKey();

						}
					}
				}
		    catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.WriteLine("catch");
                Console.ReadKey();
            }

		}
	}
}

Но он не работает, вроде все на месте, но выдает сплошные нули. Помогите разобраться, а то уже 3 день из головы кактусы....

War dieses Thema hilfreich?

Thema teilen

Kommentare (0)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Noch keine Kommentare. Seien Sie der Erste!