def main(): ''' 策略执行 :return: ''' instrument = "600036" feeds = mootdx.build_feed([instrument], 2008, 2018, "histdata/mootdx") # 3.实例化策略 strat = MyStrategy(feeds, instrument) # 4.设置指标和绘图 ratio = sharpe.SharpeRatio() strat.attachAnalyzer(ratio) # plter = plotter.StrategyPlotter(strat) # 4.设置指标和绘图 draws = drawdown.DrawDown() strat.attachAnalyzer(draws) tradeAnalyzer = trades.Trades() strat.attachAnalyzer(tradeAnalyzer) plter = plotter.StrategyPlotter(strat) # 5.运行策略 strat.run() strat.info("最终收益: {}".format(strat.getResult())) # 6.输出夏普率、绘图 strat.info("夏普比率: {}".format(ratio.getSharpeRatio(0))) strat.info("最大回撤: {}".format(draws.getMaxDrawDown())) strat.info("回撤时间: {}".format(draws.getLongestDrawDownDuration())) plter.plot()
def main(): strat = thrSMA instrument = '600288' paras = [2, 20, 60, 10] feeds = tushare.build_feed([instrument], 2016, 2017, "histdata/tushare") strat = strat(feeds, instrument, *paras) retAnalyzer = returns.Returns() strat.attachAnalyzer(retAnalyzer) sharpeRatioAnalyzer = sharpe.SharpeRatio() strat.attachAnalyzer(sharpeRatioAnalyzer) drawDownAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(drawDownAnalyzer) tradesAnalyzer = trades.Trades() strat.attachAnalyzer(tradesAnalyzer) plter = plotter.StrategyPlotter(strat, True, True, True) strat.run() plter.plot() # 夏普率 sharp = sharpeRatioAnalyzer.getSharpeRatio(0.05) # 最大回撤 maxdd = drawDownAnalyzer.getMaxDrawDown() # 收益率 return_ = retAnalyzer.getCumulativeReturns()[-1] # 收益曲线 return_list = [] for item in retAnalyzer.getCumulativeReturns(): return_list.append(item)
def testStrategy(): instrument = '600288' frequency = bar.Frequency.TRADE fromDate = '20160815' toDate = '20160820' strat = OrderBook paras = [5, 20] plot = True from mooquant.tools import tushare feeds = tushare.build_feed([instrument], 2016, 2017, "histdata/tushare") strat = strat(feeds, instrument, *paras) 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)
def __testManualImpl(self, closingPrices, cash): barFeed = MyTestBarFeed(bar.Frequency.DAY) bars = build_bars_from_closing_prices(closingPrices) barFeed.addBarsFromSequence("orcl", bars) strat = strategy_test.MyTestStrategy(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.MyTestStrategy(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 testStrategy(): strat = thrSMA instrument = '600288' market = 'SH' fromDate = '20150101' toDate = '20150601' frequency = bar.Frequency.MINUTE plot = True paras = [2, 20, 60, 10] feeds = tushare.build_feed([instrument], 2016, 2017, "histdata/tushare") strat = strat(feeds, instrument, *paras) 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 __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.MyTestStrategy(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 mooquant import bar from mooquant import plotter strat = fourSMA instrument = '600288' market = 'SH' fromDate = '20150101' toDate = '20150601' frequency = bar.Frequency.MINUTE paras = [2, 20, 60, 10] plot = True # path set ############################33 # 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 # barfeed = Feed(frequency) # barfeed.setDateTimeFormat('%Y-%m-%d %H:%M:%S') # barfeed.loadBars(instrument, market, fromDate, toDate, filepath) # mooquant_id = instrument + '.' + market # strat = strat(barfeed, mooquant_id, *paras) from mooquant.tools import tushare feeds = tushare.build_feed([instrument], 2016, 2017, "histdata/tushare") strat = strat(feeds, instrument, *paras) 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)
from samples import sma_crossover if __name__ == '__main__': feed = yahoofeed.Feed() feed.addBarsFromCSV("orcl", "./tests/data/orcl-2000.csv") # Evaluate the strategy with the feed's bars. myStrategy = sma_crossover.SMACrossOver(feed, "orcl", 20) # Attach different analyzers to a strategy before executing it. retAnalyzer = returns.Returns() myStrategy.attachAnalyzer(retAnalyzer) sharpeRatioAnalyzer = sharpe.SharpeRatio() myStrategy.attachAnalyzer(sharpeRatioAnalyzer) drawDownAnalyzer = drawdown.DrawDown() myStrategy.attachAnalyzer(drawDownAnalyzer) tradesAnalyzer = trades.Trades() myStrategy.attachAnalyzer(tradesAnalyzer) # Run the strategy. myStrategy.run() print("Final portfolio value: $%.2f" % myStrategy.getResult()) print("Cumulative returns: %.2f %%" % (retAnalyzer.getCumulativeReturns()[-1] * 100)) print("Sharpe ratio: %.2f" % (sharpeRatioAnalyzer.getSharpeRatio(0.05))) print("Max. drawdown: %.2f %%" % (drawDownAnalyzer.getMaxDrawDown() * 100)) print("Longest drawdown duration: %s" % (drawDownAnalyzer.getLongestDrawDownDuration()))