使用cov函数计算股票收益率的协方差矩阵:
covariance = np.cov(bhp_returns, vale_returns)
print "Covariance", covariance
使用diagonal函数查看对角线上的元素:
print "Covariance diagonal", covariance.diagonal()
使用trace函数计算矩阵的迹,即对角线上元素之和:
print "Covariance trace", covariance.trace()
两个向量的相关系数被定义为协方差除以各自标准差的乘积:
print covariance/ (bhp_returns.std() * vale_returns.std())
使用corrcoef函数计算相关系数:
print "Correlation coefficient", np.corrcoef(bhp_returns, vale_returns)
NumPy中的ployfit函数可以用多项式去拟合一系列数据点;
使用BHP和VALE的股票价格数据。用一个三次多项式去拟合两只股票收盘价的
差价;
np.polyfit():
bhp=np.loadtxt('BHP.csv', delimiter=',', usecols=(6,), unpack=True)
vale=np.loadtxt('VALE.csv', delimiter=',', usecols=(6,),unpack=True)
t = np.arange(len(bhp))
poly = np.polyfit(t, bhp - vale, int(sys.argv[1]))
print "Polynomial fit", poly
推断下一个值:
np.polyval()
print "Next value", np.polyval(poly, t[-1] + 1)
使用roots函数找出我们拟合的多项式函数什么时候到达0值:
print "Roots", np.roots(poly)
使用polyder函数对多项式函数求导:返回的是求导后的系数数组
der = np.polyder(poly)
print "Derivative", der
求出导数函数的根,即找出原多项式函数的极值点:
print "Extremas", np.roots(der)
使用polyval计算多项式函数的值:
vals = np.polyval(poly, t)
vals = np.polyval(poly, t)
print np.argmax(vals)
print np.argmin(vals)
NumPy中的sign函数可以返回数组中每个元素的正负符号,数组元素为负时返回-1,为正时返回1,否则返回0。
signs = np.sign(change)
可以使用piecewise函数来获取数组元素的正负,piecewise①函数可以分段给定取值:
pieces = np.piecewise(change, [change < 0, change > 0], [-1, 1])
print "Pieces", pieces
使用vectorize函数可以减少你的程序中使用循环的次数:
# 首先,读入数据:
o, h, l, c = np.loadtxt('BHP.csv', delimiter=',', usecols=(3, 4, 5, 6), unpack=True)
# 函数矢量化
func = np.vectorize(calc_profit)
profits = func(o, h, l, c)
# 矢量化后,对传入的数组,依次取出其元素赋值给函数变量,然后进行计算,但是第一组参数好像会被传进去两次
def calc_profit(open, high, low, close):
# 以比开盘价稍低的价格买入
buy = open * float(sys.argv[1])
# daily range
if low < buy < high :
return (close - buy)/buy
else:
return 0
print "Profits", profits
real_trades = profits[profits != 0]
调用hanning函数计算权重,生成一个长度为N的窗口:
N = int(sys.argv[1])
weights = np.hanning(N)
print "Weights", weights
使用polysub函数对多项式作差:
K = int(sys.argv[1])
t = np.arange(N - 1, len(bhp_returns))
poly_bhp = np.polyfit(t, smooth_bhp, K)
poly_vale = np.polyfit(t, smooth_vale, K)
poly_sub = np.polysub(poly_bhp, poly_vale)
xpoints = np.roots(poly_sub)
print "Intersection points", xpoints
用isreal函数来判断数组元素是否为实数:
reals = np.isreal(xpoints)
print "Real number?", reals
select函数可以根据一组给定的条件,从一组元素中挑选出符合条件的元素并返回数组:
xpoints = np.select([reals], [xpoints])
xpoints = xpoints.real
print "Real intersection points", xpoints
trim_zeros函数可以去掉一维数组中开头和末尾为0的元素:
print "Sans 0s", np.trim_zeros(xpoints)