示例#1
0
 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()
示例#2
0
 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)
示例#4
0
 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()
示例#5
0
 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
示例#6
0
 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
示例#7
0
 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()
示例#8
0
 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()