Торговый алгоритм на 3 дневных барах

Эксперименты — обычное дело для людей на моей работе. Я разработчик программного обеспечения в Itera, где сотрудники, как правило, проводят свои собственные исследования, помимо работы, которую они делают для клиентов. Это происходит потому, что это соответствует духу компании, который поддерживает любопытство и стремление к инновациям в каждом человеке. И я хочу пробудить это в вас 🙂

Идея сюжета

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

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

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

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

Необходимые условия

На этом графике мы будем использовать Trading API от Alpaca Markets (https://alpaca.markets). У них есть «Бумажный счет», который не является реальным, и на нем есть виртуальные деньги. Этот инструмент идеально подходит для тестирования торговых ботов и ваших торговых идей. Чтобы использовать его, вам нужно будет зарегистрироваться на их веб-сайте и сгенерировать пару: ключ и секрет в разделе API их панели инструментов. Ниже приведено, куда поместить эти две строки: ключ API и секрет API.

Дашборд Alpaca Markets

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

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

Для того, чтобы создать нового Telegram-бота вам понадобится BotFather с ником @BotFather. Используйте его для создания бота. В конце концов, у вас должен быть такой ключ: bot0000000000:AAA_gNNN00B0xxxDaaaUD00HHH-Y0wAAmhA

@BotFather

Также вам нужно будет создать базовый Telegram-канал и добавить своего бота в качестве «Администратора» в канал, чтобы он мог писать сообщения в созданный канал. Затем, для целей нашей программы нам нужен идентификатор канала, который выглядит так: -1002003005001

Для получения ID необходимо использовать Telegram-бота IDBot с ником @username_to_id_botВам нужно будет ввести туда название канала и получить идентификатор, аналогичный вышеупомянутому.

@username_to_id_bot

Инструменты и библиотеки

Для нашего программирования мы будем использовать:

  • Питон
  • Сотрудничество с Google (Colab)
  • alpaca_trade_api
  • Yfinance
  • pandas_ta
  • Запросы
  • matplotlib.pyplot

Импорт

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

https://medium.com/media/132a66e326b62ffa99d1b255916312e3

В Google Colab нет ‘yfinance’, ‘pandas_ta’, ‘alpaca_trade_api’, поэтому нам нужно будет предварительно установить их с помощью следующего кода:

https://medium.com/media/237da020c4e54f6589a3498e0c6af7cf

Параметры

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

  • Параметр ‘TRADER_BOT_NAME’ — имя бота, который мы будем использовать в уведомлениях в Telegram-канал;
  • Параметры ‘TRADER_API_KEY’, ‘TRADER_API_SECRET’ и ‘TRADER_API_URL’ должны быть заполнены соответствующими значениями, которые вы получили из Trader API на панели управления Alpaca;
  • Параметры ‘TELEGRAM_URL’, ‘TELEGRAM_BOT_ID’ и ‘TELEGRAM_CHAT_ID’ должны быть заполнены соответствующими значениями, о которых мы говорили выше;
  • Установка параметра «SCREENER_INTERVAL» на 5m означает, что мы будем использовать 5-минутный график для анализа акции;
  • Установка параметра «SCREENER_PERIOD» на 250 м означает, что мы проверим окно на 250 баров;
  • Параметр «SCREENER_NASDAQ_COUNT», который мы установили до 500, означает, что наш скринер акций будет проверять только первые 500 акций из более чем 2300 коротких акций в индексе NASDAQ;

https://medium.com/media/8b814d328f3b5b141592af283ffbe91a

Параметр «TAKE_PROFIT_DELTA», который мы установили на 0,01, означает, что мы рассчитаем и позволим алгоритму торговать, когда прогнозируемая прибыль составит не менее 1% от текущей цены акций;

Параметр «CASH_LIMIT» — это минимальная сумма на торговом счете, которой мы не хотим торговать. Мы установили его на 26 тысяч, потому что при общем балансе 29 тысяч это означает, что в торговле будет использоваться только 3 тысячи.

Отправка сообщений

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

https://medium.com/media/204d2fa4b5cf37c39d560b4a7099dbeb

Как я уже упоминал ранее, все сообщения будут отправляться в Telegram-канал с помощью обычного HttpRequest. Вот только один параметр в строке запроса, который я хотел бы объяснить: это «parse_mode», который настроен на «Markdown», что означает, что сообщения будут отформатированы.

Скринер акций

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

Как вы помните, из главы «Настройки» мы проверим первые 500 акций из индекса NASDAQ, чтобы найти паттерн, который, по нашему мнению, наиболее актуален для торговли.

https://medium.com/media/25035d9a4f72ac40b195d37f670862bd

В нашем случае для выявления этого паттерна используются полосы Боллинджера с периодом = 20 и нестандартным отклонением, равным 2,3. Эта цифра важна, поверьте. Я получил эту установку для BBANDS на основе моих собственных экспериментов. Они работают намного лучше, чем стандартное отклонение, равное 2. На самом деле эти цифры настолько важны, что большинство инвестиционных фирм защищают их в своих соглашениях о связях с общественностью и неразглашении.

И второй индикатор – RSI со стандартной настройкой.

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

Для рынка, который пойдет вниз (рынок перекуплен):

  • Текущая цена акций должна быть выше верхней полосы BBANDS;
  • Текущее значение RSI выше 70.

Для рынка, который будет идти вверх (рынок перепродан):

  • Текущая цена акций должна быть ниже нижней полосы BBANDS;
  • Текущее значение RSI ниже 30.

https://medium.com/media/17492c79db11fd500b79b910b02ec655

В то же время во время этого предварительного скрининга акций мы заранее готовим (рассчитываем) наши стоп-лосс и тейк-профит и добавляем предварительно отсеянную акцию в коллекцию выбранных акций. Я знаю, вы, наверное, задаетесь вопросом: «Где именно мы используем нейронную сеть и ее предсказания?». Наберитесь терпения, вы увидите это дальше.

Предсказание от нейронной сети

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

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

https://medium.com/media/ea8fa475c7ba90f5542052341517f2da

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

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

Но для целей этого эксперимента мы вернем некоторый список чисел, как если бы они были нашими предсказаниями из процедуры ‘Predict(stock)’.

Давайте торговать

Функция «Торговля» является основной функцией, которая создает все ордера на торговой платформе. Он имеет несколько входных параметров:

  • Параметр ‘api’ является ссылкой на API-объект;
  • Параметр ‘stock’ — это строка с соответствующим тикером, которую мы будем покупать или продавать;
  • Параметр ‘operation‘ может иметь значение ‘buy‘ или ‘sell’;
  • Параметр «shares_to_trade» — количество акций, которые мы купим;
  • Параметр ‘take_profit’ — целевая цена для выхода из рынка;
  • Параметр «stop_loss» — это страховка от ситуации, когда что-то пойдет не так, и рынок пойдет в направлении, противоположном тому, за которым мы настроились;

https://medium.com/media/f154ad19b84c025895e7d7dd2c964252

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

Торговый бот

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

Хочу подчеркнуть, что ожидается, что этот скрипт будет запускаться каждый час с 9:30 до 15:30 с понедельника по пятницу, кроме праздничных дней. В это время рынок открыт.

В самом начале мы открываем соединение с Trader API с помощью нашего API_KEY и API_SECRET, которые мы настроили в главе «Настройки». Затем мы также загружаем информацию о нашем счете и рыночных часах.

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

https://medium.com/media/9a0af725b880b97b64ec22327c45030b

Мы также проверяем, открыт ли рынок и достаточно ли у нас денег для торговли (более CASH_LIMIT). Затем мы просеиваем рынок, как это было описано в главе «Скринер акций», получаем прогноз для каждой акции из нейронной сети и начинаем торговать. На каждом шагу мы оповещаем Telegram-канал о проделанной работе.

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

Работа бота

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

Результаты работы алгоритма в Telegram-канале

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

На этом история не заканчивается

Как обычно, в конце концов вы, вероятно, ожидаете прочитать заключение и то, что история закончена, и вы можете пойти и съесть эти мягкие французские круассаны. Однако не спешите. Я настоятельно рекомендую вам перепроверить все эти концепции и скрипты на бумажном счете (не реальном) с виртуальными деньгами и убедиться, что эта концепция работает именно в вашем случае. Одна и та же концепция может работать для одного трейдера и не работать для другого. Это зависит от многих факторов, даже от суммы денег, которую вы имеете в качестве депозита на своем торговом счете. И это не шутка. Знаете ли вы, что FINRA запрещает внутридневные сделки для клиентов, у которых на счетах нет не менее 25 тысяч?

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

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

Продолжение следует

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

Поскольку мы используем Tensorflow для прогнозов от Google и Python в качестве языка программирования, я бы порекомендовал вам использовать Google Cloud Functions и Scheduler из-за простоты и небольших затрат.

Источник