Exemplo n.º 1
0
def QA_fetch_stock_min_adv(code,
                           start,
                           end,
                           type_='1min',
                           if_drop_index=False,
                           collections=QA_Setting.client.quantaxis.stock_min):
    '获取股票分钟线'
    if type_ in ['1min', '1m']:
        type_ = '1min'
    elif type_ in ['5min', '5m']:
        type_ = '5min'
    elif type_ in ['15min', '15m']:
        type_ = '15min'
    elif type_ in ['30min', '30m']:
        type_ = '30min'
    elif type_ in ['60min', '60m']:
        type_ = '60min'
    __data = []

    if isinstance(code, str):

        for item in collections.find({
                'code': str(code),
                "time_stamp": {
                    "$gte": QA_util_time_stamp(start),
                    "$lte": QA_util_time_stamp(end)
                },
                'type': type_
        }):

            __data.append([
                str(item['code']),
                float(item['open']),
                float(item['high']),
                float(item['low']),
                float(item['close']),
                float(item['vol']), item['datetime'], item['time_stamp'],
                item['date']
            ])

        __data = DataFrame(__data,
                           columns=[
                               'code', 'open', 'high', 'low', 'close',
                               'volume', 'datetime', 'time_stamp', 'date'
                           ])

        __data['datetime'] = pd.to_datetime(__data['datetime'])
        return QA_DataStruct_Stock_min(
            __data.query('volume>1').set_index(['datetime', 'code'],
                                               drop=if_drop_index))
    elif isinstance(code, list):
        '新增codelist的代码'
        return QA_DataStruct_Stock_min(
            pd.concat([
                QA_fetch_stock_min_adv(code_, start, end, type_,
                                       if_drop_index).data for code_ in code
            ]).set_index(['datetime', 'code'], drop=if_drop_index))
Exemplo n.º 2
0
def QA_fetch_stock_min_adv(
        code,
        start, end=None,
        frequence='1min',
        if_drop_index=True,
        # 🛠 todo collections 参数没有用到, 且数据库是固定的, 这个变量后期去掉
        collections=DATABASE.stock_min):
    '''
    '获取股票分钟线'
    :param code:  字符串str eg 600085
    :param start: 字符串str 开始日期 eg 2011-01-01
    :param end:   字符串str 结束日期 eg 2011-05-01
    :param frequence: 字符串str 分钟线的类型 支持 1min 1m 5min 5m 15min 15m 30min 30m 60min 60m 类型
    :param if_drop_index: Ture False , dataframe drop index or not
    :param collections: mongodb 数据库
    :return: QA_DataStruct_Stock_min 类型
    '''
    if frequence in ['1min', '1m']:
        frequence = '1min'
    elif frequence in ['5min', '5m']:
        frequence = '5min'
    elif frequence in ['15min', '15m']:
        frequence = '15min'
    elif frequence in ['30min', '30m']:
        frequence = '30min'
    elif frequence in ['60min', '60m']:
        frequence = '60min'
    else:
        print("QA Error QA_fetch_stock_min_adv parameter frequence=%s is none of 1min 1m 5min 5m 15min 15m 30min 30m 60min 60m" % frequence)
        return None

    # __data = [] 未使用

    end = start if end is None else end
    if len(start) == 10:
        start = '{} 09:30:00'.format(start)

    if len(end) == 10:
        end = '{} 15:00:00'.format(end)

    if start == end:
        # 🛠 todo 如果相等,根据 frequence 获取开始时间的 时间段 QA_fetch_stock_min, 不支持start end是相等的
        print("QA Error QA_fetch_stock_min_adv parameter code=%s , start=%s, end=%s is equal, should have time span! " % (
            code, start, end))
        return None

    # 🛠 todo 报告错误 如果开始时间 在 结束时间之后

    res = QA_fetch_stock_min(
        code, start, end, format='pd', frequence=frequence)
    if res is None:
        print("QA Error QA_fetch_stock_min_adv parameter code=%s , start=%s, end=%s frequence=%s call QA_fetch_stock_min return None" % (
            code, start, end, frequence))
        return None
    else:
        res_set_index = res.set_index(['datetime', 'code'], drop=if_drop_index)
        # if res_set_index is None:
        #     print("QA Error QA_fetch_stock_min_adv set index 'datetime, code' return None")
        #     return None
        return QA_DataStruct_Stock_min(res_set_index)
Exemplo n.º 3
0
def QA_fetch_stock_min_adv(code,
                           start,
                           end=None,
                           frequence='1min',
                           if_drop_index=False,
                           collections=DATABASE.stock_min):
    '获取股票分钟线'
    if frequence in ['1min', '1m']:
        frequence = '1min'
    elif frequence in ['5min', '5m']:
        frequence = '5min'
    elif frequence in ['15min', '15m']:
        frequence = '15min'
    elif frequence in ['30min', '30m']:
        frequence = '30min'
    elif frequence in ['60min', '60m']:
        frequence = '60min'
    __data = []

    end = start if end is None else end
    if len(start) == 10:
        start = '{} 09:30:00'.format(start)
    if len(end) == 10:
        end = '{} 15:00:00'.format(end)

    return QA_DataStruct_Stock_min(
        QA_fetch_stock_min(code, start, end, format='pd',
                           frequence=frequence).set_index(['datetime', 'code'],
                                                          drop=if_drop_index))
Exemplo n.º 4
0
    def to_qfq(self, res):
        u = res.data.reset_index()
        u = u.assign(date=u.datetime.apply(lambda x: x.date()))
        u = u.set_index(['date', 'code'], drop=False)
        codelist = u.index.levels[1].unique().tolist()

        start = u.index.levels[0][0]
        end = u.index.levels[0][-1]
        adjx = self.get_stock_adj(codelist, start, end)
        if adjx is None:
            data = u.set_index(['datetime', 'code'])
        else:

            adjx = adjx.reset_index()
            adjx = adjx.assign(code=adjx.order_book_id).set_index(
                ['date', 'code']).adj
            data = u.join(adjx).set_index(['datetime', 'code']).fillna(1)

            for col in ['open', 'high', 'low', 'close']:
                data[col] = data[col] * data['adj']

                try:
                    data['high_limit'] = data['high_limit'] * data['adj']
                    data['low_limit'] = data['high_limit'] * data['adj']
                except:
                    pass

        return QA_DataStruct_Stock_min(data.sort_index(), if_fq='qfq')
Exemplo n.º 5
0
def QA_fetch_stock_min_adv(
        code,
        start, end=None,
        frequence='1min',
        if_drop_index=False,
        collections=DATABASE.stock_min):
    '获取股票分钟线'
    if frequence in ['1min', '1m']:
        frequence = '1min'
    elif frequence in ['5min', '5m']:
        frequence = '5min'
    elif frequence in ['15min', '15m']:
        frequence = '15min'
    elif frequence in ['30min', '30m']:
        frequence = '30min'
    elif frequence in ['60min', '60m']:
        frequence = '60min'
    __data = []

    end = start if end is None else end
    if len(start) == 10:
        start = '{} 09:30:00'.format(start)
    if len(end) == 10:
        end = '{} 15:00:00'.format(end)
    if isinstance(code, str):

        for item in collections.find({
            'code': str(code), "time_stamp": {
                "$gte": QA_util_time_stamp(start),
                "$lte": QA_util_time_stamp(end)
            }, 'type': frequence
        }):

            __data.append([str(item['code']), float(item['open']), float(item['high']), float(
                item['low']), float(item['close']), float(item['vol']), item['datetime'], item['time_stamp'], item['date']])

        __data = DataFrame(__data, columns=[
            'code', 'open', 'high', 'low', 'close', 'volume', 'datetime', 'time_stamp', 'date'])

        __data['datetime'] = pd.to_datetime(__data['datetime'])
        return QA_DataStruct_Stock_min(__data.query('volume>1').set_index(['datetime', 'code'], drop=if_drop_index))
    elif isinstance(code, list):
        '新增codelist的代码'
        return QA_DataStruct_Stock_min(pd.concat([QA_fetch_stock_min_adv(code_, start, end, frequence, if_drop_index).data for code_ in code]).set_index(['datetime', 'code'], drop=if_drop_index).sort_index())
Exemplo n.º 6
0
def QA_fetch_stocklist_min_adv(code,
                               start,
                               end=None,
                               frequence='1min',
                               if_drop_index=False,
                               collections=DATABASE.stock_min):
    return QA_DataStruct_Stock_min(
        pd.concat(QA_fetch_stocklist_min(
            code, [start, end], frequence)).query('volume>1').set_index(
                ['datetime', 'code'], drop=if_drop_index).sort_index())
Exemplo n.º 7
0
def QA_fetch_stocklist_min_adv(
        code,
        start,
        end,
        type_='1min',
        if_drop_index=False,
        collections=QA_Setting.client.quantaxis.stock_min):
    return QA_DataStruct_Stock_min(
        pd.concat(QA_fetch_stocklist_min(code, [start, end],
                                         type_)).query('volume>1').set_index(
                                             ['datetime', 'code'],
                                             drop=if_drop_index))
Exemplo n.º 8
0
    def test_data_struct_min_stock(self):
        code = '000001'
        days = 10 * 1.2
        start = datetime.datetime.now() - datetime.timedelta(days)
        end = datetime.datetime.now() - datetime.timedelta(0)
        df = qm.get(code, start, end, frequence='1min')
        if df is not None and len(df.index.names) == 1:
            df = df.set_index(['date', 'code'], drop=True)
        ds = qd(frequence=8).dataStruct(df)
        ds2 = QA_DataStruct_Stock_min(df)

        self.assertIsInstance(ds, QA_DataStruct_Stock_min)
        self.assertIsInstance(ds2, QA_DataStruct_Stock_min)
Exemplo n.º 9
0
 def get_stock_min(self, codelist, start, end):
     codelist = promise_list(codelist)
     if 'XS' not in codelist[0]:
         codelist = pd.Series(codelist).apply(lambda x: x + '.XSHE' if x[
             0] != '6' else x + '.XSHG').tolist()
     columns_raw = [
         'datetime', 'order_book_id', 'open', 'high', 'low', 'close',
         'volume', 'total_turnover'
     ]
     res = self.client.query_dataframe(
         "SELECT * FROM quantaxis.stock_cn_1min  WHERE ((`datetime` >= '{}')) \
                      AND (`datetime` <= '{}') AND (`order_book_id` IN ({}))"
         .format(start, end, "'{}'".format(
             "','".join(codelist)))).loc[:, columns_raw].drop_duplicates(
                 ['datetime', 'order_book_id'])
     return QA_DataStruct_Stock_min(
         res.assign(
             datetime=pd.to_datetime(res.datetime),
             code=res.order_book_id,
             amount=res.total_turnover,
             type='1min',
         ).set_index(['datetime', 'code']).sort_index())