量化分析(6)——K线图、交易量图、动量图、rsi强度图

比起做revit二次开发,搞量化分析入门要容易得多。这里推荐《量化投资以Python为工具》(作者:蔡立耑)这本书,简单易懂,代码里包含了最基本的算法,不用建立在别人的轮子上。

以下代码是自己跑过的,应该不会有错,是建立在上面的书的基础上,自己组合起来的例子,并非书上的例子。这里主要用Tushare上的数据来做股市数据来源。

直接放代码吧,这个例子把K线图、交易量图、动量图、rsi强度图放在一起。

# -*- coding: utf-8 -*-
"""
Created on Tue Oct 17 16:32:50 2017

@author: Administrator
"""

import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
from matplotlib.pylab import date2num
import datetime
import matplotlib.finance as mpf
%matplotlib inline
#获得深发展的股票数据,注意get_k_data和get_hist_data的区别
my_data=ts.get_k_data('000001')

#将时间转化为数字
def date_to_num(dates):
    num_time = []
    for date in dates:
        date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
        num_date = date2num(date_time)
        num_time.append(num_date)
    return num_time

#将my_data的date转化为数字
mat_wdyx = my_data.as_matrix()
num_time = date_to_num(mat_wdyx[:,0])
mat_wdyx[:,0] = num_time

close=my_data.close
#求滞后5日的收盘价变量
lag5close=close.shift(5)
#求5日动量
moment5=close/lag5close-1
moment5=moment5.dropna()
#将moment5转化为数列
mat_moment5=moment5.as_matrix()
#12日的rsi值
my_data.index=my_data.iloc[:,0]
my_data.index=pd.to_datetime(my_data.index,format='%Y-%m-%d')
szfz_close=my_data.close

#编写rsi函数
def rsi(price,period=6):
    import pandas as pd
    import numpy as np

    clprcChange=price-price.shift(1)
    clprcChange=clprcChange.dropna()

    indexprc=clprcChange.index
    upPrc=pd.Series(0,index=indexprc)
    upPrc[clprcChange>0]=clprcChange[clprcChange>0]

    downPrc=pd.Series(0,index=indexprc)
    downPrc[clprcChange<0]=-clprcChange[clprcChange<0]
    rsidata=pd.concat([price,clprcChange,upPrc,downPrc])
    rsidata.columns=['price','PrcChange','upPrc','downPrc']
    rsidata=rsidata.dropna()

    SMUP=[]
    SMDOWN=[]
    for i in range(period,len(upPrc)+1):
        SMUP.append(np.mean(upPrc.values[(i-period):i],dtype=np.float32))
        SMDOWN.append(np.mean(downPrc.values[(i-period):i],dtype=np.float32))
        rsi=[100*SMUP[i]/(SMUP[i]+SMDOWN[i]) for i in range(0,len(SMUP))]

    indexRsi=indexprc[(period-1):]
    rsi=pd.Series(rsi,index=indexRsi)
    return(rsi)

rsi12=rsi(szfz_close,12)

#画子图
ax=plt.subplot(411)
ax2=plt.subplot(412)
ax3=plt.subplot(413)
ax4=plt.subplot(414)
#画K形图
plt.sca(ax)
mpf.candlestick_ochl(ax,mat_wdyx, width=0.6, colorup='g', colordown='r', alpha=1.0)
#画交易量图
plt.sca(ax2)
plt.bar(mat_wdyx[:,0]-0.25, mat_wdyx[:,5], width= 0.5)
#选择图3
plt.sca(ax3)
plt.plot(mat_wdyx[5:,0]-0.25,mat_moment5)
#画rsi图
plt.sca(ax4)
plt.plot(rsi12)
#画图
#中文字体
font=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=14)
#中文x轴标签
ax.set_xlabel(u"时间",fontproperties=font)
#中文y轴标签
ax.set_ylabel(u"股价(元)",fontproperties=font)
#中文标题
ax.set_title(u"股票代码000001",fontproperties=font)
ax.grid(True)

ax2.set_ylabel(u"交易量",fontproperties=font)
ax3.set_ylabel(u"5日动量",fontproperties=font)
ax4.set_ylabel(u"rsi强度",fontproperties=font)
#将横坐标转化为日期
ax.xaxis_date ()
ax2.xaxis_date ()
ax3.xaxis_date ()

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值