Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. import pandas as pd
  2. import numpy as np
  3. from pyecharts import options as opts
  4. from pyecharts.charts import Kline, Line, Bar, Grid, Page,Scatter
  5.  
  6. nv = pd.read_csv('BiasAndReverse2018.csv',index_col=0) #读取因子值全样本文件
  7. nnv = pd.read_csv('BiasAndReverse2018.csv',index_col=0).loc['2019-09-03 10:00':] #选取最近两周因子值
  8. kdata = pd.read_csv('kdata1.csv') #读取股票价格数据
  9.  
  10. #将最近两周的因子数据归一化
  11. for i in range(0,len(nnv.columns)):
  12. for j in range(1,len(nnv.index)):
  13. nnv.iloc[j,i] = nnv.iloc[j,i]/nnv.iloc[0,i]
  14. for i in range(0,len(nnv.columns)):
  15. nnv.iloc[0,i] = 1
  16. for i in range(1,len(nnv.columns),2):
  17. for j in range(len(nnv.index)):
  18. nnv.iloc[j,i] = nnv.iloc[j,i] -1
  19. for i in range(0,len(nnv.columns),2):
  20. for j in range(len(nnv.index)):
  21. k =(0.08-(-0.01))/(max(nnv.iloc[:,i])-min(nnv.iloc[:,i]))
  22. nnv.iloc[j,i] = -0.01+k*(nnv.iloc[j,i]-min(nnv.iloc[:,i]))
  23. #
  24. #将全样本的因子数据归一化
  25. for i in range(0,len(nv.columns)):
  26. for j in range(1,len(nv.index)):
  27. if nv.iloc[0,i] != 0:
  28. nv.iloc[j,i] = nv.iloc[j,i]/nv.iloc[0,i]
  29. else:
  30. nv.iloc[j,i] = nv.iloc[j,i]+1
  31. for i in range(0,len(nv.columns)):
  32. nv.iloc[0,i] = 1
  33. for i in range(1,len(nv.columns),2):
  34. for j in range(len(nv.index)):
  35. nv.iloc[j,i] = nv.iloc[j,i] -1
  36. for i in range(0,len(nv.columns),2):
  37. for j in range(len(nv.index)):
  38. k =(0.4-(-0.2))/(max(nv.iloc[:,i])-min(nv.iloc[:,i]))
  39. nv.iloc[j,i] = -0.2+k*(nv.iloc[j,i]-min(nv.iloc[:,i]))
  40.  
  41. #将5分钟股票数据转化为30分钟股票数据(保留全样本)
  42. kdata_all = []
  43. for i in range(5,len(kdata),6):
  44. kdata_all.append(kdata.iloc[i,:])
  45. kdata_all = pd.DataFrame(kdata_all) #要保证股票数据行数与因子值数据行数相同
  46. kdata_all = kdata_all.set_index(kdata_all.datetime)['close'].loc['2018/1/2 10:00':'2019/9/17 15:00']
  47.  
  48. #将5分钟股票数据转化为30分钟股票数据(保留最近两周)
  49. kdata_part = []
  50. for i in range(5,len(kdata),6):
  51. kdata_part.append(kdata.iloc[i,:])
  52. kdata_part = pd.DataFrame(kdata_part)
  53. kdata_part = kdata_part.set_index(kdata_part.datetime)['close'].loc['2019/9/3 10:00':'2019/9/17 15:00']
  54.  
  55. #全样本及最新股票数据归一化
  56. for j in range(1,len(kdata_part.index)):
  57. kdata_part.iloc[j] = kdata_part.iloc[j]/kdata_part.iloc[0]-1
  58. kdata_part.iloc[0] = 0
  59. for j in range(1,len(kdata_all.index)):
  60. kdata_all.iloc[j] = kdata_all.iloc[j]/kdata_all.iloc[0]-1
  61. kdata_all.iloc[0] = 0
  62.  
  63. def getplot(factor,factor2,klinedata,file,instrument,xaxis_index=None):
  64. '''factor;因子参数名称
  65. factor2:因子收益名称
  66. klinedata:股票数据
  67. file:因子值数据
  68. instrument:股票名称
  69. xaxis_index:放缩联动的坐标轴
  70. '''
  71. line = (
  72. Line()
  73. .add_xaxis(list(file.index))
  74. .add_yaxis(factor,list(file[factor]),label_opts=opts.LabelOpts(is_show=False)) #叠放因子值
  75. .add_yaxis(instrument,list(klinedata),label_opts=opts.LabelOpts(is_show=False))#叠放股票收盘价
  76. .add_yaxis(factor2,list(file[factor2]),label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(opacity=0.8))#叠放因子收益
  77. .set_global_opts(yaxis_opts=opts.AxisOpts(is_scale=True))
  78. .set_global_opts(
  79. datazoom_opts=opts.DataZoomOpts(is_show=False,range_start=0,range_end=100,type_='inside',xaxis_index=xaxis_index),
  80. legend_opts=opts.LegendOpts(is_show=True, pos_top=10, pos_left='left')))
  81.  
  82. return line
  83.  
  84. def grid(factor,factor2,instrument):
  85. gridchart = Grid(
  86. init_opts=opts.InitOpts(
  87. width="100vw",
  88. height="50vh",
  89. animation_opts=opts.AnimationOpts(animation=True)
  90. ))
  91. gridchart.add( #左边画最新数据
  92. getplot(factor,factor2,kdata_part,nnv,instrument,xaxis_index=[0,1]),
  93. grid_opts=opts.GridOpts(pos_left="5%",pos_right="68%")
  94.  
  95. )
  96. gridchart.add( # 右边画全样本数据
  97. getplot(factor, factor2,kdata_all, nv,instrument, xaxis_index=None),
  98. grid_opts=opts.GridOpts(pos_left="40%", pos_right="5%")
  99. )
  100.  
  101. return gridchart
  102.  
  103. page1 = Page(layout=Page.SimplePageLayout)
  104. for i in range(int(len(nv.columns)/2)):
  105. page1.add(grid(nv.columns[2*i],nv.columns[2*i+1],str(kdata['symbol'][0][-6:])))
  106. page1.render('biasandreverse2018.html')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement