Python+Tushare股票数据分析

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

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

一、Tushare的注册安装

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

Python+Tushare股票数据分析_第1张图片

2、完善个人信息

Python+Tushare股票数据分析_第2张图片完善好个人资料可以获得20积分,加上注册送的100积分,可以用股票的行情数据,对于练手来说,够用了。如果你是学生的话,还可以进行学生认证,所有接口数据都可以使用。

3、TOKEN获取

点击接口TOKEN(复制自己的TOKEN,之后介绍TOKEN如何使用,注意:这个TOKEN是你自己的,不要外传)
Python+Tushare股票数据分析_第3张图片

二、使用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')

Python+Tushare股票数据分析_第4张图片

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

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

Python+Tushare股票数据分析_第5张图片

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

Python+Tushare股票数据分析_第6张图片

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

Python+Tushare股票数据分析_第7张图片

#假如我从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

Python+Tushare股票数据分析_第8张图片

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::])

Python+Tushare股票数据分析_第9张图片

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

Python+Tushare股票数据分析_第10张图片
分析输出所有金叉日期和死叉日期

#让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

Python+Tushare股票数据分析_第11张图片
如果我从假如我从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

你可能感兴趣的:(python,数据分析,开发语言)