def testStrategy(): from engine import bar strat = thrSMA instrument = '600288' market = 'SH' fromDate = '20150101' toDate ='20150601' frequency = bar.Frequency.MINUTE paras = [2, 20, 60, 10] plot = True #############################################path set ############################33 import os print os.path.split(os.path.realpath(__file__)) if frequency == bar.Frequency.MINUTE: path = os.path.join(os.environ.get('STRATEGYPATH'), '..', 'histdata', 'minute') elif frequency == bar.Frequency.DAY: path = os.path.join(os.environ.get('STRATEGYPATH'), '..', 'histdata', 'day') filepath = os.path.join(path, instrument + market + ".csv") #############################################don't change ############################33 from engine.barfeed.csvfeed import Feed barfeed = Feed(frequency) barfeed.setDateTimeFormat('%Y-%m-%d %H:%M:%S') barfeed.loadBars(instrument, market, fromDate, toDate, filepath) engine_id = instrument + '.' + market strat = strat(barfeed, engine_id, *paras) from engine.stratanalyzer import returns from engine.stratanalyzer import sharpe from engine.stratanalyzer import drawdown from engine.stratanalyzer import trades retAnalyzer = returns.Returns() strat.attachAnalyzer(retAnalyzer) sharpeRatioAnalyzer = sharpe.SharpeRatio() strat.attachAnalyzer(sharpeRatioAnalyzer) drawDownAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(drawDownAnalyzer) tradesAnalyzer = trades.Trades() strat.attachAnalyzer(tradesAnalyzer) strat.run() #夏普率 sharp = sharpeRatioAnalyzer.getSharpeRatio(0.05) #最大回撤 maxdd = drawDownAnalyzer.getMaxDrawDown() #收益率 return_ = retAnalyzer.getCumulativeReturns()[-1] #收益曲线 return_list = [] for item in retAnalyzer.getCumulativeReturns(): return_list.append(item)
def __testManualImpl(self, closingPrices, cash): barFeed = TestBarFeed(bar.Frequency.DAY) bars = build_bars_from_closing_prices(closingPrices) barFeed.addBarsFromSequence("orcl", bars) strat = strategy_test.TestStrategy(barFeed, cash) stratAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(stratAnalyzer) # Manually place the order to get it filled on the first bar. order = strat.getBroker().createMarketOrder(broker.Order.Action.BUY, "orcl", 1, True) order.setGoodTillCanceled(True) strat.getBroker().submitOrder(order) strat.run() return stratAnalyzer
def testNoTrades(self): barFeed = yahoofeed.Feed() barFeed.addBarsFromCSV( "ige", common.get_data_file_path("sharpe-ratio-test-ige.csv")) barFeed.addBarsFromCSV( "spy", common.get_data_file_path("sharpe-ratio-test-spy.csv")) strat = strategy_test.TestStrategy(barFeed, 1000) strat.setBrokerOrdersGTC(True) strat.setUseAdjustedValues(True) stratAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(stratAnalyzer) strat.run() self.assertTrue(strat.getBroker().getCash() == 1000) self.assertEqual(strat.orderUpdatedCalls, 0) self.assertTrue(stratAnalyzer.getMaxDrawDown() == 0) self.assertTrue( stratAnalyzer.getLongestDrawDownDuration() == datetime.timedelta())
def __testIGE_BrokerImpl(self, quantity): initialCash = 42.09 * quantity # This testcase is based on an example from Ernie Chan's book: # 'Quantitative Trading: How to Build Your Own Algorithmic Trading Business' barFeed = yahoofeed.Feed() barFeed.addBarsFromCSV( "ige", common.get_data_file_path("sharpe-ratio-test-ige.csv")) strat = strategy_test.TestStrategy(barFeed, initialCash) strat.setUseAdjustedValues(True) strat.setBrokerOrdersGTC(True) stratAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(stratAnalyzer) # Disable volume checks to match book results. strat.getBroker().getFillStrategy().setVolumeLimit(None) # Manually place the order to get it filled on the first bar. order = strat.getBroker().createMarketOrder(broker.Order.Action.BUY, "ige", quantity, True) # Adj. Close: 42.09 order.setGoodTillCanceled(True) strat.getBroker().submitOrder(order) strat.addOrder(datetime.datetime(2007, 11, 13), strat.getBroker().createMarketOrder, broker.Order.Action.SELL, "ige", quantity, True) # Adj. Close: 127.64 strat.run() self.assertTrue( round(strat.getBroker().getCash(), 2) == initialCash + (127.64 - 42.09) * quantity) self.assertEqual(strat.orderUpdatedCalls, 6) self.assertTrue(round(stratAnalyzer.getMaxDrawDown(), 5) == 0.31178) self.assertTrue( stratAnalyzer.getLongestDrawDownDuration() == datetime.timedelta( days=623))
def testStrategy(): from engine import bar from engine import plotter strat = Bollinger_Bandit instrument = '600288' market = 'SH' fromDate = '20150101' toDate ='20150601' frequency = bar.Frequency.MINUTE paras = [40, 15, 35, 15, 60, 2] plot = True #############################################path set ############################33 import os if frequency == bar.Frequency.MINUTE: path = os.path.join('..', 'histdata', 'minute') elif frequency == bar.Frequency.DAY: path = os.path.join('..', 'histdata', 'day') filepath = os.path.join(path, instrument + market + ".csv") #############################################don't change ############################33 from engine.barfeed.csvfeed import Feed barfeed = Feed(frequency) barfeed.setDateTimeFormat('%Y-%m-%d %H:%M:%S') barfeed.loadBars(instrument, market, fromDate, toDate, filepath) engine_id = instrument + '.' + market strat = strat(barfeed, engine_id, *paras) from engine.stratanalyzer import returns from engine.stratanalyzer import sharpe from engine.stratanalyzer import drawdown from engine.stratanalyzer import trades retAnalyzer = returns.Returns() strat.attachAnalyzer(retAnalyzer) sharpeRatioAnalyzer = sharpe.SharpeRatio() strat.attachAnalyzer(sharpeRatioAnalyzer) drawDownAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(drawDownAnalyzer) tradesAnalyzer = trades.Trades() strat.attachAnalyzer(tradesAnalyzer) if plot: plt = plotter.StrategyPlotter(strat, True, True, True) strat.run() if plot: plt.plot() #夏普率 sharp = sharpeRatioAnalyzer.getSharpeRatio(0.05) #最大回撤 maxdd = drawDownAnalyzer.getMaxDrawDown() #收益率 return_ = retAnalyzer.getCumulativeReturns()[-1] #收益曲线 return_list = [] for item in retAnalyzer.getCumulativeReturns(): return_list.append(item)