使用Tushare统计收盘价中位数

使用Tushare统计收盘价中位数

获取交易数据

tushare只能获取一只股票的一段时间成交数据或某一天全部股票成交数据,我选择获取一只股票的历史数据然后存起来再计算

#coding:utf8
import tushare as ts

tushare_token = 'xxxxxxxxxxxxxxxxxxxx'
ts.set_token(tushare_token)
pro = ts.pro_api()

def getStockDaily(ts_code, start_date, end_date):
    '''
    input:
        ts_code str N   股票代码(二选一)
        trade_date  str N   交易日期(二选一)
        start_date  str N   开始日期(YYYYMMDD)
        end_date    str N   结束日期(YYYYMMDD)

    output:
        ts_code str 股票代码
        trade_date  str 交易日期
        open    float   开盘价
        high    float   最高价
        low float   最低价
        close   float   收盘价
        pre_close   float   昨收价
        change  float   涨跌额
        pct_change  float   涨跌幅
        vol float   成交量 (手)
        amount  float   成交额 (千元)
    '''
    return pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date, fields="ts_code,trade_date,close,vol,amount") #get one stock daily history
保存数据

数据保存在mysql中

class TradeDaily(Base):
    __tablename__ = 'trade_daily'
    DATE_DELIMITER = ","

    id = Column(Integer, Sequence('tradeDaily_id_seq'), primary_key=True)
    ts_code = Column(String(16), nullable=False)
    date = Column(Date, nullable=False)
    closes = Column(String(256))
    vols = Column(String(360))
    amounts = Column(String(400))

    __table_args__ = (
        UniqueConstraint('ts_code', 'date', name='ts_code_date_idx'),
    )
    
class DailyStats(Base):
    __tablename__ = 'daily_stats'

    date = Column(Date, primary_key=True)
    median_close = Column(Float(precision=4), nullable=False)

计算和保存收盘价中位数

def calc_median_close():
    with session_scope() as session:
        ds = session.query(DailyStats).order_by(DailyStats.date.desc()).first()
        if ds is not None:
            from_date = ds.date
        else:
            from_date = datetime(2000, 1, 1).date()
        today = datetime.now().date()
        for year in range(from_date.year, today.year + 1):
            m_f = 1
            m_t = 13
            if from_date.year == today.year:
                m_f = from_date.month
                m_to = today.month + 1
            for m in range(m_f, m_t):
                d = datetime(year, m, 1).date()
                if d > today:
                    print("calc median done")
                    return
                tradeCal = session.query(TradeCal).filter_by(date=d).first()
                if tradeCal is None:
                    print("trade cal %s not found" % d)
                    continue
                month_closes = []
                for tradeDaily in session.query(TradeDaily).filter_by(date=d):
                    prices = [ float(x) if x != '-' else np.nan for x in tradeDaily.closes.split(',') ]
                    month_closes.append(prices)
                if len(month_closes) < 1:
                    print('trade daily %s not found' % d)
                    continue
                df  = pd.DataFrame(np.array(month_closes), columns=tradeCal.getCals())
                median = df.median()
                for col in tradeCal.getCals():
                    close_d = datetime(year, m, int(col)).date()
                    if np.isnan(median[col]) or median[col] < 0.01:
                        print('median %s is unexists' % close_d)
                        continue
                    ds = session.query(DailyStats).filter_by(date=close_d).first()
                    if ds is None:
                        ds = DailyStats(date=close_d)
                    ds.median_close = median[col]
                    session.add(ds)
                session.commit()
画图

最后用matplot画图

def plot_median_close(start_date=None):
    import matplotlib.pyplot as plt
    lst = []
    with session_scope() as session:
        if start_date is not None:
            dss = session.query(DailyStats).filter(DailyStats.date > start_date).order_by(DailyStats.date).all()
        else:
            dss = session.query(DailyStats).order_by(DailyStats.date).all()
        for ds in dss:
            lst.append([ds.date, ds.median_close])
        df = pd.DataFrame(np.array(lst), columns=['date', 'close'])

    df.plot(x = 'date', y = 'close', kind="line", title="median close", grid=True)
    plt.show()

效果展示
在这里插入图片描述
觉得有意思的可以通过下面网址注册一个玩玩
https://tushare.pro/register?reg=136270

ps. 上面策略只是我观察市场的众多工具中的一种,不能作为投资唯一参考。

### 回答1: tushare是一个可以用来获取股票和金融数据的Python库。如果想计算每月收盘价的平均值,可以使用tushare提供的函数来实现。具体步骤如下: 1.导入tushare库:在Python中首先要导入tushare库,方便后续使用其中的函数。 2.获取股票数据:使用tushare提供的函数获取股票数据。对于每只股票,都有一个唯一的代码,可以在tushare官方网站中查找。 3.按月份分组:将获取到的股票数据按照月份进行分组。可以使用Python中的groupby函数来完成。 4.计算每月的收盘价平均值:对于每个月的收盘价,可以使用Python中的mean函数来计算平均值。 5.输出结果:将每个月的平均收盘价输出,可以用Python中的print函数来完成。 总之,使用tushare库计算每月收盘价的平均值相对比较简单,只需要按照上述步骤来进行操作即可。 ### 回答2: Tushare是一个国内非常流行的股票数据接口库,其提供了许多有用的股票数据接口。如果想要计算每月收盘价的平均值,可以使用以下步骤: 1. 导入tushare库。 ```python import tushare as ts ``` 2. 使用tushare的get_hist_data()函数获取股票历史数据。 ```python df = ts.get_hist_data('000001', start='2020-01-01', end='2021-12-31') ``` 其中,'000001'表示上证指数的代码,start和end则表示开始和结束的日期。获取历史数据后,可以通过打印df的结果来查看数据的格式。 3. 以月为单位将数据分组,并计算每组的平均值。 ```python monthly_df = df.resample('M').mean()['close'] ``` 此处使用resample()函数以月为单位对数据进行分组,然后使用mean()函数计算每组的平均值,最终得到了每月的收盘价平均值。 4. 打印结果并进行可视化处理。 ```python print(monthly_df) monthly_df.plot() ``` 最后将结果打印出来,也可以通过可视化的方式进行更直观的展示。以上就是使用tushare计算每月收盘价平均值的方法。 ### 回答3: tushare是一款财经数据分析工具,可提供A股和数字货币的相关数据。使用tushare,我们可以轻松地计算每月收盘价的平均值。 首先,我们需要导入tushare的Python库,并输入我们想要分析的股票代码。例如,若我们想要分析上证综指的数据,则代码为“000001.SH”。 接着,我们需要输入起始日期和终止日期,以设定我们想要分析的时间段。这里我们以2021年1月1日到2021年12月1日为例。 ``` import tushare as ts # 设定我们想要分析的股票代码 code = "000001.SH" # 设定我们想要分析的时间段 start_date = "20210101" end_date = "20211201" # 使用tushare获取每个月的收盘价 df = ts.get_hist_data(code, start=start_date, end=end_date) df.index = pandas.to_datetime(df.index) # 使用resample()函数计算每个月的平均收盘价 month_avg = df['close'].resample('M').mean() print(month_avg) ``` 运行上述代码后,我们可以看到输出了每个月收盘价的平均值。 ```2021-01-31 3566.023810 2021-02-28 3526.535714 2021-03-31 3464.518182 2021-04-30 3389.354545 2021-05-31 3452.445455 2021-06-30 3542.745455 2021-07-31 3565.686364 2021-08-31 3477.759091 2021-09-30 3500.082609 2021-10-31 3575.126316 2021-11-30 3525.734783 Freq: M, Name: close, dtype: float64``` 以上代码就是计算每个月收盘价平均值的基本流程,通过将数据导入tushare然后设定分析的时间段,我们就可以比较轻松地得到想要的分析结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值