一、数据源:Tushare财经数据接口包

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过Tushare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。

二、RSI基本概念

在股票市场上,买方和卖方力量的消长会影响股票的架构,如果股票的买入力量大于卖出力量,则股票的价格会上涨,反之则会下跌。

如何运用一种巧妙的方法来判断股票的买入力量和卖出力量的强弱?

韦尔斯●维尔德在1978年6月的Future杂志月刊上发表了一种衡量证券自身内在相对强度的指标,这个指标叫Relative Strength Index,简称RSI,中文名字相对强弱指标。

RSI计算公式和方法

其中:

UP ― 价格变化正数值的平均值;

DDOWN ― 价格变化负数值的平均值。

举例:

A

B

C

D

E

F

G

H

I

J

Date

Close

Up

Down

Up Avg.

Down Avg.

Cell E/F

1.0+"G"

100/"H"

(100-Cell I) = RSI

11/1

$22.44

11/2

$22.61

0.17

11/3

$22.67

0.06

11/4

$22.88

0.21

11/5

$23.36

0.48

11/8

$23.23

-0.13

11/9

$23.08

-0.15

11/10

$22.86

-0.22

11/11

$23.17

0.21

11/12

$23.69

0.52

11/15

$23.77

0.08

11/16

$23.84

0.08

11/17

$24.32

0.48

11/18

$24.80

0.48

14 Day Totals

2.77

0.5

0.198

0.036

5.50

6.50

15.38

84.62

同样,按此方法可计算其他任何日数的RSI。至于用多少日的RSI才合适。最初RSI指标提出来时是用14天,14天作为参数则成为默定值。但在实际操作中,分析者常觉得14天太长了一点,才有5天和9天之方法。

RSI指标的超买超卖状态

●当RSI取值为50时,UP和DOWN的取值相同,股票的买入力量等于股票的卖出力量;

●RSI取值越大,说明UP的取值超过DOWN取值的程度越大,股票的买入热度大于卖出热度的程度越大;

●RSI取值越小,可以推出说明DOWN的取值超过UP取值的程度越大,股票的卖出热度大于买入热度的程度越大。

RSI取值等于80或20分别为较常用的“超买线”和“超卖线”的刻画。RSI为80是 股票超买的临界点,RSI为20是股票超卖的临界点,RSI 取值为50设定为“中心线”,该线表明股票的买入力量等于卖出力量。

当RSI大于80时,股票出现超买信号。股票买入力量过大,买入力量在未来可能会减小,所以股票未来价格可能会下跌,此时卖出股票,未来下跌后再买入股票,从而赚取价差。

当RSI小于20时,股票出现超卖信号。股票卖出力量过大,卖出力量在未来终归回到正常,因此股票未来价格可能会上涨,投资者此时可以做多股票,未来价格上涨后卖出。

RSI指标的黄金交叉和死亡交叉

在股票市场使用RSI指标时,一般会定义不同时间跨度的RSI值。当短期RSI线向上穿过长期RSI线时,股票近期买入的力量较强,价格上涨的力量很大,其释放出一个较强的买入信号,这个信号被称为“黄金交叉”。当短期RSI线向下跌破长期RSI线时,股票近期卖出的力量较强,价格下跌的力量很大,其释放出一个较强的卖出信号,被称为“死亡交叉”。

import tushare as ts

import time

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

pro = ts.pro_api()

#查询当前所有正常上市交易的股票列表

data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')

BOCM = pro.daily(ts_code='600519.SH', start_date='20190101', end_date='20200628')

BOCM.index = BOCM.trade_date

BOCM.index = pd.to_datetime(BOCM.trade_date,format = "%Y-%m-%d")

BOCM.sort_index(inplace=True)

BOCMclp = BOCM.close

BOCMclpS = BOCMclp.shift(1)

clprcChange = BOCMclp - BOCMclpS

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([BOCMclp,clprcChange,upPrc,downPrc],axis=1)

rsidata.columns = [["Close" , "PrcChange" , "upPrc" , "downPrc" ]]

rsidata = rsidata.dropna()

SMUP= []

SMDOWN= []

for i in range(6,len(upPrc)+1):

SMUP.append(np.mean( upPrc.values[(i-6):i], dtype=np.float32))

SMDOWN.append(np.mean( downPrc.values[(i-6):i], dtype=np.float32))

rsi6= [100*SMUP[i]/(SMUP[i]+SMDOWN[i]) for i in range(0,len(SMUP))]

indexRsi= indexprc[5: ]

Rsi6=pd.Series(rsi6, index= indexRsi)

fig = plt.figure(figsize = (16,8))

UP = pd.Series(SMUP,index = indexRsi)

DOWN = pd.Series(SMDOWN,index = indexRsi)

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.subplot(411)

plt.plot(BOCMclp,'k')

plt.xlabel('date')

plt.ylabel('Close')

plt.title('RSI相关指标')

plt.subplot(412)

plt.plot(UP,'b')

plt.xlabel('UP')

plt.subplot(413)

plt.plot(DOWN,'y')

plt.xlabel('DOWN')

plt.subplot(414)

plt.plot(Rsi6,'g')

plt.xlabel('Rsi6')

fig = plt.figure(figsize=(16, 8))

plt.plot(Rsi6)

plt.title(' RSI6指标超买和超卖')

plt.ylim(-10,110)

plt.axhline(y=80, color= 'red')

plt.axhline(y=20, color='red')

plt. show()

def rsi(price,period=6):

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],axis = 1)

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

Rsi24 = rsi(BOCMclp,period=24)

Rsi24.tail()

#黄金交叉与死亡交叉

fig = plt.figure(figsize=(16, 8))

plt.plot(Rsi6[ '2019-01-03' :],label="Rsi6")

plt.plot(Rsi24[ '2019-01-03':],label="Rsi24",color='red', linestyle= "dashed")

plt.title("RSI的黄金交叉与死亡交叉")

plt.ylim(-10,110)

plt.legend()

python写股票指标_用Python做股票指标RSI分析相关推荐

  1. python写魔兽世界脚本_用python bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本...

    2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh" !incl ...

  2. python写机器人程序_用Python写的一个多线程机器人聊天程序

    本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...

  3. python写一个类方法_重写python脚本,在脚本的每个类中注入一个方法 - python

    假设我有一个python模块foo.py,其中包含: class Foo(object): def __init__(self): pass 接下来,我想解析此脚本,并在每个类中注入一个方法,然后将其 ...

  4. python写新年快乐程序_新年快乐! python实现绚烂的烟花绽放效果

    新年快乐! python实现绚烂的烟花绽放效果 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  新年快乐! python实现绚烂的烟花绽放效果.txt ] (友情 ...

  5. python写爬虫教程_用Python写爬虫程序基础教程(一)

    最近身边朋友都在讨论股市是不是牛市要来了吧? 如果想自己做一个股市收盘价前三十名的涨跌幅度,又不用每天去点击网页浏览,用Python写个爬虫程序来做是不是超棒der 环境建置 安装Python 安装P ...

  6. 用python写shell脚本_应用python编写shell脚本

    今天同事叫我编写一个shell脚本.话说,虽然我受*nix的影响甚深,但是对于*nix里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没 ...

  7. python写mysql脚本_使用python写一个监控mysql的脚本,在zabbix web上加上模板

    使用python写一个监控mysql的脚本,在zabbix web上加上模板: ##先使用MySQLdb的接口关联数据库. [root@cml python]# cat check_Mysql_cus ...

  8. 用python写聊天机器人_用Python 写一个机器人陪你聊天(文尾有彩蛋)

    工作一忙,原来秉烛夜谈的好友现在都很少聊天,微信都成了微信群的天下,鲜有微信好友给你发消息,想要主动发却也找不到开题话题,怎么办?用Python写一个机器人陪自己聊聊天吧.以下是源码及解析,小白都看得 ...

  9. python 写一个计算器_用 Python 写个计算器

    首页 专栏 python 文章详情 0 用 Python 写个计算器 Python小二 发布于 56 分钟前 我们常见的计算辅助工具有两种,一种是古人发明的算盘,另一种就是我们现代人发明的计算器,与算 ...

  10. python写采集程序_用python写的一个wordpress的采集程序

    在学习python的过程中,经过不断的尝试及努力,终于完成了第一个像样的python程序,虽然还有很多需要优化的地方,但是目前基本上实现了我所要求的功能,先贴一下程序代码: 具体代码如下: #! /u ...

最新文章

  1. 8g ubuntu 树莓派4b_3D 打印制造树莓派 4B 平板电脑
  2. python趣味编程表白_【暖心一笑】Python趣味编程:定时给Ta讲笑话
  3. 远哥Amoeba源码分析之:核心类说明
  4. 快速查找无序数组中的第K大数?
  5. C++primer 13.1.6节练习
  6. Java求字符串中出现次数最多的字符
  7. PHP面向对象常见的关键字和魔术方法
  8. python大写字母怎么表示_python – 如何在字符串中搜索大写字母并返回带有和不带大写字母的单词列表...
  9. linux mysql 5.0.45_linux 下安装mysql-5.0.45.tar.gz
  10. aspx获取aspx.cs中的变量和方法
  11. 名字打架 源码 php,无聊发天蝎与各星座名字打架结果
  12. epub文件一揽子解决方案
  13. Any CPU X86 X64区别
  14. 行为型模式:备忘录模式
  15. 实现读取北京时间的C语言程序,C语言北京时间转为格林威治时间
  16. Android进程间通讯AIDL使用及问题详解(雷惊风)
  17. guid主分区表损坏如何处理_什么是GPT或GUID分区表
  18. Vero praesentium odio suscipit dolor.Eos accusamus rem tempore.
  19. 基于SSM快递取件管理系统
  20. android 输入法确定键,android 改变输入法enter键文字 为搜索 下一个 以及前往

热门文章

  1. 微信开通过滤 快速微信开通过滤软件
  2. uc浏览器安卓版 打不开php吗,javascript只允许安卓uc浏览器访问
  3. 深入MTK平台bootloader启动之【 lk -> kernel】分析笔记
  4. PS制作咖啡闹钟、故障文字
  5. 合泰单片机做电压表_合泰单片机基础教程
  6. 智慧物业综合管理系统(java+vue+Uni-app),源码免费分享
  7. idea修改批量替换快捷键_idea当配置eclipse快捷键时,全局替换的快捷键是什么?...
  8. 留学生在海外——Nina的幸福澳洲生活
  9. 已知四种原子的质量,C/H/O/N分别为12/1/16/14,输入分子式,计算分子量。例如H2O,分子量为1*2+16=18,有如HC11N2,分子量为1+12*11+14*2=161
  10. 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进