Практически любой робот в OsEngine может создавать внутри себя сетки как в ручном, так и автоматическом режиме. В этой статье будем учиться делать это в ручном режиме. Также в ней есть описание всех настроек сетки в первом приближении.

Создаём робота с источником BotTabSimple.
Сетки создаются в любом роботе с источником BotTabSimple. Для примера мы создадим робота без логики, который называется “Engine”:
Далее нам нужно открыть окно робота и перейти в меню создания сеток. Здесь нажимаем на кнопку «Новая»:
Нажимаем «Настройки». Вызов окна ручной настройки сетки производиться из этого меню:
Вы увидите окно с множеством вкладок и несколькими десятками настроек.
1. Базовые настройки.

- «Тип сетки»:
- MarketMaking – сетка, закрывающаяся отдельно по каждому уровню лимитными ордерами с заранее настроенной точкой выхода.
- OpenPosition – сетка, рассчитанная на открытие позиции, стандартным способом выхода из которой является Стоп / Профит или Трейлинг стоп, при этом рассчитывается средняя цена входа по всем уровням, и от них откладываются условные заявки.
- «Режим торговли»:
- Off – Выключена. В этом режиме сетка не делает ничего, за исключением возможного события включения сетки по «Автостарту».
- OffAndCancelOrders — Выключена. Но при этом, если имеются ордера, которые стоят на бирже — робот будет пытаться их отозвать.
- On – Включена. Работает штатная логика робота.
- CloseOnly – Новые открытия запрещены. Выставляются только ордера на закрытие ранее открытых позиций.
- CloseForced – Включена процедура принудительного закрытия сетки. Сначала отзываются все лимитные ордера по сетке, затем закрываются все ранее открытые позиции Market заявкой. После того, как все позиции по сетке закрыты, переводит режим в Off.
- «Режим входа в логику»:
- Это выбор способа обработки логики робота.
- OncePerSecond – один раз в секунду. Рекомендуется включать в реальных торгах, и запрещён к включению в тестере.
- OnTrade – на новом трейде. Нужен в тестере в обязательном порядке. В реале может загрузить ЦП и уронить программу, т.к. в реале внутри секунды могут быть тысячи трейдов.
- «Режим очистки журнала»:
- True – журнал будет очищаться от ранее закрытых позиций. Это позволяет ускорить работу программы и избавляет от задержек, когда в журнале накапливаются десятки тысяч сделок.
- False – выключено.
- «Макс. закрытых позиций в журнале»:
- Количество закрытых позиций, которые робот будет хранить в журнале. Чем меньше, тем быстрее в итоге скорость работы программы.
- Максимальное кол-во лимитных ордеров в стакане на открытие.
- Максимальное кол-во лимитных ордеров в стакане на закрытие.
- «Ожидание операций»: Время которое алгоритм ожидает, после отправления ордеров на биржу и ничего не делает. Для большинства брокеров нужно оставлять без изменений. 500 миллисекунд.
- «Проверять микрообъёмы»: Дополнительная проверка при закрытии позиций. В случае если в ней осталось меньше чем может принять биржа – такая позиция игнорируется. Актуально для бирж криптовалют.
- «Макс. Расстояние от цены %»: Ограничение для выставления ордеров. Если линия в сетке находится на расстоянии больше указанного – ордер не будет выставлен. Если указано 0 – то выключено.
2. Кнопки управления.
Кнопки для управления сеткой:

- Загрузить настройки сетки из файла.
- Сохранить настройки сетки в файл.
- «Старт»: Кнопка для быстрого переключения режима робота в ON.
- «Стоп»: Кнопка для быстрого переключения режима робота в CloseOnly.
- «Закрыть»: Кнопка для быстрого переключения режима робота в CloseForced.
3. Создание сетки.
Вкладка настроек, которая позволяет сгенерировать новую сетку или ввести правила для её генерации:

- «Направление» – сторона открытия сетки.
- Buy – покупка.
- Sell – продажа.
- «Первая цена» — стартовая цена для расчёта уровней сетки.
- «Количество линий» — количество уровней сетки.
- «Шаг» — имеется ввиду шаг сетки и его настройки:
- Параметр 1, тип шага. Можно настроить в абсолюте и в процентах;
- Параметр 2, значение шага;
- Параметр 3, коэффициент. Базово единица, которая ничего не меняет. Если начинать изменять это значение, расстояние между линиями будет меняться.
- «Профит» — закрытие позиции по линии. Актуально для сеток типа «MarketMaking», при котором каждая позиция по каждой линии должна будет отдельно закрыться:
- Параметр 1, тип шага. Можно настроить в абсолюте и в процентах;
- Параметр 2, значение профита. Будет отсчитываться от цены линии;
- Параметр 3, коэффициент. Базово единица, которая ничего не меняет. Если начинать изменять, расстояние между ценой линии и ценой профита будет меняться.
- «Объём» — настройки объёма для линий:
- Параметр 1, тип объёма:
i. Contracts – указывается жёсткое кол-во контрактов;
ii. ContractsCurrency – указывается валюта контракта, т.е. кол-во денег, которое будет потрачено на открытие позиций на каждом уровне;
iii. DepositPercent – процент от депозита, который нужно открыть на каждом уровне.
2. Параметр 2, значение объёма на каждый уровень. Что именно означает это значение указывается в предыдущем параметре.
3. Параметр 3, коэффициент. Базово единица, которая ничего не меняет. Если начинать изменять это значение, кол-во объёма будет изменяться.
4. «Актив» — в случае, если Вы выбираете объём типа «DepositPercent», то в это поле нужно вставить название портфеля в валюте, по которому мы будем смотреть текущее кол-во средств. В большинстве случае нужно оставить настройку как «Prime».
7. Кнопка «Создать сетку» — генерирует новую сетку по текущим настройкам.
8. Кнопка «Удалить сетку» — удаляет сетку из памяти.
9. Кнопка «Добавить линию» — добавляет линию в таблицу. Её значение предполагается заполнить вручную.
10. Кнопка «Удалить выбранные» — удаляет линии, которые пользователь выбрал в таблице ниже.
4. Таблица с сеткой.

- Колонка «Позиции». Хранит в себе номер позиции по линии, если она есть.
- Колонка «Цена входа». Цена входа по линии. По этой цене будет выставлен лимитный ордер.
- Колонка «Цена выхода». Цена выхода из позиции для линии. Актуально для типа сетки «MarketMaking». В режиме «OpenPosition» здесь будут прочерки.
- Колонка «Объём». Объём, который должен открыться на данном уровне.
- Колонка «Открытый объём». Кол-во контрактов, которое уже открыто на данном уровне.
- Колонка «Направление». Направление лимитного ордера на открытие позиции на уровне. Buy / Sell.
- Колонка с галочками. Если выбрать какую-то линию и нажать на кнопку «Удалить выбранные», линия будет удалена из сетки.
5. Таблица с сеткой. Вызов окна позиции.
После включения сетки в работу мы можем видеть следующее:

- Если по какому-то уровню есть открытая позиция, появляется фактический объём, обозначенный зелёным.
- В колонке «Позиции» появляются кнопки с номерами позиций, привязанных к уровню.
При нажатии на какую-либо кнопку с номером позиции откроется окно её спецификации:

В окне спецификации позиции можно будет посмотреть ордера на открытие и закрытие позиции по линии. Трейды, которые по ней прошли. Статус позиции.
6. Стоп-торги.
Можно настроить автоматический переход сетки из режима On в другие при помощи следующего окна настроек:

- «По движению вверх. %» — выключение сетки при движении ВВЕРХ на рынке от первой выставленной в рынок заявки до текущей цены.
- Окно для ввода размера движения вверх для закрытия.
- Режим, в который нужно перевести сетку при движении вверх.
- «По движению вниз. %» — выключение сетки при движении ВНИЗ на рынке от первой выставленной в рынок заявки до текущей цены.
- Окно для ввода размера движения вниз для закрытия.
- Режим, в который нужно перевести сетку при движении вниз.
- «По количеству закрытых сделок» — выключение сетки после того, как закрылось определённое количество позиций по сетке. Актуально для режима «MarketMaking», когда каждая позиция по линии должна закрываться лимитной заявкой и закрывается отдельно.
- Количество закрытых сделок для выключения сетки.
- Режим, в который надо перевести сетку при выключении по кол-ву закрытых позиций.
- «По кол-ву секунд с включения» — выключение сетки после того, как она отработала определённое кол-во секунд.
- Кол-во секунд для жизни сетки.
- Режим, в который нужно перевести сетку при выключении по времени жизни.
- «По времени дня» — выключение сетки после того, как придёт определённое время внутри дня.
- Ожидаемое время внутри дня. Ч: Часы. М: Минуты. С: Секунды.
- Режим, в который надо перевести сетку при выключении по времени дня.
7. Автостарт.
Автоматический перевод режима сетки в ON при достижении определённой цены:

- «Режим»: режим работы модуля:
- Off – выключен.
- LowerOrEqual – ожидаем цену инструмента ниже или равной указанной.
- HigherOrEqual – ожидаем цену инструмента выше или равной указанной.
- «Цена»: ожидаемая цена для автостарта сетки.
- Авто-старт по времени дня. Как только время сервера станет больше чем указанное значение, сетка выставится автоматически:
- «Сдвинуть сетку на старте»: если включено, то во время процедуры автостарта сетка будет пересчитана относительно текущей цены на рынке.
- «Сдвиг первой цены %»: если включен режим сдвига сетки на старте, данное значение указывает на сколько процентов вверх или вниз нужно отклонить первую цену сетки во время пересчёта.
- «Режим одиночной активации»: По умолчанию включено, и это означает, что после того как активация сработает, авто-старт будет отключен. Если включено, то исчезает ситуация, при которой Вы потом не сможете выключить сетку, т.к. она будет сразу же выбрасываться вновь.
8. Подтягивание (Trailing Up / Trailing Down).
Настройки автоматического перемещения сетки вверх и вниз, вслед за ценой инструмента.

- «Подтягивание вверх». Включено или выключено.
- Шаг сдвига сетки. Чтобы перемещение сетки не работало каждое минимальное изменение цены.
- Ограничение. Цена, после достижения которой сетка перестаёт смещаться.
- Разрешить двигать закрывающие ордера. Если включено – то закрывающие ордера на сетке тоже будут смещаться по мере подтягивания сетки.
- «Подтягивание вниз». Включено или выключено.
- Шаг сдвига сетки. Чтобы перемещение сетки не работало каждое минимальное изменение цены.
- Ограничение. Цена, после достижения которой сетка перестаёт смещаться.
- Разрешить двигать закрывающие ордера. Включено или выключено. Если включено – то закрывающие ордера на сетке тоже будут смещаться по мере подтягивания сетки.
Как это работает:
- У сетки есть максимальная и минимальная цена ордера.
- Подтягивание вверх смещает сетку вверх, когда текущая цена отклоняется от максимальной цены сетки на «Шаг сдвига».
- Подтягивание вниз смещает сетку вниз, когда текущая цена отклоняется от максимальной цены сетки на «Шаг сдвига».
9. Неторговое время.
Можно настроить дни, в которые сетка будет автоматически отключаться:

- Выбираем режим, который будет у сетки в неторговый день.
- По нажатию на кнопку открывается интерфейс, в котором можно настроить торговые дни и не торговые периоды.
10. Открытие только мейкер
Если ничего не менять, ордера будут стараться не выставляться по рынку. Т.е. в стакан будут выставлены только те ордера, которые не могут исполниться мгновенно.
За это отвечает настройка «Открытие только мейкер». И по умолчанию она включена, т.е. True.
Если её перевести в False, как в примере ниже, все ордера сетки будут выброшены в рынок мгновенно, не зависимо ни от чего:

11. Стоп и профит.
Если включен режим сетки «Open Position», доступно выставление общих по всем позициям сетки Стопов и Профитов.
Настройки:

- «Profit режим»: включен ли общий профит или нет. Варианты: On / Off
- «Тип переменной»: Какой тип переменной указан в «Значении». Абсолютные значение или проценты.
- «Значение». Профит для сетки.
- «Stop-loss режим»: включен ли общий stop-loss или нет. Варианты: On / Off
- «Тип переменной»: Какой тип переменной указан в «Значении». Абсолютные значение или проценты.
- «Значение». Stop-loss для сетки.
- «Trail-stop режим»: включен ли общий trail-stop или нет. Варианты: On / Off
- «Тип переменной»: Какой тип переменной указан в «Значении». Абсолютные значение или проценты.
- «Значение». Trail-stop для сетки.
- Средняя цена входа по всем уровням сетки.
Как Stop-loss и Profit выглядят на графике:
- По сетке есть открытая позиция. Т.е. на каких-то уровнях наши лимитные ордера исполнились.
- Исходя из этих входов рассчитана средняя цена входа в позицию.
- Для всех открытых позиций выставлен профит приказ.
- Для всех открытых позиций выставлен стоп приказ.
- Когда цена достигнет стопа или профита, она будет закрыта Market заявками целиком.
Как работает Trail-Stop:
Подтягивающийся стоп по общей позиции сетки выставляется после исполнения первых лимитных ордеров по уровням:
Далее. При движении цены вверх стоп будет подтягиваться вверх.
Данный тип подтягивающегося стоп приказа в какой-то момент выходит в безубыток, а далее уже и в прибыль, давая прибыли расти.
12. Остановка сетки по ошибкам выставления и отзыва ордеров.
Во время работы могут возникнуть ошибки с выставлением и отзывом ордеров с рынка.
Ошибки постановки ордеров могут быть по причинам неправильно указанных объёмов или недостаточности обеспечения.
Ошибки отзыва ордеров могут возникать по причинам проблем сети интернет.
В обоих этих случаях нужно что-то делать и после определённого кол-ва ошибок сетку нужно отключать, чтобы разбираться с природой ошибок.
Настройки обработчика ошибок здесь:

- «Проверять ошибки выставления ордеров». Если галочка стоит, робот будет следить за кол-вом ошибок.
- «Реакция». Что будет, если критический уровень ошибок уже произошёл.
- «Макс. Ошибок на выставлении». Кол-во ошибок, которое считается критическим, и пора реагировать.
- «Ошибок на выставлении. Сейчас». Кол-во ошибок, которое было обнаружено за текущую сессию работы робота.
- «Проверять ошибки отзыва ордеров». Если галочка стоит, робот будет следить за кол-вом ошибок при отзыве ордеров.
- «Реакция». Что будет, если критический уровень ошибок уже произошёл.
- «Макс. Ошибок на отзыве». Кол-во ошибок, которое считается критическим, и пора реагировать.
- «Ошибок на отзыве. Сейчас». Кол-во ошибок, которое было обнаружено за текущую сессию работы робота.
- Блок настроек, отвечающий за ожидание в выставлении ордеров после переподключения. Рекомендовано оставить как есть.
Удачных алгоритмов!
Пост из серии статей про Сеточных роботов: https://smart-lab.ru/company/os_engine/blog/1167610.php
Комментарии открыты для друзей!

https://smart-lab.ru/company/os_engine/blog/1024149.php
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support