def main(plot): instrument = "TSLA" vwapWindowSize = 60 threshold = 0.00000001 # Download the bars. feed = quandl.build_feed("WIKI", [instrument], 2007, 2018, ".") strat = VWAPMomentum(feed, instrument, vwapWindowSize, threshold) sharpeRatioAnalyzer = sharpe.SharpeRatio() strat.attachAnalyzer(sharpeRatioAnalyzer) retAnalyzer = returns.Returns() strat.attachAnalyzer(retAnalyzer) drawDownAnalyzer = drawdown.DrawDown() strat.attachAnalyzer(drawDownAnalyzer) tradesAnalyzer = trades.Trades() strat.attachAnalyzer(tradesAnalyzer) returns3 = tradesAnalyzer.getAllReturns() if plot: plt = plotter.StrategyPlotter(strat, True, False, True) plt.getInstrumentSubplot(instrument).addDataSeries( "vwap", strat.getVWAP()) strat.run() print("Final portfolio value: $%.2f" % strat.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())) print(retAnalyzer.getReturns()) print("") print("Total trades: %d" % (tradesAnalyzer.getCount())) if tradesAnalyzer.getCount() > 0: profits = tradesAnalyzer.getAll() print("Avg. profit: $%2.f" % (profits.mean())) print("Profits std. dev.: $%2.f" % (profits.std())) print("Max. profit: $%2.f" % (profits.max())) print("Min. profit: $%2.f" % (profits.min())) print(stats.ttest_1samp(tradesAnalyzer.getAllReturns(), 0)) if plot: plt.plot()
def main(plot): instrument = "002941" bBandsPeriod = 10 # Download the bars. feed = yahoofeed.Feed() feed.addBarsFromCSV("002941", "F:/shuju/002941-orcl.csv") strat = BBands(feed, instrument, bBandsPeriod) sharpeRatioAnalyzer = sharpe.SharpeRatio() strat.attachAnalyzer(sharpeRatioAnalyzer) if plot: plt = plotter.StrategyPlotter(strat, True, True, True) plt.getInstrumentSubplot(instrument).addDataSeries( "upper", strat.getBollingerBands().getUpperBand()) plt.getInstrumentSubplot(instrument).addDataSeries( "middle", strat.getBollingerBands().getMiddleBand()) plt.getInstrumentSubplot(instrument).addDataSeries( "lower", strat.getBollingerBands().getLowerBand()) strat.run() print("Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05)) if plot: plt.plot()
def Function_form( bBandsPeriod,smaPeriod_short,smaPeriod_long, slopePeriod,plot=False): from pyalgotrade.stratanalyzer import returns from pyalgotrade.stratanalyzer import sharpe from pyalgotrade.stratanalyzer import drawdown from pyalgotrade.stratanalyzer import trades from pyalgotrade import strategy from pyalgotrade.strategy import position from pyalgotrade import plotter from pyalgotrade.tools import yahoofinance from pyalgotrade.barfeed import yahoofeed from pyalgotrade.technical import bollinger from pyalgotrade.stratanalyzer import sharpe import BBands_mod #import report import matplotlib.pyplot as plt # Load the yahoo feed from the CSV file feed = yahoofeed.Feed() feed.addBarsFromCSV("orcl", "data_daily.csv") #def main(plot): instrument = "orcl" # Evaluate the strategy with the feed's bars. myStrategy = BBands_mod.BBands(feed, instrument, bBandsPeriod,smaPeriod_short,smaPeriod_long,slopePeriod) if plot: plt = plotter.StrategyPlotter(myStrategy, True, True, True) plt.getInstrumentSubplot(instrument).addDataSeries("upper", myStrategy.getBollingerBands().getUpperBand()) plt.getInstrumentSubplot(instrument).addDataSeries("middle", myStrategy.getBollingerBands().getMiddleBand()) plt.getInstrumentSubplot(instrument).addDataSeries("lower", myStrategy.getBollingerBands().getLowerBand()) # 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()) print print "Total trades: %d" % (tradesAnalyzer.getCount()) if tradesAnalyzer.getCount() > 0: profits = tradesAnalyzer.getAll() print "Avg. profit: $%2.f" % (profits.mean()) print "Profits std. dev.: $%2.f" % (profits.std()) print "Max. profit: $%2.f" % (profits.max()) print "Min. profit: $%2.f" % (profits.min()) returns = tradesAnalyzer.getAllReturns() print "Avg. return: %2.f %%" % (returns.mean() * 100) print "Returns std. dev.: %2.f %%" % (returns.std() * 100) print "Max. return: %2.f %%" % (returns.max() * 100) print "Min. return: %2.f %%" % (returns.min() * 100) print print "Profitable trades: %d" % (tradesAnalyzer.getProfitableCount()) if tradesAnalyzer.getProfitableCount() > 0: profits = tradesAnalyzer.getProfits() print "Avg. profit: $%2.f" % (profits.mean()) print "Profits std. dev.: $%2.f" % (profits.std()) print "Max. profit: $%2.f" % (profits.max()) print "Min. profit: $%2.f" % (profits.min()) returns = tradesAnalyzer.getPositiveReturns() print "Avg. return: %2.f %%" % (returns.mean() * 100) print "Returns std. dev.: %2.f %%" % (returns.std() * 100) print "Max. return: %2.f %%" % (returns.max() * 100) print "Min. return: %2.f %%" % (returns.min() * 100) print print "Unprofitable trades: %d" % (tradesAnalyzer.getUnprofitableCount()) if tradesAnalyzer.getUnprofitableCount() > 0: losses = tradesAnalyzer.getLosses() print "Avg. loss: $%2.f" % (losses.mean()) print "Losses std. dev.: $%2.f" % (losses.std()) print "Max. loss: $%2.f" % (losses.min()) print "Min. loss: $%2.f" % (losses.max()) returns = tradesAnalyzer.getNegativeReturns() print "Avg. return: %2.f %%" % (returns.mean() * 100) print "Returns std. dev.: %2.f %%" % (returns.std() * 100) print "Max. return: %2.f %%" % (returns.max() * 100) print "Min. return: %2.f %%" % (returns.min() * 100) if plot: plt.plot() return (myStrategy.getResult(),retAnalyzer.getCumulativeReturns()[-1] * 100, sharpeRatioAnalyzer.getSharpeRatio(0.05), drawDownAnalyzer.getMaxDrawDown() * 100)
#def main(plot): instrument = "orcl" bBandsPeriod = 48 smaPeriod_short = 20 smaPeriod_long = 35 slopePeriod = 40 plot = True # Evaluate the strategy with the feed's bars. myStrategy = BBands_mod.BBands(feed, instrument, bBandsPeriod, smaPeriod_short, smaPeriod_long, slopePeriod) if plot: plt = plotter.StrategyPlotter(myStrategy, True, True, True) plt.getInstrumentSubplot(instrument).addDataSeries( "upper", myStrategy.getBollingerBands().getUpperBand()) plt.getInstrumentSubplot(instrument).addDataSeries( "middle", myStrategy.getBollingerBands().getMiddleBand()) plt.getInstrumentSubplot(instrument).addDataSeries( "lower", myStrategy.getBollingerBands().getLowerBand()) # 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)
path = "..\\histdata\\day\\" elif frequency == bar.Frequency.SECOND: path = "..\\histdata\\tick\\" filepath = path +'stock_'+ instrument + "_"+date+".csv" #############################################don't change ############################33 from pyalgotrade.barfeed.csvfeed import GenericBarFeed barfeed = GenericBarFeed(frequency) barfeed.setDateTimeFormat('%Y-%m-%d %H:%M:%S') barfeed.addBarsFromCSV(instrument, filepath) strat = strat(barfeed, instrument, *paras) if plot: plt = plotter.StrategyPlotter(strat) plt.getInstrumentSubplot(instrument).addDataSeries("upper", strat.getBollingerBands().getUpperBand()) plt.getInstrumentSubplot(instrument).addDataSeries("middle", strat.getBollingerBands().getMiddleBand()) plt.getInstrumentSubplot(instrument).addDataSeries("lower", strat.getBollingerBands().getLowerBand()) position = strat.getTest() plt.getOrCreateSubplot("position").addDataSeries("position", position) #position = strat.getTest() #plt.getOrCreateSubplot("position").addDataSeries("position", position) #plt.getOrCreateSubplot("macd").addDataSeries('macd2',strat.getMACD2()) strat.run() if plot: plt.plot()
def Function_form(bBandsPeriod, smaPeriod_short, smaPeriod_long, slopePeriod, plot=False): from pyalgotrade.stratanalyzer import returns from pyalgotrade.stratanalyzer import sharpe from pyalgotrade.stratanalyzer import drawdown from pyalgotrade.stratanalyzer import trades from pyalgotrade import strategy from pyalgotrade.strategy import position from pyalgotrade import plotter from pyalgotrade.tools import yahoofinance from pyalgotrade.barfeed import yahoofeed from pyalgotrade.technical import bollinger from pyalgotrade.stratanalyzer import sharpe import BBands_mod #import report import matplotlib.pyplot as plt # Load the yahoo feed from the CSV file feed = yahoofeed.Feed() feed.addBarsFromCSV("orcl", "data_daily.csv") #def main(plot): instrument = "orcl" # Evaluate the strategy with the feed's bars. myStrategy = BBands_mod.BBands(feed, instrument, bBandsPeriod, smaPeriod_short, smaPeriod_long, slopePeriod) if plot: plt = plotter.StrategyPlotter(myStrategy, True, True, True) plt.getInstrumentSubplot(instrument).addDataSeries( "upper", myStrategy.getBollingerBands().getUpperBand()) plt.getInstrumentSubplot(instrument).addDataSeries( "middle", myStrategy.getBollingerBands().getMiddleBand()) plt.getInstrumentSubplot(instrument).addDataSeries( "lower", myStrategy.getBollingerBands().getLowerBand()) # 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()) print print "Total trades: %d" % (tradesAnalyzer.getCount()) if tradesAnalyzer.getCount() > 0: profits = tradesAnalyzer.getAll() print "Avg. profit: $%2.f" % (profits.mean()) print "Profits std. dev.: $%2.f" % (profits.std()) print "Max. profit: $%2.f" % (profits.max()) print "Min. profit: $%2.f" % (profits.min()) returns = tradesAnalyzer.getAllReturns() print "Avg. return: %2.f %%" % (returns.mean() * 100) print "Returns std. dev.: %2.f %%" % (returns.std() * 100) print "Max. return: %2.f %%" % (returns.max() * 100) print "Min. return: %2.f %%" % (returns.min() * 100) print print "Profitable trades: %d" % (tradesAnalyzer.getProfitableCount()) if tradesAnalyzer.getProfitableCount() > 0: profits = tradesAnalyzer.getProfits() print "Avg. profit: $%2.f" % (profits.mean()) print "Profits std. dev.: $%2.f" % (profits.std()) print "Max. profit: $%2.f" % (profits.max()) print "Min. profit: $%2.f" % (profits.min()) returns = tradesAnalyzer.getPositiveReturns() print "Avg. return: %2.f %%" % (returns.mean() * 100) print "Returns std. dev.: %2.f %%" % (returns.std() * 100) print "Max. return: %2.f %%" % (returns.max() * 100) print "Min. return: %2.f %%" % (returns.min() * 100) print print "Unprofitable trades: %d" % (tradesAnalyzer.getUnprofitableCount()) if tradesAnalyzer.getUnprofitableCount() > 0: losses = tradesAnalyzer.getLosses() print "Avg. loss: $%2.f" % (losses.mean()) print "Losses std. dev.: $%2.f" % (losses.std()) print "Max. loss: $%2.f" % (losses.min()) print "Min. loss: $%2.f" % (losses.max()) returns = tradesAnalyzer.getNegativeReturns() print "Avg. return: %2.f %%" % (returns.mean() * 100) print "Returns std. dev.: %2.f %%" % (returns.std() * 100) print "Max. return: %2.f %%" % (returns.max() * 100) print "Min. return: %2.f %%" % (returns.min() * 100) if plot: plt.plot() return (myStrategy.getResult(), retAnalyzer.getCumulativeReturns()[-1] * 100, sharpeRatioAnalyzer.getSharpeRatio(0.05), drawDownAnalyzer.getMaxDrawDown() * 100)
@author: syono """ from cybos import * import pandas as pd import matplotlib.pyplot as plt from strategy import BollingerStrategy, BuyAndHoldStrategy from barfeed import dataframefeed from pyalgotrade import plotter from datetime import date targetStock = getBarsFromCybos("A000660", date(2015, 1, 1), date(2016, 12, 29)) targetStock.index = targetStock['Date'] initialCash = 200000 feed = dataframefeed.Feed() feed.addBarsFromDf('targetStock', targetStock) myStrategy = BollingerStrategy(feed, 'targetStock', initialCash, 20, 1.8) plt = plotter.StrategyPlotter(myStrategy) subplot = plt.getInstrumentSubplot('targetStock') subplot.addDataSeries("Middle", myStrategy.getMiddle()) subplot.addDataSeries("Upper", myStrategy.getUpper()) subplot.addDataSeries("Lower", myStrategy.getLower()) myStrategy.run() print "Bollinger Band: Final portfolio value: $%.2f" % myStrategy.getBroker( ).getEquity() plt.plot()