def run_strategy(paras): feed = dataframefeed.Feed() feed.addBarsFromDataFrame(instrument, dat) strat = singleMA.SingleMA(feed, instrument, paras, initialCash) # attach analyzersgc returnsAnalyzer = returns.Returns() strat.attachAnalyzer(returnsAnalyzer) drawdownAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(drawdownAnalyzer) sharpeRatioAnalyzer = sharpe.SharpeRatio() strat.attachAnalyzer(sharpeRatioAnalyzer) tradeAnalyzer = trades.Trades() strat.attachAnalyzer(tradeAnalyzer) strat.run() print "Final portfolio value: $%.2f with paras %d" % ( strat.getBroker().getEquity(), paras) return { 'returns': returnsAnalyzer.getCumulativeReturns()[-1], 'drawdown': drawdownAnalyzer.getMaxDrawDown(), 'longestDrawDownDuration': drawdownAnalyzer.getLongestDrawDownDuration(), 'sr': sharpeRatioAnalyzer.getSharpeRatio(0.03), 'total trades': tradeAnalyzer.getCount(), 'win': tradeAnalyzer.getProfitableCount(), 'lose': tradeAnalyzer.getUnprofitableCount(), 'average win profit': tradeAnalyzer.getPositiveReturns().mean(), 'average lose loss': tradeAnalyzer.getNegativeReturns().mean(), 'wining ratio': tradeAnalyzer.getProfitableCount() / tradeAnalyzer.getCount(), 'odds': -tradeAnalyzer.getPositiveReturns().mean() / tradeAnalyzer.getNegativeReturns().mean() }
import utility.windutility as wu from utility import dataframefeed from pyalgotrade.stratanalyzer import returns strat = singleMA instrument = '000001.SH' fromDate = '20160101' toDate = '20160727' frequency = bar.Frequency.MINUTE paras = [19] plot = True data = wu.wsi(instrument, 'open, high, low, close, volume', fromDate, toDate) # data['adjclose'] = data['close'] * data['adjfactor'] / data['adjfactor'][-1] feed = dataframefeed.Feed() feed.addBarsFromDataFrame(instrument, data) strat = strat(feed, instrument, *paras) returnsAnalyzer = returns.Returns() strat.attachAnalyzer(returnsAnalyzer) if plot: # plt = plotter.StrategyPlotter(strat, True, True, True) # ma = strat.getMA() # plt.getInstrumentSubplot('indicator').addDataSeries('ma', ma) plt = plotter.StrategyPlotter(strat) # plt.getInstrumentSubplot(instrument).addDataSeries('ma', strat.getMA()) plt.getOrCreateSubplot('returns').addDataSeries( 'simple return', returnsAnalyzer.getReturns())