Python+Tushare股票数据分析

Tushare是一个免费提供各类金融数据 , 助力智能投资与创新型投资的平台。在这个平台上可以免费获得股票、期货和外汇的各种数据。(Tushare ID:492265)

本次我就使用Tushare来获取股票数据,模拟股票交易。

一、Tushare的注册安装

1、Tushare注册链接:https://tushare.pro/register?reg=492265,注册完成之后进入个人主页

在这里插入图片描述

2、完善个人信息

在这里插入图片描述完善好个人资料可以获得20积分,加上注册送的100积分,可以用股票的行情数据,对于练手来说,够用了。如果你是学生的话,还可以进行学生认证,所有接口数据都可以使用。

3、TOKEN获取

点击接口TOKEN(复制自己的TOKEN,之后介绍TOKEN如何使用,注意:这个TOKEN是你自己的,不要外传)
在这里插入图片描述

二、使用Tushare进行股票分析

需求:

  • 使用tushare包获取某股票的历史行情数据。
  • 输出该股票所有收盘比开盘上涨3%以上的日期。
  • 输出该股票所有开盘比前日收盘跌幅超过2%的日期。
  • 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?

安装tushare包

pip install tushare

导入需要的包

import tushare as ts
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
pro = ts.pro_api('你的TOKEN')  #填入,上面第三步获取到的TOKEN
df = pro.daily(ts_code='600519.SH',start_date='20000101',fields='trade_date,open,high,low,close,pre_close')

在这里插入图片描述

获取到的股票历史行情数据,此处以茅台为例,股票代码为:600519.SH,可以根据自己需求换别的。

#将trade_date设置为行索引
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date',inplace=True)

在这里插入图片描述

#输出该股票所有收盘比开盘上涨3%以上的日期
#(收盘-开盘)/开盘 > 0.03
df.loc[(df['close'] - df['open']) / df['open'] > 0.03].index

在这里插入图片描述

#输出该股票所有开盘比前日收盘跌幅超过2%的日期
#(开盘-前日收盘)/前日收盘 < -0.02
df.loc[(df['open'] - df['pre_close']) / df['pre_close'] < -0.02].index

在这里插入图片描述

#假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?
#每月第一个交易日对应的行数据
df_month = df.resample('M').first()
#买入股票花费的总金额
cost = df_monthly['open'].sum()*100
#卖出股票到手的钱,2022年的卖不出去,剔除掉
df_year = df.resample('A').last()[:-1]
resv = df_year['open'].sum()*1200
#最后手中剩余的股票需要估量其价值计算到总收益中
last_monry = 100*df['close'][0]
#计算总收益
resv+last_monry-cost

需求:双均线策略制定

  • 使用tushare包获取某股票的历史行情数据
  • 计算该股票历史数据的5日均线和30日均线
  • 分析输出所有金叉日期和死叉日期
  • 如果我从假如我从2010年1月1日开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益率如何?

继续使用上面获取到的茅台数据进行操作

df = df[::-1] #将数据按时间正序排列
df

在这里插入图片描述

ma5 = df['close'].rolling(5).mean()   #5日均线
ma30 = df['close'].rolling(30).mean() #30日均线

将5日均线与30日均线画出来

import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(ma5[30::])
plt.plot(ma30[30::])

在这里插入图片描述

#展示其中一部分
plt.plot(ma5[100:500])
plt.plot(ma30[100:500])

在这里插入图片描述
分析输出所有金叉日期和死叉日期

#让ma5,ma30保持一样长
ma5  = ma5[30:]
ma30 = ma30[30:]
df = df[30:]
s1 = ma5 < ma30
s2 = ma5 > ma30

death_ex = s1 & s2.shift(1) #判定死叉的条件
death_date = df.loc[death_ex].index #死叉的时间

golden_ex = ~(s1 | s2.shift(1))#判定金叉的条件
golden_date = df.loc[golden_ex].index #金叉的时间

s1 = Series(data=1,index=golden_date) #1作为金叉的标识
s2 = Series(data=0,index=death_date)  #0作为死叉的标识
s = s1.append(s2)
s = s.sort_index() #存储的是金叉和死叉对应的时间
s

在这里插入图片描述
如果我从假如我从2010年1月1日开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益率如何?

first_monry = 100000 #本金
money = first_monry  #口袋有的现金
hold = 0  #持有股票的数量(股数:100股=1手)

for i in range(len(s)): 
    time = s.index[i]  
    p = df.loc[time]['open'] #当前时刻股票的单价
    if s[i] == 1:#金叉的时间
        hand_count = money // (p*100) #尽可能多的买入股票
        hold = hand_count * 100 
        money -= (hold * p) #将买股票话的钱从money中减去
    else:  #死叉,卖掉全部股票
        money += (p_death * hold) #卖出的股票收入加入到money
        hold = 0
        
last_monry = hold * df['close'][-1]  #将手里现有的所有股票按最近一天的收盘价换算
#总收益
money + last_monry - first_monry
  • 0
    点赞
  • 22
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 1

打赏作者

吕梦柯

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值