В продолжении первой статьи
Не каждый заказчик может написать техническое задание по ГОСТу, но всегда можно написать своими словами, либо скриншотами или привести примеры с помощью цифр, чтоб разработчику стало понятно, что нужно от торгового робота.
Какие основные моменты нужно отразить в техническом задании по созданию торгового робота:
- Торговый терминал (квик, транзак коннектор и т.д.);
- Язык программирование, если есть предпочтения. В другом случае разработчик предложит вам варианты реализации торгового робота
- Нужен или нет графический интерфейс;
- Открытие и закрытие позиции, какими заявками производится:
— Рыночные или лимитные заявки
— Стоп-заявки, должны ли выставляться в терминал или весь расчет ведется в роботе
— Если заявки лимитные, если не исполнились, то какие должны быть следующие действия — переставляется, сниматься, исполнятся по рынку;
— Исполнение заявок по закрытию свечи, либо по цене закрытия при появлении новой свечи или за несколько секунд до конца формирования свечи, и в этом случае нужно учесть, что если по окончанию формировании свечи, сигнал пропадет – нужно ли будет откатывать позицию; - Условия открытия и закрытия позиции, принимаются по сформированным свечам или по текущим, формирующимся значениям;
- Инструменты торговли. Сколько инструментов одновременно будет торговаться, возможно ли торговля по одному инструменту роботами с разными параметрами, например, один торгует на 1 минуте другой на 5 минутах;
- Таймфреймы работы робота;
- Время работы робота;
- Как рассчитывается объем открываемой позиции:
-Задается фиксировано;
-Рассчитывается роботом по формуле (необходимо привести формулу и еще лучше с цифровым примером);
-Рассчитывается исходя из суммы; - Нужно ли уведомления (телеграмм, смс, почта, звуковое оповещение или окно с сигналом), на какие события должны быть уведомления;
- Если робот использует индикаторы, и они взяты из другой системы (например, иностранной программы технического анализа), то необходимо сравнить его с индикатором с терминалом, в котором планируется его использование или сквиком, если таковой есть. Если есть расхождения, то предоставить формулу расчета;
- Нужен или нет открытый код робота;
- Количество рабочих мест (например, разные компьютеры или разные квики);
- Описать переменные, которые необходимо иметь возможность изменять, и дать им название и описание. Далее в техническом задании оперировать лучше ими;
- Алгоритм робота;
- Собственные дополнения, которые считаете важными и не отраженные в этом списке, например, возможность протестировать стратегию, время работы робота, управление рисками, эмуляция торгов (без фактической отправки транзакций на бирже) – в этом случае ведется запись сделок робота, нужны ли отчеты по работе робота и в каком виде, логирование, обучение пользованию программы, пояснению к коду робота и т.д.
Простой пример технического задания:
- Торговый терминал квик;
- Язык программирования C#;
- Графический интерфейс нужен, требуется удобное изменение параметров робота, счетов, таймфрейма, инструментов и всего что требует изменения.
- Позиция открывается рыночными ордерами;
- Все решения принимаются на открытии новой свечи, по предыдущей сформированной свече;
- Инструменты для торговли используются рынка ФОРТС и ММВБ, возможен запуск нескольких роботов по одному инструменту, каждый робот в этом случае ведет свою позицию и не обращает внимания какая позиция в терминале;
- Таймфрейм любой (тики, секунды, минуты, дни);
- Робот начинает торговлю спустя 5 минут после начала торгов, и перед окончанием торговой сессии за 5 секунд закрывает все позиции;
- Нужен открытый код робота, с комментариями к каждой строке;
- Возможность запуска на разных компьютерах и на разных квиках;
- Настраиваемые параметры:
— Количество свечей подряд на открытие позиции – по умолчанию 3;
— Количество свечей подряд на закрытие позиции - по умолчанию 2;
— Торговля лонг и/или шорт;
— Счет;
— Таймфрейм;
— Инструмент;
— Режим реальной торговли или эмуляция торгов на реальных значениях;
— Размер позиции фиксированный, настраиваемый; - Уведомления об открытии и закрытии позиции на телеграмм;
- Алгоритм: Если сформировалось «Количество свечей подряд на открытие позиции» растущих, т.е. закрытие больше открытия, то открываем позицию лонг, в случае если «Количество свечей подряд на закрытие позиции» падающих, т.е. закрытие свечи ниже открытия то закрываем позицию лонг. Если сформировалось «Количество свечей подряд на открытие позиции» падающих, т.е. закрытие меньше открытия, то открываем позицию шорт, в случае если «Количество свечей подряд на закрытие позиции» растущие, т.е. закрытие свечи выше открытия то закрываем позицию шорт.
Пример, из своего опыта как строится работа между заказчиком торгового робота и разработчиком. Процедура разработки торгового робота или советника состоит из следующих этапов:
- Рассмотрение технического задания;
- Оценка примерных сроков и диапазона цен разработки, в случае согласия переход к следующему этапу;
- Согласование технического задания, уточняющие вопросы по нему;
- Окончательная оценка сроков и стоимости;
- В случае необходимости заключается договор;
- 50% предоплата;
- Разработка робота;
- Тестирование робота;
- Отправка робота на тестирование клиенту;
- Правка ошибок в случае их наличия;
- Прием торгового робота или советника заказчиком;
- Оплата оставшихся 50%.
— либо программист не может запрограммировать то, что ему говорит трейдер, и требует от заказчика фактически чуть ли не готовый код;
— либо программист не может понять что заказчик объясняет.
С последнего пункта можно посмеяться, схохмить, что кто-то из них двоих тупой, но это не смешно. Чаще всего проблема не в неумении трейдера объяснять, а в непонимании программистом трейдинга.
Выводы делайте сами.
И еще. Сложные алгоритмы в простое ТЗ не вписываются.
На них сделать ТЗ… Проще изучить программирование.
«Чаще всего проблема не в неумении трейдера объяснять, а в непонимании программистом трейдинга.» — хотя обратное тоже присутствует.
Если описать процесс торговли не получается, то и запрограммировать его получиться. Например, «Входим от уровня» — вопрос: как определить математически его (визуально понятно, что его видно), здесь либо разработчик может предложить несколько вариантов или самому заказчику нужно искать решение, если не подошли предложенные варианты.
«И еще. Сложные алгоритмы в простое ТЗ не вписываются.
На них сделать ТЗ… Проще изучить программирование.» — не всегда проще, все же иногда лучше заплатить за ТЗ и чтоб помогли написать его.
2 нет описания методы тестирования и проверки работоспособности
3 нет описания действий в нештатных ситуаций… отрубился комп, пропал инет, офсетные заявки, отвалился брокер, нет выставления заявок (целая куча причин), двойные заявки, двойные исполненные заявки… и т.д и т.п
4 защита от воровства
5 нет проработки и требований к компу и типу ОС… отдельно прописываются требуемые дополнительные библиотеки
В этом смысле задача заказчика — это не только описать алгоритм совершения сделок, но и описать (как минимум — понимать) саму технологию работы.
Мне представляется, что ответственность здесь лежит на заказчике, так как ему автоматизируют лишь то, что он заказывает. Это же касается процедур тестирования и проверки работоспособности: до известной степени программист может оттестировать алгоритм, но именно заказчик должен выступать приемщиком и иметь собственные процедуры проверки