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
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)
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
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
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')
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
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
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
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]))