예제 #1
0
        public void TestMakeCandles()
        {
            var pool = new CandlePackerPool();

            var quoteNames = new[] { "EURUSD", "GBPUSD" };

            CandleDataBidAsk[] candles = null;
            for (var date = DateTime.Now.Date; date < DateTime.Now.Date.AddDays(1).AddSeconds(1); date = date.AddSeconds(22))
            {
                candles = pool.MakeCandles(new[]
                {
                    new QuoteData(1, 1.0001f, date),
                    new QuoteData(2, 2.0001f, date),
                }, ref quoteNames);
                Assert.IsNotNull(candles, "CandlePackerPool.MakeCandles - должен таки вернуть свечи");
                Assert.AreEqual(candles.Length, 2, "CandlePackerPool.MakeCandles - должен таки вернуть 2 свечи");
            }
            var candle = candles[0];

            Assert.Less((DateTime.Now.Date.AddDays(1) - candle.timeClose).TotalSeconds, 30,
                        "CandlePackerPool.MakeCandles - должен закончиться на последней свече за день");

            // добавить левый тикер
            quoteNames = new[] { "EURUSD", "IDDQD" };
            candles    = pool.MakeCandles(new[]
            {
                new QuoteData(1, 1.0001f, DateTime.Now),
                new QuoteData(2, 2.0001f, DateTime.Now),
            }, ref quoteNames);
            Assert.AreEqual(1, candles.Length, "CandlePackerPool.MakeCandles - должен пропустить левый тикер (свечу)");
            Assert.AreEqual(1, quoteNames.Length, "CandlePackerPool.MakeCandles - должен пропустить левый тикер");
            Assert.IsNotNull(candles[0], "CandlePackerPool.MakeCandles - оставшаяся свеча не должна пропасть");
        }
예제 #2
0
        /// <summary>
        /// отдать "живые" котировки роботам
        /// </summary>
        private void ProcessQuoteRoutineDoWork(object sender, DoWorkEventArgs e)
        {
            var quoteList = (List <Cortege2 <string, QuoteData> >)e.Argument;

            string[]           quoteNames;
            CandleDataBidAsk[] candles;
            packerPool.MakeCandles(quoteList, out quoteNames, out candles);

            foreach (var robot in robots)
            {
                List <string> robotEvents;
                try
                {
                    robotEvents = robot.OnQuotesReceived(quoteNames, candles, false);
                    if (robotEvents == null || robotEvents.Count == 0)
                    {
                        continue;
                    }
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("Ошибка в ProcessQuoteRoutineDoWork ({0}): {1}",
                                       robot.GetUniqueName(), ex);
                    continue;
                }

                ShowRobotEventsSafe(robot, robotEvents);
            }
        }
예제 #3
0
        public void OnQuotesReceived(string[] names, QuoteData[] quotes)
        {
            if (State != FarmState.Started)
            {
                return;
            }
            // if (RobotFarmOffTime.IsTimeOff()) return;
            var candles = packerPool.MakeCandles(quotes, ref names);

            foreach (var account in Accounts)
            {
                try
                {
                    account.OnQuotesReceived(names, candles, false);
                }
                catch (Exception ex)
                {
                    Logger.Error("Ошибка обработки котировок по счету " + account.AccountId + ": " + ex.Message);
                }
            }
        }