Вот репо: https://github.com/2018kguo/RobinhoodBot

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

Бот написан на Python и основывается на двух основных библиотеках для большей части своей функциональности: robin-stocks и ta. robin-stocks - это библиотека, которая взаимодействует с API Robinhood и позволяет выполнять заказы на покупку и продажу, получать информацию о тикерах в реальном времени и многое другое. ta - это библиотека технического анализа, которая также включает библиотеку Python Pandas для генерации индикаторов на основе биржевых данных.

Хорошо, но что на самом деле делает бот?

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

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

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

Итак, как мне его запустить?

Установите Python на свой компьютер, если вы еще этого не сделали (я использую Python 3), и используйте pip для установки robin-stocks, ta, numpy, pandas и matplotlib.

После того, как вы загрузили репо, отредактируйте строку 10 main.py, включив в нее адрес электронной почты и пароль, которые вы используете для входа в Robinhood. Если вы хотите увидеть, какие акции имеют «золотой крест» / «смерть», но не хотите фактически выполнять приказы, закомментируйте строки 236–238 (предотвращение заявок на продажу) и 244–245 (предотвращение заявок на покупку). Затем просто запустите main.py.

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

Вот пример выполнения скрипта:

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

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

Некоторые примечания к коду

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

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

Вот весь код нашей стратегии.

В последнем методе golden_cross () мы получаем исторические данные по акциям за последний год и извлекаем цены закрытия и соответствующие даты в строках 80–85, помещая их в два списка. Мы конвертируем эти списки в серии pandas, чтобы их можно было использовать в качестве входных данных для функции библиотеки ta, bollinger_mavg (), которая генерирует простые скользящие средние для акций. Мы объединяем серии панд, которые содержат цену, индикаторы и даты, в единый фрейм данных в строках 91–92 и, наконец, вызываем get_last_crossing (), который возвращает 1, если был золотой крест, 0, если ничего не произошло, и -1 для крест смерти.

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

Функция five_year_check () - это то, что я добавил в стратегию. Я проверяю, прошла ли акция IPO или выросла в целом за последние 5 лет, прежде чем покупать ее, поскольку акции, которые не соответствуют этому требованию, также:

  1. В основном на спаде (следует ожидать, что большинство акций вырастут в течение нескольких лет, поскольку среднегодовая рыночная доходность составляет 7–10%)
  2. Связан с сырьевыми товарами и ограничен диапазоном, поэтому стратегия золотого креста не очень подходит для торговли ими.

Вы можете закомментировать строки 94–95, чтобы увидеть график цены и индикаторов с помощью matplotlib.

Вот оставшийся код в main.py:

scan_stocks () - это метод, который фактически перебирает символы акций из вашего портфеля и списка наблюдения, проверяет наличие золотого / смертельного креста и вызывает sell_holdings () для выполнения заказов на продажу, buy_holdings для выполнения заказов на покупку и update_trade_history () для записи сделки информацию в текстовый файл.

Мы называем нашу стратегию золотого креста в строках 59 и 67. Вы можете редактировать их аргументы, чтобы изменить периоды скользящих средних, определяемые аргументами n1 и n2, а также количество дней, на которое вы хотите вернуться, чтобы найти крест, определяемое аргументом days.

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