def main(plot):
    
    # instruments and talbename in sql
    instrument = "ibm"
    tableName = "newyorkexchange.ibm_historicalquotes_newyork"
    
    # create instance to connect Mysql
    cnx = cnxStock()
    # create instance to query Mysql data base
    query = historicalPriceQuery(instrument, tableName)    
    df = query.pandasQuerySingle(cnx.connect())
    #close connection
    cnx.close_connection()
    
    # feed data from PyAlgoTrade back testing
    feed = MyLibrary.pandas_feed_mysql.DataFrameBarFeed(df, instrument, barfeed.Frequency.DAY)
    
    smaPeriod = 163
    strat = sma_crossover.SMACrossOver(feed, instrument, smaPeriod)
    sharpeRatioAnalyzer = sharpe.SharpeRatio()
    strat.attachAnalyzer(sharpeRatioAnalyzer)

    if plot:
        plt = plotter.StrategyPlotter(strat, True, False, True)
        plt.getInstrumentSubplot(instrument).addDataSeries("sma", strat.getSMA())

    strat.run()
    print "Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05)

    if plot:
        plt.plot()
def main(plot):
    initialCash = 10000
    instrumentsByClass = {
        "US Stocks": ["ibm"],
        "Foreign Stocks": ["ulbi"],
        "US 10 Year Government Bonds": ["alex"],
        "Real Estate": ["cx"],
        "Commodities": ["tpvg"],
    }

    # Download the bars.
    instruments = ["umc"]
    for assetClass in instrumentsByClass:
        instruments.extend(instrumentsByClass[assetClass])
    tableNames = dict()
    for instrument  in instruments :
        tableName = str("newyorkexchange.%s_historicalquotes_newyork" %instrument)
        tableNames[instrument] = tableName
    
    try :
        # create instance to connect Mysql
        cnx = cnxStock()
        # create instance to query Mysql data base
        query = historicalPriceQuery(instruments, tableNames)
        dfs = query.pandasQueryMulitple(cnx.connect())
        #close connection
    finally:
        cnx.close_connection()
    
    feed = DataFrameMulitpleBarFeed(dfs,barfeed.Frequency.DAY)
    feed.addMultipleBars()
    
    strat = MarketTiming(feed, instrumentsByClass, initialCash)
    sharpeRatioAnalyzer = sharpe.SharpeRatio()
    strat.attachAnalyzer(sharpeRatioAnalyzer)
    returnsAnalyzer = returns.Returns()
    strat.attachAnalyzer(returnsAnalyzer)

    if plot:
        plt = plotter.StrategyPlotter(strat, False, False, True)
        plt.getOrCreateSubplot("cash").addCallback("Cash", lambda x: strat.getBroker().getCash())
        # Plot strategy vs. SPY cumulative returns.
        plt.getOrCreateSubplot("returns").addDataSeries("umc", cumret.CumulativeReturn(feed["umc"].getPriceDataSeries()))
        plt.getOrCreateSubplot("returns").addDataSeries("Strategy", returnsAnalyzer.getCumulativeReturns())

    strat.run()
    
    print "Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05)
    print "Returns: %.2f %%" % (returnsAnalyzer.getCumulativeReturns()[-1] * 100)

    if plot:
        plt.plot()
 def run(self):
     # 1. output csv file name
     currentTime = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
     fileName = ("./Result/Pair-Cointegration-Record-%s.csv" % currentTime)
     
     # 1. connect database
     cnx = Mysql.cnxStock()
     try:
         connection = cnx.connect()
         # 2. import instruments name from database
         #instrumentList = self.getInstrumentList(connection)["Local_Code"].values
         instrumentList = ("A","ibm","aapl")
         
         print ("Instruments Name import finished")
         
         loopNumber = len(instrumentList) * (len(instrumentList)-1)
         count = 0
         for i in range(len(instrumentList)) :
             for k in range(i+1 , len(instrumentList)) :
                 instrumentA = instrumentList[i]
                 instrumentB = instrumentList[k]
                 print "start %s and %s pair, this %s to process (%s in all)" %(instrumentA, instrumentB, str(count) , str(loopNumber))
                 if instrumentA is not instrumentB :
                     instruments = [instrumentA, instrumentB]
                     # 3. import data from database, as Dict{instrument_Name : dataseries}
                     try :
                         quotes = self.getAllHistoricalQuotes(connection, instruments)
                         # 4 Align time
                         alignedSeries = self.alignTime(quotes)
                         # 5 JohansenTest
                         jres = self.JohansenTest(instruments,alignedSeries)
                         #if jres.lr1[0] > 19.9349 and jres.lr1[1] > 6.6349
                         johansen.print_johan_stats(jres)
                         if jres.lr1[0] > 19.1 and jres.lr1[1] > 4.1 :
                             # 6 output result
                             self.Output(instruments, jres, fileName)
                     except :
                         print "%s and %s has problem" %(instrumentA, instrumentB)
                     
                 count += 1
                     
         
     finally:
         cnx.close_connection()
     print "Finish"
示例#4
0
def main(plot):
    
    # trail
    initialCash = 10000
    instruments = ["aapl", "ibm"]
    windowSize = 50
    tableNames = dict()
    for instrument  in instruments :
        tableName = str("newyorkexchange.%s_historicalquotes_newyork" %instrument)
        tableNames[instrument] = tableName
        
    try :
        # create instance to connect Mysql
        cnx = cnxStock()
        # create instance to query Mysql data base
        query = historicalPriceQuery(instruments, tableNames)
        dfs = query.pandasQueryMulitple(cnx.connect())
        #close connection
    finally:
        cnx.close_connection()
    
    feed = DataFrameMulitpleBarFeed(dfs,barfeed.Frequency.DAY)
    feed.addMultipleBars()
    strat = StatArb(feed,dfs, windowSize, initialCash)
    
    sharpeRatioAnalyzer = sharpe.SharpeRatio()
    strat.attachAnalyzer(sharpeRatioAnalyzer)

    if plot:
        plt = plotter.StrategyPlotter(strat, False, False, True)
        plt.getOrCreateSubplot("zScore").addDataSeries("zScore", strat.getZScoreDS())
        plt.getOrCreateSubplot("spread").addDataSeries("Spread", strat.getSpreadDS())

    strat.run()
    print "Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05)

    if plot:
        plt.plot()