def init_tdx_index_info(self, cdate=None, num=10): def _set_index_info(cdate, code_id): try: if code_id in self.index_objs: _obj = self.index_objs[code_id] else: _obj = CIndex(code_id) if code_id in list( ct.TDX_INDEX_DICT.keys()) else TdxFgIndex(code_id) return (code_id, _obj.set_k_data(cdate)) except Exception as e: self.logger.error(e) return (code_id, False) #index_code_list = self.get_concerned_index_codes() index_code_list = list(ct.TDX_INDEX_DICT.keys()) if cdate is None: cfunc = partial(_set_index_info, cdate) return concurrent_run(cfunc, index_code_list, num=5) else: succeed = True start_date = get_day_nday_ago(cdate, num=num, dformat="%Y-%m-%d") for mdate in get_dates_array(start_date, cdate, asending=True): if self.cal_client.is_trading_day(mdate): cfunc = partial(_set_index_info, mdate) if not concurrent_run(cfunc, index_code_list, num=5): succeed = False return succeed
def update(self, end_date=None, num=10): if end_date is None: end_date = datetime.now().strftime('%Y-%m-%d') start_date = get_day_nday_ago(end_date, num=num, dformat="%Y-%m-%d") succeed = True for mdate in get_dates_array(start_date, end_date): if CCalendar.is_trading_day(mdate, redis=self.redis): if mdate == end_date or mdate in self.balcklist: continue if not self.set_data(mdate): succeed = False return succeed
def update(self, end_date = None, num = 3): if end_date is None: end_date = datetime.now().strftime('%Y-%m-%d') start_date = get_day_nday_ago(end_date, num = num, dformat = "%Y-%m-%d") succeed = True for mdate in get_dates_array(start_date, end_date): if CCalendar.is_trading_day(mdate, redis = self.redis): if not self.set_score(mdate): succeed = False self.logger.info("set score for %s set failed" % mdate) return succeed
def update(self, end_date = datetime.now().strftime('%Y-%m-%d'), num = 19): #if end_date == datetime.now().strftime('%Y-%m-%d'): end_date = get_day_nday_ago(end_date, num = 1, dformat = "%Y-%m-%d") start_date = get_day_nday_ago(end_date, num = num, dformat = "%Y-%m-%d") date_array = get_dates_array(start_date, end_date) succeed = True for mdate in date_array: if CCalendar.is_trading_day(mdate, redis = self.redis): if not self.set_day_data(mdate): self.logger.error("set %s data for rstock failed" % mdate) succeed = False return succeed
def update(self, end_date=None): if end_date is None: end_date = datetime.now().strftime('%Y-%m-%d') start_date = get_day_nday_ago(end_date, num=205, dformat="%Y-%m-%d") date_array = get_dates_array(start_date, end_date) succeed = True for mdate in date_array: if CCalendar.is_trading_day(mdate, redis=self.redis): #if mdate == end_date: continue if not self.crawl_data(mdate): self.logger.error("%s set failed" % mdate) succeed = False return succeed
def update(self, end_date = None, num = 10): if end_date is None: end_date = datetime.now().strftime('%Y-%m-%d') if end_date == datetime.now().strftime('%Y-%m-%d'): end_date = get_day_nday_ago(end_date, num = 1, dformat = "%Y-%m-%d") start_date = get_day_nday_ago(end_date, num = num, dformat = "%Y-%m-%d") succeed = True for mdate in get_dates_array(start_date, end_date): if mdate in self.balcklist: continue if CCalendar.is_trading_day(mdate, redis = self.redis): if not self.set_k_data(mdate): succeed = False self.logger.info("market %s for %s set failed" % (self.market, mdate)) return succeed
def update(self, end_date = None, num = 30): if end_date is None: end_date = datetime.now().strftime('%Y-%m-%d') #start_date = "1997-12-30" start_date = get_day_nday_ago(end_date, num = num, dformat = "%Y-%m-%d") succeed = True code_list = self.get_components(end_date) if 0 == len(code_list): self.logger.error("%s code_list for %s is empty" % (end_date, self.index_code)) return False for mdate in get_dates_array(start_date, end_date): if CCalendar.is_trading_day(mdate, redis = self.redis): if not self.set_ratio(code_list, mdate): self.logger.error("set %s score for %s set failed" % (self.index_code, mdate)) succeed = False return succeed
def main(): dirname = '/Volumes/data/quant/stock/data/docs/blog/hellobiek.github.io/source/_posts' unlock_path_ = "/Users/hellobiek/Documents/workspace/python/quant/smart_deal_tool/configure/futu.json" futuTrader = FutuTrader(host=ct.FUTU_HOST_LOCAL, port=ct.FUTU_PORT, trd_env=TrdEnv.REAL, market=ct.US_MARKET_SYMBOL, unlock_path=unlock_path_) start = '2019-04-15' end = '2019-04-19' orders = futuTrader.get_history_orders(start=start, end=end) date_arrary = get_dates_array(start, end, dformat="%Y-%m-%d", asending=True) generate(orders, date_arrary, dirname, start, end)
def init_industry_info(self, cdate, num): def _set_industry_info(cdate, code_id): return (code_id, CIndex(code_id).set_k_data(cdate)) df = self.industry_info_client.get() if cdate is None: cfunc = partial(_set_industry_info, cdate) return concurrent_run(cfunc, df.code.tolist(), num=5) else: succeed = True start_date = get_day_nday_ago(cdate, num=num, dformat="%Y-%m-%d") for mdate in get_dates_array(start_date, cdate, asending=True): if self.cal_client.is_trading_day(mdate): cfunc = partial(_set_industry_info, mdate) if not concurrent_run(cfunc, df.code.tolist(), num=5): succeed = False return succeed
def init_stock_info(self, cdate=None): def _set_stock_info(_date, bonus_info, index_info, code_id): try: if CStock(code_id).set_k_data(bonus_info, index_info, _date): self.logger.info("%s set k data success" % code_id) return (code_id, True) else: self.logger.error("%s set k data failed" % code_id) return (code_id, False) except Exception as e: self.logger.error("%s set k data exception:%s" % (code_id, e)) return (code_id, False) #get stock bonus info bonus_info = pd.read_csv("/data/tdx/base/bonus.csv", sep=',', dtype={ 'code': str, 'market': int, 'type': int, 'money': float, 'price': float, 'count': float, 'rate': float, 'date': int }) index_info = CIndex('000001').get_k_data() if index_info is None or index_info.empty: return False df = self.stock_info_client.get() failed_list = df.code.tolist() if cdate is None: cfunc = partial(_set_stock_info, cdate, bonus_info, index_info) return process_concurrent_run(cfunc, failed_list, num=5) else: succeed = True start_date = get_day_nday_ago(cdate, num=10, dformat="%Y-%m-%d") for mdate in get_dates_array(start_date, cdate, asending=True): if self.cal_client.is_trading_day(mdate): cfunc = partial(_set_stock_info, mdate, bonus_info, index_info) if not process_concurrent_run(cfunc, failed_list, num=500): succeed = False return succeed
def select_code(code_list, start_date, end_date): date_arrays = list() for mdate in get_dates_array(start_date, end_date, dformat="%Y%m%d"): if CCalendar.is_trading_day(transfer_int_to_date_string(mdate), redis=mredis): date_arrays.append(mdate) #choose stock which is not suspended verry long total_df = pd.DataFrame() for code in code_list: df = ts.pro_bar(pro_api=ts_client, ts_code=add_suffix(code), adj='qfq', start_date=start_date, end_date=end_date) if df is None: continue if len(df) > int(0.8 * len(date_arrays)): df = df.rename(columns={ "ts_code": "code", "trade_date": "date", "pct_change": "pchange" }) df = df.set_index('date') total_df[code] = df.close return total_df