Example #1
0
def MainFunc():
    """
    计算对冲组合收益,判断因子的作用
    """
    #Set up a file log
    myLog = logging.Logger("GetHedgedPortfolioAndCalculateReturn",
                           level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler(
        "GetHedgedPortfolioAndCalculateReturn.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    #Database address
    dbPathFactorValues = "Index_399906_21Day_Rebalance.db"
    dbPathMarketData = "MktData\\MktData_Wind_CICC.db"

    begDate = "20070101"
    endDate = "20160101"

    #Initiate a GetHedgedPortfolioBySingleFactor object
    objGetHedgedPort = modGetHedgedPort.GetHedgedPortfolioBySingleFactor(
        dbPathFactorValues, dbPathMarketData, begDate, endDate, myLog)

    #Calculate hedged portfolio return
    factors = objGetHedgedPort.GetFactorNames()
    #for factor in factors:
    #    objGetHedgedPort.CalculateHedgedPortfolioReturn(factor,"FactorValues","0","2",0.2,"DESC","Plot_ZScores")
    factor = "Size"
    objGetHedgedPort.CalculateHedgedPortfolioReturn(factor, "FactorValues",
                                                    "0", "2", 0.2, "DESC",
                                                    "Plot_ZScores")
def MainFunc():
    """
    使用已经处理过的财报数据和预测数据计算因子值并按行业对该值进行标准化
    """
    #Set up a file log
    myLog = logging.Logger("ComputeFactorValuesAndZScores", level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler(
        "ComputeFactorValuesAndZScores.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    #Initiate a ComputeFactor object
    objComputeFactor = modComputeFactor.ComputeFactorValues(myLog)

    #Load source database
    dbPathMktData = "MktData\\MktData_Wind_CICC.db"
    dbPathConstituentStocks = "MktGenInfo\\IndexConstituent_WIND_CICC.db"
    objComputeFactor.LoadSourceData(dbPathMktData, dbPathConstituentStocks)

    #Set stock universe and rebalance date
    begDate = "20070101"

    objComputeFactor.LoadFactorAlgos()

    objComputeFactor.ComputeAndSaveFactorValues("TestFactorDatabase", begDate)
def MainFunc():
    """
    把基本面因子原始值转换成ZScores
    """
    #Set up a file log
    myLog = logging.Logger("ConvertFactorValuesToZScores", level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler(
        "ConvertFactorValuesToZScores.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    #Initiate a ComputeFactor object
    objConvertToZScores = modConvertToZScores.ConvertFactorValuesToZScores(
        myLog)

    #Connect to local fundamental factor database
    dbNameFactorValues = "Index_399906_20Day_Rebalance.db"
    objConvertToZScores.ConnectToFactorDatabase(dbNameFactorValues)

    #Get factor names and save them
    #objConvertToZScores.GetFactorNames("OutlierRule.cfg")

    #Load outlier rule config
    objConvertToZScores.LoadOutlierRuleConfig("OutlierRule.cfg")
    #print objConvertToZScores.outlierRule

    #Load factor values into in-memory database
    objConvertToZScores.LoadFactorValues()

    #Calculate ZScores
    objConvertToZScores.ToZScores(90, 3)
def MainFunc():
    """
    处理原始财报数据和预测数据,将数据按时间点整理
    """
    #Set up a file log
    myLog = logging.Logger("BuildPITFundamentalDatabase", level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler(
        "BuildPITFundamentalDatabase.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    #Initiate a BuildPITDB object
    objBuildPITDB = modBuildPITDB.BuildPITFundamentalDatabase(myLog)

    #Database address and load raw data
    addrssDBIndexConstituent = "\\MktGenInfo\\IndexConstituent_Wind.db"
    constituentIndex = "399906"
    objBuildPITDB.SetStockUniverse(addrssDBIndexConstituent, constituentIndex)
    objBuildPITDB.LoadFundamentalDataItemsToBeProcessed()

    #Name PITDatabase and create it
    namePITDatabase = "PITFundamentalData.db"
    objBuildPITDB.CreateDatabase(namePITDatabase)

    #Start to process data
    startDate = "20050101"
    objBuildPITDB.CalculateAndSaveData(startDate)
def MainFunc():
    """
    使用已经处理过的财报数据和预测数据计算因子值并按行业对该值进行标准化
    """
    #Set up a file log
    myLog = logging.Logger("ComputeFactorValuesAndZScores", level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler(
        "ComputeFactorValuesAndZScores.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    #Initiate a ComputeFactor object
    objComputeFactor = modComputeFactor.ComputeFactorValues(myLog)

    #Load source database
    dbPathFdmtData = "PITFundamentalData.db"
    dbPathMktData = "MktData\\MktData_Wind_CICC.db"
    dbPathConstituentStocks = "MktGenInfo\\IndexConstituent_WIND.db"
    objComputeFactor.LoadSourceData(dbPathFdmtData, dbPathMktData,
                                    dbPathConstituentStocks)

    #Set stock universe and rebalance date
    begDate = "20070101"

    #Load factor algorithem
    factorStyle = ["Growth", "Profitability", "Quality", "Risk", "Value"]
    objComputeFactor.LoadFactorAlgos(factorStyle)

    #Start to run factor computation
    objComputeFactor.ComputeAndSaveFactorValues("TestFctorDatabase", begDate)
Example #6
0
 def __init__(self, logger=None):
     """Constructor"""
     if logger == None:
         self.logger = LogHandler.LogOutputHandler(
             "ComputeFactorsAndZScores")
     else:
         self.logger = logger
     self.trdDays = GetTrdDay.GetTradeDays()
Example #7
0
    def __init__(self, logger=None):
        """Constructor"""
        #Create log file
        if logger == None:
            self.logger = LogHandler.LogOutputHandler("SyncFinRpt.log")
        else:
            self.logger = logger

        self.locDbPath = GetPath.GetLocalDatabasePath()
Example #8
0
 def __init__(self,logger=None):
     """Constructor"""
     #Create log file
     if logger == None:
         self.logger = LogHandler.LogOutputHandler("ComputeFactorsAndZScores")
     else:    
         self.logger = logger
         
     dbPathProcessedData = GetPath.GetLocalDatabasePath()["EquityDataRefined"]
     self.dbPathProcessedData = dbPathProcessedData
     self.totalTradeDay = GetTrdDay.GetTradeDays()   
Example #9
0
 def __init__(self,dbPathPITFundamentalData,dbPathMarketData,conn=None,logger=None):
     """Constructor"""
     
     #Create log file
     if logger == None:
         self.logger = LogHandler.LogOutputHandler("CalculateFundamentalFactorValues.log")
     else:    
         self.logger = logger        
     
     #Load data into in-memory database
     if conn!=None:
         self.conn = conn
     else:
         self.conn = lite.connect(":memory:")
         self.conn.text_factory = str
         cur = self.conn.cursor()
         
         self.logger.info("<{}>-Load local database into in-memory database...".format(__name__.split('.')[-1]))        
         locDbPath = GetPath.GetLocalDatabasePath()
         _dbPathPITFundamentalData = locDbPath["EquityDataRefined"]+dbPathPITFundamentalData
         _dbPathMarketData = locDbPath["EquityDataRaw"]+dbPathMarketData
         cur.execute("ATTACH '{}' AS FdmtData".format(_dbPathPITFundamentalData))
         cur.execute("ATTACH '{}' AS MktData".format(_dbPathMarketData))
         
         self.logger.info("<{}>-Load table FinancialPointInTimeData".format(__name__.split('.')[-1]))
         cur.execute("CREATE TABLE FinancialPITData AS SELECT * FROM FdmtData.FinancialPointInTimeData")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
         self.logger.info("<{}>-Load table ForecastPintInTimeData".format(__name__.split('.')[-1]))
         cur.execute("CREATE TABLE ForecastPITData AS SELECT * FROM FdmtData.ForecastPointInTimeData")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
         self.logger.info("<{}>-Load table MarketData".format(__name__.split('.')[-1]))
         cur.execute("CREATE TABLE MktData AS SELECT StkCode,Date,TC,LC,TC_Adj FROM MktData.AStockData WHERE Date>='20060101'")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
         self.logger.info("<{}>-Load talbe MarketCap".format(__name__.split('.')[-1]))
         cur.execute("CREATE TABLE MktCap AS SELECT * FROM MktData.MarketCap")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1])) 
         
         self.logger.info("<{}>-Create index on table FinancialPITData".format(__name__.split('.')[-1]))
         cur.execute("CREATE INDEX fiId ON FinancialPITData (StkCode,DeclareDate)")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
         self.logger.info("<{}>-Create index on table ForecastData".format(__name__.split('.')[-1]))
         cur.execute("CREATE INDEX fcId ON ForecastPITData (StkCode,DeclareDate)")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
         self.logger.info("<{}>-Create index on table MarketData".format(__name__.split('.')[-1]))
         cur.execute("CREATE INDEX mId ON MktData (StkCode,Date)")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
         self.logger.info("<{}>-Create index on table MarketCap".format(__name__.split('.')[-1]))
         cur.execute("CREATE INDEX cId ON MktCap (StkCode,Date)")
         self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))            
Example #10
0
    def __init__(self, finRptDbPath, mktDataDbPath, logger=None):
        """
        Constructor
        Load the fundamental data into in-memory database
        """
        #Create log file
        if logger == None:
            self.logger = LogHandler.LogOutputHandler("SyncFinRpt.log")
        else:
            self.logger = logger

        self.logger.info("<{}>-Create in-memory database".format(
            __name__.split('.')[-1]))
        self.conn = lite.connect(":memory:")
        self.conn.text_factory = str
        cur = self.conn.cursor()

        self.logger.info(
            "<{}>-Load local database into in-memory database".format(
                __name__.split('.')[-1]))
        cur.execute("ATTACH '{}' AS FinRpt".format(finRptDbPath))
        cur.execute("ATTACH '{}' AS MktData".format(mktDataDbPath))
        cur.execute(
            "CREATE TABLE BalanceSheet AS SELECT * FROM FinRpt.BalanceSheet")
        cur.execute(
            "CREATE TABLE IncomeStatement AS SELECT * FROM FinRpt.IncomeStatement"
        )
        cur.execute(
            "CREATE TABLE CashFlowStatement AS SELECT * FROM FinRpt.CashFlowStatement"
        )
        cur.execute(
            "CREATE TABLE ForecastData AS SELECT * FROM FinRpt.ForecastData")
        cur.execute("CREATE TABLE Dividend AS SELECT * FROM MktData.Dividend")
        self.logger.info("<{}>-Finished".format(__name__.split('.')[-1]))

        self.logger.info("<{}>-Create index on in-memory database".format(
            __name__.split('.')[-1]))
        cur.execute(
            "CREATE INDEX Id1 ON BalanceSheet (StkCode,RPT_DATE,RDeclareDate)")
        cur.execute(
            "CREATE INDEX Id2 ON IncomeStatement (StkCode,RPT_DATE,RDeclareDate)"
        )
        cur.execute(
            "CREATE INDEX Id3 ON CashFlowStatement (StkCode,RPT_DATE,RDeclareDate)"
        )
        cur.execute(
            "CREATE INDEX IdF ON ForecastData (StkCode,RPT_DATE,RDeclareDate)")
        cur.execute("CREATE INDEX IdD ON Dividend (StkCode,RDeclareDate)")
        self.logger.info("<{}>-Finished".format(__name__.split('.')[-1]))
def MainFunc():
    """
    计算因子IC
    """
    #Set up a file log
    myLog = logging.Logger("ComputeFactorICs", level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler("ComputeFactorICs.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    #Database address
    dbPathZScores = "Index_000300_10Day_Rebalance.db"
    dbPathMarketData = "MktData\\MktData_Wind_CICC.db"

    begDate = "20100101"
    endDate = "20160101"

    #Initiate a GetHedgedPortfolioBySingleFactor object
    objComputeICs = modComputeFactorICs.ComputeICs(dbPathZScores,
                                                   dbPathMarketData,
                                                   begDate,
                                                   endDate,
                                                   conn=None,
                                                   logger=myLog)

    #Calculate hedged portfolio return
    factors = objComputeICs.GetFactorNames()
    #print factors[0]
    tm1 = time.time()

    #objComputeICs.GetZScores("ZScores","1,2","20120723",'2')
    #print objComputeICs.zscores
    #print objComputeICs.zscoresDay

    #objComputeICs.GetStockReturn(1,20)

    #print factors
    #for fct in factors:
    #    objComputeICs.ComputeIC(fct)
    #tm2 = time.time()
    #print tm2-tm1

    #objComputeICs.ComputeICsAndSave("ZScores","HS300",'2',[1,5],[1,10],[1,15],[1,20],[1,30],[1,40],[1,50])

    objComputeICs.ExploreICDecay("FactorICs_HS300", "20100304", "20151013",
                                 [5, 10, 15, 20, 30, 40, 50])
Example #12
0
def MainFunc():
    """"""
    #Set up a file log
    myLog = logging.Logger("BuildPITFundamentalDatabase", level="DEBUG")
    myLogHandler = LogHandler.LogOutputHandler(
        "BuildPITFundamentalDatabase.log")
    fh = myLogHandler[0]
    ch = myLogHandler[1]
    myLog.addHandler(fh)
    myLog.addHandler(ch)

    objGetFactorValues = modGetFactorValues.GetFactorValues(myLog)

    dbNameFactor = "TestFactorDatabase.db"
    factorTypes = ["Fundamental"]

    objGetFactorValues.LoadFactorTablesIntoMemory(dbNameFactor, factorTypes)

    objGetFactorValues.ChooseFactors(["EBIT2EV_TTM"], ["FRet60d"], [])

    v = objGetFactorValues.GetFactorValues("600723", "20140826", 90)
    print type(v["RptType"])
Example #13
0
#!/usr/bin/env python
#coding:utf-8
"""
  Author:  Wusf --<*****@*****.**>
  Purpose: 
  Created: 2016/4/27
"""

import os, sys, logging
root = os.path.abspath("D:\\MyQuantLib\\")
sys.path.append(root)

import SynchronizeDatabase.Db_Goal_CICC.SyncAnalystData as SyncAnalystData
import Tools.LogOutputHandler as LogHandler
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'

logHandlers = LogHandler.LogOutputHandler("SyncAnalystData.log")

sync = SyncAnalystData.SyncData(logHandlers)
sync.SetStartDate("20020301")
sync.ConvertDatesToMonths()
sync.LoadDataTableConfigs("Configs\\AnalystData_Goal_CICC.cfg")
sync.ConnRmtDb()
#sync.CheckRmtDb()
localDbName = "AnalystData\\AnalystData_Wind_CICC.db"
sync.ConnLocalDb(localDbName)
sync.CheckLocalDb()
sync.Sync(1)
    def __init__(self,
                 dbPathMarketData,
                 dbPathConstituentData,
                 conn=None,
                 logger=None):
        """Constructor"""

        #Create log file
        if logger == None:
            self.logger = LogHandler.LogOutputHandler(
                "CalculateTechnicalFactorValues.log")
        else:
            self.logger = logger

        #Load data into in-memory database
        if conn != None:
            self.conn = conn
        else:
            self.conn = lite.connect(":memory:", check_same_thread=False)
            self.conn.text_factory = str
            cur = self.conn.cursor()

            self.logger.info(
                "<{}>-Load local database into in-memory database...".format(
                    __name__.split('.')[-1]))
            locDbPath = GetPath.GetLocalDatabasePath()
            _dbPathMarketData = locDbPath["EquityDataRaw"] + dbPathMarketData
            cur.execute("ATTACH '{}' AS MktData".format(_dbPathMarketData))
            _dbPathConstituentData = locDbPath[
                "EquityDataRaw"] + dbPathConstituentData
            cur.execute("ATTACH '{}' AS ConstituentData".format(
                _dbPathConstituentData))

            self.logger.info("<{}>-Load table MarketData".format(
                __name__.split('.')[-1]))
            cur.execute(
                """CREATE TABLE MktData AS SELECT StkCode,Date,TC,LC,TC_Adj,Vol,Amt,Statu,
                           SmallOrderDiff,MiddleOrderDiff,BigOrderDiff,InstOrderDiff,InBOrderDiff,
                           SmallOrderDiffActive,MiddleOrderDiffActive,BigOrderDiffActive,InstOrderDiffActive,InBOrderDiffActive,
                           NetInFlow,NetInFlowRatio FROM MktData.AStockData WHERE Date>='20060101'"""
            )
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
            self.logger.info("<{}>-Load talbe MarketCap".format(
                __name__.split('.')[-1]))
            cur.execute(
                "CREATE TABLE MktCap AS SELECT * FROM MktData.MarketCap")
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
            self.logger.info("<{}>-Load talbe IndexData".format(
                __name__.split('.')[-1]))
            cur.execute(
                "CREATE TABLE IndexData AS SELECT Date,StkCode,TC FROM MktData.IndexData"
            )
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
            self.logger.info("<{}>-Load talbe ConstituentData".format(
                __name__.split('.')[-1]))
            cur.execute(
                "CREATE TABLE Constituent AS SELECT StkCode,StkName,IncDate,IndusCode,IndusName FROM ConstituentData.SWIndustry1st"
            )
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))

            self.logger.info("<{}>-Create index on table MarketData".format(
                __name__.split('.')[-1]))
            cur.execute("CREATE INDEX mId ON MktData (StkCode,Date)")
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
            self.logger.info("<{}>-Create index on table IndexData".format(
                __name__.split('.')[-1]))
            cur.execute("CREATE INDEX iId ON IndexData (StkCode,Date)")
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
            self.logger.info("<{}>-Create index on table MarketCap".format(
                __name__.split('.')[-1]))
            cur.execute("CREATE INDEX cId ON MktCap (StkCode,Date)")
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
            self.logger.info("<{}>-Create index on table Constituent".format(
                __name__.split('.')[-1]))
            cur.execute("CREATE INDEX csId ON Constituent (StkCode,IncDate)")
            self.logger.info("<{}>-Done".format(__name__.split('.')[-1]))
Example #15
0
#coding:utf-8
"""
  Author:  Wusf --<*****@*****.**>
  Purpose: 
  Created: 2016/5/26
"""

import os,sys,logging,time,decimal,codecs,numpy,re,sqlite3


root = os.path.abspath("D:\\PyQuantLib\\")
sys.path.append(root)
import Tools.LogOutputHandler as LogHandler
import UpdateFactorDatabase.FundamentalFactors.ComputeFactorValues as modComputeFactor
import FactorModel.ClassicModels.MagicFormula as MF


myLog = logging.Logger("mf", level="DEBUG")
myLogHandler = LogHandler.LogOutputHandler("ComputeFactorICs.log")
fh=myLogHandler[0]
ch=myLogHandler[1]
myLog.addHandler(fh)
myLog.addHandler(ch) 

mf = MF.MagicFormula(myLog)
mf.LoadFactorDatabase("TestFactorDatabase.db",["Fundamental"])
addrssDBIndexConstituent = "\\MktGenInfo\\IndexConstituent_Wind_CICC.db"
constituentIndex = ["000001","399106"]
mf.SetStockUniverse(addrssDBIndexConstituent,constituentIndex)
mf.SetRebalanceDate("20080101","20150101","quarterly",1)
mf.GenerateTradeList(0)
#!/usr/bin/env python
#coding:utf-8
"""
  Author:  Wusf --<*****@*****.**>
  Purpose: 
  Created: 2015/12/15
"""

import os, sys, logging
root = os.path.abspath("D:\\MyQuantLib\\")
sys.path.append(root)

import SynchronizeDatabase.Db_Wind_CICC.SyncIndexComp as SyncIndexComp
import SynchronizeDatabase.Db_Wind_CICC.SyncTradeDay as SyncTradeDay
import Tools.LogOutputHandler as LogHandler
#os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'

logHandlers = LogHandler.LogOutputHandler("SyncIndexComp.log")

sync = SyncTradeDay.SyncData(logHandlers)
sync.ConnRmtDb()
localDbName = "MktGenInfo\\TradeDate_Wind_CICC.db"
sync.ConnLocalDb(localDbName)
sync.Sync()
#!/usr/bin/env python
#coding:utf-8
"""
  Author:  Wusf --<*****@*****.**>
  Purpose: 
  Created: 2015/11/25
"""

import os,sys,logging
root = os.path.abspath("D:\\PyQuantLib\\")
sys.path.append(root)

import SynchronizeDatabase.Db_Wind_CICC.SyncFinRptData as SyncFinRpt
import SynchronizeDatabase.Db_Wind_CICC.SyncMktData as SyncMktData
import Tools.LogOutputHandler as LogHandler
#os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'

logHandlers = LogHandler.LogOutputHandler("SyncFinRpt.log")

sync = SyncFinRpt.SyncData(logHandlers)
sync.SetStartDate("20020301")
sync.ConvertDatesToMonths()
sync.LoadDataTableConfigs("Configs\\FinRptData_Wind_CICC.cfg")
sync.ConnRmtDb()
sync.CheckRmtDb()
localDbName = "FinRptData\\FinRptData_Wind_CICC.db"
sync.ConnLocalDb(localDbName)
sync.CheckLocalDb()
sync.Sync(1)