1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python实战项目—金融量化分析(数据的简单预处理)

Python实战项目—金融量化分析(数据的简单预处理)

时间:2020-12-20 16:50:40

相关推荐

Python实战项目—金融量化分析(数据的简单预处理)

实现需要导入的包:

import tushare as ts

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

注:tushare,财经数据接口包

1.使用tushare包导入某只股票的历史数据

我们不妨以同花顺这只股票为例(300033)

df=ts.get_k_data(code=‘300033’,start=‘2000-01-01’,end=‘-01-21’)

df

其中,code是股票代码,start是开始时间,end是结束时间。如果不知道开始时间,可以设置一个比较早的时间。

运行结果如上,共计2916条数据。

接下来,我们可以把数据存储到文件中去,调用to_xxx将数据写入文件中

df.to_csv(’./300033.csv’)

然后重新导入文件:

df=pd.read_csv(’./300033.csv’)

df

运行后发现:

多了一列,我们可以删除第一列的数据,删除方法常见的两种:

方法一:直接del df[‘column-name’]

方法二:采用drop方法,有下面三种等价的表达式:

1.df= df.drop(‘column_name’, 1)

输入:df,drop(‘num’,axix=1),不改变内存,及输入df的时候,它还是显示原数据;

2.df.drop(‘column_name’,axis=1, inplace=True)

输入:df.drop(‘num’,axix=1,inplace=True),改变内存,及输入df的时候,它显示改变后的数据;

3. df.drop([df.columns[[0,1, 3]]], axis=1,inplace=True)

输入:df.drop([df.columns[[0,1]]],axis=1,inpalce=True)

总结:凡是会对原数组作出修改并返回一个新数组的,往往都有一个 inplace可选参数。如果手动设定为True(默认为False),那么原数组直接就被替换。也就是说,采用inplace=True之后,原数组名(如2和3情况所示)对应的内存值直接改变;而采用inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给一个新的数组或者覆盖原数组的内存位置(如1情况所示)。

通过pandas删除列:

1.del df[‘columns’] #改变原始数据

2.df.drop(‘columns’,axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据

3.df.drop(‘columns’,axis=1,inplace=‘True’) #改变原始数据

言归正传,我们采用drop函数,这样我们就删除了第一行无用的数据。

df=df.drop(labels=‘Unnamed: 0’,axis=1)#drop中反过来,0表示行,1表示列,inplace=Ture表示将操作赋予到原数据中

df

使用to_datetime将date列转化为时间序列:

df[‘date’]=pd.to_datetime(df[‘date’])

df

便于查看,我们把日期设置为索引序列:

df=df.set_index(‘date’)

df

2.输出收盘比开盘涨超3%的日期

date=df.loc[(df[‘close’]-df[‘open’])/df[‘open’]>0.03]#获取True对应的行数据

date

在分析的过程中如果产生了布尔值,则下一步将布尔值作为源数据的行索引;如果布尔值作为原数据的行索引,则可以取出True对应的值,忽略False对应的值。

接下来,将数据生成存储到文件中去。

date.to_csv(’./300033上涨3%的日期汇总.csv’)

3.输出开盘价比昨日收盘价跌幅超过2%的日期

思考这样一个问题,昨日的收盘价怎么和开盘价放到一列?

我们可以增加一列收盘价,并把收盘价下移一天:

df[‘yesterday_close’]=df[‘close’].shift(1)

df

date=df.loc[(df[‘open’]-df[‘yesterday_close’])/df[‘yesterday_close’]<-0.02]#开盘价比起昨天收盘价跌幅超过2%

date

date.to_csv(’./300033开盘比前日收盘价跌超2%的日期.csv’)

4.假如我从1月1日起,每个月第一个交易日买入十手股票,每年最后一个交易日卖出,那么到昨天,我的收益是多少?

首先我们要知道,一手股票是100股,一年总共买入12000股。

我们首先计算成本价格:

1.取出日期内的数据:

new_df=df[‘-01-01’:‘-01-23’]

new_df

2.找出每月的第一个交易日:

Month_first=new_df.resample(‘M’).first()

3.计算总花费:

cost=Month_first[‘open’].sum()*1000 #花费的总价格

接下来我们计算收益,要注意的股票还没有卖出,需要估价,利用昨天的收盘价进行估价。

Annual_last=new_df.resample(‘A’).last()[:-1]#将最后一行切出去

计算收益:

earn=Annual_last[‘open’].sum()12000+2000new_df[‘close’][-1]

print(earn-cost)

5.绘制五日均线和三十日均线

首先需要理解,什么是均线?

对于每一个交易日,都可以计算前N天的移动平均值,然后把这些移动均值联系起来,成为一条线,叫做N日移动平均线,移动平均线常用有5天,10天,30天,60天,120天,240天的指标。

均线计算方法:MA=(C1+C2+…+Cn)/n

五日均线:

MA5=df[‘close’].rolling(5).mean()

MA30=df[‘close’].rolling(30).mean()

pandas中提供了pandas.DataFrame.rolling这个函数来实现滑动窗口值计算,下面是这个函数的原型:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

绘图如下:

plt.plot(MA5)

plt.plot(MA30)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。