Numpy 学习笔记四 利用Numpy进行历史股价分析

利用Numpy进行历史股价分析

import sys
c,v=np.loadtxt('data.csv',delimiter=',',usecols=(6,7),unpack=True)
vwap=np.average(c,weights=v)#计算成交量加权平均价格
mean=np.mean(c)             #算术平均值函数
t=np.arange(len(c))         #时间加权平均价格
twap=np.average(c,weights=t)
h,l=np.loadtxt('data.csv',delimiter=',',usecols=(6,7),unpack=True)
highest=np.max(h)
lowest=np.min(l)
av=(highest+lowest)/2
spread_high_price=np.ptp(h)
spread_low_price=np.ptp(l)
print(vwap,mean,twap,spread_high_price,spread_low_price)

c=np.loadtxt('data.csv',delimiter=',',usecols=(6,),unpack=True)
median=np.median(c)
sorteds=np.msort(c)
var=np.var(c)
mean=np.mean((c-c.mean())**2)
median,sorteds,var,mean

N=len(c)
middle=(N-1)/2
average_middle=(N/2+(N-1)/2)/2
N,middle,average_middle

c=np.loadtxt('data.csv',delimiter=',',usecols=(6,),unpack=True)
returns=np.diff(c)/c[:-1]
standard_devisiation=np.std(returns) #标准差

#计算股票收益率  对数收益率,返回收益率为正的值的索引

logreturns=np.diff(np.log(c))
posretindices=np.where(returns>0)
returns,standard_devisiation,logreturns,posretindices

日期分析

from datetime import datetime

#loadtxt默认传入浮点格式数字 
#由日期格式转化为字符串格式的函数为: datetime.datetime.strftime() 由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()
#converters 对数据进行预处理
def datestr2num(s):
    return datetime.strptime(s.decode('ascii'),"%d-%m-%Y").date().weekday()
dates,close=np.loadtxt('data.csv',delimiter=',',usecols=(1,6),converters={1:datestr2num},unpack=True)
dates

averages=np.zeros(5)
for i in range(5):
    indices=np.where(dates==i)
    prices=np.take(close,indices)#np.take(a,b) 根据b中数字为索引,查找a中对应元素
    avg=np.mean(prices)
    print(i,prices,avg)
    averages[i]=avg
print(averages)
print(np.max(averages))   #top 
print(np.argmax(averages)) #top_day_of_the_week

def datestr2num(s):
    return datetime.strptime(s.decode('ascii'),"%d-%m-%Y").date().weekday()
dates,open,high,low,close=np.loadtxt('data.csv',delimiter=",",\
                                    usecols=(1,3,4,5,6),converters={1:datestr2num},unpack=True)
colse=close[:16]
dates=dates[:16]

first_monday=np.ravel(np.where(dates==0))[0]
last_friday=np.ravel(np.where(dates==4))[-1]
weeks_indices=np.arange(first_monday,last_friday+1)
weeks_indices1=np.split(weeks_indices,3)
first_monday,last_friday,weeks_indices,weeks_indices1

def summarize(a,o,h,l,c):
    monday_open=o[a[0]]
    week_high = np.max( np.take(h, a) )
    week_low = np.min( np.take(l, a) )
    friday_close = c[a[-1]]
    print(monday_open)
    return("APPL", monday_open, week_high, week_low, friday_close)
weeksummary=np.apply_along_axis(summarize,1,weeks_indices1,open,high,low,close)
print(weeksummary,weeks_indices1[0])
np.savetxt("weeksummary.csv",weeksummary,delimiter=',',fmt='%s')

猜你喜欢

转载自blog.csdn.net/qq_42052864/article/details/81592131