更新补充
数据来源请大家参考文章:原始数据
文章详细介绍了如何爬取所需数据,并保存至本地,另外此文操作的数据还需股价信息而链接(原始数据)所抓取的数据只是一部分,股价信息还未合并,待我找时间再全部更新补充出来吧,大家先谅解哈~~大家也可以自己爬取合并后再结合本文进行处理啊
===========================================很皮的分隔线================================
这是很久以前利用matplotlib绘制的图简单验证相关标的其LSI指标的吻合程度,当时写的过程比较粗糙,后面再择机修改吧 ~~ 各位可以大概参考参考~
准备工作
- 已经将融资融券标的的历史数据(包括股价信息)抓取到本地
- 已经将数据预处理过
- 所需库:numpy、matplotlib
正式处理
- 字体设置
提前考虑到后面可能会用到汉字做,故先设置字体font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) #可自定义
- 构建LSI指标 (细看文章链接:从融资融券数据挖掘个股绝佳买点)
LSI = [(float(x[3])*float(x[7])*100/float(x[6])+float(x[2]))/(float(x[4])*float(x[7])*100/float(x[6])+float(x[1]) +float(x[3]) * float(x[7]) * 100 / float(x[6]) + float(x[2]))for x in need_list[1:]][::-1]
LSI = [(float(x[3])*float(x[7])*100/float(x[6])+float(x[2]))/(float(x[4])*float(x[7])*100/float(x[6])+float(x[1]) +float(x[3]) * float(x[7]) * 100 / float(x[6]) + float(x[2]))for x in need_list[1:]][::-1]
- 创建一个figure对象
fig = plt.figure()
ax = plt.gca()
- 图的绘制和处理
ax1 = fig.add_subplot(111)
ax1.plot(LSI, 'r', label=u'LSI指标', linewidth=4)
ax1.legend(loc=2, prop=font)
ax1.set_ylabel(u'LSI刻度', fontproperties=font)
plt.title('%s'%code)
plt.grid() # 显示网格
plt.subplots_adjust(bottom=0.16) # 图的底边距
ax2 = ax1.twinx()
ax2.plot(MP, 'b', label=u'标的均价', linewidth=2)
ax2.set_ylabel(u'标的刻度', fontproperties=font)
ax2.legend(loc=1, prop=font)
- 根据需要保存至本地
plt.savefig('...\\png_result\%s.png'%code)
效果展示
- 当然,上面的只是作图过程中的几个相对重要的点,丑姑娘总是要见人的,将完整源码附在后面
# coding:utf-8
# author:buracag_mc
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# =====================设置字体====================#
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
def draw(code):
f = open('...\result\\%s.csv'%code, 'r')
linelist = f.readlines()
f.close()
# ==================后续做的list===================#
need_list = [line.strip().split(',') for line in linelist]
years = [x[0] for x in need_list[1:]]
# print years
LSI = [(float(x[3])*float(x[7])*100/float(x[6])+float(x[2]))/(float(x[4])*float(x[7])*100/float(x[6])+float(x[1])
+float(x[3]) * float(x[7]) * 100 / float(x[6]) + float(x[2]))for x in need_list[1:]][::-1]
MP = [float(x[7]) * 100 / float(x[6]) for x in need_list[1:]][::-1]
# ======创建一个figure对象======#
fig = plt.figure()
ax = plt.gca()
lens = int(len(years))
# ======x轴间隔五个显示时期,根据实际选择=====#
k = 0
while k in range(0, lens):
if k % 5 != 0:
years[k] = ''
k += 1
plt.xticks(np.linspace(0, lens)) # x轴上还是有len(years)个刻度
ax.set_xticklabels(years, rotation=90) # 旋转90度,实际选择
# ax.xaxis.set_major_locator( MultipleLocator(5)) 主刻度
# ax.xaxis.set_minor_locator( MultipleLocator(1)) 次刻度
ax1 = fig.add_subplot(111)
ax1.plot(LSI, 'r', label=u'LSI指标', linewidth=4)
ax1.legend(loc=2, prop=font)
ax1.set_ylabel(u'LSI刻度', fontproperties=font)
plt.title('%s'%code)
plt.grid() # 显示网格
plt.subplots_adjust(bottom=0.16) # 图的底边距
ax2 = ax1.twinx()
ax2.plot(MP, 'b', label=u'标的均价', linewidth=2)
ax2.set_ylabel(u'标的刻度', fontproperties=font)
ax2.legend(loc=1, prop=font)
plt.savefig('...\\png_result\%s.png'%code)
print '%s已经完成'%code
if __name__ == '__main__':
list = [ ] #stock_list
for i in list:
draw(i)
注意事项
- 最后,提醒一下:
1. 大家将最后运行的list按需补上
2. 数据数据当时是用的绝对路径,大家可自行修改