Всем привет! В этой статье я хотел бы рассказать как получить данные по свечам с помощью библиотек StockSharp из терминала Quik. Для этого необходимо настроить терминал Quik для совместной работы с библиотеками StockSharp. Как это сделать я уже писал тут. Откроем Visual Studio и создадим консольное приложение с названием SimpleCandle. Для работы нашего приложения нужно подключить следующие библиотеки:
using StockSharp.Algo.Candles; using StockSharp.Quik; using System; using StockSharp.BusinessEntities; using StockSharp.Messages;
На текущий момент актуальная версия StockSharp 4.3.28. Теперь все готово. Для получения свечей нам потребуются следующие типы данных. Сделаем для них поля.
private static readonly QuikTrader QuikTrader = new QuikTrader(); //коннектор к терминалу Quik private static CandleManager _candleManager; //менеджер свечек private static CandleSeries _candleSeries; //серия свечек которую мы будем получать из менеджера private static Security _security; //инструмент private const string SecId = "SBER@QJSIM"; //идентификатор инструмента
- QuikTrader – коннектор к терминалу Quik;
- CandleManager – из названия ясно что это менеджер свечек;
- CandleSeries – серия свечек которую мы будем получать из менеджера;
- SecId – идентификатор инструмента;
- Security – собственно сам инструмент;
Далее в теле метода Main пропишем следующее
static void Main(string[] args) { QuikTrader.NewSecurity += security => //подписываемся на получение новых инструментов { if (_security == null && SecId == security.Id) { _security = security; GetCandleInfo(); } }; QuikTrader.Connect(); //устанавливаем подключение Console.ReadKey(); // приостанавливаем дальнейшее выполнение консоли до нажатия любой клавиши }
Здесь мы подписываемся на получение всех новых инструментов. Далее устанавливаем подключение и приостанавливаем дальнейшее выполнение консоли до нажатия любой клавиши. Как только установится подключение коннектор начнет получать все инструменты, которые будут приходить к нам через событие NewSecurity на которое мы подписались лямбда-выражением или анонимным методом. В теле метода мы проверяем совпадает ли наш идентификатор с идентификатором пришедшего инструмента и не содержит ли в себе поле _security значение по умолчанию, то есть null. Как только условия совпадут, то есть вернут истину (true) в поле _security будет присвоена ссылка на инструмент по которому нужно получить свечи, а все следующие проверки не сработают так как поле _security уже не вернет null. Сразу же после того как мы получили инструмент запускаем метод GetCandleInfo() в котором собственно и будем получать данные по свечам.
private static void GetCandleInfo() { _candleSeries = new CandleSeries(typeof(TimeFrameCandle), _security, TimeSpan.FromMinutes(1)); _candleManager = new CandleManager(QuikTrader); _candleManager.Processing += (series, candle) => { if(candle.State == CandleStates.Finished) Console.WriteLine("Свеча: " + $"Инструмент => {candle.Security.Code} " + $"Open =>{candle.OpenPrice} " + $"Close =>{candle.ClosePrice} " + $"High =>{candle.HighPrice} " + $"Low =>{candle.LowPrice} " + $"Time =>{candle.OpenTime} " + $"Volime=>{candle.TotalVolume}"); }; _candleManager.Start(_candleSeries); }
Рассмотрим метод GetCandleInfo.
В _candleSeries мы присваиваем ссылку на экземпляр класса СandleSeries. Этот тип данных говорит какие свечи, по какому инструменту и какого таймфрейма мы будем получать. Из 34 строки видно, что получать мы будем свечи типа TimeFrameCandle (тип свечи может быть не только по таймфрейму), по инструменту SBER@QJSIM идентификатор которого мы указали выше и таймфрейм свечей - 1 минута. Далее на строке 35 создаем экземпляр CandleManager передавая ему в качестве параметра коннектор QuikTrader. Для того что бы получить свечи необходимо подписаться на событие Processing менеджера свечей. Через данное событие к нам будут приходить свечи по одной. Подписываемся как и в случае с инструментом анонимным методом. В теле метода на строке 37 проверяем закрылась свеча или нет. Выводить будем только те свечи которые уже закрыты. Воспользуемся статическим классом и его методом Console.WriteLine для печати данных свечей. Со строки 39 по 46 запрашиваем:
- Код инструмента
- цена открытия
- цена закрытия
- цена максимума
- цена минимума
- время открытия
- объем свечи.
Для импорт свечей осталось только вызвать метод Start менеджера свечей и передать ему параметром нашу серию свечей. В результате мы увидим консоль в которую будут печататься свечи приходящие из терминала Quik. Свечи получать можно по разным инструментам, разных тайм-фреймов и типов одновременно. Естественно код представленный мной не является эталоном и имеет ознакомительный характер.
На этом все. Всем добра.