利用NumPy进行历史股价分析
该练习使用的csv文件如下:
其中第二列为日期,格式是%d-%m-%Y;第四到七列分别是当日开盘价,最高价,最低价,收盘价和成交量
准备工作:
import sys
import numpy as np
# 读入文件,函数是loadtxt
# 第一个参数是文件名,delimiter是获取的数据的分隔符,usecols是指定读取哪列的数据,unpack为True表示获取的数据根据列分为不同的数组
# 这里分隔符是“,”,读取第6,7行(收盘价和交易量),unpack为true,分开存储为不同的变量
c, v = np.loadtxt('./data.csv', delimiter=',', usecols=(6, 7), unpack=True)
1 计算成交量加权平均值
np中使用average()计算加权平均值,第一个参数为计算的数组,第二个参数为加权平均值的权重
vwap = np.average(c, weights=v)
vwap
# 350.58954935320088
2 计算算术平均值
np.mean(c) # 计算算术平均值
# 351.03766666666672
3 计算时间加权平均值
t = np.arange(len(c))
np.average(c, weights=t) # 计算时间加权平均值
# 352.42832183908041
4 寻找最大值和最小值
h,l = np.loadtxt('./data.csv', delimiter=',', usecols=(4, 5), unpack=True)
np.max(h)
# 364.89999999999998
np.min(l)
# 333.52999999999997
5 计算中程数和极差
(np.max(h) + np.min(l)) / 2 # 计算中程数
# 349.21499999999997
np.ptp(h) # 计算最大值和最小值之间的差值 极差
# 24.859999999999957
np.ptp(l) # 计算交易量的极差
# 26.970000000000027
6 统计分析
c = np.loadtxt('./data.csv', delimiter=',', usecols=(6,), unpack=True) # 读取收盘价
np.median(c) # 中间数
# 352.05500000000001
sorted = np.msort(c)
sorted # 可见中间数是351.99和352.12的平均值
# array([ 336.1 , 338.61, 339.32, 342.62, 342.88, 343.44, 344.32,
# 345.03, 346.5 , 346.67, 348.16, 349.31, 350.56, 351.88,
# 351.99, 352.12, 352.47, 353.21, 354.54, 355.2 , 355.36,
# 355.76, 356.85, 358.16, 358.3 , 359.18, 359.56, 359.9 ,
# 360. , 363.13])
np.var(c) # 方差的计算
# 50.126517888888884
np.mean((c - c.mean()) ** 2) # 手动计算方差
# 50.126517888888884
7 股票收益率计算
c = np.loadtxt('./data.csv', delimiter=',', usecols=(6,), unpack=True)
returns = np.diff(c) / c[: -1] # diff计算差分,总体是求股票收益率
np.std(returns) # 求标准差
# 0.012922134436826306
log_returns = np.diff(np.log(c)) # 股票对数收益率
log_returns
# array([ 0.00953488, 0.01668775, -0.00205991, -0.00255903, 0.00887039,
# 0.01540739, 0.0093908 , 0.008