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