Предыдущийстатья, я использовал относительно большую длину в 4000 слов, чтобы представить некоторые базовые знания, связанные с финансами и количественной торговлей, а также примерно рассказал о преимуществах и недостатках искусственного интеллекта в финансах. В этой статье мы будем использовать специальный код для проведения волны прогнозов цен на акции.
Как я уже говорил, количественная торговля сама по себе является просто режимом торговли.Пока стратегия введена в программное обеспечение для количественной торговли, компьютер будет автоматически торговать в соответствии со стратегией. То, что генерирует наше машинное обучение, — это только этап стратегии на этапе количественной торговли.На данный момент нам не нужно рассматривать доступ к торговле, который требует большого количества знаний, связанных с торговыми API. Фреймворк для разработки торговой платформы, я представляю фреймворк с открытым исходным кодом на основе Python на Github, вы можете узнать о нем:vnpy.
Хорошо, теперь я сосредоточусь на прогнозировании цен. Мы все знаем, что независимо от того, что мы делаем с машинным обучением, нам сначала нужны некоторые источники данных, а также нам нужны способы тестирования на истории. Тогда есть много способов получить данные, такие как акции или другие финансовые рынки.Сегодня я познакомлю вас с платформой, которую я обычно использую:Платформа для количественной торговли рисовой корзиной RiceQuant(не рекламный).
Эта платформа имеет собственный набор Python API и компилятор iPython NoteBook для разработки количественных торговых стратегий. Код должен только реализовать хорошую логику в конкретном методе, и результат теста может быть сгенерирован одним щелчком мыши, и результат автоматически проанализирует кривую доходности на основе исторических данных и некоторые индикаторы для вашей справки. нравится
Я не буду представлять конкретный API.Заинтересованные студенты могут перейти непосредственно на официальный сайт, чтобы просмотреть очень подробную документацию по API.woohoo.ricefullset.com/API/Python/…
Здесь я проведу несколько простых операций машинного обучения через данные и не буду использовать те API, которые могут пройти бэктесты. API, который необходимо понять заранее, — это функция get_price.Например, следующее предложение представляет собой получение исходных исторических данных индекса CSI300 за последний год.Тип возвращаемого значения — DataFrame в pandas, который нам очень знаком. с участием.
df = get_price('CSI300.INDX','2005-01-05','2015-01-01').reset_index()[['open','close']]
Эту функцию можно использовать только в онлайн-компиляторе Mikuang. Получив эти данные, мы можем выполнять причудливые операции с помощью анализа данных трех мушкетеров Python. Здесь мы используем некоторые относительно простые функции, чтобы делать наши прогнозы. Это рост и падение предыдущих двух дней. Рост и падение предыдущих двух дней используются в качестве входных данных, а фактический рост и падение дня используются в качестве выходных данных. Такой набор данных используется в качестве обучающей выборки.
Конечно, выбор таких признаков очень прост, а результаты прогнозирования определенно не идеальны.В практической инженерии качественные и количественные признаки являются наиболее важными и наиболее сложными.Например, на рынке существует множество индикаторов, такие как MACD и VR.Очень важный индикатор, мы выбрали функции здесь только для удобства демонстрации.
Поскольку мы используем рост и падение в качестве функции, мы должны сначала получить данные о росте и падении.То, что мы только что получили с помощью get_price, - это цены открытия и закрытия каждого дня, поэтому легко рассчитать рост и падение.
>>> up_and_down=df['close']-df['open'] > 0 # 获取涨跌情况
>>> rate_of_return = (df['close']-df['open'])/df['open'] # 获取涨跌幅
>>> up_and_down_statistic = up_and_down.value_counts() # 获取涨跌天数
Затем мы используем matplotlib.pyplot, чтобы нарисовать гистограмму количества дней вверх и вниз.
Это очень странно Использование pyplot в блокноте ipython иногда рисует кривую Я посмотрю.
Из графика ясно видно, что за последние 10 лет окончательная цена закрытия немного выросла. Мы также можем посмотреть некоторые другие данные, например, мы можем распечатать дневной график роста и падения.
rate_of_return.plot(kind='line', style='k--', figsize=(15, 10), title='Daily Yield Changes Over Time Series')
На этой картинке мы можем ясно видеть некоторые рыночные условия за более чем 2000 торговых дней, например, в середине есть широкий диапазон колебаний, что означает, что это будет бычий рынок, который соответствует рынку в 2007 году. бычий рынок. Я до сих пор помню, как, когда я учился в средней школе, каждый день, когда я приходил домой в полдень, мой отец рассказывал мне, сколько он сегодня заработал на акциях, и был очень счастлив.
Конечно, вы также можете использовать рисование для большего анализа данных.Далее мы напишем простой код машинного обучения, чтобы увидеть, насколько точного прогнозирования цены можно достичь с помощью такой простой функции.
То, что мы предсказываем здесь, — это заключительное изменение, которое представляет собой проблему классификации, поэтому мы выбираем здесь SVM для классификации. Каждые новые данные будут соответствовать снова, чтобы повысить точность следующего прогноза. код показывает, как показано ниже:
import pandas as pd
import numpy as np
from __future__ import division
from sklearn import svm
from collections import deque
import matplotlib.pyplot as plt
window = 2
# 米筐获取某一品种历史数据的DataFrame,注意得从2005-01-04开始
df = get_price('CSI300.INDX', '2005-01-05', '2015-07-25').reset_index()[['open', 'close']]
up_and_down = df['close'] - df['open'] > 0
print(len(up_and_down))
X = deque()
y = deque()
clf = svm.LinearSVC() # SVM
prediction = 0
test_num = 0 # 测试总数
win_num = 0 # 正确预测数
current_index = 400 # 起始位置
for current_index in range(current_index, len(up_and_down)-1, 1):
fact = up_and_down[current_index+1]
X.append(list(up_and_down[(current_index-window): current_index]))
y.append(up_and_down[current_index])
if len(y) > 100 and len(y) % 50 == 0:
test_num += 1
clf.fit(X, y)
prediction = clf.predict(list(up_and_down[(current_index-window+1): current_index+1]))
if prediction[0] == fact:
win_num += 1
print(win_num)
print("预测准确率为",win_num/test_num)
Конечный результат58.53%, если программное обеспечение для прогнозирования цен может достичь правильной скорости около 60% только с помощью исторических данных, это на самом деле очень хороший результат, но наши результаты здесь недостаточно убедительны Прежде всего, наши функции слишком просты, и для того, на самом деле, чтобы сэкономить время обучения, я значительно сократил подгоночную шкалу выборок и предсказывал только числа, кратные 50, поэтому окончательное количество предсказанных выборок составило всего около 40.
Вышеупомянутая часть кода относится к человеку по имени в сообществе Mikuang.Лу Дунсюйодноклассники. Это сообщество все еще очень активно, и сообщения, которые я читаю, трехлетней давности. Можно сказать, что еще несколько лет назад в Китае было такое сообщество количественной торговли и искусственного интеллекта.Видно, что люди уже были в пути, и когда мы все думаем, что нам нужно прикоснуться к этим вещам, они уже убежали дальше.
Но это не беда, опоздавшим тоже очень интересно прийти первыми.
Вышеприведенный код на самом деле является самым сырым и оригинальным кодом, и писать цикл самостоятельно слишком хлопотно, поэтому платформа позже обновила API, как я уже говорил в начале статьи, нужно просто заполнить предоставленный пустой логика метода, вы можете быстро выполнять операции обратного тестирования. Например, ниже приведено введение в официальную документацию по API.
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
context.s1 = "000001.XSHE"
# 是否已发送了order
context.fired = False
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
# 开始编写你的主要的算法逻辑
# bar_dict[order_book_id] 可以拿到某个证券的bar信息
# context.portfolio 可以拿到现在的投资组合状态信息
# 使用order_shares(id_or_ins, amount)方法进行落单
# TODO: 开始编写你的算法吧!
if not context.fired:
# order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
order_percent(context.s1, 1)
context.fired = True
Что ж, сегодня мы просто познакомим вас с тем, как получить API-интерфейсы через некоторые сторонние данные через рисовые корзины, и объединить библиотеку анализа данных Python, чтобы сделать некоторые интересные вещи. До встречи в следующей статье!
Рекомендуемое чтение
Поделитесь небольшими галантерейными товарами для изучения ИИ
Количественная торговля и искусственный интеллект
Подпишитесь на официальный аккаунт, чтобы получать больше статей о галантерейных товарах — AI Geek Training Station