wuqi001 发表于 2021-3-18 17:01

计算股票的涨跌幅,并计算任意股票的协方差

所用数据来自与通达信。计算协方差时将非共有的日期数据删除。(ps:本文纯属python pandas练手文,供各位看官以消遣之用。涨跌幅和协方差用excel计算明显更为简单,)
计算协方差所用库为pandas。
计算涨跌幅。有兴趣的朋友可将其中的代码放入循环中,进行改进。
# -*- codeing = utf-8 -*-
# @Time : 2021/3/12 17:16
# @AuThor : wuqi
# @file : 0001.py
# @SOFTWARE :PyCharm
#计算股票的涨跌幅
import xlrd
import xlwt
# from pandas import pd
filepath=r'C:\Users\wuqi001\Desktop\00.xlsx'    #第一个文件的路径
sefilepath=r'C:\Users\wuqi001\Desktop\01.xlsx'#第二个文件的路径


#可任意往其中加入excel文件的地址

#文件的保存地址
savepath=r'C:\Users\wuqi001\Desktop\0.xls'

#计算涨幅
def getrate(filepath):
    workbook=xlrd.open_workbook(filepath,encoding_override='utf-8')
    a=workbook.sheet_by_index(0)      #通过索引找到表
    nums=a.nrows                        #得到总行数
    cols=a.col_values(4)                #取出第五列,即收盘价格
    l_price=cols[4:-1]                  #取出所有整型值

    # print(l_price)
    ratelist=[]

    for i in range(1,nums-5):
      rate=(l_price-l_price1])/l_price1]
      ratelist.append(rate)
      # print(ratelist)
    return ratelist

#取出该股票的日期
def getDate(filepath):
    workbook = xlrd.open_workbook(filepath, encoding_override='utf-8')
    a = workbook.sheet_by_index(0)
    nums = a.nrows
    dates=a.col_values(0)
    id=a.cell_value(0,0)
    l_data=dates[4:-1]
    datalist=[]
    for i in range(1,nums-5):

      datalist.append(l_data)
      # print(ratelist)
    return datalist,id


if __name__ == '__main__':
    #此过程可扩展
    ratelist=getrate(filepath)          #将涨跌赋给ratalist
    ratelist2=getrate(sefilepath)

    datelist1,id1=getDate(filepath)   #将日期赋给datalist
    datelist2,id2=getDate(sefilepath)




    book=xlwt.Workbook(encoding='utf-8')      #创建工作表
    sheet=book.add_sheet('001',cell_overwrite_ok=True)      #创建表单
    # sheet.write(0,0,'涨跌')
    sheet.write(0,0,'日期')       #写入日期
    sheet.write(0, 1, id1)         #写入股票名

    sheet.write(0, 3, '日期')
    sheet.write(0, 4, id2)




    for i in range(len(datelist1)):         #写入数据
      sheet.write(i+1,0,datelist1)
    for i in range(len(ratelist)):
      sheet.write(i+1,1,ratelist)

    for j in range(len(datelist2)):
      sheet.write(j+1,3,datelist2)
    for j in range(len(ratelist2)):
      sheet.write(j+1,4,ratelist2)





    book.save(savepath)















计算协方差# -*- codeing = utf-8 -*-
# @Time : 2021/3/15 14:38
# @Author : wuqi
# @File : 0002.py
# @Software :PyCharm

import pandas as pd         #导入pandas库
filepath=r'C:\Users\wuqi001\Desktop\0.xls'#读取文件
data=pd.read_excel(filepath)
# print(data.tail())
m=data.index
# print(len(m))
bank=data.iloc[:len(m),:2]
star=data.iloc[:len(m),3:5]
star=star.dropna()       #删除缺失值
star=star.rename(columns={'日期.1':'日期'})

# b=bank.fillna(0).iloc[:,:]
# s=star.fillna(0).iloc[:,:]             将缺失值替换为0
# print(s)
# print(star)
# bank1=bank.set_index("日期")
# star1=star.set_index("日期.1")          设置索引
bank1=bank.append(star)
# print(bank1)


b=bank1.groupby("日期")
c=b.mean()
# print(c.head())
d=c.dropna(how="any")   #删除所有带缺失值的行
e=d.reset_index()       #重建索引
# print(e.head())
e.to_excel(r'C:\Users\wuqi001\Desktop\newdata.xls',sheet_name='newdata',index=False)

王星星 发表于 2021-3-18 17:27

绕梁之英 发表于 2021-3-18 17:36

只想表示一下没看懂,最好直接告诉我买那支。:keai

微凉ii 发表于 2021-3-18 18:13

谢谢分享,表示看不懂

hlzzwabc 发表于 2021-3-18 18:38

是预测吗?

山金哥 发表于 2021-3-18 18:45

有求一个股票交割单的生成器各位大佬有吗

lhp369 发表于 2021-3-18 18:56

非常好的动心

lsd163 发表于 2021-3-18 22:03

请问做什么用的?

cowardice-boy 发表于 2021-3-18 22:47

好家伙,看不懂

wanshiz 发表于 2021-3-19 08:23

楼主厉害,练出这等代码。传闻“量化交易”吧,仿佛有些味道儿。
页: [1] 2
查看完整版本: 计算股票的涨跌幅,并计算任意股票的协方差