Beispiel #1
0
        //Метод получает свечки для каждого обрабатываемого инстумента
        private int GetCandles(object obj, IQFeedTrader trader)
        {
            List<Security> securities = (List<Security>)obj;    //коллекция хранит "пучок", переданных в данный метод, инструментов для закачки таймсерий и передачи их в стратегию          

            //while (run)
            //{
            //trader = new IQFeedTrader();

            trader.Connect();
            Debug.Print("CONNECTION STATE: {0}", trader.ConnectionState);
            Thread.Sleep(1000);  //Уснуть на 1000 миллисекунд для того, чтобы дать коннектору установить подключение

            foreach (var security in securities)
            {
                if (!run)
                {
                    return 0;
                }
                bool isDaysSuccess;
                bool is5MinutesSucсess;

                //Debug.Print("BEFORE");
                List<Candle> dayCandles = (List<Candle>)trader.GetHistoricalCandles(security, typeof(TimeFrameCandle), TimeSpan.FromDays(1), 65, out isDaysSuccess);   //получить дневные свечки текущего инструмента
                List<Candle> candles = (List<Candle>)trader.GetHistoricalCandles(security, typeof(TimeFrameCandle), TimeSpan.FromMinutes(5), 100, out is5MinutesSucсess);   //получить пятиминутные свечки текущего инструмента
                List<Candle> intradayCandles = new List<Candle>();     //"чистые" свечки - с начала сессии по текущую 
                                                                       //Debug.Print("AFTER");

                foreach (var candle in candles)
                {
                    var candleOpenTime = candle.OpenTime - TimeSpan.FromHours(5);

                    if (candleOpenTime.Ticks >= startSession.Ticks && candleOpenTime.Ticks <= endSession.Ticks) //если свечка относится к текущей сессии, то добавляем ее в "чистую" коллекцию
                    {
                        intradayCandles.Add(candle);
                        //if(candle.Security.Code == "A")
                        //    Debug.Print("{0}, {1}", candleOpenTime, candle.ClosePrice);
                    }
                }

                if (!blackList.Contains(security))  //Если по текущему инструменту еще нет запущенных стратегий, то отправляем его на сканирование
                {
                    Scanner scanner = new Scanner
                    {
                        DayCandles = dayCandles,
                        IntradayCandles = intradayCandles,
                        Trader = Trader,
                        //Portfolio = Portfolio
                        Portfolio = new Portfolio()
                    };

                    scanner.StrategyStarted += Scanner_StrategyStarted; //Подписываемся на события старта стратегии, чтобы добавить ее в менеджер логгирования для отслеживания

                    int i = scanner.Scan();
                    if (i == 1)
                        Processed(i, 0);
                    else
                    {
                        Processed(i, 1);
                    }
                }
            }
            //trader.Disconnect();
            //Thread.Sleep(1000);
            //trader.Dispose();
            //}
            return 0;
        }