Симулятор

Симулятор торгов по сетке ордеров – специальный инструмент для симуляции торгов на основе исторических данных по ценам сделок. Симулятор позволяет протестировать следующие параметры сетки:
  • Стартовую точку
  • Ширину линии сетки
  • Покрытие сетки (количество линий сетки)
Симулятор доступен по кнопке «Симулятор»
Окно симулятора состоит из 3 частей:
  • Список симуляторов
  • Результаты симуляции, содержащее список симуляций, которые были выполнены. На отдельных закладках выведен список ошибок и информационных сообщений.
  • Сетка симуляции со статистикой и параметрами линий сетки

Список симуляторов

Рассмотрим часть окна со списком симуляторов:

Состав колонок:
  • «Код» – порядковый номер симулятора в БД
  • «Аккаунт» - аккаунт, через который осуществляется получение данных по ценам с биржи
  • «Торговая пара» - торговая пара для симуляции
  • «Статус сборщика цен» - текущее состояние, в котором находится сборщик цен симулятора. Подробнее о сборщике цен смотрите в соответствующем разделе. Может быть:
    • «Остановлен» - сборщик цен остановлен
    • «Останавливается» - выполняется остановка сборщика цен
    • «Сбор цен» - выполняется сбор цен
  • «Автозапуск сбора цен» - признак необходимости автоматического запуска сборщика цен для симулятора при запуске программы.
  • «Дата первой сделки» - дата и время самой ранней сделки из сохраненных в БД для симулятора
  • «Дата последней сделки» - дата и время самой поздней сделки из сохраненных в БД для симулятора
  • «Минимальная цена» - значение самой минимальной цены сделки из сохраненных в БД для симулятора
  • «Максимальная цена» - значение самой максимальной цены сделки из сохраненных в БД для симулятора
  • «Всего записей» - общее количество записей с ценами сделок в БД для симулятора
  • «Статус импорта цен» - текущее состояние процедуры импорта цен. Может быть:
    • Пустым, если импорт не запускался
    • «Идет импорт...» - если в текущий момент выполняется импорт цен
    • «Импорт завершен» - если импорт данных завершен
  • «Статус симуляции» - текущее состояние симуляции. Может быть:
    • Пустым, если симуляция не запускалась
    • «Выполняется симуляция» - если в текущий момент выполняется
    • «Симуляция успешно завершена» - если симуляция завершена без ошибок
    • «Симуляция завершена с ошибкой» - если симуляция завершена и возникла ошибка. Текст ошибки можно увидеть на закладке «Ошибки» средней части окна.
Основные команды:
  • - Добавить новый симулятор
  • - Изменить выбранный симулятор
  • - Удалить выбранный симулятор. При удалении будут удалены все цены данного симулятора.
  • - Пересчитать статистику по всем симуляторам.
  • - Запустить сборщик цен выбранного симулятора
  • - Остановить сборщик цен выбранного симулятора
  • - Импортировать цены в выбранный симулятор. Подробнее об импорте цен смотри в соответствующем разделе
  • - Очистить цены выбранного симулятора. Удаляются все сохраненные цены выбранного симулятора.
  • - Запустить симуляцию торгов по сетке ордеров для выбранного симулятора.

Добавление и изменение симулятора

При добавлении и изменении симулятора необходимо заполнить поля в окне:

  • Код – порядковый номер симулятора. Заполняется автоматически при сохранении.
  • Аккаунт для сбора цен – аккаунт из списка аккаунтов, через который осуществляется получение цен
  • Торговая пара – торговая пара, по которой будет осуществляться сбор цен, импорт и симуляция.
  • Автоматический запуск сборщика цен – признак необходимости автоматического старта сборщика цен при запуске программы. Непосредственно после создания симулятора запуск необходимо осуществить вручную с помощью соответствующей кнопки.

Сборщик цен

Для запуска сбора цен используется кнопка  или сборщик цен запускается автоматически, если соответствующий параметр установлен.
После запуска статус сборщика цен будет принимать значение  . После каждого сохранения собранных цен в базу данных (раз в 30 секунд) осуществляется пересчет статистики. Сборщик цен собирает только текущие цены сделок на бирже история цен не загружается, биржа исторические данные по сделкам предоставляет только в свернутом виде. Если какое-то время сборщик цен не работал, то в ценах будет пробел, который не учитывается при моделировании – как будто пробела не было, просто между сделками большой промежуток времени. Для более точной симуляции необходимо, чтобы временной ряд цен имел как можно меньше пробелов.
Сохранение цен осуществляется в отдельную базу данных, которая расположена в том же каталоге, где и исполняемый файл приложения GridBot2.exe и называется Prices.db. Формат базы данных SQLite. Необходимо учитывать, что база с ценами может быть очень объемной, поэтому убедитесь, что каталог приложения расположен на диске с достаточным объемом свободного пространства. При очистке данных по ценам выбранного симулятора или удалении симулятора размер базы автоматически уменьшается на удаленный объем данных.  
Возможно одновременно собирать цены по любому количеству торговых пар. Ограничения могут быть только со стороны биржи. Правила и ограничения бирж регулярно обновляются.

 

Импорт цен

Альтернативой сбору данных по ценам - является импорт из базы данных, приобретенной в магазине https://www.gridbot.info/ru/shop/allprices
Формат базы данных – SQLite. Для импорта нужно выбрать необходимый симулятор и нажать на кнопку , затем выбрать файл базы данных, из которого необходимо импортировать данные. Если структура базы данных соответствует, то выбранные данные по торговой паре симулятора будут скопированы в базу данных цен симуляторов. Импорт осуществляется в фоновом режиме и о состоянии процедуры импорта можно судить по колонке «Статус импорта цен».

Симуляция торгов по сетке ордеров

Для запуска симуляции необходимо нажать на кнопку , откроется следующее окно:

 

В данном окне необходимо установить следующие параметры:
  • «Дату начала» и «Дату окончания» интересующего периода данных. За этот период будут извлекаться данные из базы данных по ценам. При нажатии на кнопку «Установить даты по всем данным» будут установлены даты самой ранней сделки в даты начала и самой поздней в дату окончания. Если данных в базе цен нет, то будет выдано следующее сообщение об ошибке:
  • «Стартовая точка (цена)» - та цена от которой будет строиться сетка вверх и вниз. Можно установить по умолчанию кнопкой «Установить параметры по периоду» как цену самой ранней сделки в указанном периоде.
  • «Способ определения диапазона сетки» - возможны два варианта:
    • «Фиксированное количество шагов» - указывается количество шагов сетки вверх и вниз от стартовой точки. Можно установить по умолчанию кнопкой «Установить параметры по периоду» как количество шагов, покрываемое самым малым шагом сетки от стартовой точки до максимальной и минимальной цены.
    • «Фиксированная ширина в %» - указывается ширина верхней части сетки и нижней от стартовой точки. Можно установить по умолчанию кнопкой «Установить параметры по периоду» как проценты покрывающие изменение цены от стартовой точки до максимальной и минимальной цены.
 
  • Шаг сетки в %, который последовательно перебирается от минимального до максимального с заданным изменением. Таким образом при симуляции будет произведен перебор соответствующего количества вариантов сетки, например:
    • Для параметров 1/1/10 будет произведено 10 симуляций с шагами 1,2,3,4,5,6,7,8,9,10 процентов
    • Для параметров 1/0.5/10 будет произведено 19 симуляций с шагами 1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10 процентов. Такой механизм позволяет подобрать оптимальный размер сетки для выбранных параметров.
  • «Комиссия биржи» – размер комиссии, который взимается биржей при совершении сделки.
  • «Стартовая сумма в базовой валюте на каждый шаг сетки» - количество монет в базовой валюте торговой пары, которое выделяется на стартовые ордера при симуляции. Данный параметр влияет только на абсолютное значение прибыли, на % годовых он не оказывает влияния.
  • «Количество потоков симуляции» - количество параллельных потоков, в которых будет обрабатываться симуляция. Количество потоков указывается на один симулятор, поэтому если одновременно запустить симуляцию по нескольким симуляторам, количество потоков будет увеличено кратно количеству одновременных симуляций.

После старта симуляции необходимо дождаться окончания – статус симуляции станет «Симуляция завершена».

В средней части окна отобразятся все симуляции, которые были проведены:

Состав колонок средней части окна:

  • «№» - порядковый номер симуляции
  • «Статус» – статус симуляции
  • «Стартовая точка» – цена, от которой строилась сетка ордеров вверх и вниз
  • «Сумма на старте» – общая сумма на старте по всем линиям сетки
  • «Сумма на финише» – общая сумма по всем линиям сетки по окончанию симуляции
  • «Прибыль (% годовых)» - итоговый общий процент годовых симуляции
  • «Шаг сетки» - шаг сетки в процентах цены
  • «Ширина сетки (%) вверх» - верхняя часть сетки в % от стартовой точки до верхней линии сетки
  • «Ширина сетки (%) вниз» - нижняя часть сетки в % от стартовой точки до нижней линии
  • «Ширина сетки (%) всего» - общая ширина сетки в %
  • «Шагов сетки (шт.) вверх» - количество линий сетки вверх от стартовой точки
  • «Шагов сетки (шт.) вниз» - количество линий сетки вниз от стартовой точки
  • «Шагов сетки (шт.) всего» - общее количество линий сетки
  • «Сделок BUY на покупку» - всего сделок на покупку по всем линиям сетки
  • «Сделок SELL на продажу» - всего сделок на продажу по всем линиям сетки
  • «Сделок всего» - общее количество сделок
  • «Мин. цена» - минимальная цена из всех сделок симуляции
  • «Макс. цена» - максимальная цена из всех сделок симуляции
  • «Сделок проанализировано» - количество сделок, на которых проводилась симуляция
  • «Длительность симуляции (сек.)» - общее время, затраченное не расчеты. Не включает время на выборку и подготовку данных.

В нижней части окна отображается статистика сетки, по которой проводилась симуляции. Необходимо выбрать в среднем окне интересующую симуляцию для отображения ее сетки.

Состав колонок статистики сетки, следующий:

  • «№» - номер строки сетки
  • «Цена покупки» - цена, по которой выставляются ордера BUY на линии сетки
  • «Цена продажи» - цена, по которой выставляются ордера SELL на линии сетки
  • «Тип ордера на старте» - тип стартового ордера на линии сетки
  • «Сумма на старте» - сумма стартового ордера на линии сетки
  • «Сумма на финише» - сумма ордера на финише на линии сетки
  • «Прибыль (% годовых)» - итоговый общий процент годовых симуляции на линии сетки
  • «Сделок BUY на покупку» - всего сделок на покупку на линии сетки
  • «Сделок SELL на продажу» - всего сделок на продажу на линии сетки
  • «Сделок всего» - общее количество сделок на линии сетки

Особенности алгоритма симуляции

  1. При симуляции используется упрощенная модель расчетов, которая не сильно влияет на точность, но сильно ускоряет расчет, а также не требует данных по курсам других торговых пар, которые при торговле используются для расчета прибыли приведенной к BTC и USDT каждой из монет торговой пары. Также упрощается указание стартовой суммы на линиях сетки – везде одинаковая сумма и выражена только в базовой валюте, хотя нижняя часть секи будет выставляться на покупку и нужно обладать второй монетой валютой пары. При этом прибыль рассчитывается при паре сделок SELL-BUY или BUY-SELL как накопленная сумма плюс % ширины шага и минус двойной процент комиссии, т.к. комиссия платится за обе сделки пары.
  2. Не учитываются объемы торгов для упрощения и ускорения расчетов. Условно принимается, что если ордер исполняется, то он всегда исполняется на полную сумму.
  3. Результат симуляции приводится по периоду к % годовых, чтобы можно было сравнить различные пары между собой и различные периоды данных. При этом за период симуляции берутся указанные «Дата начала» и «Дата окончания», который может быть шире, чем имеющиеся сделки. Пробелы по сделкам считаются простоем, соответственно расчетный % годовых будет меньше. Например, если мы собрали данные за май месяц, а в симуляторе указали 2 месяца - май и июнь полностью, то торги, фактически, велись только в мае и поэтому расчетный % будет примерно в 2 раза меньше, чем, если бы мы запустили симуляцию только за май. Это необходимо учитывать.
  4. При торговле результаты капитализируются после каждой пары сделок

Потребность в ресурсах

Необходимо учитывать, что при симуляции все данные по ценам выбираются в оперативную память. При большом количестве сделок расход памяти может быть значительным - десятки Гб. Для снижения потребления памяти необходимо:
  • Уменьшить одновременное количество симуляций по различным торговым парам
  • Уменьшить период выборки цен
Количество потоков на расход памяти существенно не влияет.
Количество потоков не рекомендуется указывать больше, чем количество логических потоков, поддерживаемое вашим процессором. Это может привести к замедлению работы компьютера.

 

Интерпретация результата

Важно понимать, как интерпретировать и использовать результат симуляции. Можно выделить следующие тезисы:

  1. Все результаты вероятностны. Нет 100% вероятности повторения результата.
  2. Симуляция происходит на данных прошлого и нет никаких гарантий, что в будущем будет аналогичные объемы торгов и волатильность выбранной торговой пары.
  3. Результат симуляции приблизительный и дает понимание порядка прибыльности, если бы вы начала торговать с симулируемыми параметрами сетки.
  4. Объем анализируемых данных очень важен. Если вы сделаете симуляцию на 7 днях - вероятность повторения результата меньше, чем если симуляция будет на 30 днях.
  5. Если по какой-то паре вас устроили результаты симуляции и вы хотите попробовать торговать с такими же параметрами, то сделайте пробного бота с минимальными ордерами на каждой линии сетки (обычно ~10 USDT) и проанализируйте в течение примерно 1/4 периода симуляции (если симуляция за 1 месяц, то наблюдать нужно минимум 1 неделю) и скорректируйте параметры бота или закройте его, если результат не устраивает.