private List<KeyValuePair<int, string>> listArray; private Dictionary<int, string> dictArray;
// Переменные для замера времени выполнения sw1 = new Stopwatch(); sw2 = new Stopwatch(); // Инициализация переменных listArray = new List<KeyValuePair<int, string>>(); dictArray = new Dictionary<int, string>(); // Стартуем замер производительности sw1.Start(); for (int i = 0; i < 1000000; i++) { //Добавляем переменную в массив listArray.Add(new KeyValuePair<int, string>(i, "test")); } // Останавливаем замер производительности sw1.Stop(); // Выводим результат Print("List: " + sw1.ElapsedMilliseconds); // Очищаем список listArray.Clear(); // Стартуем второй счетчик производительности sw2.Start(); // Запускаем второй цикл for (int i = 0; i < 1000000; i++) { dictArray.Add(i, "test"); } // Останавливаем счетчик sw2.Stop(); // Выводим результат Print("Dictionary: " + sw2.ElapsedMilliseconds);
Когда ваш робот торгует большим количеством инструментов, то открытие такого же количества графиков может привести к падению терминала Quik. Или к заметным тормозам операционной системы. Также необходимость открытых графиков может привести к ошибкам (забыли открыть, нечаянно закрыли, не корректно указали тег и т.д.)
Используя язык программирования Lua при написании робота, можно избежать этих неудобств. Можно все индикаторы считать внутри самого робота. Таким образом необходимость в открытии графика и настройки индикатора в нем отпадает. Один из минусов такого метода является то, что сам индикатор придется переписывать таким образом, чтобы он работал внутри робота. Прикладываю пример скрипта, который может работать с любым количеством инструментов, без открытия графиков. Каждая строчка содержит комментарии, думаю разобраться как все работает будет не трудно.
В торговом терминале Quik есть возможность управлять расположением индикаторов. При добавлении серии на график можно установить галочку «Поместить график в новую область» и тогда серия (Цена инструмента или индикатор) попадет в отдельную область (по умолчанию под графиком). Если не устанавливать галочку, то серия добавиться на ту же область, что и текущая серия (цена инструмента).
Добавим на график цены индикатор MACD. Убираем галочку и получаем вот такой результат:
public void Print(string output) { OutputEventArgs.ProcessEventArgs(new OutputEventArgs(output + "\r\n")); }
Все на картинке. Добавить нечего.
Во все стратегии добавил функцию, которая парсит входящие сообщения и если встречаются слова «очистить» и «archive», то робот запускает скрипт, который останавливает квик, чистит папку «archive» и запускает квик со всеми роботами повторно.