Пишем статью "Как составить Техническое задание на торгового робота" - страница 7

 
Andrey F. Zelinsky:

Блок-схемы -- самая бесполезная, времязатратная и практически нереализуемая часть ТЗ.

Чтобы это понять -- можно провести маленький и предельно простой эксперимент -- разработчикам сервиса Фриланс поставить задачу: "Составить блок-схему на отрисовку индикатора МА" -- а затем оценить по двум критериям: 1) правильность и 2) понятность.

Как-то раз сильно выручило меня - когда в голове перестало укладываться...

 
Artyom Trishkin:

Как-то раз сильно выручило меня - когда в голове перестало укладываться...

Ты сейчас сказал примерно следующее: "Моя блок-схема очень помогла мне разработчику". Обрати внимание, для твоей блок-схемы третье лицо, которое будет читать и работать с твоей блок-схемой, не предполагалось изначально.

В данной ветке мы обсуждаем "Как составить ТЗ на торгового робота".

Мне пока не понятно для кого и с какими целями и задачами пишется эта статья.

Потому что есть разная степень детализации и от этой детализации вытекают: цели/задачи/результат -- т.е. чтобы говорить о ТЗ -- надо сначала понять а) что заказчик ожидает и требует от разработчика и б) что ожидается и требуется от заказчика.

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

Это одна схема. Какой процент заказов идёт по такому сценарию?

Читаем в макете статьи:

Rashid Umarov:

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

Правильно написано за исключением одного -- подавляющее большинство задач начинается, выполняется и доводится до конца -- в нечёткой постановке задачи. Процент отказа по причине нечёткого ТЗ -- легко проверить по арбитражным соглашениям. Думаю, что он не больше 5-10%.

И если говорить о рекомендациях по составлению ТЗ для подавляющего большинства заказчиков -- то в таком ТЗ -- рекомендация составить блок-схему насколько целесообразна?

 

Текущая версия статьи

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Термины

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

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

Далее вы уже готовы составить третий самый важный раздел - Торговые Сигналы - в котором опиывается при каких условиях, состоянии рынка, показаниях индикаторов происходит покупка. Для описания каждого условия,  необходимого для генерации сигнала на покупку, необходимо выделить числовой параметр, от которого зависит появление сигнала. Например, для скользящей средней это будет тип сглаживания и период. Эти важные параметры выносятся во входные параметры будущего советника. Опишите отдельно условие для продажи, даже если они просто противоположны условиям для покупки - иногда вылезают тонкости, которые программист может понять не так как вы. Например, для покупки задано условие "Показатель>0" - что написать для продажи? "Показатель<0" или "Показатель<=0"?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

... необходимо формирование флета с последующим пробитием/ или ждем завершения европейской сессии и принимаем сигналы только в направлении её движения

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

... Технические параметры описания - тренда/отката/пробоя - всё формализовано строго

    Лучше Сигналы Buy и Sell сначала отлаживать отдельно

   Лучше будет если советник выставляет метки/объекты сигналов на графике

   Лучше если будут отдельно сделаны индикаторы сигналов

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

... как долго имеет силу сигнал - в барах / часах / до конца сессии/дня

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

... есть ли какие особенности, например, не ставим сразу SL/TP ,

   или  сколько попыток делаем для входа в рынок,

  или    выставление разных oredermagic/ordercomment в зависимости от времени/сетапа/паттерна

 что-то еще

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

... есть трейлинг стоп или нет

    когда включаем TS

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

    отслеживаем текущую прибыль/убыток по открытой позиции

    еще что-то

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

... удаляем ордера по времени/кол-ву баров/окончанию периода/ появлению противоположного сигнала/ пропаже сетапа

... закрываем позицию по времени/кол-ву баров/окончанию периода/ накопленной прибыли/ появлению противоположного сигнала/сетапа

     еще что-то

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

.... от баланса

      фиксированный

      от накопленной прибыли

      по результатам последних N трейдов

      от риска (диистанции SL)

      еще что-то

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

... подробный логи при отправке торговых приказов

     обработка перезапуска терминала/коннекта/сервера

      обратная связь через мессенджеры/email

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

...  сигналы могут пропадать и появляться в течение жизни бара

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

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

    Любое ухудшение условий может убить стратегию

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

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

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

... Вопросы по существу

    Не умничает, чтобы произвести впечатление

    Четко называет сроки

    Указывает сразу непоянтные места в ТЗ, а не через 2 месяца обсуждения

    Хороший программист ценит своё и ваше время - поэтому любит проработанное непротиворечивое ТЗ

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

  Превратить убыточную стратегию в зарабатывающего робота

  Провести оптимизацию и выявить все недостатки

   Написать программу без ошибок - они все равно будут.  Найти их и описать понятным образом - ваша задача.


 

Текущая версия статьи, продолжен раздел Описание сетапа на ожидание Сигнала и далее

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Термины

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

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

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

Опишите отдельно условие для продажи, даже если они просто противоположны условиям для покупки - иногда вылезают тонкости, которые программист может понять не так как вы. Например, для покупки задано условие "Показатель>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(). В общем случае рекомендуется в него записывать появление Сигналов, паттернов и сетапов, текущую рыночную цены и параметры торгового запроса перед отправкой ордера на исполнение.

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

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

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

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

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

...  сигналы могут пропадать и появляться в течение жизни бара

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

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

    Любое ухудшение условий может убить стратегию

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

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

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

... Вопросы по существу

    Не умничает, чтобы произвести впечатление

    Четко называет сроки

    Указывает сразу непоянтные места в ТЗ, а не через 2 месяца обсуждения

    Хороший программист ценит своё и ваше время - поэтому любит проработанное непротиворечивое ТЗ

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

  Превратить убыточную стратегию в зарабатывающего робота

  Провести оптимизацию и выявить все недостатки

   Написать программу без ошибок - они все равно будут.  Найти их и описать понятным образом - ваша задача.