- tushare财经数据接口包 
  
- pip install tushare
 - 作用:提供相关指定的财经数据
 
 
需求:股票分析
-  
使用tushare包获取某股票的历史行情数据
 -  
输出该股票所有收盘比开盘上涨3%以上的日期
 -  
输出该股票所有开盘比前日收盘跌幅超过2%的日期
 -  
假如我从2015年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?
 -  
使用tushare包获取某股票的历史行情数据
 
import pandas as pd
 import numpy as np
 import tushare as ts
#获取某只股票的历史交易数据
 data = ts.get_k_data(code=‘600519’,start=‘2015-01’)
 data
 
#将获取的股票数据持久化存储到本地文件中
 data.to_csv(‘maotai.csv’)
#可以将文件中的数据读取到df
 df = pd.read_csv(‘maotai.csv’).drop(columns=‘Unnamed: 0’)
 df
 
- 数据预处理 
  
- 目的:为了便于后期相关需求的分析处理
 
 
#将date转换成时间类型
 df[‘date’] = pd.to_datetime(df[‘date’])
#将date列作为df的索引
 df = df.set_index(‘date’)
 df
 
- 输出该股票所有收盘比开盘上涨3%以上的日期 
  
- (收盘价-开盘价)/ 开盘价 > 0.03
 
 
ex = (df[‘close’] - df[‘open’]) / df[‘open’] > 0.03
 ret = ex[ex] #获取了ex这个Series中True对应的数据
 date = ret.index
 date
 
- 输出该股票所有开盘比前日收盘跌幅超过2%的日期 
  
- (开盘-前日收盘)/ 前日收盘 < -0.02
 
 
df[‘close’].shift(1) #shift(1)表示让Series中的元素整体向下移动一位
 
ex = (df[‘open’] - df[‘close’].shift(1))/df[‘close’].shift(1) < -0.02
 ex #ex表示一个Series
 
#取出ex中True对应的数据
 ret = ex[ex] #[ex]中的ex表示ex这个Series中存储的数据
 ret.index
 
- 输出该股票所有收盘比开盘上涨3%以上的日期 
  
- (收盘价-开盘价)/ 开盘价 > 0.03
 
 
ex = (df[‘close’]-df[‘open’]) / df[‘open’] > 0.03
 ex
 
#在DataFrame中也是可以使用布尔值充当索引的
 ret = df.loc[ex] #将ex中的布尔值作为df的行索引,就可以取出ex中True对应的df的行数据
 #在df中提取出来了满足(收盘比开盘上涨3%以上)条件的行数据
 ret
 
ret.index
 
- 假如张三从2020年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,张三的收益如何? 
  
- 规则:基于当天的收盘价售卖股票,当天的开盘价购买股票
 - 一个完整的年需要买入多少次股票呢? 
    
- 12次,一共购买1200只,单价:当天的开盘价
 
 - 一个完整的年需要卖出几次股票呢? 
    
- 1次,一次性卖出1200只股票,单价:当天的收盘价
 
 - 特殊情况: 
    
- 最终计算总收益的时候,需要将手里剩余股票的价值计算到总收益中 
      
- 剩余股票的价值: 
        
- 剩余股票的数量 * 最后一天的收盘价
 
 
 - 剩余股票的价值: 
        
 
 - 最终计算总收益的时候,需要将手里剩余股票的价值计算到总收益中 
      
 
 
new_df = df[‘2020’:] #单独提取出了2020至今的股票数据
#买入股票
 #取出每个月第一个交易日对应的行数据
 monthly = new_df.resample(‘M’).first() #resample可以根据时间为条件对数据进行取样
 #first()表示取出每一个样本的第一行数据
 monthly
 
 
#买入股票的总花费
 total_cost = monthly[‘open’].sum() * 100
 total_cost
 
#卖出股票
 yearsly = new_df.resample(‘Y’).last()[0:-1] #取出了每年最后一个交易日对应的行数据
 yearsly
 
recv = yearsly[‘close’].sum() * 1200
 recv
 
#注意:2023年没有到卖出股票的时机,因此张三手中会有剩余股票。因此需要将剩余股票的价值也计算到总收益中
 #可以使用最近一天的收盘价作为剩余股票的单价
 last_price = new_df[‘close’][-1]
 last_money = last_price * 600
#计算总收益
 last_money + recv - total_cost
 



















