量化交易——传统技术分析相对强弱指数RSI的原理及实现
量化交易
本质上是一种基于统计与概率的计算机运算策略。通过对历史大量的数据进行不同组合的量化策略运算,寻找投资方向和确定买卖时机。随着大环境的改变,策略必然需要变动调整,但我们不变的目标便是执着地寻找出适合当下获利概率最大所对应的投资策略。
技术分析
相对强弱指数(Relative Strength Index,RSI)
1. 原理
RSI从本质上来讲,是根据一段时间内的价格涨跌情况来反映市场的多空程度。其通过计算,得出一个0-100之间的数值代表当天的RSI,一般来说超过50为多头行情,而小于50可认为是空头行情。实际运用中,投资者更多的会根据RSI是否捅破某个其所认为的阈值或者其曲率变化来判断是否出现了超卖超买市场,从而实施自己的投资行为。
2. 数据预处理:
这里我们需要处理股票的历史数据,所以可以先下载到本地,方法可以参考前面所写的博文获取全球各大证券交易所的全部股票交易信息。为了更方便地使用数据,我们可以先设置几个函数,如下:
import numpy as np
import math
import random
import json
#从本地读取历史数据,下面读取的是已经下载到本地的CSV文件。
def get_stock_hist(num):s_his=np.genfromtxt('C:/Users/Haipeng/Desktop/python/Korea/Korea_{:03d}.csv'.format(num), delimiter=',')s_hi=s_his[1:][:]days=s_hi.shape[0]this_stock = []for i in range(1,days,1):this_day = [i]for k in range(1,7):this_day.append(s_hi[i][k])this_stock.append(this_day)print 'Maximum date is ',len(this_stock)return this_stock
#均值
def get_ma(D, N):p_used=np.zeros(N);for i in range(1,N+1,1):p_used[i-1]=stock_hist[(D-1)-(i-1)][4]ma=np.mean(p_used)return ma
#获取第D天的某个数据
def get_price(D, p_tpe):if p_tpe=='close':pos=4;elif p_tpe=='open':pos=1;elif p_tpe=='high':pos=2;elif p_tpe=='low':pos=3;else:pos=5price=stock_hist[D-1][pos];return price
3. 计算方法(维基解释):
方法1:
根据对应方法,可以实现代码如下:
#跨度设置为N天时,得到第D天的RSI。这里使用了指数移动平均法计算。
def get_RSI_E(D,N):up_value = 0.0down_value = 0.0a = 2.0/(N+1)for i in range(1,N+1):value = get_price(i+1,'close')-get_price(i,'close')if value>=0:up_value += valueelse:down_value -=valueup_value = up_value/Ndown_value = down_value/Nfor i in range(D-N):value = get_price(i+N+1,'close')-get_price(i+N,'close')if value >= 0:up_value = a*value +(1-a)*up_valueif value <= 0:down_value = -a*value + (1-a)*down_valueRSI = 100*up_value/(up_value+down_value)return RSI
方法2:指数移动平均法计算比较复杂,同时计算效率比较低。所以现实情况下我们使用卡特勒相对强弱指数,具体如下:
实现代码也相对简单,运算时我们也以这种方法为主:
#跨度设置为N天时,得到第D天的RSI。这里使用了简单移动平均法计算。
def get_RSI(D,N):up_value = 0.0down_value = 0.0for i in range(N):value = get_price(D-i,'close')-get_price(D-i-1,'close')if value>=0: up_value += valueelse:down_value -=valueRSI = 100.0*up_value/(up_value+down_value)return RSI
4.绘制K线图及RSI曲线
可视化可以方便肉眼观察数据特征,而这里便可以在K线下加入RSI曲线来直观地比较其相关性。下面需要获取某段时间的开盘价、收盘价、最低价和最高价等来绘制K线,另外还需获取均线及RSI在对应时间段下的数据。所以先定义以下几个收割数据的函数:
#Date\Open\High\Low\Close
def get_tuples(fro,to):res =[]for d in range(fro,to+1):tmp = []tmp.append(d)tmp.append(get_price(d,'open'))tmp.append(get_price(d,'high'))tmp.append(get_price(d,'low'))tmp.append(get_price(d,'close')) res.append(tmp)return res
def get_mar(fro,to,N):ma = []for i in range(fro,to+1):ma.append(get_ma(i,N))return ma
def get_rsi(fro,to,N):res = []for d in range(fro,to+1):res.append(get_RSI(d,N))return res
这里使用matplotlib画图,这是为了下一步的分析计划更好展开,代码如下:
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc
#绘图函数
def plot_RSI(fro,to):rsi14 = get_rsi(fro,to,14)rsi7 = get_rsi(fro,to,7)ma5 = get_mar(fro,to,5)ma10 = get_mar(fro,to,10)ma20 = get_mar(fro,to,20)tuples = get_tuples(fro,to)date = [d for d in range(fro,to+1)] fig = plt.figure(figsize=(8,5))p1 = plt.subplot2grid((4,4),(0,0),rowspan=3,colspan=4,axisbg='k') p1.set_title("Relative Strength Index(RSI)")p1.set_ylabel("Price")p1.plot(date,ma5,'m')p1.plot(date,ma10,'b')p1.plot(date,ma20,'y')p1.legend(('MA5','MA10','MA20'))p1.grid(True,color='w')candlestick_ohlc(p1, tuples, width=0.7,colorup='r',colordown="g")p2 = plt.subplot2grid((4,4),(3,0),colspan=4,axisbg='g') p2.set_ylabel("RSI")p2.set_xlabel("Dates")p2.plot(date,rsi14, 'c-')p2.plot(date,rsi7, 'r-')p2.axhline(75,color='yellow')p2.axhline(25,color='yellow')p2.set_ylim(0,100)p2.set_yticks([25,50,75])p2.legend(('RSI14','RSI7'),loc='upper left')plt.subplots_adjust(hspace=0)plt.show()# show the plot on the screen
#这里我们随意挑选一只股票测试,例如第八支股票
stock_hist = get_stock_hist(8)
#选择绘制日期起始,例如第100天到第900天之间,调用函数
plot_RSI(100,900)
得出图形如下:
上图数据比较密集,我们可以把时间缩短点,例如需要查看450到600天的图像:
plot_RSI(450,600)
总结
博文包含了获取数据、分析相关原理及技术指标RSI的实现到图像的可视化。而股市上很多关于RSI技术指标的操作指南,在这里并没有详述。原因是其实对于不一样的市场,不同的股票,不同的投资者可能得出完全不一样的策略。我们需要关注的事是如何让计算机通过高速运算帮我们找出某种隐含的规则,而RSI可以作为其中的一个指标,来弥补人经验的缺陷。
量化交易——传统技术分析相对强弱指数RSI的原理及实现相关推荐
- 量化交易——传统技术分析能量潮指标OBV的原理及实现
能量潮指标OBV 股市分析中有四个要素,分别是价.量.时.空.其中OBV便是从成交量作为分析的突破口.它反映的是在股市起伏波动时相关的市场人气变化,可以用来判断股市是否处于有较强的想上冲的牛市中还是即 ...
- 量化交易——传统技术分析随机震荡指标STO的原理及实现
随机震荡指标STO(KD) 与MACD类似的是,STO同样地使用了两条曲线来表示,不同的是STO的曲线范围限制在0到100之间.在设计的过程当中,其不仅要研究其收市价,同时还要包括近期所出现过的最高价 ...
- 量化交易——传统技术分析布林通道BollingerBands的原理及实现
布林通道 布林通道线是根据统计学的标准差来计算的,其具体可由上中下三条曲线展示.其中上下两线分别代表上升压力线和下降支撑线,故而可以根据K线图是否突破布林曲线来判断较好的买卖节点.三条曲线计算方法如下 ...
- 【Python量化交易】分析个股相关性以及显示股票归一化的涨跌幅收益率(包含完整代码)
1.个股相关性分析 在构建投资组合时,组合里个股之间的相关性会直接影响到投资组合的波动率. 个股之间的相关性越低,投资组合越稳健. 因此分析个股的相关性是很有必要的. 首先拿到这些数据,可以分析今年以 ...
- [量化交易65] 下载美国三大指数道琼斯指数、纳斯达克指数、标普500指数
import tushare as ts import pymongo import json import time import random import sys # 初始化数据库 mongo_ ...
- [021量化交易] python 绘画K线 MACD RSI 成交量 指标
import talib import matplotlib.pyplot as plt from mplfinance.original_flavor import candlestick_ohlc ...
- 量化交易的相对强弱(RSI )指标计算及策略
顾名思义,相对强弱指数 (RSI) 指标告诉我们资产的相对强弱.换句话说,RSI 告诉我们股票相对于自身的表现(或不表现).RSI 被视为一种强大的技术指标,可用于分析市场,并且是交易者武器库的重要组 ...
- sar偏移量追踪技术_SAR指标配合阶段高低价的量化交易策略
SAR指标 抛物线SAR指标试图通过突出资产移动的方向以及提供进入和退出点来为交易者提供优势.在本文中,我们将介绍该指标的基础知识,并向您展示如何将其纳入您的量化交易策略.我们还将看一下该指标的一些缺 ...
- 现货黄金短线技巧_随机强弱指数(StochRSI)
想学习现货黄金短线技巧的投资者应该了解一下随机相对强弱指数,它简称StochRSI,是可以用于确定行情是否处于超买或超卖状态的技术指标,投资者可以把它用于确定当前黄金市场的态势. StochRSI最初 ...
最新文章
- echarts y轴添加点击事件_ECharts中的事件和行为
- oracle的用户自定义异常
- android 看AP 国家代码,Android WiFi 获取国家码
- office2013打不开文件
- c语言 构造类,C语言之构造类型
- 从excel表中生成批量SQL,将数据录入到数据库中
- Java lambda expression
- POJ2391 Ombrophobic Bovines
- 错误用的两个方法之间的区分
- 关于node中的板块问题
- C语言趣味小游戏——扫雷(详解版)
- gjb150a盐雾试验标准-产品检验标准国标
- JavaEE-面试-Solr面试回答思路
- Golang项目:客户信息管理系统(附源码) (Golang经典编程案例)
- python爬虫解决频繁访问_python爬虫程序如何预防被限制
- Centos7下载文件恢复工具 extundelete
- Spring @RequestMapping 注解原理
- L298N和TB6612FNG模块控制直流电机
- WWW15年:改变世界的15个网站
- CPython与Cython