class CTrader: def __init__(self, dbinfo): self.mysql_client = CMySQL(dbinfo) self.cal_client = ccalendar.CCalendar(without_init=True) with open(ct.USER_FILE) as f: infos = json.load(f) self.trader = Trader(infos[0]["account"], infos[0]["passwd_encrypted"], infos[0]["secuids_sh"], infos[0]["secuids_sz"]) self.bnew_succeed_date = "" def buy_new_stock(self, sleep_time): while True: try: if self.cal_client.is_trading_day(): _today = datetime.now().strftime('%Y-%m-%d') if self.bnew_succeed_date != _today: n_list = self.get_new_stock_list() if len(n_list) == 0: logger.info("no new stock for %s." % _today) self.bnew_succeed_date = _today return for stock in n_list: ret, amount = self.trader.max_amounts( stock[0], stock[1]) if 0 == ret: ret, msg = self.trader.deal( stock[0], stock[1], amount, "B") if ret == 0: logger.info( "buy new stock:%s for %s succeed" % (stock, _today)) self.bnew_succeed_date = _today else: logger.error( "buy new stock:%s for %s error, msg:%s" % (stock, _today, msg)) except Exception as e: logger.info(e) traceback.print_exc() time.sleep(sleep_time) def get_new_stock_list(self): stock_list = [] top_stocks_info = ts.new_stocks().head(STOCK_NUM) stocks_info = top_stocks_info[[ IPO_CODE_HEAD, IPO_DATE_HEAD, IPO_PRICE_HEAD ]] for i in range(STOCK_NUM): stock_date = stocks_info.at[i, IPO_DATE_HEAD] if pd.to_datetime(stock_date).strftime( '%Y-%m-%d') == datetime.now().strftime('%Y-%m-%d'): code = stocks_info.at[i, IPO_CODE_HEAD] price = stocks_info.at[i, IPO_PRICE_HEAD] stock_list.append((code, price)) return stock_list