Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import numpy as np
- from pyecharts import options as opts
- from pyecharts.charts import Kline, Line, Bar, Grid, Page,Scatter
- nv = pd.read_csv('BiasAndReverse2018.csv',index_col=0) #读取因子值全样本文件
- nnv = pd.read_csv('BiasAndReverse2018.csv',index_col=0).loc['2019-09-03 10:00':] #选取最近两周因子值
- kdata = pd.read_csv('kdata1.csv') #读取股票价格数据
- #将最近两周的因子数据归一化
- for i in range(0,len(nnv.columns)):
- for j in range(1,len(nnv.index)):
- nnv.iloc[j,i] = nnv.iloc[j,i]/nnv.iloc[0,i]
- for i in range(0,len(nnv.columns)):
- nnv.iloc[0,i] = 1
- for i in range(1,len(nnv.columns),2):
- for j in range(len(nnv.index)):
- nnv.iloc[j,i] = nnv.iloc[j,i] -1
- for i in range(0,len(nnv.columns),2):
- for j in range(len(nnv.index)):
- k =(0.08-(-0.01))/(max(nnv.iloc[:,i])-min(nnv.iloc[:,i]))
- nnv.iloc[j,i] = -0.01+k*(nnv.iloc[j,i]-min(nnv.iloc[:,i]))
- #
- #将全样本的因子数据归一化
- for i in range(0,len(nv.columns)):
- for j in range(1,len(nv.index)):
- if nv.iloc[0,i] != 0:
- nv.iloc[j,i] = nv.iloc[j,i]/nv.iloc[0,i]
- else:
- nv.iloc[j,i] = nv.iloc[j,i]+1
- for i in range(0,len(nv.columns)):
- nv.iloc[0,i] = 1
- for i in range(1,len(nv.columns),2):
- for j in range(len(nv.index)):
- nv.iloc[j,i] = nv.iloc[j,i] -1
- for i in range(0,len(nv.columns),2):
- for j in range(len(nv.index)):
- k =(0.4-(-0.2))/(max(nv.iloc[:,i])-min(nv.iloc[:,i]))
- nv.iloc[j,i] = -0.2+k*(nv.iloc[j,i]-min(nv.iloc[:,i]))
- #将5分钟股票数据转化为30分钟股票数据(保留全样本)
- kdata_all = []
- for i in range(5,len(kdata),6):
- kdata_all.append(kdata.iloc[i,:])
- kdata_all = pd.DataFrame(kdata_all) #要保证股票数据行数与因子值数据行数相同
- kdata_all = kdata_all.set_index(kdata_all.datetime)['close'].loc['2018/1/2 10:00':'2019/9/17 15:00']
- #将5分钟股票数据转化为30分钟股票数据(保留最近两周)
- kdata_part = []
- for i in range(5,len(kdata),6):
- kdata_part.append(kdata.iloc[i,:])
- kdata_part = pd.DataFrame(kdata_part)
- kdata_part = kdata_part.set_index(kdata_part.datetime)['close'].loc['2019/9/3 10:00':'2019/9/17 15:00']
- #全样本及最新股票数据归一化
- for j in range(1,len(kdata_part.index)):
- kdata_part.iloc[j] = kdata_part.iloc[j]/kdata_part.iloc[0]-1
- kdata_part.iloc[0] = 0
- for j in range(1,len(kdata_all.index)):
- kdata_all.iloc[j] = kdata_all.iloc[j]/kdata_all.iloc[0]-1
- kdata_all.iloc[0] = 0
- def getplot(factor,factor2,klinedata,file,instrument,xaxis_index=None):
- '''factor;因子参数名称
- factor2:因子收益名称
- klinedata:股票数据
- file:因子值数据
- instrument:股票名称
- xaxis_index:放缩联动的坐标轴
- '''
- line = (
- Line()
- .add_xaxis(list(file.index))
- .add_yaxis(factor,list(file[factor]),label_opts=opts.LabelOpts(is_show=False)) #叠放因子值
- .add_yaxis(instrument,list(klinedata),label_opts=opts.LabelOpts(is_show=False))#叠放股票收盘价
- .add_yaxis(factor2,list(file[factor2]),label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(opacity=0.8))#叠放因子收益
- .set_global_opts(yaxis_opts=opts.AxisOpts(is_scale=True))
- .set_global_opts(
- datazoom_opts=opts.DataZoomOpts(is_show=False,range_start=0,range_end=100,type_='inside',xaxis_index=xaxis_index),
- legend_opts=opts.LegendOpts(is_show=True, pos_top=10, pos_left='left')))
- return line
- def grid(factor,factor2,instrument):
- gridchart = Grid(
- init_opts=opts.InitOpts(
- width="100vw",
- height="50vh",
- animation_opts=opts.AnimationOpts(animation=True)
- ))
- gridchart.add( #左边画最新数据
- getplot(factor,factor2,kdata_part,nnv,instrument,xaxis_index=[0,1]),
- grid_opts=opts.GridOpts(pos_left="5%",pos_right="68%")
- )
- gridchart.add( # 右边画全样本数据
- getplot(factor, factor2,kdata_all, nv,instrument, xaxis_index=None),
- grid_opts=opts.GridOpts(pos_left="40%", pos_right="5%")
- )
- return gridchart
- page1 = Page(layout=Page.SimplePageLayout)
- for i in range(int(len(nv.columns)/2)):
- page1.add(grid(nv.columns[2*i],nv.columns[2*i+1],str(kdata['symbol'][0][-6:])))
- page1.render('biasandreverse2018.html')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement