记录学习过程中的代码和一些坑
书中的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))
当日股价下跌,我们就在下一个交易日开盘前挂单买入;反之,当日股价上涨,我们就在下一个交易日开盘前挂单卖出。
创建一个新的字段——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))
将上面买入卖出的数据生成可视化图表,这里需要用到两个苦: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量化获取股票数据并进行简单处理,同时介绍了常用的工具和库: