В этой статье объясняется, как создать торговый конвейер с помощью R. Торговый конвейер состоит из 4 основных элементов.

  • Подключение к Google API и загрузка данных о текущих активах
  • Подключение к Robinhood API и получение текущих цен на акции
  • Получение исторических данных о рынке с помощью Yahoo API
  • Алгоритм принятия решения и выполнение заказа

Я использую следующие API

  • Облачная платформа Google
  • Робин Гуд
  • Yahoo Finance

1. Настройка

Для создания конвейера я использовал документ R Markdown. Я использую эти библиотеки для управления финансовыми данными.

library(dplyr)
library(purrr)
library(dbplyr)

Библиотека RobinHood взаимодействует с аккаунтами Robinhood. Библиотека Quantmod позволяет взаимодействовать с финансовыми данными Yahoo и включает полезные библиотеки для технического анализа.

library(RobinHood)
library(quantmod)

Я использую googlesheets4, big query и DBI для взаимодействия с базами данных, которые основаны на сервисах Google Cloud.

library(googlesheets4)
library(bigrquery)
library(DBI)

Библиотека здесь используется для доступа к локальным сценариям R с определенными функциями.

library(here)
source(here("src", "R", "data_functions.R"))
source(here("src", "R", "trading_models.R"))

2. Подключение API

Я устанавливаю биллинг для своего проекта и подключаюсь к API Google с помощью файла .json.

gs4_auth(
path = "google_auth.json",
cache = FALSE
)

Внутри .Rprofile я установил следующие переменные для окружения sys.

# Put that inside .Rprofile system file
Sys.setenv("username" = "adam")
Sys.setenv("password" = "test")

А затем подключитесь к RobinHood API. Файл .Rprofile передает соответствующие учетные данные, определенные выше.

robinhood_connection = RobinHood(
username = Sys.getenv("username"),
password = Sys.getenv("password")
)

3. Сбор данных и принятие решения

Затем я собираю все соответствующие данные с помощью Yahoo Finance API.

# This function is located in data_functions.R script
get_market_data <- function() {
 # Load data into the workspace
 getSymbols("AAPL", src="yahoo")
 return(AAPL)
}
data <- get_market_data()

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

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

stock_decision <- moving_average_model(
 data = data,
 trend_deviation = -4
)

4. Выполнение заказа

Затем я запрашиваю самую последнюю цену акций APPL у RobinHood API.

market_price <- get_quote(
robinhood_connection,
ticker = c("AAPL"),
limit_output = TRUE
)$last_trade_price

Затем программа выполняет покупку в зависимости от вывода функции. При размещении заказа должно генерироваться электронное письмо.

if(purchase_stock$decision_buy) {
x = place_order(
RH = robinhood_connection,
symbol = "AAPL",
type = "market",
time_in_force = "gfd",
trigger = "immediate",
price = market_price,
quantity = n,
side = "buy"
 )
} else if (purchase_stock$decision_sell) {
x = place_order(
RH = robinhood_connection,
symbol = "AAPL",
type = "market",
time_in_force = "gfd",
trigger = "immediate",
price = market_price,
quantity = n,
side = "sell"
 )
}

Наконец, конвейер записывает результат в листы Google и обновляет лист резервов на случай, если акции были куплены / проданы.

write_output_sheets(
data = stock_decision,
sheet = "records")
if (purchase_stock$decision_buy | purchase_stock$decision_sell) {
update_current_holdings(purchase_stock)
}

Резюме

С помощью R. можно и относительно легко выполнять заказы на складские запасы. Следующим шагом является организация рабочего процесса. Я попытался сделать это с помощью воздушного потока и Cloud Composer. Cloud Composer проще настроить, чем airflow. К тому же это довольно дорого. Настройка воздушного потока на месте может быть лучшим вариантом, однако для этого требуются дополнительные инженерные знания.

В следующей статье я расскажу о простом алгоритме торговли по скользящей средней.

Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не стоит полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.

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

[1] Документация по пакету RobinHood Cran, https://cran.r-project.org/web/packages/RobinHood/RobinHood.pdf

[2] Документация пакета Quantmode Cran https://cran.r-project.org/web/packages/quantmod/quantmod.pdf

[3] Настройка Google API для таблиц Google https://googlesheets4.tidyverse.org

[4] Cloud Composer https://cloud.google.com/composer