def moving_average(start, end, codelist): start_time = dateutil.parser.parse(start) end_time = dateutil.parser.parse(end) sqlfolder = SQL_FOLDER + str(uuid.uuid1()) + '/' if not os.path.exists(sqlfolder): os.mkdir(sqlfolder) f = FileHelper(sqlfolder) for code in codelist: print "calculating ma30 of...", code prices = StockPrice.query \ .filter_by(code=code) \ .filter(StockPrice.marketday <= end_time) \ .order_by(StockPrice.marketday) \ .all() #.filter(StockPrice.marketday >= '2012-01-01') \ #print len(prices), prices[0], prices[-1] sqls = "" for i in range(0, len(prices)): if prices[i].marketday.date() >= start_time.date(): if i < 29: continue else: #print i, len(prices[i - 29: i + 1]), prices[i - 29], prices[i] #print i, prices[i], calculator.mean([x.close for x in prices[i - 29: i + 1]]) assert len(prices[i - 29: i + 1]) == 30 list_x = [float(x.close) for x in prices[i - 29: i + 1]] list_w = [float(x.volume) for x in prices[i - 29: i + 1]] sql = "UPDATE `stock_price` SET `ma30`=%f, `ma30w`=%f WHERE `id` = %d;\n" % \ (calculator.mean(list_x), calculator.mean(list_x, list_w), prices[i].id) sqls += sql else: continue #print sqls f.write(sqls, "%06d" % code, ".sql") sqlhelper = SqlHelper(MYSQL_CONFIG) sqlhelper.execFolder(sqlfolder) shutil.rmtree(sqlfolder)
def yahoo_price_to_db(start, end, codelist): tempfolder = TEMP_FOLDER + str(uuid.uuid1()) + '/' if not os.path.exists(tempfolder): os.mkdir(tempfolder) sqlfolder = SQL_FOLDER + str(uuid.uuid1()) + '/' if not os.path.exists(sqlfolder): os.mkdir(sqlfolder) y = Yahoo(tempfolder, sqlfolder) for code in codelist: y.getPrice(code, start, end) for code in codelist: y.parsePrice(code) sqlhelper = SqlHelper(MYSQL_CONFIG) sqlhelper.execFolder(sqlfolder) shutil.rmtree(tempfolder) shutil.rmtree(sqlfolder)