Как создать простой скелет торгового бота на Python
Сначала я буду ссылаться на свой репозиторий GitHub для этого кода: https://github.com/third-eye-cyborg/TradeBot
Если у вас нет, я бы порекомендовал прочитать мои предыдущие статьи, поскольку Python является предварительным условием для этого обзора.
Что такое торговый бот?
Торговый бот получает данные от третьей стороны или какого-либо другого источника, предоставляющего рыночную информацию, и использует эти данные для разработки стратегий, которые можно использовать по множеству причин и реализовывать с помощью алгоритмических подходов для повышения общей согласованности и производительности. У вас могут быть просто алгоритмы генерации альфа-кода, которые могут не торговать, но вместо этого помогают получить ценную информацию о финансовых рынках или объектах на рынках. Вы можете создавать конкурентоспособные алгоритмы. Есть много подходов к построению финансовых алгоритмов. Вот некоторые из них.
Использование готовых движков, фреймворков и сред
QuantConnect - это уникальная услуга, которая позволяет вам создавать алгоритмы на их бережливом движке в облачной среде (с возможностью запуска на настольных компьютерах), в которой вы можете отправлять алгоритмы на рынок Alpha Streams. , соревнуйтесь в соревнованиях по алгоритмам и даже торгуйте с помощью собственной системы. Они интегрируются с несколькими брокерами и торговыми службами и имеют процветающее сообщество. У них также есть учебный курс и библиотека стратегий, что делает их отличным местом для изучения количественных финансов. Мне нравится работать с системой, которую они разработали, и я получаю удовольствие, просматривая идеи, чтобы легко опробовать их и реализовать, используя их простую в использовании структуру алгоритмов. Они предлагают возможность программирования на Python, C # и F #. Это открытый исходный код с платными альтернативами льгот.
Quantopian - еще один сервис, связанный с миром количественных финансов. Они предлагают множество учебных ресурсов и материалов, а также исключительно чистую облачную среду для программирования и реализации ваших стратегий. Они предлагают Python в качестве языка для своей платформы. Quantopian также бесплатен и имеет большое сообщество, которое поможет вам начать работу.
Строим самостоятельно
Альпака - это сервис, который предоставляет API для торговли акциями без комиссии. Если вы ищете настоящую свободу с торговым ботом или финансовым алгоритмом, загляните на этот сайт.
Alpha Vantage - это сервис, который предоставляет API для данных фондового рынка и данных индикаторов. Сегодня мы воспользуемся этим сервисом, чтобы построить наш скелет.
Создание скелета торгового бота
Я продемонстрирую, как использовать Alpha Vantage API для создания скелета торгового бота, который вы можете использовать в качестве основы для создания более продвинутых систем. Для этого я буду использовать язык программирования Python, PyCharm IDE, Alpha Vantages API и модули requests
и pandas
в Python.
Сначала мы начинаем с создания нового проекта и помечаем его в PyCharm. Выберите виртуальную среду Python и расположение файловой системы. Как только вы это сделаете, нажмите "Создать проект".
После этого щелкните файл с именем main.py
в диспетчере проектов.
Этот файл заполнен примером алгоритма «hello world», построенного на Python. Вы можете стереть содержимое этого файла в редакторе кода. Теперь, когда файл пуст, займемся импортом.
import requests import pandas as pd import io
Теперь, когда у нас есть импорт, давайте создадим полый класс, который мы можем начать строить. Мы можем начать с написания заголовка класса с функцией __init__()
. Не забудьте передать аргумент self
в функцию __init__()
.
class TradeBot(): def __init__(self):
Итак, мы можем загрузить любые символы, которые захотим, а пока я буду использовать GOOG, тикер Alphabet Inc. (Google).
symbol = 'goog'
Теперь я собираюсь использовать HTTP-запрос GET через модуль запроса Python для получения наших данных. Затем я конвертирую его из формата CSV в Pandas DataFrame с помощью модуля Pandas. Я сделаю это с помощью API Alpha Vantage. Я также использовал демонстрационный ключ API, потому что это всего лишь базовое руководство, но не стесняйтесь получить свой собственный ключ API от Alpha Vantage и просто измените параметр apikey
на =
ваш ключ. Я решил использовать 30-минутные данные внутри дня.
response = requests.get(f"https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol={s}&apikey=demo&datatype=csv&interval=30min&slice=year1month1").content responseData = pd.read_csv(io.StringIO(response.decode('utf-8')))
Теперь вы можете распечатать данные ответа, чтобы выполнить некоторый EDA (исследовательский анализ данных).
print(responseData)
Теперь я собираюсь использовать базовую математику, чтобы получить среднее значение столбца закрытия, принадлежащего данным.
mean = sum(responseData['close']) / len(responseData['close'])
Затем я устанавливаю пустые контейнеры, чтобы хранить свои торговые идеи.
buy = [] sell = [] flat = []
I Создайте еще два списка из столбцов responseData
DataFrame для представления времени и цены закрытия.
time = list(responseData['time']) close = list(responseData['close'])
С помощью циклов nested for
вы можете перебирать эти списки и использовать условные операторы if
для заполнения ваших списков аналитических данных только определенными точками данных, которые соответствуют определенным условиям.
for i in time: for x in close: if x > mean: buy.append(f"{symbol} {i} {x} buy") elif x < mean: sell.append(f"{symbol} {i} {x} sell") else: flat.append(f"{symbol} {i} {x} flat")
Мы можем преобразовать это в словарь из наших списков аналитики и распечатать его для получения результатов.
trades = {'BUY' : buy, 'SELL' : sell, 'FLAT' : flat} print(trades)
Теперь, если вы хотите иметь возможность запускать все это и передавать бесконечное количество символов через параметры класса при его создании или вызове, тогда вам следует использовать *arg
в параметре __init__()
. Затем используйте symbol = arg
для представления числовых аргументов, передаваемых алгоритму. Переменная arg
представляет собой список значений, которые будут поступать от ввода пользователя при создании экземпляра или вызове класса. Затем вы можете вложить весь алгоритм после переменной symbol
в цикл for
, повторяющий символьную переменную.
import requests import pandas as pd import io # class for TradingBot class TradeBot(): def __init__(self, *arg): self.symbol = arg for s in self.symbol: response = requests.get(f"https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol={s}&apikey=demo&datatype=csv&interval=30min&slice=year1month1").content responseData = pd.read_csv(io.StringIO(response.decode('utf-8'))) # print(responseData) mean = sum(responseData['close']) / len(responseData['close']) buy = [] sell = [] flat = [] time = list(responseData['time']) close = list(responseData['close']) for i in time: for x in close: if x > mean: buy.append(f"{s} {i} {x} buy") elif x < mean: sell.append(f"{s} {i} {x} sell") else: flat.append(f"{s} {i} {x} flat") trades = {'BUY' : buy, 'SELL' : sell, 'FLAT' : flat} print(trades)
Теперь вы можете создать экземпляр или вызвать класс с любым количеством символов для аргументов, и он будет циклически проходить через каждый символ, распечатывая результаты trades
словарей последовательно для каждого символа. Каждый из списков аналитических данных, используемых для создания словаря сделок, будет включать в себя тикер акций, дату и время анализа и цену закрытия символа на момент анализа.
TradeBot("spy","tsla","ibm") TradeBot("googl", "msft", "aapl")
Вы можете расширять этот простой скелет бесконечным количеством способов. Если вы хотите поделиться некоторыми из своих проектов Python в ответах, я бы с удовольствием их увидел. Спасибо, что прочитали эту статью, и, если она вам понравилась, хлопайте в ладоши и подписывайтесь на меня.