浅谈Tushare使用感受

1.什么是Tushare

Tushare 是一个免费、开源的Python财经数据接口包。主要面向数据分析师和量化投资者,提供中国股市的历史数据和实时数据,包括股票、基金、期货、指数、行业数据等。

主要特点包括:

  1. 数据种类丰富:提供包括股票价格、交易数据、财务报表、宏观经济数据、行业数据、基金数据等在内的多种数据。

  2. 易于使用:通过Python接口,用户可以方便地获取所需数据。

  3. 实时性:提供实时交易数据,帮助做出快速决策。

  4. 社区支持:作为一个开源项目,Tushare 拥有活跃的社区,用户可以在社区中交流和解决遇到的问题。

2.数据覆盖范围

TuShare覆盖了从股票、基金、期货等多种金融产品的数据,这些数据包含历史数据,还实时更新,对于金融从业者而言帮助很大。Tushare提供的API接口相对简洁直观,对初学者比较友好。数据的质量和稳定性通常能满足一般分析的需求。

3.安装与使用示例

使用Tushare时,首先需要在其官方网站注册,获取一个token,然后在Python环境中安装Tushare库。安装后,通过引入库并使用提供的token,就可以开始查询和使用数据了。

可以在命令行中简单输入以下命令来安装:

pip install tushare

下面用个简单示例,展示如何使用TuShare的API来获取特定股票的历史数据。

首先,需要导入TuShare,并设置Token(注册TuShare服务后获得)

import tushare as ts

ts.set_token('你的Token')
pro = ts.pro_api()

然后,可以通过调用相应的函数来获取数据。比如,获取某只股票的历史行情数据:

df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20240116')
df

也可以用Tushare的数据进行股票市场趋势分析,例如,分析某只股票在过去一年的趋势,可以使用TuShare获取该股票的历史数据,并使用如Matplotlib这样的库来绘制价格趋势图

# 绘制趋势图
plt.figure(figsize=(5, 3))
plt.plot(df['trade_date'], df['close'])
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.title('Stock Price Trend of 000001.SZ in 2023')
plt.show()

新手如果不熟悉这些调用方式,可以去Tusahre官方网站查看教程文档,里面有各种函数的调用示例,以及参数介绍

也可以从tushare获取数据,结合等backtrader等框架实现量化策略编写,直接在本地上回测, 下面是一个简单的均线策略实现:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import backtrader as bt
import tushare as ts

pro = ts.pro_api()

def download_data(stock_code, start, end):
    df = ts.pro_bar(ts_code=stock_code, adj='qfq', start_date=start, end_date=end)
    if df is None:
        raise ValueError(f"无法从 tushare 获取数据,股票代码:{stock_code}, 日期:{start} 至 {end}")
    df['trade_date'] = pd.to_datetime(df['trade_date'])
    df.set_index('trade_date', inplace=True)
    df.sort_index(inplace=True)
    return df

class MyStrategy(bt.Strategy):
    # 策略参数
    params = (
        ('maperiod', 15),
        ('percent_of_cash', 1),  # 使用的资金比例为10%
    )

    def __init__(self):
        self.ma = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.maperiod)

    def next(self):
        cash = self.broker.get_cash()  # 获取当前账户现金余额
        value_per_trade = cash * self.params.percent_of_cash  # 计算每次交易使用的资金量
        size = int(value_per_trade / self.data.close[0])  # 根据当前股价计算购买的股票数量

        # 调整为100的整数倍
        size = size - (size % 100)

        if size > 0:  # 确保至少可以购买100股
            if self.data.close[0] > self.ma[0]:
                self.buy(size=size)
            elif self.data.close[0] < self.ma[0]:
                # 检查是否有足够的持仓来卖出
                if self.position.size >= size:
                    self.sell(size=size)

# 创建 Cerebro 实例
cerebro = bt.Cerebro()

# 获取股票数据
start_date = '20230101'
end_date = datetime.now().strftime('%Y%m%d')
stock_data = download_data('601988.SH', start_date, end_date)  # 示例股票代码

# 添加股票数据到 Cerebro
data = bt.feeds.PandasData(dataname=stock_data)
cerebro.adddata(data, name='Stock')


# 添加策略
cerebro.addstrategy(MyStrategy)

# 设置初始资金
cerebro.broker.setcash(1000000.0)

# 添加性能评估分析器
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')

# 运行策略
results = cerebro.run()
strat = results[0]
        
# 提取分析结果
sharpe_ratio = strat.analyzers.sharpe.get_analysis()
max_drawdown = strat.analyzers.drawdown.get_analysis()
returns = strat.analyzers.returns.get_analysis()

# 创建DataFrame
analyze_result = pd.DataFrame({
    '夏普比率': [sharpe_ratio.get('sharperatio', None)],
    '最大回撤长度': [max_drawdown.get('len', None)],
    '最大回撤百分比': [max_drawdown.get('drawdown', None)],
    '最大回撤金额': [max_drawdown.get('moneydown', None)],
    '总回报': [returns.get('rtot', None)],
    '平均日回报': [returns.get('ravg', None)],
    '年化回报': [returns.get('rnorm100', None)]
})

analyze_result

# 创建 Cerebro 实例
cerebro = bt.Cerebro()

# 获取股票数据
start_date = '20230101'
end_date = datetime.now().strftime('%Y%m%d')
stock_data = download_data('002229.SZ', start_date, end_date)  # 示例股票代码

# 添加股票数据到 Cerebro
data = bt.feeds.PandasData(dataname=stock_data)
cerebro.adddata(data, name='Stock')


# 添加策略
cerebro.addstrategy(MyStrategy)

# 设置初始资金
cerebro.broker.setcash(1000000.0)

# 添加性能评估分析器
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')

# 运行策略
results = cerebro.run()
strat = results[0]
        
# 提取分析结果
sharpe_ratio = strat.analyzers.sharpe.get_analysis()
max_drawdown = strat.analyzers.drawdown.get_analysis()
returns = strat.analyzers.returns.get_analysis()

# 创建DataFrame
analyze_result = pd.DataFrame({
    '夏普比率': [sharpe_ratio.get('sharperatio', None)],
    '最大回撤长度': [max_drawdown.get('len', None)],
    '最大回撤百分比': [max_drawdown.get('drawdown', None)],
    '最大回撤金额': [max_drawdown.get('moneydown', None)],
    '总回报': [returns.get('rtot', None)],
    '平均日回报': [returns.get('ravg', None)],
    '年化回报': [returns.get('rnorm100', None)]
})

analyze_result

总的来说,Tushare的数据还是比较全面的,尤其是中国市场,值得推荐。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值