目录

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的更多相关文章

  1. day31 堡垒机尾声 + Python与金融量化分析(一)

    堡垒机尾声: 代码案例:https://github.com/liyongsan/git_class/tree/master/day31 课堂笔记:file send: 1.选择本地文件 2.远程路径 ...

  2. 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据

    财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...

  3. 金融量化分析【day110】:金融基础知识

    一.股票 股票: 股票是股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东. 股票的面值与市值 面值表示票面金额 市值表示市场价值 上市/IPO: 企业通过证券交易所公开向社会增发股票以募集 ...

  4. day32 Python与金融量化分析(二)

    第一部分:金融与量化投资 股票: 股票是股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东. 股票的面值与市值 面值表示票面金额 市值表示市场价值 上市/IPO: 企业通过证券交易所公开向社 ...

  5. Python与金融量化分析----金融与量化投资

    一:金融了解 金融:就是对现有资源进行重新的整合之后,进行价值和利润的等效流通. 金融工具: 股票 期货 黄金 外汇 基金 ............. 股票: 股票是股份公司发给出资人多的一种凭证,股 ...

  6. 金融量化分析【day112】:股票数据分析Tushare1

    目录 1.使用tushare包获取某股票的历史行情数据 2.输出该股票所有收盘比开盘上涨3%以上的日期 3.输出该股票所有开盘比前日收盘跌幅超过2%的日期 4.假如我从2010年1月1日开始,每月第一 ...

  7. 金融量化分析【day112】:初识量化交易

    一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...

  8. 金融量化分析【day112】:量化交易策略基本框架

    摘要 策略编写的基本框架及其实现 回测的含义及其实现 初步学习解决代码错误 周期循环的开始时间 自测与自学 通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易.毕竟就像学游泳,有些东西讲是 ...

  9. 金融量化分析【day112】:量化平台的使用-初始化函数

    一.set_benchmark - 设置基准 1.实现代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_bench ...

随机推荐

  1. 拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息

    首先前往拉勾网“爬虫”职位相关页面 确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是PO ...

  2. 我的第一个python web开发框架(24)——系统重构与ORM

    小白弄完代码版本管理和接口文档后,兴奋的找到老菜. 小白:老大,我已经按你讲的要求,将代码版本管理和接口文档都搞好了.从项目开始到现在,除了代码编写,感觉学会好多东西啊. 老菜:嗯嗯,实战确实需要掌握 ...

  3. Django REST framework基础:解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...

  4. 【Linux基础】Unix与Linux操作系统介绍

    一.Unix和Linux操作系统概述 1.Unix是什么 UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. 2.Unix特点 (1)多用户:在同一时刻可以有多个用 ...

  5. (十二)Deleting Documents

    Deleting a document is fairly straightforward. This example shows how to delete our previous custome ...

  6. (五)Cluster Health

    Let’s start with a basic health check, which we can use to see how our cluster is doing. We’ll be us ...

  7. (一) Getting Started

    Elasticsearch is a highly scalable open-source full-text search and analytics engine. It allows you ...

  8. maven eclipse web 项目 问题 cannot change version of project facet dynamic web module to 3.0

    cannot change version of project facet dynamic web module to 3.0 修改 web.xml 头部 xsi:schemaLocation=&q ...

  9. 轻松测试 logstash 的配置文件

    配置文件本身非常脆弱!所以修改配置文件自然会引入部署失败的风险.如果能够对配置文件进行自动化测试将会极大的降低这种风险.本文将介绍一个可以自动化测试 logstash 配置文件的工具,让大家可以像写单 ...

  10. mariadb集群配置(主从和多主)

    mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...