def warning_check(warningDomain, surObj, regeFlag=False, replayIO=None): # surObj = {'embersId': 'f0c030a20e28a12134d9ad0e98fd0861fae7438b', 'confidence': 0.13429584033181682, 'strength': '4', 'derivedFrom': [u'5df18f77723885a12fa6943421c819c90c6a2a02', u'be031c4dcf3eb9bba2d86870683897dfc4ec4051', u'3c6571a4d89b17ed01f1345c80cf2802a8a02b7b'], 'shiftDate': '2011-08-08', 'shiftType': 'Trend', 'location': u'Colombia', 'date': '2012-10-03', 'model': 'Finance Stock Model', 'valueSpectrum': 'changePercent', 'confidenceIsProbability': True, 'population': 'COLCAP'} stock_index = surObj["population"] trend_type = surObj["strength"] date = surObj["shiftDate"] replayIO.write("Check whether the surrogate data trigger the warning.\n") try: pClusster = trend_type table_name = "t_enriched_bloomberg_prices" sql = "select currentValue from {} where name='{}' and postDate < '{}' order by postDate desc".format(table_name, stock_index, date) current_val = 0.0 rs = warningDomain.select(sql, max_items=1) for r in rs: current_val = float(r['currentValue']) replayIO.write("Retrive past 30 day's price daily change.\n") querySql = "select oneDayChange from {} where name='{}' and postDate <'{}' order by postDate desc".format(table_name, stock_index, date) rs = warningDomain.select(querySql, max_items=30) moving30 = [] for r in rs: moving30.append(float(r['oneDayChange'])) replayIO.write("\t %s\n" % json.dumps(moving30)) replayIO.write("Retrive past 90 day's price daily change.\n") querySql = "select oneDayChange from {} where name='{}' and postDate <'{}' order by postDate desc".format(table_name, stock_index, date) rs = warningDomain.select(querySql, max_items=90) moving90 = [] for r in rs: moving90.append(float(r['oneDayChange'])) replayIO.write("\t %s\n" % json.dumps(moving90)) m30 = sum(moving30) / len(moving30) m90 = sum(moving90) / len(moving90) std30 = calculator.calSD(moving30) std90 = calculator.calSD(moving90) eventType, cButtom, cUpper = \ dailySigmaTrends(stock_index, str(pClusster), m30, m90, std30, std90, current_val) dailyRecord = {} dailyRecord["date"] = date dailyRecord["cBottom"] = cButtom dailyRecord["cUpper"] = cUpper dailyRecord["currentValue"] = current_val "Construct the warning message" warningMessage = {} derivedFrom = {"derivedIds": [surObj["embersId"]]} model = surObj["model"] event = eventType confidence = surObj["confidence"] confidenceIsProbability = surObj["confidenceIsProbability"] eventDate = surObj["shiftDate"] population = surObj["population"] location = surObj["location"] comments = surObj["comments"] comObj = json.loads(comments) warningMessage["derivedFrom"] = derivedFrom warningMessage["model"] = model warningMessage["eventType"] = event warningMessage["confidence"] = confidence warningMessage["confidenceIsProbability"] = confidenceIsProbability warningMessage["eventDate"] = eventDate warningMessage["population"] = population warningMessage["location"] = location warningMessage["version"] = __version__ operateTime = datetime.utcnow().isoformat() warningMessage["date"] = operateTime comObj["trendVersion"] = CONFIG["trendRange"]["version"] warningMessage["comments"] = json.dumps(comObj) warningMessage["description"] = "Use Bayesian to predict stock sigma events" embersId = hashlib.sha1(json.dumps(warningMessage)).hexdigest() warningMessage["embersId"] = embersId replayIO.write("Warning Message: \n\t%s\n" % json.dumps(warningMessage)) if eventType != "0000": "push warningmessage to ZMQ" with queue.open(WARNING_PORT, 'w', capture=True) as outq: sleep(1) outq.write(warningMessage) replayIO.write("Publish Warningmessage to ZMQ!\n") if not regeFlag: insert_warningmessage(warningDomain, warningMessage) if eventType != "0000": return warningMessage else: return None except lite.Error, e: log.exception("Error: %s" % e.args[0])
def warning_check(conn,surObj,regeFlag=False): # surObj = {'embersId': 'f0c030a20e28a12134d9ad0e98fd0861fae7438b', 'confidence': 0.13429584033181682, 'strength': '4', 'derivedFrom': [u'5df18f77723885a12fa6943421c819c90c6a2a02', u'be031c4dcf3eb9bba2d86870683897dfc4ec4051', u'3c6571a4d89b17ed01f1345c80cf2802a8a02b7b'], 'shiftDate': '2011-08-08', 'shiftType': 'Trend', 'location': u'Colombia', 'date': '2012-10-03', 'model': 'Finance Stock Model', 'valueSpectrum': 'changePercent', 'confidenceIsProbability': True, 'population': 'COLCAP'} stock_index = surObj["population"] trend_type = surObj["strength"] date = surObj["shiftDate"] cur = conn.cursor() try: pClusster = trend_type table_name = "t_enriched_bloomberg_prices" sql = "select current_value from {} where name='{}' and post_date < '{}' order by post_date desc limit 1".format(table_name,stock_index,date) cur.execute(sql) result = cur.fetchone() current_val = float(result[0]) querySql = "select one_day_change from {} where name='{}' and post_date <'{}' order by post_date desc limit 30 ".format(table_name,stock_index,date) cur.execute(querySql) rows = cur.fetchall() moving30 = [] for row in rows: moving30.append(row[0]) querySql = "select one_day_change from {} where name='{}' and post_date <'{}' order by post_date desc limit 90 ".format(table_name,stock_index,date) cur.execute(querySql) rows = cur.fetchall() moving90 = [] for row in rows: moving90.append(row[0]) m30 = sum(moving30)/len(moving30) m90 = sum(moving90)/len(moving90) std30 = calculator.calSD(moving30) std90 = calculator.calSD(moving90) eventType,cButtom,cUpper = dailySigmaTrends(stock_index,str(pClusster),m30,m90,std30,std90,current_val) dailyRecord = {} dailyRecord["date"] = date dailyRecord["cBottom"] = cButtom dailyRecord["cUpper"] = cUpper dailyRecord["currentValue"] = current_val "Construct the warning message" warningMessage ={} derivedFrom = surObj["embersId"] model = surObj["model"] event = eventType confidence = surObj["confidence"] confidenceIsProbability = surObj["confidenceIsProbability"] eventDate= surObj["shiftDate"] population = surObj["population"] location = surObj["location"] comments = surObj["comments"] comObj = json.loads(comments) warningMessage["derivedFrom"] = derivedFrom warningMessage["model"] = model warningMessage["eventType"] = event warningMessage["confidence"] = confidence warningMessage["confidenceIsProbability"] = confidenceIsProbability warningMessage["eventDate"] = eventDate warningMessage["population"] = population warningMessage["location"] = location warningMessage["version"] = __version__ operateTime = datetime.now().isoformat() warningMessage["dateProduced"] = operateTime comObj["trendVersion"] = CONFIG["trendRange"]["version"] warningMessage["comments"] = json.dumps(comObj) warningMessage["description"] = "Use Bayesian to predict stock sigma events" embersId = hashlib.sha1(json.dumps(warningMessage)).hexdigest() warningMessage["embersId"] = embersId if not regeFlag: insert_warningmessage(conn,warningMessage) if eventType != "0000": return warningMessage else: return None except lite.Error, e: log.exception( "Error: %s" % e.args[0])