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

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

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

Для борьбы полезно составлять план или алгоритм торговли, и строго ему следовать. Что бы ни случилось, у вас все должно идти строго по плану. Любая позиция плана будет выглядеть как математическое выражение или как логическое условие. Например, фраза «Покупаю, если цена опустилась на 5%» разбивается на 2 условия:

  1. Считаем, на сколько процентов опустилась цена
  2. Покупаем, если это значение больше или равно 5%.

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

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

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

Программа должна где-то работать. Здесь появляется вопрос об устройстве и его конфигурации. Суть программы автоторговли достаточно простая. Она принимает исторические данные с рынка. По вашему алгоритму считает, купить или продать. Для этого подойдет любое устройство. Тем более, что кроме традиционных компьютеров и ноутбуков появляются новые классы устройств. Это и одноплатные компьютеры, например Raspberry Pi, и системы на кристалле, и устройства «интернет вещей». Например, в «умной» лампочке стоит микроконтроллер ESP32, на котором может быть запущена ваша автоторговля. Главное, чтобы устройство умело выходить в Интернет.

Поскольку, устройство может быть любым, то и операционная система (базовое программное обеспечение для работы устройства) также может быть любой. Долгое время для автоматической торговли обычно использовали  компьютер или ноутбук с операционной системой Windows. Поскольку типов устройств много, то операционные системы используются разные. Кроме Windows часто устанавливаются различные дистрибутивы Linux или даже компиляторы языков программирования Python, Lua и пр. Здесь важно понять, что на Windows свет клином не сошелся.

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

  1. Разработчик «забивает» на разработку, и переключается на что-то другое
  2. Разработчик переводит пользователей на подписную модель своей программы

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

Программное обеспечение с открытым кодом, как следует из определения, выдается нам в исходных кодах программы. На первый взгляд, какой в этом смысл? Вы ведь не собираетесь коротать длинные зимние вечера, изучая чужой код. Да и знаний профессионального разработчика, возможно, у вас нет. Кроме уверенности в том, что программа работает по заданному алгоритму, мы получаем несколько «плюсов»:

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

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

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

Получается, что если поставить Python на ваше устройство для автоторговли, изучить язык по любой книжке, которая вам понравится, то можно переносить ваши алгоритмы? Не так быстро. Сначала нужно разобраться с вашим брокером. У каждого брокера есть терминал QUIK. Многие брокеры принимают вызов времени, и публикуют спецификации открытых интерфейсов для программ автоторговли. У меня на GitHub есть библиотека Python для QUIK и других интерфейсов брокеров. Просто читаете инструкцию, делаете все по ней, запускаете примеры для проверки работы, и все.

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

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

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

  1. Подключите устройство с автоторговлей к источнику бесперебойного питания, чтобы пережить краткосрочное отключение электричества.
  2. Современные роутеры позволяют подключать 2 и более независимых каналов связи. При выходе из строя основного канала, идет автоматическое переключение на резервный. Можно проводной Интернет сделать основным, а мобильный — резервным.
  3. Оповещения. Если возможно, то все внештатные ситуации с питанием и каналами, должны отправляться вам в мессенджер или на почту.

Вам также будут полезны оповещения от системы автоторговли. Например:

  1. Не пришел новый бар, хотя ожидалось, что придет
  2. Ошибка постановки/исполнения заявки
  3. Системные ошибки

В этих случаях нужно реагировать. Что можно сделать в зависимости от ситуации:

  1. Закрыть все позиции
  2. Закрыть заданную позицию
  3. Остановить работу

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

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