Ejemplo n.º 1
0
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])
Ejemplo n.º 2
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])