def _get_coaches(self, tablename, startd, endd): debug = False odb = db() cursor = odb.get_cursor() pf = [] endd = dtf.datestrsub(endd, self.expected_trade_period+1) if endd <= startd: return None wherestr = kf.general_kabuka_where(self.meigaras, startd, endd) if debug: strsql = "select code, date, fieldid from %s order by fieldid limit 1000;" % (tablename, wherestr) else: strsql = "select code, date, fieldid from %s %s order by fieldid;" % (tablename, wherestr) cursor.execute(strsql) old_fieldid = "" fieldid = "" for row in cursor: i = iter(row) code = next(i) date = next(i) fieldid = next(i) pf.append([code, date]) if old_fieldid != "" and old_fieldid != fieldid: self._add_coach(old_fieldid, pf) pf = [] old_fieldid = fieldid if fieldid != "": self._add_coach(fieldid, pf) #print len(coaches) cursor.close()
def old_choose(self, ex_meigaras=[], choose_cnt=1): if len(ex_meigaras) >= self.division: return None startd = dtf.datestrsub(self.date, self.buffer_days) max_vol = 0 max_point = 0 best_trader = None for code in self.meigaras: is_ex = False for ex in ex_meigaras: if code == ex: is_ex = True break if is_ex: continue kl = KabukaLines2(code, startd, self.endd, self.buffer_days) trader = LineTrader2(kl, "", "", self.tfl_d, self.tfl_w, self.trade_mode, True) #trader = LineTrader2(kl, "", "", self.tfl_d, self.tfl_w, self.trade_mode, False) datei = trader.get_datei(self.date) if datei < 0: continue (ok, point) = trader.judge_enter_ok(datei) if ok: if point > max_point: max_point = point best_trader = trader return best_trader
def restore(self, load_dir="", current_date=""): ver = -1 if self.is_restored: return (False, "", 0) self.set_params(save_folder=load_dir) if os.path.exists(self.version_file): try: with open(self.version_file, "r") as f: line = (f.read()).split(",") ver = line[0] self.train_accuracy = line[1] f.close() if current_date != "": if ver >= self.startd: cf.log("Ckpt file is newer than current date.") return (False, ver, self.train_accuracy) if ver < dtf.datestrsub(current_date, CKPT_VALID_DAYS): cf.log("Ckpt file is too old.") return (False, ver, self.train_accuracy) saver = tf.train.Saver() saver.restore(self.sess, self.ckptfile) cf.log("Loaded from %s" % (self.ckptfile)) self.is_restored = True return (True, ver, self.train_accuracy) except Exception as e: cf.log("Failed to load") raise else: cf.log("Ckpt file %s does not exists." % (self.ckptfile)) return (False, ver, self.train_accuracy)
def __init__(self, meigaras=[], startd="", endd=""): ''' Constructor ''' if startd != "": self.startd = dtf.datestrsub(startd, 100) self.endd = endd self.meigaras = meigaras self.dates = {} self.prices = {} #self.dow_signs = {} #self.volsizes = {} self._set_dicts()
def _lm2trader(self): meigaras = self.traders.keys() if len(meigaras) >= self.division: f.log("Already holds %d stocks." % len(meigaras)) return None target_codes = {} #for i in range(0, self.division): if len(meigaras) == 0: wherestr = "" else: wherestr = "where %s" % (kf.where_code_in(meigaras, True)) strsql = "select name, code, fieldid, geneid, score, holding_days \ from trade.learned_memory2 %s order by score desc limit 100;" % (wherestr) data = sql.exec_selsql(strsql) if len(data) == 0: f.log("No good meigaras to get this day.") return None for row in data: i = iter(row) name = next(i) code = next(i) fieldid = next(i) geneid = next(i) score = next(i) holding_days = int(next(i)) if self.traders.has_key(code): continue if target_codes.has_key(code): continue target_codes[code] = code #if self.traders.has_key(code) == False: if self.kls.has_key(code): kl = self.kls[code] else: kl = KabukaLines(code, dtf.datestrsub(self.startd, self.buffer_days), self.endd) self.kls[code] = kl trader = LineTrader(kl, geneid, fieldid, self.tfl, self.trade_mode) (traded_cnt, traded_price, trade_mode_str) = \ trader.trade_1step(self.date, 0) if trade_mode_str != "": trader.reset() return trader f.log("No trader entered.") return None
def choose(self, ex_meigaras=[], choose_cnt=1): if len(ex_meigaras) >= self.division: return None startd = dtf.datestrsub(self.date, self.buffer_days) best_points = {} best_traders = {} for code in self.meigaras: is_ex = False for ex in ex_meigaras: if code == ex: is_ex = True break if is_ex: continue #if self.date == "20160311": # print self.date kl = KabukaLines2(code, startd, self.endd, self.buffer_days) trader = LineTrader2(kl, "", "", self.tfl_d, self.tfl_w, self.trade_mode, True) #trader = LineTrader2(kl, "", "", self.tfl_d, self.tfl_w, self.trade_mode, False) datei = trader.get_datei(self.date) if datei < 0: continue (ok, point) = trader.judge_enter_ok(datei) if ok: bcs = best_points.keys() if len(bcs) < choose_cnt: if best_points.has_key(code) == False: best_points[code] = point best_traders[code] = trader else: if best_points.has_key(code) == False: (k, v) = min(best_points.items(), key=lambda x:x[1]) if point > v: del best_points[k] best_points[code] = point del best_traders[k] best_traders[code] = trader if len(best_traders) > 0: if choose_cnt == 1: return best_traders.values()[0] else: return best_traders.values() else: return None
def __init__(self, code, startd="", endd="", buffer_days=60): ''' Constructor ''' code = str(code) self.code = code self.startd = dtf.datestrsub(startd, buffer_days) self.endd = endd self.buffer_days = buffer_days self.normal_lines = {} self.trend_lines = {} data = kf.get_kabuka([code], startd, endd, True) if data.has_key(code): self.data = data[code] else: return None if len(self.data) == 0: return None self._make_lines()
def choose(self, meigaras=[], ex_meigaras=[], choose_strictly=True): for lm in self.lms: lm.ins_top_meigaras(dtf.datestrsub(self._get_date(), 1), meigaras, ex_meigaras, choose_strictly) return self._lm2trader()