Exemple #1
0
def get_rollYield_bar(type = 'symbol',  var = 'RB',date= None, start = None, end = None, plot = False):
    """
        获取展期收益率
    Parameters
    ------
        type = 'symbol':获取某天某品种所有交割月合约的收盘价
        type = 'var':获取某天所有品种两个主力合约的展期收益率(展期收益率横截面)
        type = ‘date’:获取某品种每天的两个主力合约的展期收益率(展期收益率时间序列)
        start: 开始日期 format:YYYYMMDD
        end: 结束数据 format:YYYYMMDD
        date: 某一天日期 format: YYYYMMDD
        var: 合约品种如RB、AL等
    Return
    -------
        DataFrame
            展期收益率数据(DataFrame):
                ry      展期收益率
                index   日期或品种
    """

    date = cons.convert_date(date) if date is not None else datetime.date.today()
    start = cons.convert_date(start) if start is not None else datetime.date.today()
    end = cons.convert_date(end) if end is not None else cons.convert_date(cons.get_latestDataDate(datetime.datetime.now()))
	
    if type == 'symbol':
        df = get_future_daily(start=date, end=date, market=symbolMarket(var))
        df = df[df['variety'] == var]
        if plot:
            _plot_bar(df['close'].tolist(), df['symbol'].tolist())
        return df

    if type == 'var':
        df = pd.DataFrame()
        for market in ['dce','cffex','shfe','czce']:
            df = df.append(get_future_daily(start=date, end=date, market=market))
        varList = list(set(df['variety']))
        ryList = []
        for var in varList:
            ryList.append(get_rollYield(date, var, df=df))
        df = pd.DataFrame(ryList,index = varList,columns = ['ry'])
        df = df.sort_values('ry')
        if plot:
            _plot_bar(df['ry'].tolist(), df.index)
        return df

    if type == 'date':
        dfL=pd.DataFrame()
        while start <= end:
            try:
                ry = get_rollYield(start, var)
                dfL = dfL.append(pd.DataFrame([ry], index=[start], columns=['ry']))
            except:
                pass
            start += datetime.timedelta(days=1)
        if plot:
            _plot(pd.to_datetime(dfL.index), dfL['ry'].tolist())
        return dfL
Exemple #2
0
def get_future_daily(start=None, end=None, market='CFFEX', indexBar=False):
    """
        获取交易所日交易数据
    Parameters
    ------
        start: 开始日期 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
        end: 结束数据 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
        market: 'CFFEX' 中金所, 'CZCE' 郑商所,  'SHFE' 上期所, 'DCE' 大商所 之一。默认为中金所
        indexBar: bool  是否合成指数K线
    Return
    -------
        DataFrame
            中金所日交易数据(DataFrame):
                symbol      合约代码
                date       日期
                open       开盘价
                high       最高价
                low       最低价
                close      收盘价
                volume      成交量
                open_interest 持仓量
                turnover    成交额
                settle     结算价
                pre_settle   前结算价
                variety     合约类别
        或 None(给定日期没有交易数据)
    """
    if market.upper() == 'CFFEX':
        f = get_cffex_daily
    elif market.upper() == 'CZCE':
        f = get_czce_daily
    elif market.upper() == 'SHFE':
        f = get_shfe_daily
    elif market.upper() == 'DCE':
        f = get_dce_daily
    else:
        print('Invalid market.')
        return

    start = cons.convert_date(
        start) if start is not None else datetime.date.today()
    end = cons.convert_date(end) if end is not None else cons.convert_date(
        cons.get_latestDataDate(datetime.datetime.now()))

    df_list = list()
    while start <= end:
        df = f(start)
        if df is not None:
            df_list.append(df)
            if indexBar:
                df_list.append(get_futureIndex(df))
        start += datetime.timedelta(days=1)

    if len(df_list) > 0:
        return pd.concat(df_list).reset_index(drop=True)
Exemple #3
0
def get_reciept(start=None, end=None, vars=cons.vars):
    """
        获取大宗商品注册仓单数量
        Parameters
        ------
            start: 开始日期 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
            end: 结束数据 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
            vars: 合约品种如RB、AL等列表 为空时为所有商品
        Return
        -------
            DataFrame
                展期收益率数据(DataFrame):
                    var             商品品种                     string
                    reciept         仓单数量                     int
                    date            日期                        string YYYYMMDD
    """
    start = cons.convert_date(
        start) if start is not None else datetime.date.today()
    end = cons.convert_date(end) if end is not None else cons.convert_date(
        cons.get_latestDataDate(datetime.datetime.now()))
    records = pd.DataFrame()
    while start <= end:
        if start.strftime('%Y%m%d') not in calendar:
            print('%s非交易日' % start.strftime('%Y%m%d'))
        else:
            print(start)
            for market, marketVars in cons.market_var.items():

                if market == 'dce':
                    f = get_dce_reciept
                elif market == 'shfe':
                    if start <= datetime.date(2014, 5, 16):
                        f = get_shfe_reciept_1
                    else:
                        f = get_shfe_reciept_2
                elif market == 'czce':
                    if start <= datetime.date(2010, 8, 24):
                        f = get_czce_reciept_1
                    elif start <= datetime.date(2015, 11, 11):
                        f = get_czce_reciept_2
                    else:
                        f = get_czce_reciept_3

                get_vars = [var for var in vars if var in marketVars]

                if market != 'cffex' and get_vars != []:
                    records = records.append(f(start, get_vars))

        start += datetime.timedelta(days=1)
    return records.reset_index(drop=True)
Exemple #4
0
def get_rank_sum_daily(start=None, end=None, vars=cons.vars):
    """
        抓取四个期货交易所前5、前10、前15、前20会员持仓排名数据
        注1:由于上期所和中金所只公布每个品种内部的标的排名,没有公布品种的总排名;
            所以函数输出的品种排名是由品种中的每个标的加总获得,并不是真实的品种排名列表
        注2:大商所只公布了品种排名,未公布标的排名
        Parameters
        ------
            start: 开始日期 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
            end: 结束数据 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
            vars: 合约品种如RB、AL等列表 为空时为所有商品
        Return
        -------
            DataFrame:
                展期收益率数据(DataFrame):
                    symbol                      标的合约                     string
                    var                         商品品种                     string
                    vol_top5                    成交量前5会员成交量总和         int
                    vol_chg_top5                成交量前5会员成交量变化总和      int
                    long_openIntr_top5          持多单前5会员持多单总和         int
                    long_openIntr_chg_top5      持多单前5会员持多单变化总和      int
                    short_openIntr_top5         持空单前5会员持空单总和         int
                    short_openIntr_chg_top5     持空单前5会员持空单变化总和      int 
                    vol_top10                   成交量前10会员成交量总和        int                   
                    ...
                    
                    date                        日期                         string YYYYMMDD
    """
    start = cons.convert_date(
        start) if start is not None else datetime.date.today()
    end = cons.convert_date(end) if end is not None else cons.convert_date(
        cons.get_latestDataDate(datetime.datetime.now()))
    records = pd.DataFrame()
    while start <= end:
        print(start)
        if start.strftime('%Y%m%d') in calendar:
            records = records.append(get_rank_sum(start, vars))
        else:
            print('%s非交易日' % start.strftime('%Y%m%d'))
        start += datetime.timedelta(days=1)

    return records.reset_index(drop=True)
Exemple #5
0
def get_spotPrice_daily(start=None, end=None, vars=cons.vars):
    """
        获取大宗商品现货价格,及相应基差
    Parameters
    ------
        start: 开始日期 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
        end: 结束数据 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
        vars: 合约品种如RB、AL等列表 为空时为所有商品
    Return
    -------
        DataFrame
            展期收益率数据(DataFrame):
                var             商品品种                     string
                SP              现货价格                     float
                nearSymbol      临近交割合约                  string
                nearPrice       临近交割合约结算价             float
                domSymbol       主力合约                     string
                domPrice        主力合约结算价                float
                nearBasis       临近交割合约相对现货的基差       float
                domBasis        主力合约相对现货的基差          float
                nearBasisRate   临近交割合约相对现货的基差率     float
                domBasisRate    主力合约相对现货的基差率        float
                date            日期                        string YYYYMMDD
    """

    start = cons.convert_date(
        start) if start is not None else datetime.date.today()
    end = cons.convert_date(end) if end is not None else cons.convert_date(
        cons.get_latestDataDate(datetime.datetime.now()))
    df_list = []
    while start <= end:
        print(start)
        df = get_spotPrice(start, vars)
        if df is False:
            return pd.concat(df_list).reset_index(drop=True)
        elif df is not None:
            df_list.append(df)
        start += datetime.timedelta(days=1)

    if len(df_list) > 0:
        return pd.concat(df_list).reset_index(drop=True)