1、读取CSV文件:
loadtext (文件名,分隔符(delimiter),usecols=(列索引表—需要的列), unpack=True, dtype=元素类型, converters={列索引号:转换函数})
注:unpack=True 表示所有的分隔符都进行处理
2、算数平均值 np.mean()
3、加权平均值 np.average(price, weights=volumes)
4、最大值和最小值
np.max(arr):
np.min(arr):
np.maximum(arr1, arr2, …): 所有数组中对应元素的最大值组成一个数组
np.minimum(arr1, arr2, …): 所有数组中对应元素的最小值组成一个数组
5、中位数 np.median
# maximum
>>> a
array([[[67, 25, 88],
[81, 14, 22],
[73, 33, 70]],
[[17, 78, 89],
[82, 13, 78],
[13, 39, 45]],
[[67, 78, 89],
[82, 14, 78],
[73, 39, 70]]])
>>> np.maximum(a[0],a[1],a[2])
array([[67, 78, 89], # 三个数组对应位置元素做对比,取最大值组成一个数组
[82, 14, 78],
[73, 39, 70]])
6、常用统计指标
- 样本 si
- 均值 mean
- 离差 [d1,d2,…,dn], di = si-mean
- 离差方 [q1,q2,…,qn], qi= di^2
- 总体方差: p = (q1+q2+…+qn)/n
- 总体标准差:std = sqrt(p)
- 样本方差: p = (q1+q2+…+qn)/(n-1)
- 样本标准差:std = sqrt(p)
numpy.var(arr): 计算总体方差
numpy.std(arr): 计算总体标准差
- 差分np.diff(x , lag = ,differences = )
一阶差分就是离散函数中连续相邻两项之差。当自变量从x变到x+1时,函数y=y(x)的改变量∆yx=y(x+1)-y(x),(x=0,1,2,……)称为函数 y(x)在点x的一阶差分,记为∆y(x)=y(x+1)-y(x),(x=0,1,2,……)。
二阶差分
参数 | 描述 |
---|---|
x | 变量名 |
lag | 差分的步长,不特意指定,系统默认lag =1 |
differences | 差分次数,不特意指定,系统默认differences=1 |
1阶差分 | diff(x) |
2阶差分 | diff(x,log=1, differences=2) |
k阶差分 | diff(x,1,k) |
d步差分 | diff(x,d,1) 根据diff函数的参数定义,如果差分命令写成diff(x,d,k),意思是进行k次d步差分。 |
百分比收益率和对数收益率:
def auto_returns(closing_prices):
# 一阶方差
diff_price = np.diff(closing_prices) # 计算一阶差分 (当天收盘价 - 上一天收盘价)
# 收益率 a[:-1]: 不包含a数组中的最后一个元素
returns = diff_price / closing_prices[:-1] # 收益率 = 一阶差分 / 上一天收盘价
# 收益率标准差
returns_std = np.std(returns) # 收益率标准差
# 对数收益率定义: log_retruns = log(s2/s1), log或ln都可
# 收盘价取对数
log_prices = np.log(closing_prices)
# 对数差分 = 对数收益率
log_returns = np.diff(log_prices)
# 对数收益标准差
log_returns_std = np.std(log_returns)
return returns_std, log_returns_std
举例:
import os
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as md
import platform # pltform模块
import datetime as dt
# 解析日期函数
def dmy2ymd(dmy):
return (dt.datetime.strptime(
str(dmy, encoding = 'utf-8'), '%d-%m-%Y').date() - dt.date.min).days
# 返回的是时间差,距离最原始时间点的天数 datetime.timedelta.days
# str(dmy, encoding = 'utf-8'): 构造str对象的同时可以指定字符编码
# 将中文window默认dbcs(双字节字符集)字符编码的gb2312字符串转化为unicode字符串(utf-8)
# 定义读取文件的函数
def read_data(filename):
times, close_price,volumes = np.loadtxt(
filename, delimiter = ',', usecols = (1,6,7), unpack = True,
dtype='f8,f8,f8',converters = {1:dmy2ymd})
return times, close_price,volumes
# M8[D] D表示日期精度以天为单位
# 算数平均值
def auto_mean(close_price):
mean = np.mean(close_price)
return mean
# 加权平均值
def auto_vwap(close_price,volumes):
vwap = np.average(close_price, weights=volumes)
return vwap
# 加权平均值
def auto_twap(times, close_price):
twap = np.average(close_price, weights=times)
return twap
# 手动计算
def manu_twap(times, close_price):
twp, tv = 0., 0.
for time, c_price in zip(times, close_price):
twp += c_price * time
tt += time
twap = twp / tt
return twap
# 定义主函数
def main(argc, argv, envp):
# 导入文件
times, close_price, volumes = read_data('aapl.csv')
print(auto_mean(close_price))
print(auto_vwap(close_price, volumes))
print(auto_twap(times, close_price))
return 0
# 调用主函数
if __name__ == '__main__':
sys.exit(main(len(sys.argv),sys.argv,os.environ))