Exemple #1
0
        public void TestUnsafeMustFail()
        {
            var lines = new string[10000];

            for (int i = 0; i < lines.Length; i++)
            {
                lines[i] = "a";
            }
            var storage = new UnsafeStorage(lines);

            var tasks = new List <Task>();

            for (int i = 0; i < lines.Length; i++)
            {
                var task = new Task(() => storage.ReplaceFirst("a", ""));
                task.Start();
                tasks.Add(task);
            }

            Task.WaitAll(tasks.ToArray());
        }
Exemple #2
0
        public bool InitiateTest()
        {
            nextOrderId      = 1;
            lastTestStart    = DateTime.Now;
            firstDateOfTest  = null;
            startModelTime   = null;
            endModelTime     = null;
            hwm              = 0;
            maxAbsDrawdown   = 0;
            maxDailyDrawdown = 0;
            maxDrawdown      = 0;
            // начальная инициализация
            robotLogEntries.Clear();
            previousQuotes = new UnsafeStorage <string, QuoteData>();
            quotesStorage  = new UnsafeStorage <string, QuoteData>();
            InitTradeLib();

            // запомнить баланс торгового счета и вернуть его в исходное состояние
            // по завершению теста
            initialTestBalance    = AccountInfo.Balance;
            historyStartoffPassed = false;

            OnRobotMessage -= LogRobotMessages;
            if (LogRobots)
            {
                OnRobotMessage += LogRobotMessages;
            }

            // получить от гроботов используемые тикеры и старт истории
            // роботы сами указывают используемые тикеры, плюс также берутся тикеры из параметра Graphics
            var usedTickers = GetUserTickersAndStartTime();

            if (usedTickers.Count == 0)
            {
                Logger.DebugFormat("Бэк-тест портфеля из {0} роботов: не указаны используемые и торгуемые котировки",
                                   listRobots.Count);
                return(false);
            }

            if (UpdateTickerCache)
            {
                updateTickersCacheForRobots(usedTickers, 3);
            }

            // открыть файловые потоки
            testCursor = new BacktestTickerCursor();
            // !! path !!
            var path = ExecutablePath.ExecPath + "\\quotes";

            try
            {
                var cursorStart = usedTickers.Min(t => t.Value);
                if (!testCursor.SetupCursor(path, usedTickers.Keys.ToList(), cursorStart))
                {
                    testCursor.Close();
                    testCursor = null;
                    Logger.DebugFormat(
                        "Бэк-тест портфеля из {0} роботов: не удалось установить курсор, путь \"{1}\"",
                        listRobots.Count, path);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                if (testCursor != null)
                {
                    testCursor.Close();
                }
                testCursor = null;
                Logger.Error("Ошибка в SetupTest", ex);
                return(false);
            }
            return(true);
        }