Python量化投资组合管理第一节课

anaconda实现

工具包:pandas;numpy;matplotlib;statsmodels

DataFrame基础

 

DataFrame基本结构

  import pandas as pd

  df=pd.read_csv('E:/python量化投资data/china_index.csv')

  df.head()

1f2580f43e0c43e5a09c29d7aa49f204.png

  df=pd.read_csv('E:/python量化投资data/china_index.csv',index_col=0,parse_dates=True) #index_col=0表示以原有数据的第一列(索引为0)当作行索引;将Date列设置为时间类型

  df.head()

9003cf54e5e3456389d6658c6a45de7e.png

  df.plot.line() #绘制折线图

cba93555c5bd4ec799137f2e41dc1d0a.png

 

 属性

  df.index #行索引

adf4807ff0d341ffaef9d3240aab45a9.png

 df.index[0]

88cccd2008e54e2ca6d61f0b563d83fc.png

  df.index[-1]

143f7e6a7425486e823633a639dbe650.png

  df.columns #列索引

fedadaf600b446438f83378362bd37f4.png

   df.shape #(行,列)

37f5c6c6ead64d0db0758c09dbdb1fca.png

 

方法

  df.tail()

336eb4187f5d4d9ea8019bab1eecba8f.png

  df. describe() #返回数组描述统计函数(计数、平均值、标准差、最⼩值、四分位数、最⼤值)

c546925f0b0348da8aba8a9041002100.png

   df.mean() #返回所有列的均值

c705772fd8c4440f8e6bc020d90ea6ee.png

   df.median() #返回所有列的中位数

1095fb735e2c48c795ced595ed9e9a1c.png 

 

 切片

  df.loc['2022-2-28','HS300'] #选择行和列

d1e6e9f197894ebc83b9676b9d34ee94.png

   df.loc['2020-1-3':'2020-2-28',:]

e640cc1814e7488a8b497d910b2c3306.png

  df.iloc[3,0]

deb4e3ca3d4a46608ab8f8414e442684.png

  df.iloc[:,1] 

bc4cc9df1063457cbf94f1d70971eef8.png

   df.iloc[3:6,:]

424cc24417584ca08798da59ccfe2c7d.png

  df.loc['2020-01-01':'2020-12-31','HS300'].plot()
  df.loc['2021-01-01':'2021-12-31','HS300'].plot()
  df.loc['2022-01-01':'2022-12-31','HS300'].plot()

ff057adbfecf4ca79e32eb7e615a16d3.png

 

操作

  df['HS_0']=df['HS300'].shift(1) #把数据向下移动一位

  df

d301411b02714f23b78cc01ef3f8e344.png

  df['different']=df.HS300-df.HS_0

  df['rets']=df.different/df.HS_0

  df.head()

512570f8b135487f9646003b9dc476c4.png

 练习:第一个交易策略     df['MA40']=df['HS300'].rolling(40).mean()

 df['MA200']=df['HS300'].rolling(200).mean()

  import matplotlib.pyplot as plt

  df["MA40"].plot.line(legend=True)

  df['MA200'].plot.line(legend=True)

  #df['HS300'].plot.line(legend=True)

54b40f44b3ec4434ba7b8756d7351098.png

   df['HS300'].plot.line(legend=True)

7e95af8a019e4e3cab944566907dbbcb.png

 df['Shares']=[3000 if df.loc[d,'MA40']>df.loc[d,'MA200'] else 0 for d in df.index]

  df.Shares

7b136f3b35be42769ce9f90d50fc3b0a.png

  df["MA40"].plot.line(legend=True)

  df['MA200'].plot.line(legend=True)

  df['Shares'].plot.line(legend=True)

2acb392ecd684528b3542761a902cf56.png

  df.head()

0a8e57cfdefe44768d2abdbe6af86dcd.png

  df["HS_0"]=df['HS300'].shift(-1)

  df['Profit']=[(df.loc[d,'HS_0']-df.loc[d,'HS300'])/df.loc[d,'HS300'] if df.loc[d,'Shares']==3000 else 0 for d in df.index]

 df['Wealth']=df['Profit'].cumsum()

 df['Profit'].plot()

 df['Wealth'].plot()

 plt.axhline(y=0,color='red')

8070238433e241ca92d1fb9646c34003.png

  df['Wealth'].plot(legend=True)

 df['HS300'].plot(secondary_y=True,legend=True)

bfcccff4c37d49c28bce9d0dd60e6963.png

  df['Wealth'].tail

bd79340947aa49c98c0ae2f028122ad3.png

 

随机变量

  dice=pd.DataFrame([1,2,3,4,5,6])

 sum_of_dices=dice.sample(2,replace=True)

  sum_of_dices

0472b5a3459a4d2695383eb6ae37101e.png

  for i in range(50):

 sum_of_dices=dice.sample(2,replace=True).sum().loc[0]

  print(sum_of_dices)

04acc3e9825f4cc88a53cf34bc2c465e.png

  result=[dice.sample(2,replace=True).sum().loc[0] for i in range(50)]

  result

d84b23e730654d38a760158a361405d6.png

随机变量的频率

  freq=pd.DataFrame(result)[0].value_counts()

  freq=freq.sort_index()

  freq

48b9f9dc52b24d30af0bd69b452b63a3.png

  freq.plot.bar()

ddab894423654be4b101e8e31bc249c1.png

  (freq/50).plot.bar()

0085de5af03b46e48086e4e05ea780a0.png

沪深300日收益率历史分布   

  df['rets'].hist(bins=10)

e08c60236a38477c8368d134f04c21a4.png

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值