【Python】 利用Matplotlib验证进出场点

来源:互联网 发布:java字符流读取视频 编辑:程序博客网 时间:2024/04/29 04:02

更新补充

数据来源请大家参考文章:原始数据
文章详细介绍了如何爬取所需数据,并保存至本地,另外此文操作的数据还需股价信息而链接(原始数据)所抓取的数据只是一部分,股价信息还未合并,待我找时间再全部更新补充出来吧,大家先谅解哈~~大家也可以自己爬取合并后再结合本文进行处理啊

===========================================很皮的分隔线================================


这是很久以前利用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]

- 创建一个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_mcimport numpy as npimport matplotlib.pyplot as pltfrom 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已经完成'%codeif __name__ == '__main__':    list = [  ]      #stock_list    for i in list:        draw(i)

注意事项

-  最后,提醒一下:
    1. 大家将最后运行的list按需补上
    2. 数据数据当时是用的绝对路径,大家可自行修改








1 0
原创粉丝点击