Часть 1 - Введение и настройка

Повестка дня

  1. Вступление
  2. Зачем использовать альпаку?
  3. Настройка API Альпаки
  4. Вызов API с использованием Python

Вступление

Это первая часть серии блогов об алгоритмической торговле на Python с использованием Alpaca. В этой серии статей будет рассказано о разработке полностью автоматической алгоритмической торговой программы, реализующей простую торговую стратегию. В этом блоге будет рассказано о платформе Alpaca, настройке API Alpaca и нескольких примерах вызовов API на Python. Это даст нам базовое представление о том, как взаимодействовать между Альпакой и Python, и послужит основой для разработки нашей торговой программы, которую мы создадим в следующем блоге (часть 2) этой серии.

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

Зачем использовать альпаку?

Alpaca - это онлайн-брокерская компания, похожая на Investment Bankers или TD Ameritrade, с торговлей акциями без комиссии. Помимо этого, Alpaca уникальна тем, что работает через API. Используя конечные точки, предоставляемые этим API, вы можете получать рыночные данные, размещать заказы на акции, проверять свой портфель и выполнять любые другие задачи, которые вы обычно выполняете с помощью графического интерфейса. Альпака предоставляет SDK для взаимодействия со своим API на Python, Go, C # и нескольких других языках.

Альпака также предлагает графический интерфейс онлайн-панели для ручной торговли.

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

Мы будем использовать эту среду тестирования на протяжении всей серии.

Настройка API Альпаки

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

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

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

На этом наша учетная запись Альпака настроена. Теперь мы можем перейти к подключению Альпаки к Python.

Вызов API с использованием Python

Теперь мы рассмотрим, как настроить среду Python для отправки запросов к API Alpaca, а также рассмотрим несколько примеров вызовов API.

Все эти примеры взяты со страницы документации Альпаки.

Установка Python

К счастью, команда Alpaca создала библиотеку Python для взаимодействия с API. Пакет называется alpaca-trade-api и может быть установлен с помощью pip, как показано здесь:

pip install alpaca-trade-api

Я бы рекомендовал создать виртуальную среду перед установкой пакета.

Установив пакет, мы можем просто импортировать его в наши сценарии Python:

import alpaca-trade-api as tradeapi

После импорта пакета первым шагом всегда является создание экземпляра подключения к Alpaca REST API. Это можно сделать с помощью следующего кода.

Вот и все! Почти все необходимые функции находятся в объекте api. Теперь мы можем погрузиться в некоторые функции, которые может предложить этот пакет Python.

Просмотр сведений об учетной записи

С помощью объекта api мы можем получить доступ к сведениям об учетной записи с помощью функции get_account(), как показано ниже. Этот код просто обращается к вашей учетной записи Альпака и печатает идентификатор, значение капитала и статус.

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

Получение рыночных данных

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

Возвращаемые данные стандартны и отсортированы по дате в возрастающем порядке.

К счастью для нас, метод get_barset() также возвращает фрейм данных Pandas. Это означает, что мы можем проводить любой анализ данных без особых усилий. Например, мы можем легко создать линейный график исторических цен закрытия, используя Pandas и Matplotlib. Код выглядит так.

В результате линейный график выглядит так.

Примечания по получению данных:

  1. Показанный пример работает только для исторических данных. Чтобы получать данные в реальном времени, вам необходимо использовать WebSocket. Примеры того, как это настроить, вы можете увидеть в Альпака GitHub. Я планирую подробнее рассказать об этом в будущих блогах.
  2. Поскольку мы используем бесплатную торговую среду в песочнице, у нас есть доступ к API данных Alpaca по умолчанию. Это ограничивает количество рынков, с которых мы можем собирать данные, время задержки между вызовами данных и количество вызовов в минуту. Альпака также предлагает безлимитный тариф за 50 долларов в месяц, который предоставляет больше данных с неограниченными звонками и 1-минутной задержкой для исторических данных. Вы можете узнать больше о различных тарифных планах здесь.

Отправка заказов

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

Чтобы продать акции, вы просто указываете продавать вместо купить под параметром side. Код выглядит почти идентично. Параметр продажи также используется для подачи коротких заявок на ценные бумаги, которых у вас еще нет. Например, не имея Tesla, я мог бы «продать» 1 акцию Tesla. Это действие будет выглядеть так.

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

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

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

После того, как заказы будут заполнены и добавлены в ваше портфолио, вы также можете использовать API для просмотра статуса вашего портфолио. Используя функцию get_position(), вы можете получить данные над конкретным тикером, который у вас есть. Вот пример.

Вот как выглядит результат.

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

Это приводит к следующему выводу.

Это всего лишь несколько примеров работы с API Альпака на Python. Дополнительные примеры можно найти на странице документации и репозитории пакетов Python.

Заключение и следующие шаги

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

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

использованная литература

  1. Сайт Альпаки
  2. Документация Альпаки
  3. Коннектор Alpaca Python
  4. Репозиторий проекта на GitHub

Свяжитесь со мной в LinkedIn :)