RiceQuant和 JoinQuant合成月k线、周k线的极简公式

米筐和聚宽没有直接可以获取月k线,周k线的函数,为此写了一个极简函数可以获取日k线,周k线,月k线,乃至分钟k线。如下:

聚宽:

def get_period_price_wjlec(stock, rule='W', start_date=None, end_date=None, frequency='daily', fields=None, \
                           skip_paused=True, fq='pre', count=None):
    '''
            极简方法获取真实的日线、周线、月线或其他周期数据,本函数考虑了假期情况,不会列出不交易的日期。
    参数:
        stock : 证券代码
        rule : K线类别,默认是周线'W',月线是'M',季度线是'Q',年线是'A'。期间代码也可以使用周K('W-FRI')、月K('BM')、
        年K('A-DEC')
        end_date : 默认None, 对应使用attribute_history; 否则使用get_price
        其他参数:同get_price
    返回:
        dataframe: index:时间序列 
    范例:
        df=get_period_price_wjlec('601668.XSHG', start_date='2017-1-1', end_date='2017-5-31')#获取周线
        df=get_period_price_wjlec('601668.XSHG', rule='W', count=120, end_date='2017-6-1')#获取周线
        df=get_period_price_wjlec('601668.XSHG', rule='M', start_date='2017-1-1', end_date='2017-5-31')#获取月线
        df=get_period_price_wjlec('601668.XSHG', rule='M', count=1000, end_date='2017-5-31')#获取月线
    '''
    #设定转换周期period_type  转换为周是'W',月'M',季度线'Q',五分钟'5min',12天'12D'
    period_type = rule
    if "attribute_history" not in dir() or end_date:
        stock_data = get_price(stock, start_date=start_date, end_date=end_date, frequency=frequency, fields=\
                       ['open','high','low','close', 'volume', 'money'], skip_paused=skip_paused, fq=fq, count=count)
    else:
        stock_data = attribute_history(stock, count=count, unit=frequency, fields=['open','high','low','close', 'volume', 'money'], \
                               skip_paused=skip_paused, fq=fq)
    #记录每个周期中最后一个交易日
    stock_data['date']=stock_data.index
    period_type=rule
    #进行转换,周线的每个变量都等于那一周中最后一个交易日的变量值
    period_stock_data=stock_data.resample(period_type,how='last')
    #周线的open等于那一周中第一个交易日的open
    period_stock_data['open'] = stock_data['open'].resample(period_type,how='first')
    #周线的high等于那一周中的high的最大值
    period_stock_data['high'] = stock_data['high'].resample(period_type,how='max')
    #周线的low等于那一周中的low的最大值
    period_stock_data['low'] = stock_data['low'].resample(period_type,how='min')
    #周线的volume和money等于那一周中volume和money各自的和
    period_stock_data['volume'] = stock_data['volume'].resample(period_type,how='sum')
    period_stock_data['money'] = stock_data['money'].resample(period_type,how='sum')
    # 剔除整个周期都休盘或停牌的数据
    period_stock_data = period_stock_data.dropna()
    period_stock_data.set_index('date',inplace=True)
    return period_stock_data

米筐:

def get_period_price_wjlec(stock, rule='W', start_date=None, end_date=None, frequency='1d', fields=None, \
                           skip_suspended = True, expect_df=False, adjust_type='pre'):
    '''
            极简方法获取真实的日线、周线、月线或其他周期数据,本函数考虑了假期情况,不会列出不交易的日期。
    参数:
        stock : 证券代码
        rule : K线类别,默认是周线'W',月线是'M',季度线是'Q',年线是'A'。期间代码也可以使用周K('W-FRI')、月K('BM')、
        年K('A-DEC')
        end_date : 默认None, 对应使用attribute_history; 否则使用get_price
        其他参数:同get_price
    返回:
        dataframe: index:时间序列 
    范例:
        df=get_period_price_wjlec('601668.XSHG', start_date='2017-1-1', end_date='2017-5-31')#获取周线
        df=get_period_price_wjlec('601668.XSHG', rule='W', count=120, end_date='2017-6-1')#获取周线
        df=get_period_price_wjlec('601668.XSHG', rule='M', start_date='2017-1-1', end_date='2017-5-31')#获取月线
        df=get_period_price_wjlec('601668.XSHG', rule='M', count=1000, end_date='2017-5-31')#获取月线
    '''
    #设定转换周期period_type  转换为周是'W',月'M',季度线'Q',五分钟'5min',12天'12D'
    period_type = rule
    
    stock_data = get_price(stock, start_date=start_date, end_date=end_date, 
                 frequency=frequency, fields=['open','high','low','close', 'volume', 'total_turnover'], 
              adjust_type=adjust_type, skip_suspended = skip_suspended, market='cn', expect_df=expect_df)
    
    print(stock_data)
    #记录每个周期中最后一个交易日
    stock_data['date'] = stock_data.index
    period_type=rule
    #进行转换,周线的每个变量都等于那一周中最后一个交易日的变量值
    period_stock_data = stock_data.resample(period_type, how='last')
    #周线的open等于那一周中第一个交易日的open
    period_stock_data['open'] = stock_data['open'].resample(period_type,how='first')
    #周线的high等于那一周中的high的最大值
    period_stock_data['high'] = stock_data['high'].resample(period_type,how='max')
    #周线的low等于那一周中的low的最大值
    period_stock_data['low'] = stock_data['low'].resample(period_type,how='min')
    #周线的volume和money等于那一周中volume和money各自的和
    period_stock_data['volume'] = stock_data['volume'].resample(period_type,how='sum')
    period_stock_data['total_turnover'] = stock_data['total_turnover'].resample(period_type,how='sum')
    # 剔除整个周期都休盘或停牌的数据
    period_stock_data = period_stock_data.dropna()
    period_stock_data.set_index('date',inplace=True)
    
    return period_stock_data

-------------------------- EOF -------------------------

你可能感兴趣的:(RiceQuant和 JoinQuant合成月k线、周k线的极简公式)