예제 #1
0
    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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
 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
예제 #8
0
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)
예제 #9
0
    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
예제 #10
0
    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
예제 #11
0
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