В этой статье объясняется, как создать торговый конвейер с помощью 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