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()
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()
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)
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()
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()
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()