Советник

Советник он же эксперт он же робот - программа работающая в терминале и автоматически осуществляющая рыночные операции. Это понятно. МетаТрейдер предоставляет широкие возможности по написанию советников, чем люди пользуются и пишут и пишут. Делают шаблоны, библиотеки и развестые иерархии классов. И я так делал, но писать как все поднадоело :-) Слишком много недостатков в типовых подходах и решениях. Так что для роботов будет строиться новая основа.

Прежде чем строить что-то новое, надо понять что-же плохового в существующем. И сразу с хорошо иллюстрированного примера, «стратегия черепах». На mql5.com была детальная статья про неё https://www.mql5.com/ru/articles/2717, её и рассмотрим.

Первое что бросается в глаза, то что стратегия достаточна проста и имеет ясные правила :

Полный набор правил ТС «Turtle Soup» для входа в сделку на покупку можно сформулировать так:

  1. Убедитесь, что со времени предыдущего 20-дневного минимума прошло не менее 3 торговых дней
  2. Дождитесь, когда цена инструмента упадёт ниже 20-дневного минимума
  3. Установите отложенный ордер на покупку на 5-10 пунктов выше только что пробитого вниз ценового минимума
  4. Сразу после срабатывания отложенного ордера установите его StopLoss на 1 пункт ниже минимума этого дня
  5. Используйте Трейлинг Стоп, когда позиция станет прибыльной
  6. Если позиция закрылась по стопу на первый или второй день, разрешён повторный вход на первоначальном уровне

Всего 6 правил.

Смотрим статью дальше - ужас ! объёмная статья, 80% которой занимает КОД..Даже можно сказать КОДИЩЩЕ. 50 килобайт текста программы для реализации 6-ти правил.

вывод № 1 - программы излишне многословны и длинны.

Но может получен очень удобный код, и легко можно поменять торговые правила?

Предположим что нужен не просто канал, а сужающийся, то есть его верхняя граница убывает со скоростью 10 пунктов в день, а нижняя также возрастает. Беглый просмотр говорит что надо будет изменить структуру CHANNEL и переписать функцию f_Set (не маленькая там функция). А если захотим брать канал из внешнего индикатора ? такое-же решение.

А как реализовать типовую просьбу трейдера «советник должен просить подтверждения торговой операции?» - тут придётся переписать почтю всю торговую логику.

Стоит ещё заметить что при изменении API терминала (выхода новой версии) недостаточно будет просто перекомпилировать советник - его надо будет править.

вывод № 2 - программы сложно сопровождать

А что там у нас с отладкой? И программы, и стратегии. Для отладки программы нужно хорошее функциональное разделение (расчёты отдельно, логика отдельно, диалоги с сервером отдельно), и легко лоцируемые места для установки брейк-пойнтов и/или печати логов. Этого просто нету.

Чтобы отлаживать стратегию, должна быть весьма обширная визуализация и хорошо читаемый лог-файл. Отладкой стратегии занимается-же не программист, а трейдер - он по идее должен видеть все необходимые элементы, и максимально полную историю операций. В принципе реализуемо и с текущем кодом, но надо будет делать вставки/правки по всей программе.

вывод № 3 - программы тяжело отлаживать

можно ещё подчеркнуть что портирование программы в другую версию терминала (MT4) или вообще на другой терминал крайне тяжело и примерно сопоставимо с повторной разработкой.

Откуда всё ЭТО ? и можно-ли этого избегать…

Что хочет заказчик трейдер? Естественно он хочет получить робота реализующего его стратегию. Текущий подход позволяет с этим более-менее справляться - программисты куют стратегии.

Что ещё ? Трейдер хочет быть уверенным что его стратегия реализована корректно. Визуально робот должен показывать не только факт совершения операции, но и какое-то её обоснование. А код в идеале должен быть таким чтобы грамотный трейдер мог проверить хотя-бы основные части.

Более того - торговый робот это программа с длинным жизненным циклом. Если стратегия более-менее удачна, то робот развивается и совершенствуется на протяжении нескольких лет. При этом возможно разными программистами. Смена разработчика не должна влечь значительных затрат и проходить достаточно «гладко».

Неплохо если программа облегчает трейдеру общение как минимум с двумя контрагентами - с разработчиком и с DC. При эксплуатации программ возможны сбои, при которых сейчас трейдер остаётся один-на-один с проблемой. Мало того что потерял деньги, так ещё и самому придётся искать причину сбоя и собирать материалы для общения с другой стороной.

Работающая программа должна допускать вмешательство трейдера - он может вручную открыть/закрыть/изменить ордер, разрешить/запретить торговлю, изменить размер депозита и так далее. Все эти вмешательства программа должна нормально переносить

Программа должна быть простой и компактной. По возможности минимальный уровень вхождения, почти на уровне Бейсика :-) Надо купить - написал Buy(), включить трейлинг - Trail(). Вся сложность и низкоуровневые операции должны быть скрыты за простыми словами.

Желательно чтобы рутина была сведена к минимуму и автоматизирована - например можно-же делать скелет советника просто из набора индикаторов

Любой нюанс поведения программы можно изменить. Поменять, включить/выключить любой механизм. И при этом не писать ворох кода.

Взаимодействие с другими (внешними) программами должно строиться легко.