示例#1
0
def QA_fetch_get_stock_transaction(code, start, end, retry=2, ip=best_ip['stock'], port=7709):
    '历史逐笔成交 buyorsell 1--sell 0--buy 2--盘前'
    api = TdxHq_API()

    real_start, real_end = QA_util_get_real_datelist(start, end)
    if real_start is None:
        return None
    real_id_range = []
    with api.connect(ip, port):
        data = pd.DataFrame()
        for index_ in range(trade_date_sse.index(real_start), trade_date_sse.index(real_end) + 1):

            try:
                data_ = __QA_fetch_get_stock_transaction(
                    code, trade_date_sse[index_], retry, api)
                if len(data_) < 1:
                    return None
            except:
                QA_util_log_info('Wrong in Getting %s history transaction data in day %s' % (
                    code, trade_date_sse[index_]))
            else:
                QA_util_log_info('Successfully Getting %s history transaction data in day %s' % (
                    code, trade_date_sse[index_]))
                data = data.append(data_)
        if len(data) > 0:

            return data.assign(datetime=data['datetime'].apply(lambda x: str(x)[0:19]))
        else:
            return None
示例#2
0
def QA_ts_update_daily_basic():
    """
    更新每日全市场重要基本面指标,用于选股分析和报表展示
    """
    coll = DATABASE.daily_basic
    coll.create_index(
        [("code", ASCENDING), ("trade_date_stamp", ASCENDING)],
        unique=True,
    )
    coll.create_index([("trade_date_stamp", ASCENDING)], )

    ref = coll.find({})
    cnt = coll.count()
    start_date = "1990-01-01"
    if cnt > 0:
        start_date = ref[cnt - 1]["trade_date"]
    end_date = datetime.date.today().strftime("%Y-%m-%d")
    if end_date != start_date:
        start_trade_date = QA_util_get_next_trade_date(start_date)
        end_trade_date = QA_util_get_pre_trade_date(end_date)
    else:
        return
    for trade_date in trade_date_sse[trade_date_sse.index(start_trade_date):
                                     trade_date_sse.index(end_trade_date) + 1]:
        print(f"saveing {trade_date} daily basic")
        df = QA_fetch_get_daily_basic(trade_date=trade_date)
        if df.empty:
            continue
        df = df.where(df.notnull(), None).reset_index()
        df["trade_date_stamp"] = df["trade_date"].apply(QA_util_date_stamp)
        js = QA_util_to_json_from_pandas(df)
        coll.insert_many(js)
示例#3
0
def QA_fetch_get_stock_transaction(code,
                                   start,
                                   end,
                                   retry=2,
                                   ip='221.231.141.60',
                                   port=7709):
    api = TdxHq_API()

    real_start, real_end = QA_util_get_real_datelist(start, end)
    real_id_range = []
    with api.connect():
        data = pd.DataFrame()
        for index_ in range(trade_date_sse.index(real_start),
                            trade_date_sse.index(real_end) + 1):

            try:
                data_ = __QA_fetch_get_stock_transaction(
                    code, trade_date_sse[index_], retry, api)
                if len(data_) < 1:
                    return None
            except:
                QA_util_log_info(
                    'Wrong in Getting %s history transaction data in day %s' %
                    (code, trade_date_sse[index_]))
            else:
                QA_util_log_info(
                    'Successfully Getting %s history transaction data in day %s'
                    % (code, trade_date_sse[index_]))
                data = data.append(data_)

        return data
示例#4
0
def QA_fetch_get_future_transaction(code, start, end, retry=2, ip=None, port=None):
    '期货历史成交分笔'
    ip, port = get_extensionmarket_ip(ip, port)
    apix = TdxExHq_API()
    global extension_market_list
    extension_market_list = QA_fetch_get_extensionmarket_list(
    ) if extension_market_list is None else extension_market_list
    real_start, real_end = QA_util_get_real_datelist(start, end)
    if real_start is None:
        return None
    real_id_range = []
    with apix.connect(ip, port):
        code_market = extension_market_list.query('code=="{}"'.format(code))
        data = pd.DataFrame()
        for index_ in range(trade_date_sse.index(real_start), trade_date_sse.index(real_end) + 1):

            try:
                data_ = __QA_fetch_get_future_transaction(
                    code, trade_date_sse[index_], retry, int(code_market.market), apix)
                if len(data_) < 1:
                    return None
            except Exception as e:
                QA_util_log_info('Wrong in Getting {} history transaction data in day {}'.format(
                    code, trade_date_sse[index_]))
            else:
                QA_util_log_info('Successfully Getting {} history transaction data in day {}'.format(
                    code, trade_date_sse[index_]))
                data = data.append(data_)
        if len(data) > 0:

            return data.assign(datetime=data['datetime'].apply(lambda x: str(x)[0:19]))
        else:
            return None
示例#5
0
def QA_SU_update_stock_day(client=QA_Setting.client):
    def save_stock_day(code, start, end, coll):
        QA_util_log_info('##JOB01 Now Updating STOCK_DAY==== %s' % (str(code)))
        data = QA_util_to_json_from_pandas(
            QA_fetch_get_stock_day(str(code), start, end, '00'))

        if len(data) > 0:
            coll.insert_many(data)
        else:
            pass
    coll_stock_day = client.quantaxis.stock_day
    for item in QA_fetch_get_stock_time_to_market().index:

        if coll_stock_day.find({'code': str(item)[0:6]}).count() > 0:
            # 加入这个判断的原因是因为如果股票是刚上市的 数据库会没有数据 所以会有负索引问题出现

            start_date = str(coll_stock_day.find({'code': str(item)[0:6]})[
                coll_stock_day.find({'code': str(item)[0:6]}).count() - 1]['date'])
            print('*' * 20)
            end_date = str(now_time())[0:10]
            start_date = trade_date_sse[trade_date_sse.index(
                start_date) + 1]
            QA_util_log_info(' UPDATE_STOCK_DAY \n Trying updating %s from %s to %s' %
                             (item, start_date, end_date))

            save_stock_day(item, start_date, end_date, coll_stock_day)

        else:
            save_stock_day(item, '1990-01-01',
                           str(now_time())[0:10], coll_stock_day)

    QA_util_log_info('Done == \n')
示例#6
0
def QA_fetch_get_future_transaction(code, start, end, retry=2, ip=None, port=None):
    '期货历史成交分笔'
    global best_ip
    if ip is None and port is None and best_ip['future']['ip'] is None and best_ip['future']['port'] is None:
        best_ip = select_best_ip()
        ip = best_ip['future']['ip']
        port = best_ip['future']['port']
    elif ip is None and port is None and best_ip['future']['ip'] is not None and best_ip['future']['port'] is not None:
        ip = best_ip['future']['ip']
        port = best_ip['future']['port']
    else:
        pass
    apix = TdxExHq_API()
    global extension_market_info
    extension_market_info = QA_fetch_get_future_list(
    ) if extension_market_info is None else extension_market_info
    real_start, real_end = QA_util_get_real_datelist(start, end)
    if real_start is None:
        return None
    real_id_range = []
    with apix.connect(ip, port):
        code_market = extension_market_info.query('code=="{}"'.format(code))
        data = pd.DataFrame()
        for index_ in range(trade_date_sse.index(real_start), trade_date_sse.index(real_end) + 1):

            try:
                data_ = __QA_fetch_get_future_transaction(
                    code, trade_date_sse[index_], retry,int(code_market.market), apix)
                if len(data_) < 1:
                    return None
            except Exception as e:
                QA_util_log_info('Wrong in Getting {} history transaction data in day {}'.format(
                    code, trade_date_sse[index_]))
            else:
                QA_util_log_info('Successfully Getting {} history transaction data in day {}'.format(
                    code, trade_date_sse[index_]))
                data = data.append(data_)
        if len(data) > 0:

            return data.assign(datetime=data['datetime'].apply(lambda x: str(x)[0:19]))
        else:
            return None
示例#7
0
def QA_fetch_get_stock_transaction(code, start, end, retry=2, ip=None, port=None):
    '历史分笔成交 buyorsell 1--sell 0--buy 2--盘前'
    global best_ip
    if ip is None and port is None and best_ip['stock']['ip'] is None and best_ip['stock']['port'] is None:
        best_ip = select_best_ip()
        ip = best_ip['stock']['ip']
        port = best_ip['stock']['port']
    elif ip is None and port is None and best_ip['stock']['ip'] is not None and best_ip['stock']['port'] is not None:
        ip = best_ip['stock']['ip']
        port = best_ip['stock']['port']
    else:
        pass
    api = TdxHq_API()

    real_start, real_end = QA_util_get_real_datelist(start, end)
    if real_start is None:
        return None
    real_id_range = []
    with api.connect(ip, port):
        data = pd.DataFrame()
        for index_ in range(trade_date_sse.index(real_start), trade_date_sse.index(real_end) + 1):

            try:
                data_ = __QA_fetch_get_stock_transaction(
                    code, trade_date_sse[index_], retry, api)
                if len(data_) < 1:
                    return None
            except:
                QA_util_log_info('Wrong in Getting {} history transaction data in day {}'.format(
                    code, trade_date_sse[index_]))
            else:
                QA_util_log_info('Successfully Getting {} history transaction data in day {}'.format(
                    code, trade_date_sse[index_]))
                data = data.append(data_)
        if len(data) > 0:

            return data.assign(datetime=data['datetime'].apply(lambda x: str(x)[0:19]))
        else:
            return None
示例#8
0
def QA_fetch_get_stock_day(code, start_date,end_date,ip='119.147.212.81',port=7709):
    if str(code)[0]=='6':
        #0 - 深圳, 1 - 上海
        market_code=1
    else:
        market_code=0

    start_date=QA_util_get_real_date(start_date,trade_date_sse,1)
    end_date=QA_util_get_real_date(end_date,trade_date_sse,-1)
    with api.connect(ip, port):

        # 判断end_date在哪个位置
        index_0=str(datetime.date.today())
        index_of_index_0=trade_date_sse.index(index_0)
        index_of_index_end=trade_date_sse.index(end_date)
        index_of_index_start=trade_date_sse.index(start_date)
        
        index_of_end=index_of_index_0-index_of_index_end
        index_length=index_of_index_end+1-index_of_index_start
        #data = api.get_security_bars(9, market_code, code,index_of_end, index_length)  # 返回普通list
        data = api.to_df(api.get_security_bars(9, market_code, code,index_of_end, index_length))  # 返回DataFrame
    return data
示例#9
0
def QA_fetch_get_stock_transaction(code, start, end, retry=2, ip=best_ip, port=7709):
    api = TdxHq_API()

    real_start, real_end = QA_util_get_real_datelist(start, end)
    real_id_range = []
    with api.connect(ip, port):
        data = pd.DataFrame()
        for index_ in range(trade_date_sse.index(real_start), trade_date_sse.index(real_end) + 1):

            try:
                data_ = __QA_fetch_get_stock_transaction(
                    code, trade_date_sse[index_], retry, api)
                if len(data_) < 1:
                    return None
            except:
                QA_util_log_info('Wrong in Getting %s history transaction data in day %s' % (
                    code, trade_date_sse[index_]))
            else:
                QA_util_log_info('Successfully Getting %s history transaction data in day %s' % (
                    code, trade_date_sse[index_]))
                data = data.append(data_)

        return data.assign(datetime=data['datetime'].apply(lambda x: str(x)[0:19]))