English 中文 Español Deutsch 日本語 Português
Как составить Техническое Задание для заказа торгового робота

Как составить Техническое Задание для заказа торгового робота

MetaTrader 5Примеры | 5 июня 2018, 19:04
23 866 0
MetaQuotes
MetaQuotes

Содержание

Что нужно для заказа торгового робота

Торговые роботы — это программы, которые выполняют заложенные в них алгоритмы. Алгоритм — это набор действий, которые нужно выполнить в случае появления того или иного события. Например, самая часто встречающаяся задача в алготрейдинге — определение события "Новый бар". При его наступлении робот проверяет появление торговых сигналов и действует в соответствии с ними.

Но прежде чем писать или заказывать торгового робота, нужно иметь торговую систему с четкими правилами для определения благоприятных моментов для совершения сделок. Разработка любой, даже самой сложной, торговой системы всегда начинается с базовых вещей, а именно — с определения торговых сигналов на покупку и продажу. Позже вы сможете добавить в неё различные варианты сопровождения и закрытия сделок.

Вам необязательно провести за монитором торгового терминала годы, чтобы разработать торговую стратегию. Уже опубликованы сотни проверенных идей, которые вы можете попробовать. И даже если вы не совсем уверены в своих силах в области программирования, это не преграда. Сервис Фриланс поможет найти подходящего разработчика и безопасно оплатить выполненную работу.

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

Почему важно составить хорошее Техническое Задание

При заказе или разработке советника нужно сформулировать технические требования к нему: какие задачи он должен решать, в каких условиях будет эксплуатироваться, что будет происходить в нештатных ситуациях, какой способ управления им требуется. Торговые роботы — это программы, которые должны работать четко в соответствии с заложенной логикой. Но прежде чем запрограммировать алгоритм действий, его надо четко описать.

Описание торговой стратегии оформляется в виде Технического Задания. И чем детальней оно будет составлено, тем меньше недопонимания будет между вами (Заказчиком) и программистом (исполнителем вашего Заказа).

Самое важное в Техническом задании — наличие однозначных формальных торговых правил. Даже если вы не собираетесь заказывать эксперта на стороне, а хотите писать его самостоятельно — начните с разработки этих правил для себя. Составьте Техническое задание и обязательно включите в него пункты по тестированию/оптимизации советника. Добавьте также гипотезы, на основании которых будете проверять качество и стабильность вашей торговой стратегии — по каким критериям вы будете отбирать оптимальные параметры, почему считаете их важными.

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

Выработайте в себе навыки бюрократа, который любит раскладывать всё по полочкам. Дневник разработки каждой торговой системы вам обязательно пригодится, когда вы захотите проверить новую идею. Да и программисты любят четкие проработанные заказы.

Пример Технического Задания

Приведем пример того, как могло быть сформулировано Техническое задание для советника MACD Sample, входящего в поставку терминала MetaTrader 5.

1. Идея торговой системы: входы на пересечении главной и сигнальной линий индикатора MACD в направлении текущего тренда.

2. Тренд определяется по экспоненциальной скользящей средней с указанным периодом (InpMATrendPeriod). Если текущее значение EMA больше предыдущего, то тренд восходящий (ema_current > ema_previous), в противном случае, если текущее значение EMA меньше предыдущего, то тренд нисходящий (ema_current< ema_previous).

3. Торговые Сигналы:

  • Сигнал на покупку - главная линия индикатора MACD пересекает сигнальную снизу вверх (macd_current>signal_current && macd_previous<signal_previous)
  • Сигнал на продажу - главная линия индикатора MACD пересекает сигнальную сверху вниз (macd_current<signal_current && macd_previous>signal_previous). Пример покупки и продажи показан на рисунке ниже.


4. Закрытие позиций происходит по противоположным сигналам: Buy-позиции закрываются по сигналам на продажу, Sell-позиции закрываются по сигналам на покупку.

5. Открытие позиций происходит по рынку при открытии нового бара. Советник предназначен только для тестирования по ценам открытия, поэтому дополнительные функции для запрета работы внутри бара не требуются.

6. Дополнительные фильтры на открытие позиции:

Для отсеивания слабых сигналов используем абсолютное значение главной линии индикатора MACD - если оно больше заданного уровня открытия (open_level) в пунктах, то сигнал подтвержден. Таким образом, условия подтверждения силы сигналов выглядят так:

  • Подтверждение сигнала на покупку — Abs(macd_current)>open_level
  • Подтверждение сигнала на продажу — macd_current>open_level

7. Дополнительные фильтры на закрытие позиции:

Для закрытия также подтверждаем силу сигналов с помощью абсолютного значения главной линии индикатора MACD — если оно больше заданного уровня закрытия (close_level) в пунктах, то сигнал подтвержден. Таким образом, условия подтверждения для закрытия позиций по сигналам выглядят так:

  • Подтверждение для закрытия Buy-позиции — macd_current>close_level
  • Подтверждение для закрытия Sell-позиции — Abs(macd_current)>close_level

8. Закрытие позиции по TakeProfit — при открытие позиции сразу же выставляется ордер TakeProfit на заданном фиксированном расстоянии от цены открытия в пунктах, которое задается входным параметром InpTakeProfit.

9. Сопровождение позиции

Для защиты прибыли используется TrailngStop — ордер StopLoss выставляется в том случае, если прибыль в пунктах превысила заданное значение, которое указывается входным параметром InpTrailingStop. В дальнейшем, если цена продолжает двигаться в благоприятном направлении, StopLoss всегда подтягивается на заданном расстоянии. StopLoss не может перемещаться в неблагоприятном направлении, то есть размер стопа не может быть увеличен. Если не сработал ни один из защитных ордеров — TakeProfit или StopLoss — то позиция будет закрыта по сигналу противоположного направления. Других выходов из позиции нет.


Что должно быть в Техническом задании

Торговая идея

В первом разделе вашего Технического Задания опишите общую идею, которая заложена в вашей торговой стратегии. Например: "Если цена два раза подходит к уровню сопротивления и каждый раз откатывается, то в третий раз она его, как правило, пробивает".  Сюда можно приложить график с нанесенными линиями сопротивления/поддержки, индикаторами и поясняющими подписями. Для описания идеи не нужно вдаваться в конкретные цифры или алгоритмы расчета. То есть в данном примере не нужно сразу же объяснять, как мы определяем:

  • уровень сопротивления,
  • пробой уровня,
  • понятие "как правило".

Небольшой уровень абстракции на начальном этапе позволит сосредоточиться именно на самой идее, а не на технических деталях. Такой способ позволяет в последующем генерировать еще множество разновидностей вашей торговой стратегии — вы просто будете заменять одни блоки стратегии или индикаторы другими, добавлять или заменять фильтры. При этом сама идея не изменится, будут меняться только названия и значения входных параметров вашего торгового робота.

Далее необходимо дать описание всех терминов, которые используются в описании идеи. Если для стратегии важен тренд, дайте четкое определение — на основании какого индикатора будет определяться направление и сила тренда. Числовые характеристики этих определений лягут в основу входных параметров советника, и именно их вы будете потом оптимизировать в тестере стратегий. Так и назовите первый раздел вашего Технического задания — Торговая идея.

Термины

Для описания терминов рекомендуем создать одноименный раздел Технического Задания. В нём для каждого термина пишется отдельный параграф. Сами термины оформляйте жирным шрифтом для выделения ключевого понятия вашей торговой стратегии. Если необходимо,  добавьте в описание термина иллюстрацию, в которой нужно показать самое необходимое для понимания. Входные параметры будущего советника можно выделять курсивом.

Торговые Сигналы

Следующий, третий раздел Технического Задания самый важный — Торговые Сигналы. В нем описывается при каких условиях, состоянии рынка, показаниях индикаторов происходит покупка. Для описания каждого условия, необходимого для генерации сигнала на покупку, надо  выделить числовой параметр, от которого зависит появление сигнала. Например, для скользящей средней это будет тип сглаживания и период. Эти важные параметры выносятся во входные параметры будущего советника.

Опишите отдельно условия для продажи, даже если они просто противоположны условиям для покупки. Иногда здесь могут скрываться тонкости, которые программист может понять не так, как вы. Например, для покупки задано условие "Показатель > 0". Обязательно поясните, что в этом случае написать для продажи — "Показатель < 0" или "Показатель <= 0".

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

Скриншоты и блок-схемы

Для создания скриншотов и блок-схем в интернете полно бесплатных удобных программ. Небольшая подборка советов по работе с ними приведена в статье Как составить Техническое задание при заказе индикатора. Там же вы найдете советы по заказу индикатора, который показывает стрелками на графике моменты появления сигналов на покупку и продажу. Такой индикатор, работающий отдельно от советника, облегчает проверку и контроль работы торгового робота как в онлайне, так и при визуальном тестировании.

Время жизни сигналов/ордеров/позиций

Вторая важная часть торговой стратегии — выход из открытой позиции и удаление отложенных ордеров. Кроме того, сами торговые сигналы могут также отменяться по времени или при наступлении каких-то событий. Как и для Торговых сигналов, нужно описать, при каких условиях будет закрываться покупка/продажа, сниматься выставленный ордер, когда будет отменяться сам сигнал.

Сопровождение открытых позиций и отложенных ордеров

Если ваша торговая стратегия использует закрытие по уровням StopLoss и TakeProfit, дайте алгоритм расчета. Для гибкого подтягивания/передвижения этих уровней опишите условия и алгоритм трейлинга. Модификацию уровней SL/TP можно делать как на открытии нового бара, так и на каждом тике. Необходимо явно указать этот момент в Техническом Задании и понимать разницу между  режимами тестирования торговых стратегий. Обязательно прочитайте статью Тестирование торговых стратегий на реальных тиках.

Где взять Техническое Задание, если не можешь составить его сам

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

В итоге Исполнитель может на свой страх и риск довести работу до конца и выдать Заказчику торгового робота. Но это сопровождается потерей времени на обсуждение каждого нового вопроса. К тому же возрастает вероятность попадания работы в Арбитраж, если при приемке и проверке выполненной работы Заказчик вдруг обнаруживает, что сделки совершаются не так, как он предполагал — просто он не смог это описать правильно. И конечно же, Заказчик обвинит в этом случае Исполнителя в том, что тот нарушил некие пункты Технического задания и неверно запрограммировал робота. Арбитраж в таких случаях быстро понимает разницу в компетенции обеих сторон и выносит решение, основываясь на приложенном к заказу Техническом Задании. Согласно Правилам Фриланса, при рассмотрении спорных ситуаций никакая переписка на стороне в расчет не принимается:

При рассмотрении предмета спора в Арбитраже основанием для принятия решения служит только Техническое Задание.

В жизни возможен и такой вариант: у вас есть строгие торговые правила, но по каким-то причинам вы не можете самостоятельно составить Техническое Задание. Например, не уверены как правильно описать некоторые вещи, или же вам нужна помощь специалиста в математике, нейросетях, машинном обучении, программировании и так далее. В этом случае вы можете заказать создание Технического задания. Для этого во Фрилансе есть категории "Консультация по программированию" и "Другое".

Выберите одну из этих двух категорий, назовите работу "Создание ТЗ для заказа торгового робота" и укажите начальную стоимость работы. Опытный разработчик торговых систем поможет вам правильно сформулировать Правила вашей стратегии так, чтобы они были понятны другому программисту. При этом вы должны уметь работать с графиками, индикаторами и графическими объектами, чтобы показать с помощью скриншотов сетапы ваших торговых сигналов.

Программист разберется в вашей торговой системе и поможет составить описание торгового алгоритма, если это возможно. Если какие-то понятия вы не можете сформулировать самостоятельно (например, "импульс" или "отскок от уровня"), он может дать вам готовые идеи, исходя из своего опыта. Как правило, любую ситуацию на рынке можно описать логически (а потом и программно) какой-то простой моделью с параметрами вариации. И эту вариацию можно выразить неким параметром, который вы потом будете оптимизировать в своем советнике.

Идеальных паттернов не бывает, ведь, с одной стороны, рынок никогда не повторяется, а с другой — на истории всегда можно найти похожие ситуации. Результатом вашей совместной работы должно быть готовое Техническое задание для заказа торгового робота по вашей стратегии.

Какие термины использовать

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

Например, по Биллу Вильямсу, восходящий тренд — это когда все три линии Аллигатора расположены в таком порядке снизу вверх: Синяя, Красная, Зеленая.


Другое классическое определение восходящего тренда — от Ларри Вильямса — когда каждый новый пик выше предыдущего, а каждая новая впадина не ниже предыдущей.


В описании терминов можно использовать скриншоты графиков, они не помешают.  В самом Техническом Задании рекомендуем выделять вводимые термины жирным шрифтом — чтобы потом Исполнитель мог сразу найти его в тексте при возникновении сомнений.

При описании термина нельзя отсылать Исполнителя к другим источникам (сайтам, книгам, форумам и т.д.), обосновывая тем, что это и так общеизвестно.  Всё должно быть описано здесь и сейчас, никакие костыли в виде "потом по скайпу объясню" в ТЗ не допускаются. На то, чтобы прописать все термины в Техническим Задании, у вас займет не более получаса, но зато это сэкономит время, которое вы потратите на исправление ошибок из-за недопонимания.

Что писать в описании работы во Фрилансе

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

Описание может выглядеть так:

Написать советника для торговли на разворотах тренда. Сигналами разворота будут паттерны  Price Action. Для определения тренда будут использоваться индикаторы ADX, Alligator и MACD — выбор индикатора задается входными параметрами советника.

Общая идея торговой стратегии

Здесь можно указать, на каких инструментах будет торговать робот, ведется ли торговля по тренду, как он определяется и на каком таймфрейме. Если торгуем по тренду, то опишите, как происходит вход — на откате, на прорыве уровня и так далее.

По большому счету, существует только две стратегии торговли на финансовых рынках: на продолжение движения и на возврат к среднему. Ваша торговая идея должна относиться к одной из этих двух стратегий. Нужно объяснить, как будут открываться сделки — по рынку, после подтверждения пробития/отката или по более подходящей цене.

Описание сетапа на ожидание сигнала

Сами сигналы могут быть простыми и легко описываться с помощью алгоритмов. Например, хорошо известны и популярны паттерны "Поглощение" и "Pin бар". Но как правило, только на одних таких хорошо формализуемых фигурах нельзя построить прибыльную стратегию. Подобные паттерны используют для определения разворота тренда. А значит, сетапом на ожидание паттерна "Медвежье поглощение" будет наличие восходящего тренда.

Поэтому в Техническом задании необходимо описать не только сам Торговый Сигнал, но и формализовать необходимый для него сетап.

Описание сигнала

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

  • тип скользящей средней - SMA, EMA, VIDYA и так далее;
  • период скользящей средней;
  • дополнительные параметры для некоторых средних, например — для AMA.

Уточнить нужно и фразу "цена пересекает среднюю": в ней не всё так просто, как кажется. Сигнал может появляться посредственно в момент пересечения средней. А можно дождаться, чтобы свеча не только пробила уровень средней, но и закрылась выше неё. От этого зависит не только то, как будет написан код, но и режим генерации тиков, который нужно использовать при тестировании советника в тестере стратегий.

Поэтому нужно четко описывать такие понятия как "тренд", "уровень", "пробой", "откат" и "пересечение" — имеется ли в виду работа с тиками, барами и ценами закрытия. Все эти понятия должны иметь формальное описание с числовыми параметрами, которые вы будете потом оптимизировать в тестере стратегий. Например, силу тренда можно измерять с помощью индикатора ADX, а вот индикатор Ichimoku Kinko Hyo для этого не подходит.

Чем больше условий и фильтров используется в торговой системе, тем сложнее получается робот, не говоря уже о том, что сложные стратегии имеют множество входных параметров, которые потом потребуют огромного количества проходов при оптимизации. И хотя тестер стратегий в MetaTrader 5 позволяет ускорить время оптимизации параметров в десятки и тысячи раз за счет генетического алгоритма и MQL5 Cloud Network, объем получаемых данных в этом случае нарастает лавинообразно.

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

  • Для отладки и проверки сигналов визуально советник должен выставлять на графике метки/объекты в момент появления Сигнала. Это позволит не только проводить отладку на истории, но и наглядно наблюдать Сигналы на графике. Часто алгоритм становится настолько сложным, что понять его работу становится нелегко даже самому трейдеру, который сформулировал правила системы. А при визуальном отображении Сигналов вы сразу сможете увидеть на графике моменты для открытия сделок.
  • Возможно, еще правильнее сначала создать индикатор, который отмечает на графике сигналы на покупку/продажу стрелками. Это упростит написание советника, ведь создать и отладить две программы по отдельности проще, чем одну сложную. Пусть робот только торгует, а индикатор только рисует. В этом случае код советника будет избавлен от лишнего функционала. Кроме того, Сигналов может быть намного больше, чем проведенных по ним сделкам. Например, получив сигнал на покупку, советник обычно входит в рынок, и потом, согласно алгоритму, сигналы на покупку уже не проверяются. А если для этого есть отдельный индикатор, то он покажет все сигналы на покупку, независимо от наличия открытой позиции, потому что в него заложена именно соответствующая логика.
  • Сигналы на покупку и продажу нужно не только описывать отдельно в Техническом задании, но желательно и отлаживать в тестере стратегий по отдельности. Часто покупки и продажи взаимосвязаны между собой — то есть, пока есть открытая позиция на покупку, все Сигналы на продажу игнорируются (конечно, если закрытие длинной позиции не происходит по сигналу на продажу). Если же вы будете тестировать сигналы на покупку и продажу отдельно друг от друга, то сможете проверить правильность заложенной логики в чистом виде.

Вы даже можете оптимизировать параметры стратегии отдельно для покупок и отдельно для продажи, чтобы потом собрать алгоритмы в едином торговом роботе. Так вы потратите меньше времени на поиск оптимальных параметров и сделаете меньше ошибок. Хотя в этом случае вам придется дополнительно оплатить создание индикатора/индикаторов и промежуточных советников. Но хорошая торговая идея стоит того. Не правда ли?

Время жизни сигнала

В некоторых торговых системах появление сигнала не означает немедленное открытие позиции. В таких стратегиях нужно подтверждение/разрешение от дополнительного сигнала. Например, после прорыва уровня сопротивления надо дождаться отката цены к пробитому уровню, чтобы зайти на наилучших условиях. В этом случае возникает фактор времени — сколько по времени или на протяжении скольких баров действует сигнал "Уровень пробит и ждем отката". Возможно, имеет смысл ждать отката в течение 5 баров или до окончания торговой сессии, а потом сигнал отменяется.

Добавление параметра "Время жизни" позволяет ввести дополнительные фильтры, которые могут улучшить качество торговых сигналов.

Выставление ордеров и открытие позиций

При написании функций, отвечающих за отправку торговых приказов, имеет смысл заранее предусмотреть дополнительные функции. Например, вы можете указывать в своем торговом роботе разные MagicNumber и комментарии для последующего анализа результатов торговли и результатов оптимизации. В MagicNumber можно закладывать час и день входа, номер торгового паттерна и другую важную информацию, которая позволит провести дополнительный анализ в разрезе заложенных в MagicNumber данных. Таким образом, вы можете внедрить в советника несколько торговых стратегий и провести одну оптимизацию сразу для всех, чтобы потом отсеять неудачное время входа или убыточный паттерн/сигнал. Если вы хотите получить такой функционал в советнике, нужно четко прописать алгоритм вычисления MagicNumber для каждого паттерна/сетапа/сигнала.

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

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

Если ваша торговая стратегия использует защитные уровни StopLoss и TakeProfit, предоставьте алгоритм их вычисления и порядок установки. Например, может оказаться так, что StopLoss нужно выставлять только при движении цены в благоприятном направлении на заданное количество пунктов. Если уровни SL и TP выставляются только после успешного открытия позиции, уточните, как будет проверяться само открытие позиции — сразу после отправки торгового приказа или на следующем тике.

Сопровождение торговой позиции/ордера

Классическое правило гласит "Дай течь прибыли и обрезай убытки". В переводе на алготрейдинг это означает "Выставляйте для каждой открытой позиции защитный StopLoss и не ограничивайте потенциальную прибыль с помощью ордеров TakeProfit".

Размер стопа может сильно влиять на результаты торговли. Поэтому трейдеры стараются подобрать такие оптимальные дистанции для установки ордеров SL/TP, чтобы максимизировать прибыль. Но грубый перебор всех возможных размеров SL/TP будет такой же подгонкой на истории. Постарайтесь использовать такие алгоритмы вычисления дистанций, чтобы они учитывали волатильность рынка, направление тренда и близость уровней поддержки/сопротивления.

Если у вас нет идей по поводу того, каким должны быть размеры SL/TP, вы можете изучить существующие торговые системы. Многие программисты-алготрейдеры имеют собственные готовые библиотеки, которые можно использовать при создании торгового робота по вашей идее.

Продумайте и опишите в Техническом Задании следующие моменты:

  • использование уровней StopLoss и TakeProfit, алгоритм вычисления дистанции для них;
  • нужно ли использовать Trailing Stop, когда он включается, с каким шагом подтягивается, алгоритм вычисления шага;
  • если для входа в позицию используются отложенные ордера, то нужно ли их переставлять и по какому алгоритму;
  • нужно ли отслеживать плавающую прибыль/убыток по открытой позиции, нужно ли закрывать позицию при достижении заданного уровня прибыли/убытка;
  • еще что-то.

Отмена ордера и закрытие позиции

Возможен и другой способ управления позициями и ордерами — по времени и появлению противоположного сигнала. Вы можете добавить в Техническое Задание дополнительные варианты удаления и закрытия:

  • по заданному значению плавающей прибыли или убытка на открытой позиции;
  • при удалении цены на заданное расстояние от текущего уровня открытия отложенного ордера (фактически, это означает, что момент уже упущен);
  • по наступлению указанного момента времени;
  • через заданное количество баров;
  • по окончании заданного интервала времени;
  • при появлении сигнала противоположного направления;
  • при пропаже благоприятного сетапа/паттерна.

Расчет лота для выставления ордера

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

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

Вот некоторые подходы к вычислению размера лота при открытии позиции:

  • фиксированный объем, независимо от полученной прибыли или убытка;
  • объем зависит от размера баланса или эквити;
  • по результатам полученной прибыли/убытков;
  • по результатам последних N трейдов (различные варианты мартингейла и антимартингейла);
  • в зависимости от % риска при срабатывании защитного ордера StopLoss;
  • иные варианты расчета на основе риска — например, по методу Винса.

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

Обработка торговых ошибок и состояния окружения

Торговый робот — автономная программа, работающая 24 часа в сутки. Поэтому необходимо предусмотреть средства контроля и проверки его работы. "Черным ящиком" вашего советника будет служить журнал "Эксперты", куда выводятся все сообщения с помощью функции Print(). В общем случае рекомендуется записывать в него появление сигналов, паттернов и сетапов, текущую рыночную цену и параметры торгового запроса перед отправкой ордера на исполнение.

В случае неудачного выполнения торгового запроса необходимо вывести в журнал его результаты. Анализ кодов ответа торгового сервера позволит понять причину торговой ошибки и исправить её. Опишите в Техническом задании:

  • все ситуации, при которых делаются записи в журнал;
  • параметры, которые должны быть отражены в каждом случае;
  • требуемый формат записи — например, для указания времени, числовых данных, разделителей и т.д.

Подробные логи торговых приказов и результатов их выполнения позволят вам быстро выявить торговые ошибки и сэкономить деньги.

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

Разница между торговлей на открытии бара и внутри бара

При каждом изменении цены торговый робот запускает обработку события NewTick — функцию OnTick(). В течение жизни бара поступает множество тиков, а это означает, что советник на каждом из них будет выполнять всю заложенную в него логику. Если ваша стратегия вырабатывает торговые сигналы только на открытии бара, то нужно решить два вопроса:

  1. как вычислять торговые сигналы, получать значения индикаторов и состояние торгового окружения только на первом тике, пропуская последующие;
  2. что делать,  если не удалось на первом тике выполнить все необходимые действия — закрыть/открыть позиции, установить/удалить отложенные ордера.

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

Чтобы избежать подобных проблем, протестируйте советника в режимах моделирования "Каждый тик" или "Все тики на основании реальных тиков". Если вы увидите множество однотипных торговых операций в течение жизни одного бара, то проведите ревизию кода вашего робота. Также обязательно запустите визуальное тестирование советника и используемых индикаторов, чтобы проверить их работу прямо на графике на различных участках истории.

Тиковые/скальперские стратегии

Если вы только начинаете торговать на рынке, то используйте системы, которые работают на открытии нового бара. Такие стратегии проще разрабатывать и отлаживать, вам нужно будет только хорошо разобраться с тем, как правильно обрабатывать событие "Новый бар". Вы можете легко проверить правильность написанного советника для торговли по открытию бара: результаты тестирования для режима "Только цены открытия" должны совпадать с результатами в режиме "Каждый тик"/"Все тики на основании реальных тиков".

Торговые системы, которые работают внутри бара, сложнее. Рекомендуем прочитать статью Как в MetaTrader 5 быстро разработать и отладить торговую стратегию, в которой описаны все шаги по созданию, отладке и оптимизации кода стратегии, основанной на анализе непрерывного тикового потока.

При разработке робота-скальпера нужно отдавать себе отчет в том, что такие стратегии критичны к размеру спреда, комиссии, сетевой задержке, качеству доступной истории и быстродействию самого робота. Любое ухудшение торговых условий может "убить" стратегию, извлекающую прибыль на тиках.

И, конечно, не нужно путать скальперские стратегии, которые стремятся быстро войти и выйти из рынка с небольшой, но относительно гарантированной прибылью в пару пунктов, с так называемыми пипсовочными. Пипсовочными являются стратегии, в которых ради прибыли в несколько пунктов допускается просадка в десятки и сотни пунктов. Разработчики таких систем справедливо считают, что цена скорее пройдет несколько пунктов в направлении открытой позиции, чем 50-100-300 пунктов в неблагоприятном направлении. В результате оптимизации удается достичь впечатляющих результатов на истории — 90-99% трейдов оказываются выигрышными. При запуске такого робота на реальном счете некоторое время везет и стратегия дает ожидаемую прибыль. Но в какой-то момент рынок делает резкое движение и забирает обратно все заработанное.

Сетки, мартингейлы, усреднения и обратная сторона этих улучшений

Иногда алготрейдеры пытаются улучшить торговые показатели своей системы не за счет качества сигналов (стратегических решений), а с помощью увеличения количества ордеров/позиций в одном направлении и манипулирования размером лота в зависимости от уровня цены/просадки/проигрыша (это технические решения).

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

Вместо использования этих тактических трюков рекомендуем пойти другим путем:

  • сначала создать портфель из множества различных некоррелируемых торговых систем на одном инструменте;
  • затем постепенно создать множество портфелей на разных инструментах.

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

На что обратить внимание при выборе исполнителя

Итак, вы решили воплотить свою торговую систему в виде советника — создали Работу во Фрилансе, и на неё откликнулось множество разработчиков. Как же выбрать оптимального Исполнителя по цене и качеству?

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

На основе вашего краткого описания он попытается получить дополнительные детали вашего заказа, если вы не приложили детального Технического Задания. Программист, как и вы, решает задачу "Стоит ли связываться с этим Заказчиком"  на основе представленных требований.  Если в общих чертах задание понятно, то разработчик назовёт вам реальные сроки выполнения и стоимость вашего заказа.

Ответственный Исполнитель сразу укажет вам на непонятные места в Техническом Задании, а не через 2 месяца после заключения договора. Если ваш заказ недостаточно детально проработан, то вы уже в процессе выполнения работы сможете вместе с программистом уточнить неясные моменты, а также оплатить ему консультации, увеличив сроки и стоимость работы.

Хороший программист ценит своё и ваше время, поэтому он любит проработанное непротиворечивое Техническое Задание и может исправить ваши недочеты в самом начале работы.

Что не может за вас сделать программист

Может случиться так, что написанный по вашей системе робот покажет на тестировании убыток, хотя при ручной проверке вы были твердо уверены том, что стратегия зарабатывает. Как правило, причина такого поведения кроется в том, что Заказчик смог вручную проверить свою систему лишь на коротком промежутке времени. В то время как тестер позволяет получить результаты торговли за любой доступный интервал истории. Что делать в таком случае? Программист не может сделать из убыточной стратегии прибыльную, но может подсказать вам какие-то идеи по улучшению качества входов. Например, добавить какие-то фильтры тренда, объема и т.п., которые позволят отсеять плохие сигналы.

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

И последнее — ошибки программиста. Написать программу без ошибок практически невозможно — они все равно будут. Это могут быть как ошибки кодирования, когда неправильно написан код по правильному алгоритму, так и ошибки логические — ваши. В обоих случаях искать их вам придется самостоятельно, потому что за вас это вряд ли кто сможет сделать.

  • Поэтому желательно, чтобы вы хорошо представляли, что означают коды возврата торгового сервера и как читать ошибки времени выполнения.
  • Включите в Техническое задание требование об обязательной обработке результатов выполнения каждой важной операции и вывод в лог кодов ошибки. Можете в отдельном разделе ТЗ детально перечислить, что именно является важной операцией: отправка торгового запроса, вычисление цены StopLoss и так далее.
  • Рекомендуем, чтобы в этих сообщениях использовались предопределенные макроподстановки. Это позволит вам быстрее находить причину и место неправильной работы вашего советника.

Использование этих трех простых правил облегчит вам разбор ситуаций и общение с исполнителем.

Универсальный индикатор RSI для работы одновременно в двух направлениях Универсальный индикатор RSI для работы одновременно в двух направлениях
При разработке торговых алгоритмов мы часто сталкиваемся с проблемой: как определить, где начинается и заканчивается тренд/флэт? В этой статье попытаемся создать универсальный индикатор, в котором совместим сигналы для разных типов стратегий. Попробуем максимально упростить получение сигналов на торговые операции в эксперте. Приведем пример того, как объединить несколько разных индикаторов в одном.
Собственное представление торговой истории и создание графиков для отчетов Собственное представление торговой истории и создание графиков для отчетов
В статье описываются пользовательские методы оценки истории торговли. Для этого написаны два класса для ее выгрузки и анализа. Первый собирает торговую историю в краткую таблицу. Второй предназначен для вычисления статистики: он рассчитывает ряд показателей и строит графики, с помощью которых оценивать результативность торгов становится удобнее.
Социальный трейдинг. Можно ли прибыльный сигнал сделать еще лучше? Социальный трейдинг. Можно ли прибыльный сигнал сделать еще лучше?
Большинство подписчиков выбирают торговый сигнал по красоте кривой баланса и по количеству подписчиков. Поэтому многие провайдеры сегодня больше заботятся о красивой статистике, чем о действительном качестве сигнала, зачастую играя объемами сделок и искусственно приводя кривую баланса в идеальный вид. В данной статье рассматриваются критерии надежности и способы, с помощью которых провайдер может улучшить качество своего сигнала. Приведен пример анализа истории конкретного сигнала и способы, которые помогли бы провайдеру сделать его более прибыльным и менее рискованным.
Сравнительный анализ 10 флэтовых стратегий Сравнительный анализ 10 флэтовых стратегий
В статье разбираются преимущества и недостатки торговли на флэте. Созданы и протестированы 10 стратегий, основанных на отслеживании движения цены внутри канала. Каждая стратегия снабжена механизмом фильтрации, чтобы отсеять ложные сигналы на вход в рынок.