Esempio n. 1
0
def main(plot):
    initialCash = 10000
    instrumentsByClass = {
        "US Stocks": ["VTI"],
        "Foreign Stocks": ["VEU"],
        "US 10 Year Government Bonds": ["IEF"],
        "Real Estate": ["VNQ"],
        "Commodities": ["DBC"],
    }

    # Download the bars.
    instruments = ["SPY"]
    for assetClass in instrumentsByClass:
        instruments.extend(instrumentsByClass[assetClass])
    feed = yahoofinance.build_feed(instruments, 2007, 2013, "data", skipErrors=True)

    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("SPY", cumret.CumulativeReturn(feed["SPY"].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()
Esempio n. 2
0
def main(plot):
    initialCash = 10000
    instrumentsByClassMain = {
 "Atlantic American Corporation": ["AAOI"],
 "Applied Optoelectronics, Inc.": ["AAON"],
 "AAON, Inc.": ["AAPC"],
 "Atlantic Alliance Partnership Corp.   Ordinary Sh": ["AAPL"],
 "Apple Inc.": ["AAWW"],
 "Atlas Air Worldwide Holdings": ["AAXJ"],
 "iShares MSCI All Country Asia ex Japan Index ": ["ABAC"],
 "Aoxin Tianli Group, Inc.   Common Sh": ["ABAX"],
 "ABAXIS, Inc.": ["ABCB"],
 "Ameris Bancorp": ["ABCD"],
 "Cambium Learning Group, Inc.": ["ABCO"],
 "The Advisory Board Company": ["ABDC"],
 "Alcentra Capital Corp.": ["ABEO"],
    }

    

    # Download the bars.
    instruments = ["SPY"]
    for assetClass in instrumentsByClass:
        instruments.extend(instrumentsByClass[assetClass])
    feed = yahoofinance.build_feed(instruments, 2010, 2016, "data", skipErrors=True)



    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("SPY", cumret.CumulativeReturn(feed["SPY"].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)
    print "Returns All: %.2f %%" % (returnsAnalyzer.getReturns()[-1] * 100)

# returnsAnalyzer.getCumulativeReturns()[-1] * 100

    if plot:
        plt.plot()
Esempio n. 3
0
 def testCumRet(self):
     values = dataseries.SequenceDataSeries()
     rets = cumret.CumulativeReturn(values)
     for value in [1, 2, 3, 4, 4, 3, 1, 1.2]:
         values.append(value)
     self.assertEqual(rets[0], None)
     self.assertEqual(rets[1], 1)
     self.assertEqual(rets[2], 2)
     self.assertEqual(rets[3], 3)
     self.assertEqual(rets[4], 3)
     self.assertEqual(rets[5], 2)
     self.assertEqual(rets[6], 0)
     self.assertEqual(round(rets[7], 1), 0.2)
Esempio n. 4
0
def main(plot):
    priceCurrency = "USD"
    instrumentsByClass = {
        "US Stocks": ["VTI/USD"],
        "Foreign Stocks": ["VEU/USD"],
        "US 10 Year Government Bonds": ["IEF/USD"],
        "Real Estate": ["VNQ/USD"],
        "Commodities": ["DBC/USD"],
    }

    # Load the bars. These files were manually downloaded from Yahoo Finance.
    feed = yahoofeed.Feed()
    instruments = ["SPY/USD"] + sum(instrumentsByClass.values(), [])

    for year in range(2007, 2013 + 1):
        for instrument in instruments:
            symbol = instrument.split("/")[0]
            fileName = "%s-%d-yahoofinance.csv" % (symbol, year)
            print("Loading bars from %s" % fileName)
            feed.addBarsFromCSV(instrument, fileName)

    broker = backtesting.Broker({priceCurrency: 10000}, feed)

    # Build the strategy and attach some metrics.
    strat = MarketTiming(feed, broker, instrumentsByClass, priceCurrency)
    sharpeRatioAnalyzer = sharpe.SharpeRatio(priceCurrency)
    strat.attachAnalyzer(sharpeRatioAnalyzer)
    returnsAnalyzer = returns.Returns(priceCurrency)
    strat.attachAnalyzer(returnsAnalyzer)

    if plot:
        from pyalgotrade import plotter

        plt = plotter.StrategyPlotter(strat, False, False, True)
        plt.getOrCreateSubplot("cash").addCallback(
            "Cash", lambda x: strat.getBroker().getBalance("USD"))
        # Plot strategy vs. SPY cumulative returns.
        plt.getOrCreateSubplot("returns").addDataSeries(
            "SPY", cumret.CumulativeReturn(feed["SPY"].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()
Esempio n. 5
0
def main(plot):
    initialCash = 10000
    instrumentsByClass = {
        "US Stocks": ["VTI"],
        "Foreign Stocks": ["VEU"],
        "US 10 Year Government Bonds": ["IEF"],
        "Real Estate": ["VNQ"],
        "Commodities": ["DBC"],
    }

    # Load the bars. These files were manually downloaded from Yahoo Finance.
    feed = yahoofeed.Feed()
    instruments = ["SPY"]
    for assetClass in instrumentsByClass:
        instruments.extend(instrumentsByClass[assetClass])

    for year in range(2007, 2013 + 1):
        for instrument in instruments:
            fileName = "%s-%d-yahoofinance.csv" % (instrument, year)
            print("Loading bars from %s" % fileName)
            feed.addBarsFromCSV(instrument, fileName)

    # Build the strategy and attach some metrics.
    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(
            "SPY", cumret.CumulativeReturn(feed["SPY"].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()
Esempio n. 6
0
def main(plot, sz50, HQ, HQ_hs300):
    initialCash = 10000000
    sz50_code = sz50['code']
    feed = dataFramefeed.Feed()
    feed.addBarsFromDataFrame("hs300", HQ_hs300)
    instrumentsByClass = {}

    for i in range(0, len(sz50_code)):
        l = []
        l.append(sz50_code[i])
        instrumentsByClass[sz50_code[i]] = l
        feed.addBarsFromDataFrame(sz50_code[i], HQ[sz50_code[i]])
    HQ['600000']
    '''    
    instrumentsByClass = {
        "002768": ["002768"],
        "002493": ["002493"]
    }
    # 这里instruments暂时没用 instrumentsByClass是portfolio  
    instruments = ['hs300']
    for assetClass in instrumentsByClass:
        instruments.extend(instrumentsByClass[assetClass])
   
    ##feed 是dataFramefeed模块Feed类的一个实例,Feed继承DataFrameBarfeed.BarFeed,BarFeed继承membf.BarFeed
    feed = dataFramefeed.Feed()
    dat=ts.get_hist_data("hs300",start='2017-01-01',end='2017-12-27')
    dat['Adj Close']=dat['close']
    feed.addBarsFromDataFrame("hs300", dat.ix[:,(0,1,2,3,4,13)])
  

    
    dat=ts.get_hist_data("002768",start='2017-01-01',end='2017-12-27')
    dat['Adj Close']=dat['close']  
    feed.addBarsFromDataFrame("002768", dat.ix[:,(0,1,2,3,4,14)])

    dat=ts.get_hist_data('002493',start='2017-01-01',end='2017-12-27')
    dat['Adj Close']=dat['close']
    feed.addBarsFromDataFrame("002493", dat.ix[:,(0,1,2,3,4,14)])
    '''

    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())
        #plt.getOrCreateSubplot("cash").addCallback("Cash", strat.getBroker().getCash())
        # Plot strategy vs. benchmark HS300 cumulative returns.
        plt.getOrCreateSubplot("returns").addDataSeries(
            "hs300",
            cumret.CumulativeReturn(feed["hs300"].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()