1.学习《深入浅出python量化交易交易实战》第一章
记录学习过程中的代码和一些坑
1.1 基础(名词解释)
1.1.1 CAPM (Capital Asset Pricing Modal)
- beta 系数 用于表示某项资产的系统性风险
- factor investment 因子投资
在因子投资中,因子的定义就是那些可以量化的信号、特征或其他变量。 - Arbitrage pricing Theory, Apt
- 三因子模型:市场资产组合,市值,账面市值解释证券回报率
- 四因子模型:市场资产组合,市值,账面市值,市场动量因子解释证券回报率
1.1.2 数据分析
- alpha factor 阿尔法因子
1.1.3 工具介绍
- Anaconda: http://www.anaconda.com
- Jupyter notebook 是一种 Web 应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中。
- pandas_datareader 金融数据库(接口无法正常获取数据)
- akshare 国内开源的获取金融数据的python库:https://akshare.akfamily.xyz/data/stock/stock.html#id19
- mplfinance:绘制股票图的库
- matplotlib:绘图库
1.2 获取股票数据并做简单的分析
书中的datareader,由于接口或网络原因,已无法正常获取股票数据,这里找到akshare代替,并且使用mplfinance绘制了蜡烛图。
代码如下:
# 下载股票数据
import akshare as ak
import pandas as pd
import mplfinance as mpf
# A 股日频率数据-东方财富 stock_zh_a_hist
'''
'日期': 'Date',
'开盘': 'Open',
'最高': 'High',
'最低': 'Low',
'收盘': 'Close',
'成交量': 'Volume',
'成交额':
'振幅':
'涨跌幅':
'涨跌额':
'换手率':
'''
stock = ak.stock_zh_a_hist(symbol="002236",
period="daily",
start_date="20170301",
end_date="20221231", adjust="hfq")
stock = pd.DataFrame(stock, columns=['日期', '开盘', '最高', '最低', '收盘', '成交量'])
stock.rename(columns={
'日期': 'Date',
'开盘': 'Open',
'最高': 'High',
'最低': 'Low',
'收盘': 'Close',
'成交量': 'Volume'
},
inplace=True)
stock.index = pd.DatetimeIndex(stock['Date'])
print(stock.tail(5))
# 绘制蜡烛图
# type='candle', type='line', type='renko', or type='pnf'
mpf.plot(stock.tail(30), type="candle", volume=True)
# 相比前一个交易日收益计算
stock['diff'] = stock['Close'].diff()
print(stock.head(5))
获取的数据:
做了diff分析的数据:
绘制的蜡烛图:
1.3 设计最简单的交易策略
1. 简单的数据处理
当日股价下跌,我们就在下一个交易日开盘前挂单买入;反之,当日股价上涨,我们就在下一个交易日开盘前挂单卖出。
创建一个新的字段——Signal(交易信号),如果diff字段大于0,则Signal标记为1;如果diff字段小于或等于0,则Signal标记为0。
在上面获取到数据的基础上做如下操作:
'''
简单数据处理
- 相比前一个交易日收益计算
'''
stock['diff'] = stock['close'].diff()
print('----计算涨跌diff数据------')
print(stock.head(5))
stock['signal'] = np.where(stock['diff'] > 0, 1, 0)
print('----计算买入卖出信号后的数据------')
print(stock.head(5))
2. 交易信号可视化
将上面买入卖出的数据生成可视化图表,这里需要用到两个苦:numpy
和matplotlib
。
代码如下:
'''
import matplotlib.pyplot as plt
import numpy as np
简单交易策略
·当日股价下跌,下一个交易日买入
·当日股价上涨,下一个交易日卖出
创建交易信号字段:Signal, diff > 0 Signal=1 卖出,否则Signal=0
'''
# matplotlib 绘图
plt.figure(figsize=(10, 5))
stock['close'].plot(linewidth=2, color='k', grid=True)
# 卖出标志 x轴日期,y轴数值
# matplotlib.pyplot.scatter(x, y, marker, size, color)
plt.scatter(stock['close'].loc[stock.signal == 1].index,
stock['close'][stock.signal == 1],
marker='v', s=80, c='g')
# 买入标志
plt.scatter(stock['close'].loc[stock.signal == 0].index,
stock['close'][stock.signal == 0],
marker='^', s=80, c='r')
plt.show()
小结
该章主要讲述python量化获取股票数据并进行简单处理,同时介绍了常用的工具和库:
- Anacond
- Jupyter notebook :网页编辑pyth
- pandas_datareader:获取股票数据(api废弃或网络问题无法使用,用akshare代替)
- akshare:获取股票数据
- mplfinance:绘制股票图的库
- matplotlib:绘图库