栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

股票配对收益

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

股票配对收益

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']        # 字体设置
import matplotlib
matplotlib.rcParams['axes.unicode_minus']=False    # 负号显示问题

from arch.unitroot import ADF                     # pip install arch
import statsmodels.api as sm
#导入数据
import tushare as ts
#后面自己研究何种股票,何种方式
data1 = ts.get_k_data('002966', '2013-06-01', '2021-12-31')[['date','close']]
data2 = ts.get_k_data('600919', '2013-06-01', '2021-12-31')[['date','close']]
#建立新的数据
sh = pd.merge(data1,data2,on='date')
sh.set_index('date',inplace = True)
stocks_pair = ['601988','600000']
sh.columns = stocks_pair
sh.head()
#计算相关性,这里使用日线级别,计算相关性
sh[['601988','600000']].corr()
#计算价差
sh['jc'] = sh['600000']-sh['601988']
sh.head()
#计算新的价差数据组
sh = sh['jc'].reset_index()
sh.set_index('date',inplace=True)
sh.index = pd.to_datetime(sh.index)
sh.head()
#计算每周收益,百分比
sh['ret'] = sh['jc'].pct_change()
#计算每周收益,固定值
sh['ret2']  = sh['jc']-sh['jc'].shift(1) 
sh['jc'].plot()
#设计信号
sh['sig'] = sh['jc'].apply(lambda x:-1 if(x>8) else 0)#价差超过-7,买601988,卖60000
sh['sig2'] = sh['jc'].apply(lambda x:1 if(x<5) else 0)#价差低于-9,卖601988,60000
#未出现信号,则继续持有
sh[['sig','sig2']].replace(0,np.nan,inplace=True)
sh[['sig','sig2']].bfill(inplace=True)
#计算每次交易收益
sh['rr'] = (sh['ret2']*sh['sig2']+sh['ret2']*sh['sig2'])
#收益画图。图为累计可以获得的价差累加值收益
sh['lr'] = sh['rr'].cumsum()
sh['lr'].plot()
#粗略计算收益率,9年获利0.08
0.66/(2.15+5.815)
#转换为周线级别
period_type = 'W'
sh2=pd.Dataframe()
#sh2[['收盘价','开盘价','最高价','最低价']] = 0
sh2['收盘价'] = sh['jc'].resample(period_type).last()
sh2['开盘价'] = sh['jc'].resample(period_type).first()
sh2['最高价'] = sh['jc'].resample(period_type).max()
sh2['最低价'] = sh['jc'].resample(period_type).min()
sh2.head()

#计算每周收益,百分比
sh2['ret'] = sh2['收盘价'].pct_change()
#计算每周收益,固定值
sh2['ret2']  = sh2['收盘价']-sh2['收盘价'].shift(1) 


#设计信号
sh2['sig'] = sh2['收盘价'].apply(lambda x:-1 if(x>8) else 0)
sh2['sig2'] = sh2['收盘价'].apply(lambda x:1 if(x<7) else 0)


#未出现信号,则继续持有
sh2[['sig','sig2']].replace(0,np.nan,inplace=True)
sh2[['sig','sig2']].bfill(inplace=True)
#计算每次交易收益
sh2['rr'] = (sh2['ret2']*sh2['sig2']+sh2['ret2']*sh2['sig2'])
#收益画图。图为累计可以获得的价差累加值收益
sh2['lr'] = sh2['rr'].cumsum()
sh2['lr'].plot()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号