金融量化分析【day112】:股票数据分析Tushare2
目录
1、使用tushare包获取某股票的历史行情数据
2、使用pandas包计算该股票历史数据的5日局限和60日均线
3、matplotlib包可视化历史数据的收盘价和历史均线
4、分析输出所有金叉日志和死叉日期
5、如果我从2010年1月1日开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益如何?
一、使用tushare包获取某股票的历史行情数据
1、代码
import pandas as pd
import numpy as np
import tushare as ts
%matplotlib auto df = ts.get_k_data("600519", start="1988-01-01")
df.to_csv("600519.csv") df = pd.read_csv("600519.csv",index_col='date',parse_dates=['date'])[['open','close','high','low']]
df
2、输出截图
..........
二、使用pandas包计算该股票历史数据的5日均线和60日均线
1、方法一
1、5日均线代码
df['ma5']=df['open'].rolling(5).mean()
df
2、5日均线截图
..............................
3、30日均线代码
df['ma30']=df['open'].rolling(30).mean()
df
4、30日均线截图
..................................第30日如下.....................................................
..................................
2、方法二
1、5日均线代码
pd.DataFrame({'c1':df['close'].cumsum(),'c2':df['close'].cumsum().shift(5)})
2、5日均线截图
.........................
1、30日均线代码
pd.DataFrame({'c1':df['close'].cumsum(),'c2':df['close'].cumsum().shift(30)})
2、30日均线截图
..................................................
3、使用知识点
方法一
方法二
三、matplotlib包可视化历史数据的收盘价和历史均线
1、代码(2010-2019)
import matplotlib.pyplot as plt
df[['close','ma5','ma30']].plot()
plt.show()
2、输出截图(数据比较多所以不是很清晰)
3、代码(2012年)
df.loc["2012",['close','ma5','ma30']].plot()
plt.show()
4、输出(线条区分比较明显)
四、分析输出所有金叉日志和死叉日期
1、金叉日期
方法一
1、代码
golden_cross = []
death_cross = []
for i in range(1,len(df)):
if df['ma5'][i] >= df['ma30'][i] and df['ma5'][i-1] < df['ma30'][i-1]:
golden_cross.append(df.index[i].to_pydatetime())
if df['ma5'][i] <= df['ma30'][i] and df['ma5'][i-1] > df['ma30'][i-1]:
death_cross.append(df.index[i].to_pydatetime())
golden_cross
2、输出日志
[datetime.datetime(2001, 11, 21, 0, 0),
datetime.datetime(2002, 1, 25, 0, 0),
datetime.datetime(2002, 2, 5, 0, 0),
datetime.datetime(2002, 6, 24, 0, 0),
datetime.datetime(2002, 12, 6, 0, 0),
datetime.datetime(2003, 1, 17, 0, 0),
datetime.datetime(2003, 4, 16, 0, 0),
datetime.datetime(2003, 6, 2, 0, 0),
datetime.datetime(2003, 6, 25, 0, 0),
datetime.datetime(2003, 7, 14, 0, 0),
datetime.datetime(2003, 10, 15, 0, 0),
datetime.datetime(2004, 3, 3, 0, 0),
datetime.datetime(2004, 7, 6, 0, 0),
datetime.datetime(2004, 9, 14, 0, 0),
datetime.datetime(2005, 1, 5, 0, 0),
datetime.datetime(2005, 4, 26, 0, 0),
datetime.datetime(2005, 6, 15, 0, 0),
datetime.datetime(2005, 6, 17, 0, 0),
datetime.datetime(2005, 12, 29, 0, 0),
datetime.datetime(2006, 7, 31, 0, 0),
datetime.datetime(2006, 8, 30, 0, 0),
datetime.datetime(2007, 2, 26, 0, 0),
datetime.datetime(2007, 4, 16, 0, 0),
datetime.datetime(2007, 4, 27, 0, 0),
datetime.datetime(2007, 5, 9, 0, 0),
datetime.datetime(2007, 5, 24, 0, 0),
datetime.datetime(2007, 7, 25, 0, 0),
datetime.datetime(2007, 9, 19, 0, 0),
datetime.datetime(2007, 10, 10, 0, 0),
datetime.datetime(2007, 11, 19, 0, 0),
datetime.datetime(2007, 12, 11, 0, 0),
datetime.datetime(2008, 3, 6, 0, 0),
datetime.datetime(2008, 5, 8, 0, 0),
datetime.datetime(2008, 5, 15, 0, 0),
datetime.datetime(2008, 7, 17, 0, 0),
datetime.datetime(2008, 11, 20, 0, 0),
datetime.datetime(2009, 2, 10, 0, 0),
datetime.datetime(2009, 4, 9, 0, 0),
datetime.datetime(2009, 6, 5, 0, 0),
datetime.datetime(2009, 8, 27, 0, 0),
datetime.datetime(2009, 9, 9, 0, 0),
datetime.datetime(2009, 11, 13, 0, 0),
datetime.datetime(2010, 1, 21, 0, 0),
datetime.datetime(2010, 2, 4, 0, 0),
datetime.datetime(2010, 2, 8, 0, 0),
datetime.datetime(2010, 6, 7, 0, 0),
datetime.datetime(2010, 7, 20, 0, 0),
datetime.datetime(2010, 10, 26, 0, 0),
datetime.datetime(2010, 11, 11, 0, 0),
datetime.datetime(2011, 2, 14, 0, 0),
datetime.datetime(2011, 3, 15, 0, 0),
datetime.datetime(2011, 4, 28, 0, 0),
datetime.datetime(2011, 10, 26, 0, 0),
datetime.datetime(2012, 2, 13, 0, 0),
datetime.datetime(2012, 4, 9, 0, 0),
datetime.datetime(2012, 7, 26, 0, 0),
datetime.datetime(2012, 8, 10, 0, 0),
datetime.datetime(2012, 9, 13, 0, 0),
datetime.datetime(2012, 9, 28, 0, 0),
datetime.datetime(2012, 12, 24, 0, 0),
datetime.datetime(2013, 1, 9, 0, 0),
datetime.datetime(2013, 3, 12, 0, 0),
datetime.datetime(2013, 4, 18, 0, 0),
datetime.datetime(2013, 7, 4, 0, 0),
datetime.datetime(2013, 10, 22, 0, 0),
datetime.datetime(2013, 11, 12, 0, 0),
datetime.datetime(2013, 11, 29, 0, 0),
datetime.datetime(2014, 1, 24, 0, 0),
datetime.datetime(2014, 4, 3, 0, 0),
datetime.datetime(2014, 6, 24, 0, 0),
datetime.datetime(2014, 9, 5, 0, 0),
datetime.datetime(2014, 9, 30, 0, 0),
datetime.datetime(2014, 11, 18, 0, 0),
datetime.datetime(2014, 12, 1, 0, 0),
datetime.datetime(2015, 2, 16, 0, 0),
datetime.datetime(2015, 6, 12, 0, 0),
datetime.datetime(2015, 7, 16, 0, 0),
datetime.datetime(2015, 9, 18, 0, 0),
datetime.datetime(2015, 10, 8, 0, 0),
datetime.datetime(2015, 12, 7, 0, 0),
datetime.datetime(2015, 12, 21, 0, 0),
datetime.datetime(2016, 2, 22, 0, 0),
datetime.datetime(2016, 8, 11, 0, 0),
datetime.datetime(2016, 10, 14, 0, 0),
datetime.datetime(2016, 11, 28, 0, 0),
datetime.datetime(2017, 7, 25, 0, 0),
datetime.datetime(2017, 9, 19, 0, 0),
datetime.datetime(2017, 12, 15, 0, 0),
datetime.datetime(2018, 3, 19, 0, 0),
datetime.datetime(2018, 5, 10, 0, 0),
datetime.datetime(2018, 7, 19, 0, 0),
datetime.datetime(2018, 7, 26, 0, 0),
datetime.datetime(2018, 9, 21, 0, 0)]
全部输出
方法二
1、代码
sr1 = df['ma5'] < df['ma30']
sr2 = df['ma5'] > df['ma30']
death_cross = df[sr1 & sr2.shift(1)].index
golden_cross = df[~(sr1 & sr2.shift(1))].index
death_cross
2、输出截图
2、死叉日期
方法一
1、实现代码
golden_cross = []
death_cross = []
for i in range(1,len(df)):
if df['ma5'][i] >= df['ma30'][i] and df['ma5'][i-1] < df['ma30'][i-1]:
golden_cross.append(df.index[i].to_pydatetime())
if df['ma5'][i] <= df['ma30'][i] and df['ma5'][i-1] > df['ma30'][i-1]:
death_cross.append(df.index[i].to_pydatetime())
death_cross
2、输出日期
[datetime.datetime(2001, 10, 15, 0, 0),
datetime.datetime(2002, 1, 17, 0, 0),
datetime.datetime(2002, 1, 31, 0, 0),
datetime.datetime(2002, 4, 1, 0, 0),
datetime.datetime(2002, 7, 30, 0, 0),
datetime.datetime(2002, 12, 30, 0, 0),
datetime.datetime(2003, 3, 18, 0, 0),
datetime.datetime(2003, 4, 23, 0, 0),
datetime.datetime(2003, 6, 23, 0, 0),
datetime.datetime(2003, 7, 1, 0, 0),
datetime.datetime(2003, 8, 5, 0, 0),
datetime.datetime(2004, 3, 1, 0, 0),
datetime.datetime(2004, 5, 12, 0, 0),
datetime.datetime(2004, 8, 23, 0, 0),
datetime.datetime(2004, 11, 24, 0, 0),
datetime.datetime(2005, 4, 21, 0, 0),
datetime.datetime(2005, 5, 17, 0, 0),
datetime.datetime(2005, 6, 16, 0, 0),
datetime.datetime(2005, 9, 27, 0, 0),
datetime.datetime(2006, 7, 11, 0, 0),
datetime.datetime(2006, 8, 1, 0, 0),
datetime.datetime(2007, 2, 9, 0, 0),
datetime.datetime(2007, 2, 27, 0, 0),
datetime.datetime(2007, 4, 24, 0, 0),
datetime.datetime(2007, 4, 30, 0, 0),
datetime.datetime(2007, 5, 14, 0, 0),
datetime.datetime(2007, 7, 12, 0, 0),
datetime.datetime(2007, 9, 13, 0, 0),
datetime.datetime(2007, 9, 20, 0, 0),
datetime.datetime(2007, 11, 14, 0, 0),
datetime.datetime(2007, 11, 23, 0, 0),
datetime.datetime(2008, 1, 31, 0, 0),
datetime.datetime(2008, 3, 17, 0, 0),
datetime.datetime(2008, 5, 13, 0, 0),
datetime.datetime(2008, 5, 23, 0, 0),
datetime.datetime(2008, 8, 13, 0, 0),
datetime.datetime(2008, 12, 31, 0, 0),
datetime.datetime(2009, 3, 13, 0, 0),
datetime.datetime(2009, 4, 30, 0, 0),
datetime.datetime(2009, 8, 20, 0, 0),
datetime.datetime(2009, 9, 3, 0, 0),
datetime.datetime(2009, 10, 21, 0, 0),
datetime.datetime(2009, 12, 21, 0, 0),
datetime.datetime(2010, 1, 22, 0, 0),
datetime.datetime(2010, 2, 5, 0, 0),
datetime.datetime(2010, 3, 1, 0, 0),
datetime.datetime(2010, 6, 24, 0, 0),
datetime.datetime(2010, 10, 18, 0, 0),
datetime.datetime(2010, 11, 2, 0, 0),
datetime.datetime(2010, 12, 27, 0, 0),
datetime.datetime(2011, 3, 3, 0, 0),
datetime.datetime(2011, 3, 31, 0, 0),
datetime.datetime(2011, 9, 9, 0, 0),
datetime.datetime(2011, 12, 12, 0, 0),
datetime.datetime(2012, 4, 6, 0, 0),
datetime.datetime(2012, 7, 25, 0, 0),
datetime.datetime(2012, 8, 3, 0, 0),
datetime.datetime(2012, 8, 14, 0, 0),
datetime.datetime(2012, 9, 24, 0, 0),
datetime.datetime(2012, 11, 8, 0, 0),
datetime.datetime(2012, 12, 26, 0, 0),
datetime.datetime(2013, 1, 18, 0, 0),
datetime.datetime(2013, 3, 19, 0, 0),
datetime.datetime(2013, 6, 21, 0, 0),
datetime.datetime(2013, 7, 16, 0, 0),
datetime.datetime(2013, 10, 28, 0, 0),
datetime.datetime(2013, 11, 27, 0, 0),
datetime.datetime(2013, 12, 4, 0, 0),
datetime.datetime(2014, 4, 1, 0, 0),
datetime.datetime(2014, 4, 30, 0, 0),
datetime.datetime(2014, 8, 25, 0, 0),
datetime.datetime(2014, 9, 17, 0, 0),
datetime.datetime(2014, 10, 13, 0, 0),
datetime.datetime(2014, 11, 24, 0, 0),
datetime.datetime(2015, 1, 20, 0, 0),
datetime.datetime(2015, 6, 11, 0, 0),
datetime.datetime(2015, 6, 18, 0, 0),
datetime.datetime(2015, 7, 20, 0, 0),
datetime.datetime(2015, 9, 30, 0, 0),
datetime.datetime(2015, 11, 27, 0, 0),
datetime.datetime(2015, 12, 11, 0, 0),
datetime.datetime(2016, 1, 6, 0, 0),
datetime.datetime(2016, 8, 9, 0, 0),
datetime.datetime(2016, 8, 19, 0, 0),
datetime.datetime(2016, 11, 21, 0, 0),
datetime.datetime(2017, 7, 7, 0, 0),
datetime.datetime(2017, 9, 11, 0, 0),
datetime.datetime(2017, 11, 30, 0, 0),
datetime.datetime(2018, 2, 5, 0, 0),
datetime.datetime(2018, 3, 28, 0, 0),
datetime.datetime(2018, 6, 29, 0, 0),
datetime.datetime(2018, 7, 24, 0, 0),
datetime.datetime(2018, 8, 2, 0, 0),
datetime.datetime(2018, 10, 15, 0, 0)]
全部日期
方法二
1、代码
sr1 = df['ma5'] < df['ma30']
sr2 = df['ma5'] > df['ma30']
death_cross = df[sr1 & sr2.shift(1)].index
golden_cross = df[~(sr1 & sr2.shift(1))].index
golden_cross
2、输出截图
五、如果我从2010年1月1日开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益如何?
1、实现代码
first_money = 100000
money = first_money
hold = 0 #持有多少股
sr1 = pd.Series(1, index=golden_cross)
sr2 = pd.Series(1, index=death_cross)
sr = sr1.append(sr2).sort_index() for i in range(0, len(sr)):
p = df['open'][sr.index[i]]
if sr.iloc[i] == 1:
#金叉
buy = (money // (100 * p))
hold += buy*100
money -= buy*100*p
else:
money += hold * p
hold = 0 p = df['open'][-1]
now_money = hold * p + money print(now_money - first_money)
2、运行结果
10058413.0
3、使用知识点
金融量化分析【day112】:股票数据分析Tushare2的更多相关文章
- day31 堡垒机尾声 + Python与金融量化分析(一)
堡垒机尾声: 代码案例:https://github.com/liyongsan/git_class/tree/master/day31 课堂笔记:file send: 1.选择本地文件 2.远程路径 ...
- 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据
财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...
- 金融量化分析【day110】:金融基础知识
一.股票 股票: 股票是股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东. 股票的面值与市值 面值表示票面金额 市值表示市场价值 上市/IPO: 企业通过证券交易所公开向社会增发股票以募集 ...
- day32 Python与金融量化分析(二)
第一部分:金融与量化投资 股票: 股票是股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东. 股票的面值与市值 面值表示票面金额 市值表示市场价值 上市/IPO: 企业通过证券交易所公开向社 ...
- Python与金融量化分析----金融与量化投资
一:金融了解 金融:就是对现有资源进行重新的整合之后,进行价值和利润的等效流通. 金融工具: 股票 期货 黄金 外汇 基金 ............. 股票: 股票是股份公司发给出资人多的一种凭证,股 ...
- 金融量化分析【day112】:股票数据分析Tushare1
目录 1.使用tushare包获取某股票的历史行情数据 2.输出该股票所有收盘比开盘上涨3%以上的日期 3.输出该股票所有开盘比前日收盘跌幅超过2%的日期 4.假如我从2010年1月1日开始,每月第一 ...
- 金融量化分析【day112】:初识量化交易
一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...
- 金融量化分析【day112】:量化交易策略基本框架
摘要 策略编写的基本框架及其实现 回测的含义及其实现 初步学习解决代码错误 周期循环的开始时间 自测与自学 通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易.毕竟就像学游泳,有些东西讲是 ...
- 金融量化分析【day112】:量化平台的使用-初始化函数
一.set_benchmark - 设置基准 1.实现代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_bench ...
随机推荐
- Asp.Net登陆记住用户功能实现
1.效果和原理 原理是利用Asp.net的Cookies.选中CheckBox,把输入的用户名和密码用Cookies存储起来,设置过期时间7天,超过时间自动清除Cookie信息. 2.前台代码 < ...
- python3字符串格式化format()函数的简单用法
format()函数 """ 测试 format()函数 """ def testFormat(): # format()函数中有几个元素, ...
- docker-compose编排项目redis容器实现主从复制
一.pip管理工具安装 docker-compose是python项目,所以安装需要通过python下的包管理工具pip安装.一般linux服务器都会预安装有python环境,所以优先检查python ...
- SQLServr添加数据列
数据列定义 表中数据行的数据插入和数据类型都是基于数据列的,学会添加数据列在开发过程中是必不可少的. 使用SSMS数据库管理工具添加数据列 在数据表中添加一列或者多列步骤相同 1.连接数据库,选择数据 ...
- 2星|《IT真相》:日本咨询师面对美国云服务的发展,对日本IT业哀其不争
IT真相-打通IT与商务的通路 I 作者是日本管理咨询师,对日本的IT和金融业了解比较多.书的内容是:作者看到美国的云服务发展壮大,日本IT业没能抓住机会,对日本IT业做了一些批评,比如不思进取,不了 ...
- Docker:测试环境的准备-centos7上安装docker
Dockers官方部署文档:https://docs.docker.com/install/linux/docker-ce/centos/ 1.建议先关闭 selinux (selinux是 linu ...
- Vector与ArrayList区别
1)Vector的方法都是同步的(Synchronized),是线程安全的: ArrayList的方法是线程不安全的. 由于线程同步必然会影响性能,因此,ArrayList的性能比Vector好. 请 ...
- Python脱产8期 Day13 2019/4/28
一 函数的嵌套定义 1在一个函数的内部定义另一个函数. 2.为什么有函数的嵌套定义: # 1)函数fn2想直接使用fn1函数的局部变量,可以讲fn2直接定义到fn1的内部,这样fn2就可以直接访问fn ...
- Docker镜像拉不下来?试试这些
DaoCloud 加速器1.0(永久免费) DaoCloud是国内第一家Dock Hub加速器提供商 注意,加速器 2.0 需要使用 DaoCloud 自己的云服务器才可以使用.官方宣称会继续支持加速 ...
- Python dict和set的实现原理
在python的dict中间进行查找某个key操作时,查找所需时间不会随着dict中键值对数量增多而变长,(时间复杂度为O(1))但是list中就会(时间复杂度为O(N)),这是因为list查询实现的 ...