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

30 марта 2011, 12:42
Andrey Khatimlianskii
49
38 376

Введение

Автоматический трейдинг набирает все новые обороты - выпущен MetaTrader 5 c новым MQL5, успешно прошел Чемпионат по автоматическому трейдингу - Automated Trading Championship 2010, новая версия любимого всеми торгового комплекса активно внедряется брокерами. Да и предшественник "пятерки" - MetaTrader 4 - все еще активно используется сотнями брокеров и миллионами трейдеров по всему миру.

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

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

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


Оглавление

  1. Проверяем идею
  2. Избавляемся от иллюзий
  3. Определяемся с целями
  4. Сверяем словари
  5. Готовим задание
  6. Выбираем исполнителя
  7. Защищаемся от недобросовестности
  8. Проверяем результат
  9. Даем обратную связь


1. Проверяем идею

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

И вот он получает от программиста долгожданное письмо, запускает терминал, начинает тестирование... и видит, как его гениальная идея "сливает" депозит. Он еще раз проверяет параметры, обновляет исторические данные... и опять видит "слив". Кто-то сразу начинает писать гневное письмо исполнителю-программисту (виноват-то, естественно, он!), более терпеливые проверяют результаты и пытаются понять, в чем проблема. Но сути это не меняет - идея, в которую так верили, оказалась убыточной.

Дальше возможны разные варианты. Одни обвиняют программиста в том, что у него "кривые руки" и, не заплатив за работу, бегут искать другого. Другие начинают судорожно придумывать, как исправить ситуацию, и просят внести "несколько небольших изменений" (естественно, бесплатно - "они же небольшие!"). Справедливости ради, отмечу, что и заказчиков, принимающих свою ошибку, как должное, и не перекладывающих ответственность на программиста, тоже хватает. Но не для них писался этот раздел, у них с самокритикой все в порядке.

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

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

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

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

Подведем промежуточный итог, переиначив народную мудрость: "Семь раз проверь, один раз закажи".


2. Избавляемся от иллюзий

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

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

Очень распространенная ситуация: вы прочитали в интернете (на форуме, в блоге, в онлайн-книге) о какой-то стратегии и захотели сделать из нее советника. Посмотрели на графики, прикинули правильность расчетов и подумали - "Ну, наконец-то, вот он - грааль!". Усугубляется эта ситуация, обычно, загрузкой (или, не дай бог, покупкой) супер-индикатора, по которому эта стратегия работает - у вас появляется иллюзия, что 90% дела уже сделано, осталось совсем чуть-чуть.

Если бы половина из вас в этот момент задала себе один простой вопрос - "почему эта стратегия лежит в свободном доступе?" (или, в случае продажи, "почему автор ее продает, а не использует сам?") - у меня было бы ровно в два раза меньше клиентов... Но нет - мы верим в чудеса и не надо нас переубеждать! Хорошо, не буду. Но что мешает просто проверить то, на что вы собираетесь потратить собственные деньги?

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

  1. Очень и очень скептически относитесь к индикаторам без исходных кодов!
    • Понять, как они работают, вы сможете только примерно, а гарантировать неизменность их поведения в будущем не сможет никто.
    • В них может быть все - от банальных ошибок в коде, приводящих к перерисовыванию старых сигналов или неадекватному поведению при работе на некоторых инструментах или типах счетов, до преднамеренного обмана (рисования на истории заведомо успешных сигналов) или простого ограничения на время работы или номер счета.

    Даже если вы абсолютно не разбираетесь в программировании, вы всегда сможете попросить "провести экспертизу" знакомого программиста - просто для уверенности или непосредственно перед заказом советника.

  2. Наблюдайте за работой индикаторов в реальном времени!
    • Не зная, как себя ведет индикатор в онлайне, нет смысла рассматривать его сигналы на истории - это может оказаться просто красивой (но, к сожалению, бесполезной) картинкой.
    • Практически у всех индикаторов может меняться значение на последнем баре - это нормально. Но надо понимать, что на истории (на сформировавшихся барах) этих изменений не видно, отображается состояние индикатора на момент закрытия бара. А это значит, что сигналы (стрелочки, пересечения индикаторных линий, пересечения линий с ценой) могут быть использованы в системе (для открытия позиции) только на следующем после их появления баре. Если пытаться реагировать на несформировавшиеся сигналы (не дожидаясь закрытия бара), при тестировании советника окажется, что стрелочек и пересечений (соответственно, и открытых позиций) было очень много, но к моменту закрытия бара большинство из них исчезало. На графике вы будете видеть позицию, но не увидите соответствующего ей сигнала - его можно было обнаружить, только наблюдая за формированием бара.
    • У некоторых индикаторов может меняться значение не только на последнем, но и на нескольких предыдущих барах. Иногда это объясняется самой сутью индикатора (например, для формирования Фрактала необходимо 2 бара справа от него, а последний луч Зигзага может перерисовываться достаточно долго, пока не выполнятся условия для появления нового луча), но часто такое поведение свидетельствует о преднамеренном одурачивании - масса индикаторов создается только для красивого разрисовывания истории (для продажи), использовать их в торговле практически невозможно.
      Если индикатор на истории показывает сигналы на покупку в самых низинах, а на продажу - на самых верхах, то это скорее свидетельствует не о том, что он очень хороший, а наоборот - о том, что он "предсказывает прошлое".
    • Не обязательно сидеть и часами смотреть на онлайн-график - многие индикаторы можно проверить в визуальном режиме тестирования. Но в любом случае, самый надежный способ проверки - запуск на демо-счете и наблюдение. Можно присоединить индикатор к графику, немного подождать и присоединить его еще раз (с такими же параметрами) - если  он "честный" (не использует перерисовку предыдущих значений), то картинки на обоих копиях индикатора должны полностью совпасть. Если новая копия индикатора показывает совсем другие сигналы, анализировать его показания на истории бесполезно.

  3. Проверяйте стратегию на разных отрезках истории!
    • Часто случается, что вы подсознательно выбираете для проверки очень подходящий - именно для вашей системы - отрезок истории. Будь то вход по сигналу индикатора, сетка ордеров, или распознавание паттернов - всегда найдется участок, на котором стратегия будет зарабатывать. Но когда вы протестируете советника на всей доступной истории, сразу всплывут самые неудачные отрезки. Попытайтесь найти их самостоятельно.
    • Выберите несколько кусков истории случайным образом. Например, возьмите январь 2008, октябрь 2009 и август 2010 - пробегитесь глазами и посчитайте соотношение прибыльных и убыточных сигналов. Попробуйте посмотреть качество сигналов на других инструментах и таймфреймах - если идея содержит здравое зерно, она, скорее всего, неплохо проявит себя и в других условиях (возможно, с немного измененными параметрами индикаторов или размерами стопов).
    • Не меняйте параметры системы в рамках одной проверки. Если вы, рассматривая август, будете использовать одни параметры индикатора, а, переместившись на сентябрь, возьмете другие (которые лучше подходят) - вы обманете сами себя. Проверка должна производиться при одинаковых условиях, иначе вы увидите только то, что хотите видеть. Я не говорю, что параметры системы должны всегда оставаться неизменными, но если вы хотите менять их "на ходу", надо придумать и критерии их изменений. На истории делать выводы всегда просто, а что будет в будущем?
    • Найдите самый сложный для стратегии кусок истории и проверьте систему на нем. Очень распространенные тактики - в расчете на пробой канала и в расчете на откат от основного движения, часто подкрепляемые удвоением лота при открытии каждой следующей позиции - замечательно работают на отдельных промежутках истории. Но на рынке случаются и затяжные движения в канале, и сильные безоткатные движения, и обе системы периодически сливают депозит "под ноль". Найдите кусок истории, который будет для системы максимально опасным (длинный флет - для пробойной тактики, и сильное однонаправленное движение - для откатной тактики), и посмотрите, чем грозит работа на этом промежутке.

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

  4. Учитывайте накладные расходы (спреды, свопы, комиссии, маржинальные требования, минимальные расстояния для установки ордеров)!
    • Для большинства долгосрочных стратегий все эти цифры не существенны, так как погрешность в несколько пунктов для них роли не играет. Но тенденция развития автотрейдинга показывает, что разрабатывается все больше стратегий с мелкими целями и с высокой частотой совершения сделок, а для них увеличение спреда на 2 пункта или уровня Stops Level на 10 пунктов может стать весьма ощутимым.
    • Помните, что все графики в MetaTrader (как 4-й, так и 5-й версии) строятся по цене Bid, а открытия Buy-позиций и закрытия Sell-позиций производятся по цене Ask. Когда вы торгуете "в уме", учитывать спред неудобно, но всегда можно взять суммарный результат торговли и вычесть из него количество сделок, умноженное на спред - это приблизит результаты к реальности.
    • Анализируя историю, не забывайте, что еще несколько лет назад торговые условия были совсем другими. "Пушистый" график 1999 года идеально подходит для пипсовочных стратегий, если торговать на нем, используя текущий спред. Но в 1999 году спред был в 3-4 раза больше! От прибыли, которую вы якобы получили, не останется ровным счетом ничего, если вычесть из каждой сделки реальный спред того времени. Аналогичная ситуация и с другими условиями - еще несколько лет назад максимальное доступное кредитное плечо было 1:100, а расстояния для установки отложенных ордеров измерялись десятками пунктов.
    • Помните, что во время выхода новостей торговые условия могут сильно меняться (естественно, в худшую сторону), а исполнение приказов может происходить с задержкой и проскальзыванием. Не придумывайте "гениальные новостные системы" на истории, попробуйте их испытать хотя бы на микро-реале. Когда вы рассчитываете на спред 2 пункта и мгновенное исполнение, а позиция открывается спустя 5 секунд, с проскальзыванием в 10 пунктов, и спред расширяется так, что закрыться хотя бы в безубытке становится сложно, отношение к таким системам сильно меняется.
    • Закладывайте "запас прочности" и в отношении торговых условий. Если ваша система будет "ломаться" от малейшего изменения спреда или от задержки открытия позиции в несколько секунд, она вряд ли выживет "в реальном бою".

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

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


3. Определяемся с целями

Определяемся с целямиВы когда-нибудь задумывались, зачем вам советник? Вы хотите просто проверить идею в тестере? Или, может быть, обкатать готовую стратегию на микро-реале? Нет, я знаю - вы торгуете по своей системе уже 2 года и советника сразу запустите на реальный счет с депозитом $100 000.

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

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

Но даже если вам посчастливится работать именно с таким человеком, разницу почувствуете вы - при составлении задания.

Объясню на примере:

  1. Ситуация номер один - вам необходимо просто проверить идею (нашли, услышали, прочитали). Это значит, что:
    • О запуске на реале речи не идет - всевозможные проверки и обработку непредвиденных ситуаций делать не нужно.
    • Советник будет активно тестироваться и оптимизироваться - нужно добиться максимального быстродействия (возможно, в ущерб надежности).
    • Скорее всего после проверки первой версии потребуются доработки - советник должен легко расширяться и дополняться.
    • "Узкие места" алгоритма (установка ордеров на грани минимально допустимого расстояния, последовательность открытия и закрытия позиций, обход ограничения на максимальный лот, восстановление работы после разрывов связи, и т.п.) продумывать и специально обрабатывать не обязательно, какие из них сохранят свою актуальность в финальной версии - неизвестно.

  2. Ситуация номер два - стратегия сформирована, вам необходим полноценный советник для выхода на реал. От предыдущей версии он будет отличаться следующим:
    • Все торговые операции должны быть максимально корректными, проверяться должны не только значения задаваемых пользователем параметров, но и все значения, рассчитанные в процессе работы (размер лота, уровни стоп-приказов, и т.д.).
      От "качества" торговых запросов напрямую зависит "отношение" сервера к вашему счету - если бомбить торговый сервер неправильными приказами, он может запросто заблокировать счет, и вы потеряете контроль над ситуацией.
      В случае возникновения критической ошибки необходимо поставить пользователя в известность (сообщением на экран, на почту, в Skype, ICQ или с помощью SMS).
    • Надежность работы, в противовес быстродействию, выдвигается на первый план - если какая-то дополнительная проверка поможет предотвратить возможную ошибку, то она должна в советнике быть. Даже если это несколько замедлит тестирование и оптимизацию (при работе в реальном времени скорость исполнения чаще всего не ощутима).
    • Будущие доработки, если и понадобятся,  незначительные. Поэтому особых требований к простоте расширяемости не выдвигается.
    • Все "узкие места" алгоритма должны быть подробнейшим образом продуманы и качественно обработаны. Ситуаций, в которых может возникнуть ошибка, должно быть минимум (все, к сожалению, предусмотреть не получится):
      • Советник должен уметь восстанавливать нормальное функционирование после временного разрыва связи, переподключения к счету или перезапуска терминала.
      • При невозможности установить отложенные ордера или стоп-приказы, они должны отслеживаться виртуально и при достижении ценой их уровней исполняться по рынку.
      • При невозможности открыть позицию по рынку в течении N попыток должно увеличиваться максимально разрешенное проскальзывание.
      • При срабатывании отложенного ордера или стоп-приказа не по предусмотренному алгоритмом уровню, а с проскальзыванием (например, при ценовом разрыве), должны быть скорректированы уровни всех зависимых ордеров (а, возможно, и их объемы).
      • Все функции, оперирующие размером депозита (например, расчет лота), должны нормально воспринимать неторговые операции с балансом (внесение или списание средств).
      Этот список можно продолжать долго. Таких нюансов бесконечно много, а в каждой стратегии есть еще и свои тонкости.
    • Также выдвигается дополнительное требование - советник должен нормально работать с разными дилинговыми центрами, учитывать список доступных инструментов, их спецификации и другие настройки сервера (максимальное количество отложенных ордеров, уровень Stop Out, возможность открывать встречные позиции (только для MetaTrader 4), и так далее).

  3. И ситуация номер три - вы действительно готовы поставить советника на реальный счет с депозитом $100 000. Изменится ли что-то, по сравнению с предыдущей версией для реала? Все зависит от вашей параноидальности (простите, предусмотрительности):
    • Абсолютно не лишним будет ведение более подробных лог-файлов и регулярное сохранение скриншотов графиков, они могут оказаться очень полезными при разборе проблемных или спорных ситуаций.
    • Если вы планируете запускать советника на выделенном сервере, можно предусмотреть возможность подстраховки его работы другой (параллельно запущенной) копией. Например, можно одновременно запустить советника на сервере и дома, и "домашняя" копия должна уметь брать контроль над ситуацией, в случае пропадания у "серверной" копии связи на 5 или больше минут.
    • Если вы не можете постоянно следить за работой советника, можно реализовать ежечасное (или ежедневное) информирование о текущем состоянии (как счета, так и торговой ситуации). Уведомления о критических ошибках должны быть в любом случае.
    • Если вы хотите контролировать торговый процесс даже когда под рукой только телефон, можно реализовать "обратную связь" - возможность отправки советнику команд посредством SMS, почты, Skype, ICQ или с помощью установки специальных отложенных ордеров (с описанием команд в комментариях).

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

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

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

Стандартную обработку простых ошибок (реквотов, неправильных стопов, и т.п.) любой уважающий себя экспертописатель добавит сам. Но не факт, что это "стандартное поведение" подойдет к вашей конкретной стратегии.

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

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

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

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


4. Сверяем словари

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

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

Немного отвлечемся.

Представьте себе, что вам нужно поменять смеситель. Вы звоните сантехнику, и говорите: "У меня сломалась штука, с помощью которой я умываюсь! Хочу новую, и чтобы я ее включал одной рукой". Звучит глупо, не правда ли? Но поверьте, некоторые задания, присылаемые трейдерами, выглядят еще глупее!

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

Попробуем иначе. Вы звоните, и говорите: "Мне необходим смеситель на умывальник в ванную комнату. Диаметр труб горячей и холодной воды - 13 мм, расстояние от труб до основания умывальника - 20 см. Регулировка напора и температуры воды должна производиться одной ручкой. Желательно иметь выбор из нескольких моделей".

Бинго! Теперь сантехник знает, что: а) вам необходим именно смеситель; б) он должен быть не с двумя вентилями, а с одной ручкой-регулятором; в) для подключения ему понадобятся шланги длиной 20-25 см и диаметром 13 мм. Приехав к вам, он сможет предоставить вам несколько смесителей на выбор и быстро сделать свою работу.

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

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

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

В качестве промежуточного итога - несколько советов:

  1. Объясняйтесь простыми и понятными словами без сокращений и жаргонизмов.
  2. Используйте общепринятую терминологию. Если не знаете, как назвать инструмент или событие, не стесняйтесь использовать формулировки из справки или учебников.
  3. Рассказывайте подробно и в деталях. Говорите даже о том, что считаете очевидным. Очень часто оказывается, что очевидно оно только для вас!
  4. Наконец, убедитесь, что собеседник вас понимает. Задайте наводящие вопросы или попросите сформулировать задание своими словами - удостоверьтесь, что говорите об одном и том же.

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

Очень немногие трейдеры способны сформулировать задание точно и корректно - это факт. За шесть лет моего эксперто-писательства я запомнил только двоих клиентов, чьими заданиями  действительно восхитился - это были готовые программы, их надо было просто перевести на MQL. Еще несколько человек были отмечены тегами "понимают, чего хотят" и "умеют излагать мысли" - после прочтения их алгоритмов я четко понимал, как будет работать будущая программа. Но основная масса заказчиков - начинающие трейдеры, их пугает не только необходимость четко описать действия советника, но и само слово  "алгоритм".

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

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

Мы наконец-то добрались до самой ответственной части - составления алгоритма. Что ж, приступим!


5. Готовим задание

Готовим задание

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

Эта, немного переиначенная, фраза классика очень ярко демонстрирует главные качества хорошего технического задания:

  1. Задание должно быть полностью самодостаточным (понятным абсолютно незнакомому с вашей системой человеку).
  2. Задание должно быть максимально подробным (понятным даже неискушенному в вопросах трейдинга человеку).

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

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

Но сути это не меняет! Если вы дадите свой алгоритм десяти разным людям и попросите их торговать по вашей системе, у них должен получиться абсолютно идентичный результат. Кто из вас может похвастаться таким опытом?


5.1. С чего начать?

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

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

Несколько примеров такого вступления:

Необходим индикатор для MetaTrader 4. Задача - нарисовать перевернутый график произвольной валютной пары в подокне основного графика. Индикатор должен работать на 4-х и 5-тизначных котировках и с нестандартными названиями инструментов (например, EURUSDFXF).
Необходим советник для MetaTrader 5. Торговля по одной валюте, сигнал на вход - на основании пользовательского индикатора (код прилагается). Закрытие позиций - по СЛ, ТП и по обратному сигналу. Все позиции сопровождаются трейлинг-стопом на основании другого индикатора (код тоже есть). Лот рассчитывается, как процент от баланса.
Необходимо доработать советника (MetaTrader 4) для работы на реальном счете - вставить все необходимые проверки, сделать восстановление нормальной работы после разрывов связи, добавить несколько попыток открытия позиции при ошибках, и, возможно, что-то еще - на ваше усмотрение.
Необходим советник для проверки стратегии на пробой канала. Определение границ канала - по индикатору, вход в рынок - отложенными ордерами, после неудачной сделки - увеличение лота с заданным коэффициентом. Также должно задаваться время работы в течение суток, когда разрешена установка первых ордеров. Все - для MetaTrader 4, код индикатора есть.

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


5.2. Как сформулировать?

Самая важная часть - собственно, алгоритм. Его сложнее всего сформулировать (особенно - непрограммисту), и над ним действительно придется потрудиться.

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

Если речь идет о написании советника, то можно выделить следующие логические разделы (их количество и содержимое может отличаться в зависимости от стратегии):

  1. Общие условия: время работы (в течение суток, в определенные дни недели), порядок запуска (например, начало торговли при нажатии на кнопку), необходимая для анализа глубина истории, и другие условия, относящиеся ко всему заданию в целом (а не к отдельным его пунктам).

  2. Сигнал на вход (открытие первой позиции или установка первых ордеров) - на основании индикаторов, определенных ценовых паттернов, просто по времени или по команде пользователя. Сюда же можно отнести ограничения на первый вход (фильтры) - по времени, по другому индикатору, после слишком длинной серии убытков, при недопустимых торговых условиях (слишком большом спреде или уровне StopLevel), или при недостатке свободных средств. Отдельно должен указываться способ расчета лота, уровней Stop Loss и Take Profit (если правила расчета для всех позиций общие, можно вынести их в независимый подраздел).

  3. Реакция на срабатывание отложенных ордеров и SL/TP позиции (если необходимо). Например, удаление Sell Stop ордера при срабатывании Buy Stop ордера, установка дополнительного ордера Sell Limit при срабатывании предыдущего установленного ордера Sell Limit, открытие позиции на продажу удвоенным объемом после срабатывания Stop Loss, и так далее.

  4. Сигналы на открытие дополнительных позиций (при наличии открытой позиции) или на установку дополнительных ордеров (если необходимо). Например, по сигналу других индикаторов или при достижении прибыли или убытка существующей позиции определенного значения. Тут тоже должны быть указаны правила расчета лота, уровней Stop Loss и Take Profit (если они отличаются от тех, которые были описанны ранее).

  5. Сопровождение позиций и ордеров (отдельно - первых в серии, отдельно - дополнительных, или всех вместе, если правила одинаковы). Например, подтяжка отложенного Stop-ордера за рынком (в случае движения цены не в его сторону), Trailing Stop для позиций (обычный, по индикатору, или еще какой-то), закрытие части позиции при достижении определенной прибыли, и так далее.

  6. Сигналы на закрытие (полное, частичное) или переворот позиции. Правила удаления отложенных ордеров.

  7. Общие условия, связанные, например, с состоянием счета - закрытие всех позиций и остановка работы при определенной просадке, уменьшение используемого процента депозита при увеличении баланса до определенного уровня, и тому подобные. По хорошему, эти условия относятся к первому пункту, но часто их проще описать именно в конце (как бы в порядке использования).

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

Если речь идет об индикаторе, с одной стороны, все намного проще - логика более примитивная и менее заковыристая, но с другой стороны, есть и свои тонкости.

План-конспект примерно такой:

  1. Необходимые данные: список анализируемых инструментов (если их несколько), глубина истории по всем используемым инструментам и таймфреймам, привязка к временной зоне ДЦ.
  2. Стиль отображения (линии, сигнальные стрелочки, свечной график, лучи наподобие ЗигЗага, геометрические фигуры или другие построения).
  3. Алгоритм расчета первого значения (значения на самом левом баре), если он отличается от основного алгоритма.
  4. Основной алгоритм расчета для отдельного бара или описание процесса построения, если вывести формулу для отдельного бара сложно (как в случае с Зиг-Загом, например).
  5. И красивости-удобности, если нужны: звуковые сигналы, сохранение скриншотов, отправка уведомлений на почту, и т.д.


Попробуем перейти от теории к практике, и закончим некоторые из наших заданий-образцов:

Необходим индикатор для MetaTrader 4. Задача: нарисовать перевернутый график произвольной валютной пары в подокне основного графика. Индикатор должен работать на 4-х и 5-тизначных котировках и с нестандартными названиями инструментов (например, EURUSDFXF).

  1. В настройках задается название инструмента (параметр symbol ), который необходимо отобразить (например, "GBPUSD_m"). Если название не задано, нужно использовать инструмент того графика, на котором запущен индикатор. Если указанного инструмента нет в "Обзоре рынка", необходимо выдать окно с сообщением об ошибке.
  2. Отрисовка должна быть в виде японских свечей. Цвета растущей и падающей свечи, а также теней (отдельно - верхней и нижней), должны настраиваться.
  3. Расчет значений OHLC для каждого бара производится по формулам:
    • Open (индикатора) = 1 / Open (symbol );
    • Close (индикатора) = 1 / Close (symbol);
    • Low (индикатора) = 1 / High (symbol);
    • High (индикатора) = 1 / Low (symbol).
  4. На всех "круглых" уровнях цены (1.3200, 1.3300, 1.3400, 1.3500, ...), то есть уровнях, кратных 100 четырехзначным пунктам, необходимо рисовать горизонтальную линию (стиль и цвет должны настраиваться параметрами).
Немного сложнее будет с советником:

Необходим советник для MetaTrader 5. Торговля по одной валюте, сигнал на вход - на основании пользовательского индикатора (код прилагается). Закрытие позиций - по СЛ, ТП и по обратному сигналу. Все позиции сопровождаются трейлинг-стопом на основании другого индикатора (код тоже есть). Лот рассчитывается, как процент от баланса.

  1. Сигнал на открытие позиции - стрелочка индикатора iSignalArrow (все параметры индикатора должны настраиваться):
    • Бай-позиция открывается, если на последнем закрытом баре индикатор показывает стрелочку вверх (под графиком);
    • Селл-позиция открывается, если на последнем закрытом баре индикатор показывает стрелочку вниз (над графиком);
    • Анализируются только сформировавшиеся бары (стрелочки на текущем баре игнорируются).
  2. Лот позиции рассчитывается, как процент от текущего баланса: Lot = Balance / MarginRequired * LotPercent / 100, где:
    • Balance - текущий баланс счета;
    • MarginRequired - маржа, необходимая на открытие позиции размером 1 лот;
    • LotPercent - параметр, настраиваемый пользователем (процент для расчета лота).
      Например, при LotPercent = 5, балансе 10 000 и кредитном плече 1:100, лот для EURUSD (при текущем курсе 1.3900) будет равен: 10 000 / 1 390 * 5 / 100 = 0.3597
      Полученный результат округляется по обычным правилам до ближайшего корректного значения (до 0.36 - если ДЦ разрешает лоты с точностью до 0.01, или до 0.4 - если шаг лота = 0.1).
  3. СтопЛосс (SL) и ТейкПрофит (TP) - фиксированные, настраиваются параметрами StopLoss  и TakeProfit:
    • Значения указываются в пунктах четырехзначных котировок;
    • Уровни рассчитываются от цены открытия позиции (от Аск - для бай-позиции, и от Бид - для селл-позиции);
    • Если указанное значение слишком маленькое, стоп должен быть установлен на минимально разрешенном расстоянии;
    • При указании значения 0, стоп не используется.
  4. Все открытые позиции сопровождаются трейлинг-стопом по индикатору iTrailingLine (все параметры индикатора должны настраиваться):
    • Если открыта бай-позиция, и линия индикатора находится ниже текущей цены, стоп переносится на уровень этой линии;
    • Если открыта селл-позиция, и линия индикатора находится выше текущей цены, стоп переносится на уровень этой линии;
    • Значения индикатора берутся со сформировавшегося (закрытого) бара, текущий бар не используется. То есть в обычном режиме модификация должна происходить не чаще, чем один раз в бар;
    • Перемещение SL разрешено только в сторону прибыли позиции - вверх для бай и вниз для селл;
    • Если установить SL на уровень линии невозможно, он должен быть установлен на минимально допустимое расстояние (но только если будет соблюдаться предыдущее правило - перенос в сторону прибыли);
    • Трейлинг-стоп должен быть отключаемым (параметр AllowTrailing = true/false).
  5. Если есть открытая позиция, и появляется противоположный сигнал, позиция закрывается и открывается новая - в противоположном направлении.
    Расчет лота для новой позиции должен производиться после закрытия существующей позиции.
  6. Разное:
    • При запуске советника он должен сам присоединить к графику индикаторы с используемыми параметрами;
    • Информация об открытии/закрытии позиций и о модификациях СЛ должна сохраняться в журнале;
    • При возникновении любых ошибок, должно появиться окно с описанием ошибки.

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


5.3. О чем не забыть?

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

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

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

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

  1. Как советник должен реагировать на позиции, открытые вручную или другими советниками?
    Обычно выбирают один из трех вариантов:
    • Полностью игнорировать все "чужие" позиции. Если система самодостаточна, торговые действия других советников или пользователя на нее влиять не должны.
    • Работать только с "ручными" позициями. Если советник предназначен для сопровождения открытых вручную позиций, он не должен трогать позиции других советников, и, обычно, не открывает позиции самостоятельно. Его задача - помочь в ручной торговле (перенести Stop Loss, закрыть позицию по сигналу, и так далее).
    • Наиболее универсальный вариант - предоставить пользователю выбор: работать только со своими позициями или сопровождать позиции, отвечающие заданным условиям (по конкретному инструменту или с заданным Magic Number).

    В MetaTrader 5 вопрос с разделением сделок на "свои" и "чужие" особенно актуален - в терминале отображается только суммарная позиция по инструменту, даже если она была "собрана" из сделок нескольких разных советников. Реализация полноценного учета сделок для нормальной работы нескольких советников на одном инструменте сложнее в реализации и, соответственно, может быть дороже. Уточняйте у исполнителя, будет ли советник нормально взаимодействовать с другими советниками, работающими на том же инструменте.

  2. Как советник должен реагировать на подключение к другому торговому счету? Нужна ли специальная процедура запуска на реале?
    Думаю, многие трейдеры могут "похвастаться" потерями, причиной которых была банальная невнимательность - случайное подключение к реальному счету, запуск терминала с работающим советником или изменение параметров советника при наличии открытых позиций. Этих нелепостей можно избежать, просто предусмотрев их в алгоритме.
    Например, так:
    • При запуске на реальном счете советник должен создать на графике кнопку, разрешающую торговлю. Работа должна начинаться только после того, как пользователь на нее нажмет.
    • При смене счета советник должен уведомить об этом пользователя и прекратить работу до нового запуска (альтернативное решение - спросить пользователя, можно ли ему продолжать работу).
    • Если есть открытые советником позиции (или установленные ордера), при изменении внешних параметров, советник должен модифицировать позиции (ордера) в соответствии с заложенным алгоритмом - например, при изменении значения StopLoss нужно модифицировать Stop Loss всех открытых позиций, но только если он еще не был перемещен трейлинг-стопом. Тут нельзя дать универсальный рецепт, каждый параметр нужно описывать отдельно. Кроме того, у разных стратегий может быть предусмотрена разная реакция на изменение одного и того же параметра.

  3. Нужна ли возможность запускать несколько копий программы с похожими (или одинаковыми) параметрами?
    Если есть необходимость делать разметку графика, запуская несколько копий индикатора, меняя значение только одного параметра, тогда все создаваемые им объекты должны иметь имена, содержащие значение этого параметра - иначе каждый следующий запуск будет искажать результаты предыдущих (перерисовывать картинку).
    В случае с советником, обычно добавляется специальный параметр - ExpertId или MagicNumber, который позволяет запустить любое количество копий советника с любым набором всех остальных параметров. Укажите в задании, с какими настройками и в каких комбинациях возможен одновременный запуск программы, не все ситуации программист предусмотрит сам.

  4. Как должен осуществляться перенос советника в другой терминал, подключенный к тому же счету? Может ли советник хранить какие-то данные в файлах или в глобальных переменных терминала?
    Большинству программ абсолютно незачем хранить промежуточную информацию, их алгоритмы основываются на исторических данных валютной пары и торговой истории счета (эти данные можно получить из любого терминала, подключенного к вашему счету). Но часто приходится сохранять некоторую информацию в файл, а при следующих запусках считывать ее - иногда это позволяет ускорить быстродействие, а иногда без этого просто невозможно создать надежную программу.
    Сообщите программисту, если у вас есть какие-то особые требования к процессу переноса советника, или просто попросите его описать этот процесс именно для вашего случая.

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

Если другие советники займут торговый поток (касается только MetaTrader 4), ваш советник не сможет торговать. А если сработает ограничение на максимальное количество отложенных ордеров, новый ордер все равно установить не удастся. Но от того, что большинство таких моментов вы в алгоритме предусмотрите, хуже никому не будет. Набирайтесь опыта, и каждая новая версия советника будет лучше и надежнее.


5.4. Как упростить понимание?

Информация усваивается намного проще, если она хорошо проиллюстрирована.

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

  1. Приложите к заданию несколько скриншотов, иллюстрирующих разные пункты алгоритма (момент появления сигнала, демонстрация работы трейлинг-стопа, последовательность установки отложенных ордеров, и т.д.). Не стесняйтесь снабжать графики краткими комментариями, пусть даже они частично продублируют текст алгоритма.
  2. Оформите текст задания со вкусом: выделите цветом разницу между Buy- и Sell-позициями, выделите внешние переменные (параметры, которые хотите иметь возможность настраивать), отметьте важные моменты и формулы. Кроме того, что текст станет легче читаться, в нем будет намного проще ориентироваться.
  3. Приводите примеры. Любая формула, проиллюстрированная конкретными цифрами, становится намного понятнее.
  4. Нумеруйте пункты и подпункты алгоритма - и на них всегда можно будет сослаться в обсуждении. "Ошибка в п. 2.1.4" - намного лаконичнее и точнее, чем "Ошибка в том месте, где рассчитывается уровень Stop Loss для второй бай-позиции серии".


5.5. Текст, голос или видео?

Текст, голос, или видео?Меня всегда умиляет, когда заказчик вместо задания присылает ссылку на 120-страничное обсуждение стратегии на форуме, 70-страничную книгу или полуторачасовую видео-лекцию. Действительно, программисты - народ незанятой, времени у них - хоть отбавляй, изучат... То, что полезная составляющая этой информации уместится в алгоритме объемом в полстраницы, или тот факт, что формализовать это описание просто невозможно (бывает и такое), никого не волнует.

Если вы уже изучили этот материал, если вы понимаете, о чем там идет речь, если вы хорошо представляете, как будет работать стратегия - сформулируйте алгоритм! Уберите "воду" (которой, обычно, 80%), неловкие паузы, отвлеченные обсуждения, рассказы про светлое будущее, рассмотрение результатов тестирования - и исполнитель получит только то, что ему действительно нужно для написания программы.

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

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

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

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

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

Выводы из всего вышесказанного можно сделать такие:

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

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


6. Выбираем исполнителя

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

Выбирая исполнителя для реализации своего первого задания, советую оценивать такие критерии:

  1. Стаж публичного написания программ на MQL 4/5.
    Если экспертописатель появился на рынке неделю назад, он может через неделю и уйти. "Дедушка" с двухлетним стажем, конечно, тоже может внезапно исчезнуть, но вероятность этого события, согласитесь, намного ниже. Потеря связи с исполнителем грозит не только невозможностью сделать новый заказ, но и:
    • Отсутствием поддержки (программ без ошибок не бывает, бывают плохо протестированные программы);
    • Сложностью внесения даже минимальных доработок (чужой код разбирать всегда сложнее, поэтому другой программист может запросить приличную сумму даже за незначительные изменения).

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

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

  4. Способы связи.
    На сегодняшний день доступно множество способов общения через интернет: электронная почта, всевозможные мессенджеры, программы для голосовой и видеосвязи, личные сообщения на интернет-ресурсах. Кто-то привык к одним, кто-то  к другим. Для взаимодействия вам надо будет выбрать способ, удобный вам обоим. Нет проблемы установить еще одну программу, но кто-то не захочет этого делать, потому что не видит в этом необходимости, а кто-то  "из религиозных соображений".
    Если вам необходимо живое общение (например, через Skype), уточните у исполнителя, готов ли он к нему. Тем более, договоритесь заранее, если хотите пообщаться по телефону или встретиться лично - далеко не все согласятся выносить работу "в офф-лайн".

  5. Условия сотрудничества.
    Перед заказом обязательно узнайте все условия сотрудничества:
    • Возможно ли оформление заказа через сервис "Работа"? Положительный ответ на этот вопрос снимет большинство остальных.
    • Нужна ли предоплата, и, если да, в каком размере?
    • Как будет осуществляться проверка программы, получите ли вы демо-версию?
    • Получите ли вы исходные коды программы и, если да, то когда - после полной оплаты или сразу?
    • Кому будут принадлежать права на распространение программы?
      Проконтролировать честность программиста вряд ли получится, но формально уточнить этот момент все же стоит: если он будет неоднократно заподозрен в продаже клиентских советников или алгоритмов, его репутация будет идти далеко впереди него.
    • Сколько будет длиться техническая поддержка и на каких условиях? Бесплатно ли будут исправляться ошибки (несоответствия алгоритму), сколько будут стоить мелкие доработки?
    Все эти нюансы стоит уточнить перед началом финансовых взаимоотношений, потом это сделать будет сложнее.

  6. Методы оплаты.
    Какие исполнитель использует электронные платежные системы, возможна ли оплата банковским переводом или кредитной картой?
    Обязательно уточните, нет ли требований к валюте платежа - интернет интернациональный, и далеко не всем нужны российские рубли.

  7. Характер.
    Если вам нужно не разовое сотрудничество, а постоянный напарник, попытайтесь выяснить, подходите ли вы друг другу по характеру. Пообщайтесь, обозначьте свои требования к собеседнику, опишите свое мировоззрение, свои принципы и слабости (насколько хватит самокритичности).
    Альтернативный вариант - пробуйте заказать наобум, а разбирайтесь в процессе. Но тогда может получиться, что настоящего напарника вы найдете далеко не с первой попытки.

  8. Стоимость работы.
    Последняя в списке, но далеко не последняя по значению. Я бы не доверил написание серьезной программы человеку, оценившему работу в $10, но и не готов заплатить $1000 - приходится выбирать что-то среднее. Цена, с одной стороны, свидетельствует о профессионализме исполнителя, а, с другой, зависит от его заинтересованности и занятости. Не ждите, что получите "мерседес" за $5, но и не переплачивайте за "жигули".


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

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


7. Защищаемся от недобросовестности

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

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

Подробнее о сервисе можно узнать из официального анонса на форуме и из статьи, посвященной его использованию:

Основным отличием сервиса "Работа" на MQL5.community от большинства подобных ресурсов и сервисов на других сайтах является безопасность. Заказчик и исполнитель защищены от недобросовестных действий противоположной стороны на всем протяжении совместной работы. В случае возникновения спорной ситуации компания MetaQuotes Software Corp. готова выступить арбитром.

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

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

  2. Заказывая советника, подготовьте нормальный алгоритм.
    Этой теме посвящено несколько разделов данной статьи, повторяться не будем.

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

  4. Ведите все обсуждения, используя интерфейс сервиса - только так они могут быть использованы при обращении в арбитраж.
    Даже если вы общаетесь через ICQ или Skype, старайтесь "документировать" все ключевые моменты в комментариях к работе.

  5. Следите за обновлениями работ, к которым имеете отношение (не важно - в качестве заказчика или в качестве исполнителя): регулярно просматривайте личные сообщения, разрешите отправку уведомлений на почту или добавьте в профиле номер мобильного телефона для получения SMS.
    Если вы не будете следить за рабочим процессом, он может завершиться без вас и не в вашу пользу - по истечении срока работа может быть принудительно завершена другой стороной.

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


8. Проверяем результат

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

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

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

  3. Сравнивайте работу советника с утвержденным алгоритмом, а не со своими ожиданиями о прибыльности системы. Если в процессе проверки окажется, что в алгоритме есть ошибка, внесите в него необходимые изменения, и попросите программиста доработать советника. Но не ждите, что он будет это делать бесплатно (особенно, если доработка существенная), в этой ошибке нет его вины.

Если вы обнаружили проблему, сообщите о ней исполнителю.

  1. Укажите пункт алгоритма, который выполняется программой неправильно (или с которого начинается неправильное выполнение всех остальных действий).
    Если найти конкретное место нарушения логики сложно, объясните суть проблемы своими словами, но все равно старайтесь не отходить от алгоритма слишком далеко.

  2. Опишите условия, в которых проводилась проверка:
    • Приложите set-файл с параметрами программы (кнопка "Сохранить" в окне параметров советника);
    • Укажите используемые валютную пару и таймфрейм графика;
    • Укажите адрес сервера, к которому был подключен терминал, и тип счета (демо, реал, конкурсный или другой);
    • Укажите версию терминала (меню "Справка" - "О программе");
    • Если проверка производилась в тестере, дополнительно укажите настройки тестера (интервал дат, режим моделирования, режим торговли, начальный депозит, кредитное плечо).

  3. Приложите скриншот, иллюстрирующий проблему.

  4. Если проблема связана с открытием или закрытием позиций, скопируйте отрывок из отчета тестера или несколько строк из истории счета.

  5. Приложите лог-файлы советника (пункт "Открыть" контекстного меню на закладке "Эксперты" в терминале или на закладке "Журнал" в окне тестера).

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


9. Даем обратную связь

Даем обратную связь

MQL-сообщество развивается, и вы - его часть.

Вспомните, как вы выбирали программиста и готовили задание впервые - что могло бы облегчить вам этот процесс? Поделитесь опытом!

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

Расскажите о своем опыте сотрудничества с программистами, укажите на их сильные и слабые стороны, опишите - что больше всего понравилось и с чем были проблемы. Это займет у вас 10 минут времени, но поможет сэкономить кучу нервов и денег вашим коллегам-трейдерам.

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

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

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

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


Заключение

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

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


Последние комментарии | Перейти к обсуждению на форуме трейдеров (49)
Kino
Kino | 17 фев 2016 в 00:07
Andrey Khatimlianskii:
Помните! Программист не отвечает за прибыльность вашей стратегии, его задача - написать программу, которая будет работать по утвержденному вами алгоритму.
100%
Dmitry Fedoseev
Dmitry Fedoseev | 17 фев 2016 в 10:07
Eduard Minosian:
Добрый вечер. Скажите, если я включу непосредственно в файл технического задания информацию об оговоренном между мной и программистом сроке выполнения работы (сроком считаю момент получения мной готового советника, а не макета, разумеется), то могу ли я использовать эту информацию как способ аннулировать заказ через арбитраж в случае невыполнения работы в срок? Также в ТЗ могу внести информацию о том, что буду, например, ежедневно (минимум раз в день) выходить на связь для ответов на все вопросы программиста и т. д. и т. п. То есть, короче говоря, если я создам свой маленький регламент непосредственно в ТЗ, защищающий как мои права, так и права программиста, естественно, оговорив это с программистом (логично, он ведь должен прочесть файл ТЗ), может ли это стать правовой основой для моей защиты? Ну вот честно, устал от тех, кто говорит одно, а делает другое... Ведь по сути программист обязан внимательно изучить ТЗ, перед тем как соглашаться на условия заказчика, и если ему что-то не понятно или кажется невозможным, то он обязан говорить об этом сразу, в процессе изучения ТЗ, а не в процессе выполнения. Опять же я могу это тоже включить в свой регламент. Вопрос лишь в том, не будет ли создание своего регламента расцениваться сервисом как нечто неправомерное? Как показывает практика, большинство программистов соглашаются выполнить работу на любых условиях, просто чтобы сказать заказчику то, что он хочет услышать, и получить согласие на выполнение работы. Я устал сливать деньги на таких программистов. Жду ответа на вопрос. Спасибо. 

Вот ведь какой парадокс:

Чем полнее ответите на все вопросы, тем больше шанс, что работать буду с вами, как по этому ТЗ, так и по следующему. При этом, убедительная просьба не писать мне и не оставлять заявок на выполнение работы, если:

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

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

3. Вы хотите с кем-нибудь о чем-нибудь поболтать.

4. Вы не умеете укладываться в сроки, которые называете. 

https://www.mql5.com/ru/job/38355 

А выбора-то ведь и нет.
Yuriy Zaytsev
Yuriy Zaytsev | 31 мар 2016 в 12:24
Eduard Minosian:
Добрый вечер. Скажите, если я включу непосредственно в файл технического задания информацию об оговоренном между мной и программистом сроке выполнения работы (сроком считаю момент получения мной готового советника, а не макета, разумеется), то могу ли я использовать эту информацию как способ аннулировать заказ через арбитраж в случае невыполнения работы в срок? Также в ТЗ могу внести информацию о том, что буду, например, ежедневно (минимум раз в день) выходить на связь для ответов на все вопросы программиста и т. д. и т. п. То есть, короче говоря, если я создам свой маленький регламент непосредственно в ТЗ, защищающий как мои права, так и права программиста, естественно, оговорив это с программистом (логично, он ведь должен прочесть файл ТЗ), может ли это стать правовой основой для моей защиты? Ну вот честно, устал от тех, кто говорит одно, а делает другое... Ведь по сути программист обязан внимательно изучить ТЗ, перед тем как соглашаться на условия заказчика, и если ему что-то не понятно или кажется невозможным, то он обязан говорить об этом сразу, в процессе изучения ТЗ, а не в процессе выполнения. Опять же я могу это тоже включить в свой регламент. Вопрос лишь в том, не будет ли создание своего регламента расцениваться сервисом как нечто неправомерное? Как показывает практика, большинство программистов соглашаются выполнить работу на любых условиях, просто чтобы сказать заказчику то, что он хочет услышать, и получить согласие на выполнение работы. Я устал сливать деньги на таких программистов. Жду ответа на вопрос. Спасибо. 

100% можете, я бы включал обязательно

Вот я очень принципиально и внимательно отношусь к времени исполнения задачи

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

- по крайней мере по своей вине не должен попасть


--

есть  обратная сторона луны

сразу оговорюсь лично  у меня такой ситуации не случилось еще

1 заказчик выбрал исполнителя

2 Оговорили  ТЗ  - сумму и срок оговорили  - допустим срок поставили 1 день

3 Программист начала работу - и завершил ее через час - и через сервис оповестил заказчика

4 Далее происходит любой из сценариев , заказчик занят , уехал на дачу , ушел в отпуск.

   Не важна причина ,  он не ответил к вечеру не ответил утром и вечером  второго дня и вообще на 3 дня пропал.

итог программист попадает на просрочку работы

--

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

---

и такие случаи нередки судя по  профилям фрилансеров

--

Правильно будет разделить учет времени ЗАКАЗЧИКА и ИСПОЛНИТЕЛЯ

надо просить коллективно об этом у MetaQuotes

Maxim Kuznetsov
Maxim Kuznetsov | 22 ноя 2016 в 12:37
Eduard Minosian:
Добрый вечер. Скажите, если я включу непосредственно в файл технического задания информацию об оговоренном между мной и программистом сроке выполнения работы (сроком считаю момент получения мной готового советника, а не макета, разумеется), то могу ли я использовать эту информацию как способ аннулировать заказ через арбитраж в случае невыполнения работы в срок? Также в ТЗ могу внести информацию о том, что буду, например, ежедневно (минимум раз в день) выходить на связь для ответов на все вопросы программиста и т. д. и т. п. То есть, короче говоря, если я создам свой маленький регламент непосредственно в ТЗ, защищающий как мои права, так и права программиста, естественно, оговорив это с программистом (логично, он ведь должен прочесть файл ТЗ), может ли это стать правовой основой для моей защиты? Ну вот честно, устал от тех, кто говорит одно, а делает другое... Ведь по сути программист обязан внимательно изучить ТЗ, перед тем как соглашаться на условия заказчика, и если ему что-то не понятно или кажется невозможным, то он обязан говорить об этом сразу, в процессе изучения ТЗ, а не в процессе выполнения. Опять же я могу это тоже включить в свой регламент. Вопрос лишь в том, не будет ли создание своего регламента расцениваться сервисом как нечто неправомерное? Как показывает практика, большинство программистов соглашаются выполнить работу на любых условиях, просто чтобы сказать заказчику то, что он хочет услышать, и получить согласие на выполнение работы. Я устал сливать деньги на таких программистов. Жду ответа на вопрос. Спасибо. 

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

60012345
60012345 | 16 окт 2018 в 14:13

Здравствуйте. 

Порядок рассмотрения обращений в Арбитраж

-----

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

_________________________________

Прошу помочь и понять. Срок 10 дней с какого момента начинается данный срок

Основы тестирования в MetaTrader 5 Основы тестирования в MetaTrader 5

В чем различия между тремя режимами тестирования в MetaTrader 5 и на что обратить внимание? Как происходит тестирование эксперта, торгующего одновременно на нескольких инструментах? Когда и как вычисляются значения индикаторов при тестировании и как обрабатываются события? Как синхронизировать бары с разных инструментов при тестировании в режиме "Только цены открытия"? Статья призвана дать ответы на эти и многие другие вопросы.

Статистические распределения вероятностей в MQL5 Статистические распределения вероятностей в MQL5

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

Индикаторы и торговые системы Уильяма Блау на MQL5. Часть 1: Индикаторы Индикаторы и торговые системы Уильяма Блау на MQL5. Часть 1: Индикаторы

В статье представлено описание разработанных на MQL5 индикаторов по книге Уильяма Блау (William Blau) "Моментум, направленность и расхождение". Подход Уильяма Блау позволяет достаточно точно и с минимальным запаздыванием аппроксимировать колебания ценовой кривой, выделять тенденцию ценового движения и поворотные точки и устранять ценовой шум. При этом мы можем также получать сигналы о перекупленности/перепроданности рынка, сигналы об окончании тренда и о развороте ценового движения.

Прогнозирование временных рядов в MetaTrader 5 при помощи библиотеки машинного обучения ENCOG Прогнозирование временных рядов в MetaTrader 5 при помощи библиотеки машинного обучения ENCOG

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