前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yyds!Python 量化交易神书面世,赠送 5 本

yyds!Python 量化交易神书面世,赠送 5 本

作者头像
Python数据科学
发布2022-03-11 19:55:23
6060
发布2022-03-11 19:55:23
举报
文章被收录于专栏:Python数据科学

大家好,我是东哥。

前不久,收到清华大学出版社赠送的 《深入浅出Python量化交易实战》 一书,也答应了出版社要写一些读书笔记,今天就来交作业了。

下面是我参考书中内容做的一些简单尝试,仅供学习参考。这本书对于使用Python玩量化的初学者们,还是很友好的,感兴趣可以考虑入手一本看看。

笔记①

用Python绘制出股价的5日均线和20日均线。众所周知,5日均线是短线交易的生死线,而20日均线是中长线趋势的分水岭。因此,基于这两条均线,可以设计出一些简单的交易策略。

下面是我练习的代码:

代码语言:javascript
复制
import pandas as pd
import numpy as np
from pandas_datareader import data
import datetime
import matplotlib.pyplot as plt
导入库的部分,不解释了,下面拉数据:
end_date = datetime.date.today()
start_date = end_date - datetime.timedelta(days = 100)
price = data.DataReader('601127.ss','yahoo',
                       start_date,
                       end_date)
price.head()

这里我选择从yahoo拉601127这支股票过去100天的行情数据。能够看到最早的数据到2021年的10月8日:

然后我开始添加5日和20日均线

代码语言:javascript
复制
price['ma5'] = price['Adj Close'].rolling(5).mean()
price['ma20'] = price['Adj Close'].rolling(20).mean()
price.tail()

数据中就可以看到了:

为了便于观察,我用代码画了个图:

代码语言:javascript
复制
fig = plt.figure(figsize=(16,9))
ax1 = fig.add_subplot(111, ylabel='Price')
price['Adj Close'].plot(ax=ax1, color='g', lw=2., legend=True)
price.ma5.plot(ax=ax1, color='r', lw=2., legend=True)
price.ma20.plot(ax=ax1, color='b', lw=2., legend=True)
plt.grid()
plt.show()

这样就可以直观看到图像:

这样就可以根据不同周期的均线来设计移动平均策略了。

笔记②

这里把书中用KNN模式做的交易策略,换成了逻辑回归模型,试试看策略的业绩会有怎样的变化。

二话不说,上梯子,导库拉数据:

代码语言:javascript
复制
import pandas as pd
import pandas_datareader.data as web
import numpy as np
from datetime import datetime

数据甭多了,来个3年的:

代码语言:javascript
复制
end = datetime.date.today()
start = end - datetime.timedelta(days = 365*3)

我大A股,最牛X的股票,要说是茅台,没人反对吧?那咱搞茅台的行情数据:

代码语言:javascript
复制
owB = web.DataReader('600519.ss', 'yahoo',
                     start,
                     end)
cowB.head()

拉下来本仙就惊了,2019年1月的时候,大茅台才600多块钱啊!不过估计当时让本仙买,本仙也不敢。那时候我大A股过百的股票也没多少吧!

然后我按照书里的方法,做下特征工程:

代码语言:javascript
复制
cowB['open-close'] = cowB['Open'] - cowB ['Close']
cowB ['high-low'] = cowB ['High'] - cowB ['Low']
cowB ['target'] = np.where(cowB ['Close'].shift(-1) > cowB ['Close'],1,-1)
cowB = cowB.dropna()
cowB.tail()

然后就多了几列,target里面,1表示次日上涨,-1表示次日下跌:

下面要搞模型了:

代码语言:javascript
复制
x = cowB [['open-close','high-low']]
y = cowB ['target']

拆成x和y,然后请出scikit-learn:

代码语言:javascript
复制
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

然后把数据集拆分成训练集和测试集:

代码语言:javascript
复制
x_train, x_test, y_train, y_test =\
train_test_split(x, y, train_size = 0.8)

看看逻辑回归表现如何:

代码语言:javascript
复制
lr = LogisticRegression()
lr.fit(x_train, y_train)
print(lr.score(x_train, y_train))
print(lr.score(x_test, y_test))

结果发现,还没有书里KNN的分数高:

代码语言:javascript
复制
0.5438898450946644
0.5136986301369864

逻辑回归在训练集里面的准确率是54.39%,与书里KNN的准确率基本持平;但是测试集里只有51.37%,比书里的KNN模型低了差不多3个百分点。

第二个笔记结果有点扎心,但目的重在尝试,空余时间抽空玩一玩,感兴趣的话也可以自行动手实践一下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python数据科学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 笔记①
  • 笔记②
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档