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» и запускает квик со всеми роботами повторно.