Python.Numpy学习零碎笔记之便捷函数

来源:互联网 发布:windows rt连接口 编辑:程序博客网 时间:2024/06/05 04:32

一、通过股票收益率的背景熟悉数据分析的变量之间相关系数等函数计算


1 股票收益率的计算

import numpy as npfrom matplotlib.pyplot import plotfrom matplotlib.pyplot import showbhp_c = np.loadtxt('BHP.csv',delimiter=',',usecols=(6,),unpack=True) #导入股票收盘价vale_c = np.loadtxt('VALE.csv',delimiter=',',usecols=(6,),unpack=True)#计算股票简单收益率bhp_returns = np.diff(bhp_c)/bhp_c[:-1]   # diff:相邻元素差值vale_returns = np.diff(vale_c)/bhp_c[:-1]#print('Standard deviation =',np.std(bhp_returns))  # 计算标准差#logreturns = np.diff(np.log(bhp_c)) #计算股票对数收益率

2 协方差、对角元素查看以及迹的计算

covariance = np.cov(bhp_returns,vale_returns) #计算两个变量共同变化趋势——协方差print('Covariance:','\n',covariance)  #得到协方差矩阵print('Covariance_diagonal:','\n',covariance.diagonal())# 使用该函数查看对角线上的元素print('Covariance_trace:','\n',covariance.trace()) #使用该函数计算矩阵的迹,即对角线元素之和

3 变量相关系数的原理公式及函数计算(详细原理见其他文章,这里不赘述)

# 两个向量的相关系数被定义为协方差除以各自标准差的乘积print(covariance/(bhp_returns.std() * vale_returns.std()))#但是更多的用corrcoef函数计算相关系数print('Correlation_coefficient:','\n',np.corrcoef(bhp_returns,vale_returns))

4 matplotlib 绘图

# 两只股票收益率绘图t = np.arange(len(bhp_returns))plot(t,bhp_returns,lw=1) #lw 线型宽度plot(t,vale_returns,lw=2)show()

蓝色:BHP 绿色:VALE

5 判断两只股票的价格走势是否同步:如果(它们的差值偏离平均差值)>(2倍标准差)=不同步,此时我们可以进行交易(说实话这里的原理还没完全明白)

检查最后一次收盘价是否在同步状态

difference = bhp_c - vale_cavg = np.mean(difference)dev = np.std(difference)print('Out of sync',np.abs(difference[-1]-avg) > 2*dev) #比较输出布尔类型值

二、多项式拟合


主要内容

  • ployfit线性拟合函数,
  • polyval求解值的函数,
  • polyder求导函数,
  • roots求根函数,
  • argmax,argmin求解最大值最小值的函数
import numpy as npfrom matplotlib.pyplot import plotfrom matplotlib.pyplot import showbhp_c = np.loadtxt('BHP.csv',delimiter=',',usecols=(6,),unpack=True)vale_c = np.loadtxt('VALE.csv',delimiter=',',usecols=(6,),unpack=True)difference = bhp_c - vale_c # 两只股票收盘价的差价t = np.arange(len(difference))poly = np.polyfit(t,difference,3)#用polyfit进行多项式拟合,t是x,difference是y,3是多项式最高项次数

返回多项式函数的系数

print(poly)  #   返回各项的系数  

利用得到的poly函数与polyval函数推断下一个值(x=a,y=?)

print('next value',polyval(poly, t[-1] + 1))  #   polyval求解值  

求函数的根(y=0,x=?)

print('roots', roots(poly))  #   求解方程的根  

对多项式拟合函数求导 ,仍然是个多项式函数

der = polyder(poly)  print ('derivative', der)  #返回各项的系数  

求解导函数,找到极值

print ('Extremas', np.roots(der))  #返回极值点 

复核结果:结果可能不一定完全一致,与取值范围有关,而且t是arange函数定义的

vals = polyval(poly, t) #将t带入多项式的值,求解  print argmax(vals)  print argmin(vals)  #   找到极大值极小值点

绘图

plot(t,difference)  plot(t, vals)  show() 

这里写图片描述

下图为15次多项式拟合

这里写图片描述

三、使用Numpy的sign函数和piecewise函数判断数组内的元素正负号,并返还对应的值


导入BHP股票的收盘价及成交量,并对收盘价做差分计算

import numpy as npc,v = np.loadtxt('BHP.csv',delimiter=',',usecols=(6,7),unpack=True)change = np.diff(c)

使用sign函数对change数组内的元素正负进行判断

signs = np.sign(change)print('Signs',signs)  # 正数返回1,负数返回-1,其他返回0

使用pieceswise函数对数组内元素正负号进行判断,判断条件与返回值均可自由定义,所以该函数作用很强大

pieces = np.piecewise(change,[change < 0,change > 0],[-1,1])print('Pieces',pieces)#使用piecewise确定数组的正负,判断条件和对应的结果

检验两个函数的输出是否一致

print('Arrays equal?',np.array_equal(signs,pieces))

上面有人可能会认为为什么不是print(‘Arrays equal?’,signs==pieces) ?,直接看结果,一目了然

print('Arrays equal?',np.array_equal(signs,pieces))
输出:Arrays equal? True
print('Arrays equal?',signs==pieces) 
输出:Arrays equal? [ True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True]

最后计算OBV净额成交量

print('On balance volume',v[1:]*signs)

四、通过交易过程的模拟使用vectorize函数来避免循环的使用


import numpy as npo,h,l,c = np.loadtxt('BHP.csv',delimiter=',',usecols=(3,4,5,6),unpack=True)def calc_profit(op,high,low,close):    #以比开盘价稍低的价格买入    buy = op * 0.999 # (值不重要,主要关注函数的用法)    if low < buy < high: #这里判断尝试的买入价是否在当日价格区间之内        return (close - buy)/buy    else:        return 0func = np.vectorize(calc_profit) #向量化函数,避免使用循环profits = func(o,h,l,c)print('Profits',profits)print('Real trades',profits[profits != 0]) #筛选出非零利润的交易日print('winning trades',profits[profits > 0]) #筛选出正在盈利的交易日
原创粉丝点击