От Мартингейла до машинного обучения, чему я научился в области автоматической торговли как инженер-программист.

4 месяца назад мой друг познакомил меня с автоматическим торговым роботом, который позволяет ему зарабатывать 1% от своих инвестиций каждый день (то есть: вы вкладываете 1000 долларов, вы зарабатываете 10 долларов каждый день на своем торговом счете). В то время это выглядело как жульничество. Чтобы доказать это, я заинтересовался торговлей на рынках в целом, как это работает и что делают трейдеры, чтобы зарабатывать деньги. В этой статье я хотел бы рассказать о своем пути в трейдинге и изучить его с точки зрения инженера-программиста.

Отказ от ответственности: я излагаю свою точку зрения, но не принимаю свои слова как должное, я не эксперт.

Прежде, чем мы начнем

Торговые рынки

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

  • Валютный рынок, где можно торговать валютами
  • Индексы, которые представляют несколько компаний страны (например: S & P500 ⇒ 500 крупнейших компаний США, CAC40 ⇒ 40 крупнейших компаний во Франции, DAX30 ⇒ для Германии и т. Д.)
  • Облигации
  • Фьючерсы
  • […]

Кроме того, вам нужно знать, что объем торгов на Форексе намного больше, чем на любых других рынках:

Цены будут либо повышаться, либо понижаться. Это обусловлено нерушимым законом спроса и предложения:

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

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

Почему люди торгуют?

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

  • Технический анализ. Он заключается в прогнозировании цен на основе изучения исторических цен.
  • Фундаментальный анализ: он заключается в прогнозировании цен на основе знания рынка и его состояния в целом (например: для фондового рынка ⇒ «Насколько хорошо компания работала в этом году?»)

Ручная и автоматическая торговля

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

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

Скальп против качания

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

Вы поймете, что нельзя просто начать торговать. Вы должны знать, что делаете. Тогда как мой друг зарабатывал 1% каждый день, ничего не делая и не зная?

Моя история

Инвестиции в мартингейл

Какой сценарий автоматической торговли вы можете запрограммировать, если ничего не знаете о рынке? Мартингал. Это стратегия ставок, которая заключается в том, чтобы делать ставки на одно и то же состояние снова и снова, удваивая ставку, пока вы не выиграете. Таким образом, в торговле классическая стратегия покупки мартингейла будет заключаться в покупке X лотов.

  1. КУПИТЬ X лотов
  2. Если цена снижается, КУПИТЬ X * 2 лота
  3. Если цена снова пойдет вниз, КУПИТЬ X * 2 * 2 лота
  4. […]
  5. Если цена немного вырастет, вы закрываете каждую сделку и с самого начала получаете возмещение убытков.

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

Мечта сбылась

Этот робот торговал на рынке Форекс 24 часа в сутки 5 дней в неделю и в течение 3 месяцев подряд зарабатывал 1% моего капитала каждый день. Я не мог поверить в это! В мае я инвестировал 2500 долларов, а в июле на моем торговом счете было 4500 долларов. Робот заработал + 180% за 3 месяца, + 60% каждый месяц. Для сравнения: банки предлагают финансовые продукты, которые обещают максимальную доходность + 5–10% через… ГОД! Результаты были невероятными, и это полностью шло мне в голову.

До 31 июля:

Гигантское падение как USD / JPY, так и EUR / JPY. Вероятно, это было связано с событием (о котором мы с роботом ничего не знали). И, конечно же, тогда робот решил ПОКУПАТЬ, потому что его решение близко к случайному. Теперь вы можете догадаться, что случилось с моими инвестициями:

4500 $ пропали за ночь. 😭

В этой ситуации здоровый человек сказал бы себе: «Хорошо, я вложился в этого бота, это была ошибка, автоматическая торговля в конце концов не для меня, давайте двигаться дальше». Конечно, нет. Я скорее сказал: «Я инженер-программист, я могу написать лучший сценарий, о котором никто не подумал, и я могу заработать эти 4500 долларов обратно, и я стану миллионером через год!».

Могу ли я что-нибудь сделать со своими знаниями в области программного обеспечения?

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

Автоматизация «настоящих» торговых стратегий

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

Его стратегия основана на индикаторе Ichimoku Kinko Hyo. Индикаторы в торговле - это вычисляемые визуальные значения, которые должны помочь трейдеру определить потенциальный вход. Ишимоку Кинко Хё выглядит так:

Ух ты, это у тебя на экране компьютера, ты чувствуешь себя профи 😄.

В основном его стратегия заключалась в том, чтобы следовать этим правилам для сделки на ПОКУПКУ:

  1. Дождитесь тенденции, дождитесь, пока цена продолжит расти в течение последних 15 минут.
  2. Если цена пересекает зеленую линию и находится выше облака, вы покупаете
  3. Когда цена касается зеленой линии на пути вниз, вы закрываете сделку.
  4. ЛЕГКО ПОБЕДИТЬ

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

def add_ichimoku_attributes(df):
  # Tenkan-sen
  nine_period_high = df['High'].rolling(window= 9).max()
  nine_period_low = df['Low'].rolling(window= 9).min()
  df['tenkan_sen'] = (nine_period_high + nine_period_low) /2
  # Kijun-sen
  period26_high = df['High'].rolling(window=26).max()
  period26_low = df['Low'].rolling(window=26).min()
  df['kijun_sen'] = (period26_high + period26_low) / 2
  # Senkou Span A
  df['senkou_span_a'] = ((df['tenkan_sen'] + df['kijun_sen']) / 2).shift(26)
  # Senkou Span B
  period52_high = df['High'].rolling(window=52).max()
  period52_low = df['Low'].rolling(window=52).min()
  df['senkou_span_b'] = ((period52_high + period52_low) / 2).shift(52)
  # Chikou
  df['chikou_span'] = df['Close'].shift(-26)

Вы вызываете эту функцию с таблицей цен, она вычислит нужные вам данные. Более подробная информация о том, как это реализовать, находится здесь: https://github.com/baptisteArnaud/forex-automated-trading/blob/master/Ichimoku.ipynb.

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

Бэктестинг

Бэктестинг заключается в тестировании стратегии на предыдущих данных. У меня были данные Forex с 2000 по 2019 год. Идея состоит в том, чтобы смоделировать, что робот работал в течение этого предыдущего периода, и посмотреть, как он будет работать. Сначала я попробовал за один день и смог получить хорошие результаты. Но когда я попробовал провести тестирование на более длительном периоде, он не дал результатов.

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

Самое важное, что нужно понимать, - это то, что эти стратегии могут хорошо работать в течение дня, месяца… Но не в долгосрочной перспективе.

Машинное обучение

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

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

Здесь вы видите, что алгоритм не очень хорошо работает с данными. Здесь я использовал алгоритм под названием Random Forest Classifier, но я пробовал множество различных алгоритмов, а также более сложные алгоритмы, такие как Recurrent Neural Networks. Вы можете проверить все, что я пробовал, в этом репозитории:

Https://github.com/baptisteArnaud/forex-automated-trading

Ничего не получилось…

Заключение

Учитывая эти результаты, я твердо уверен, что на Форекс не существует стратегии торговли на основе 100% технического анализа. Торговые рынки хаотичны, поведение меняется от одного дня к другому. Нет ничего интерпретируемого, учитывая только исторические цены и их индикаторы.

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

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

Если у вас есть вопросы, не стесняйтесь комментировать эту статью. Если вы хотите пойти дальше, вы можете найти все, что я пробовал, в этом репозитории GitHub: https://github.com/baptisteArnaud/forex-automated-trading