def testResampleMtGoxMinute(self): # Resample. feed = mtgoxfeed.CSVTradeFeed() feed.addBarsFromCSV( common.get_data_file_path("trades-mgtox-usd-2013-01-01.csv")) resampledBarDS = resampled.ResampledBarDataSeries( feed["BTC"], barfeed.Frequency.MINUTE) resample.resample_to_csv(feed, barfeed.Frequency.MINUTE, "minute-mgtox-usd-2013-01-01.csv") resampledBarDS.pushLast( ) # Need to manually push the last stot since time didn't change. # Load the resampled file. feed = csvfeed.GenericBarFeed(barfeed.Frequency.MINUTE) feed.addBarsFromCSV("BTC", "minute-mgtox-usd-2013-01-01.csv") feed.loadAll() self.assertEqual(len(feed["BTC"]), 537) self.assertEqual(feed["BTC"][0].getDateTime(), datetime.datetime(2013, 01, 01, 00, 04, 59)) self.assertEqual(feed["BTC"][-1].getDateTime(), datetime.datetime(2013, 01, 01, 23, 58, 59)) self.assertEqual(len(resampledBarDS), len(feed["BTC"])) self.assertEqual(resampledBarDS[0].getDateTime(), dt.as_utc(feed["BTC"][0].getDateTime())) self.assertEqual(resampledBarDS[-1].getDateTime(), dt.as_utc(feed["BTC"][-1].getDateTime()))
def testResampleMtGoxHour(self): # Resample. feed = mtgoxfeed.CSVTradeFeed() feed.addBarsFromCSV( common.get_data_file_path("trades-mgtox-usd-2013-01-01.csv")) resampledBarDS = resampled.ResampledBarDataSeries( feed["BTC"], barfeed.Frequency.HOUR) resampledFile = os.path.join(common.get_temp_path(), "hour-mgtox-usd-2013-01-01.csv") resample.resample_to_csv(feed, barfeed.Frequency.HOUR, resampledFile) resampledBarDS.pushLast( ) # Need to manually push the last stot since time didn't change. # Load the resampled file. feed = csvfeed.GenericBarFeed(barfeed.Frequency.HOUR) feed.addBarsFromCSV("BTC", resampledFile) feed.loadAll() self.assertEqual(len(feed["BTC"]), 24) self.assertEqual(feed["BTC"][0].getDateTime(), datetime.datetime(2013, 01, 01, 00, 59, 59)) self.assertEqual(feed["BTC"][-1].getDateTime(), datetime.datetime(2013, 01, 01, 23, 59, 59)) self.assertEqual(len(resampledBarDS), len(feed["BTC"])) self.assertEqual(resampledBarDS[0].getDateTime(), dt.as_utc(feed["BTC"][0].getDateTime())) self.assertEqual(resampledBarDS[-1].getDateTime(), dt.as_utc(feed["BTC"][-1].getDateTime()))
def testBaseFeedInterface(self): common.init_temp_path() path = os.path.join(common.get_temp_path(), "trades-mgtox-usd-2013-01-01.csv") tools.download_trades_by_day("usd", 2013, 1, 1, path) bf = barfeed.CSVTradeFeed() bf.addBarsFromCSV(path) feed_test.tstBaseFeedInterface(self, bf)
def main(plot): bBandsPeriod = 60 * 24 * 2 # download and load the historic trade data from mtgox currency = 'USD' instrument = 'BTC' startdate = datetime.date(2013, 1, 1) enddate = datetime.date.today() - relativedelta(days=1) barFrequency = pyalgotrade.barfeed.Frequency.MINUTE print '(down-)loading bars' feed = GenericBarFeed(barFrequency) month = startdate while month <= enddate: fnamOrig = 'trades-mtgox-%s-%d-%d.csv' % (currency, month.year, month.month) if barFrequency == pyalgotrade.barfeed.Frequency.MINUTE: fnamResa = 'resamp1m-mtgox-%s-%d-%d.csv' % (currency, month.year, month.month) else: fnamResa = 'resamp1h-mtgox-%s-%d-%d.csv' % (currency, month.year, month.month) if not os.path.exists(fnamOrig): print 'downloading ', fnamOrig tools.download_trades_by_month(currency, month.year, month.month, fnamOrig) if not os.path.exists(fnamResa): print 'resampling ', fnamResa feedLocal = barfeed.CSVTradeFeed() feedLocal.addBarsFromCSV(fnamOrig) resample_to_csv(feedLocal, barFrequency, fnamResa) print 'loading ', fnamResa feed.addBarsFromCSV(instrument, fnamResa) month += relativedelta(months=1) print 'set up strategy and plot' myStrategy = MyStrategy(feed, instrument, bBandsPeriod) 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()) print 'run the strategy' myStrategy.run() print "Result: %.2f" % myStrategy.getResult() if plot: plt.plot()
def testDownloadAndParse(self): path = "trades-mgtox-usd-2013-01-01.csv" tools.download_trades_by_day("usd", 2013, 1, 1, path) bf = barfeed.CSVTradeFeed() bf.addBarsFromCSV(path) bf.loadAll() ds = bf["BTC"] self.assertTrue(len(ds) > 0) self.assertEqual(ds[-1].getOpen(), ds[-1].getHigh()) self.assertEqual(ds[-1].getHigh(), ds[-1].getLow()) self.assertEqual(ds[-1].getLow(), ds[-1].getClose()) self.assertEqual(ds[-1].getClose(), 13.30413) self.assertEqual(ds[-1].getVolume(), 0.01) self.assertEqual(ds[-1].getTradeType(), "ask") self.assertEqual(ds[-1].getDateTime().date(), datetime.date(2013, 1, 1))
def testResampleMtGoxDay(self): # Resample. feed = mtgoxfeed.CSVTradeFeed() feed.addBarsFromCSV( common.get_data_file_path("trades-mgtox-usd-2013-01-01.csv")) resampledBarDS = resampled.ResampledBarDataSeries( feed["BTC"], barfeed.Frequency.DAY) resampledFile = os.path.join(common.get_temp_path(), "day-mgtox-usd-2013-01-01.csv") resample.resample_to_csv(feed, barfeed.Frequency.DAY, resampledFile) resampledBarDS.pushLast( ) # Need to manually push the last stot since time didn't change. # Load the resampled file. feed = csvfeed.GenericBarFeed(barfeed.Frequency.DAY) feed.addBarsFromCSV("BTC", resampledFile) feed.loadAll() self.assertEqual(len(feed["BTC"]), 1) self.assertEqual(feed["BTC"][0].getDateTime(), datetime.datetime(2013, 01, 01, 23, 59, 59)) self.assertEqual(feed["BTC"][0].getOpen(), 13.51001) self.assertEqual(feed["BTC"][0].getHigh(), 13.56) self.assertEqual(feed["BTC"][0].getLow(), 13.16123) self.assertEqual(feed["BTC"][0].getClose(), 13.30413) self.assertEqual(feed["BTC"][0].getVolume(), 28168.9114596) self.assertEqual(feed["BTC"][0].getAdjClose(), 13.30413) self.assertEqual(len(resampledBarDS), len(feed["BTC"])) self.assertEqual(resampledBarDS[0].getDateTime(), dt.as_utc(feed["BTC"][0].getDateTime())) self.assertEqual(resampledBarDS[-1].getDateTime(), dt.as_utc(feed["BTC"][-1].getDateTime())) self.assertEqual(resampledBarDS[0].getOpen(), feed["BTC"][0].getOpen()) self.assertEqual(resampledBarDS[0].getHigh(), feed["BTC"][0].getHigh()) self.assertEqual(resampledBarDS[0].getLow(), feed["BTC"][0].getLow()) self.assertEqual(resampledBarDS[0].getClose(), feed["BTC"][0].getClose()) self.assertEqual(round(resampledBarDS[0].getVolume(), 5), round(feed["BTC"][0].getVolume(), 5)) self.assertEqual(resampledBarDS[0].getAdjClose(), feed["BTC"][0].getAdjClose())
def main(plot): # Load the trades from the CSV file print "Loading bars" feed = barfeed.CSVTradeFeed() feed.addBarsFromCSV("trades-mtgox-usd-2013-03.csv") # Create a backtesting broker. brk = broker.BacktestingBroker(200, feed) # Run the strategy with the feed and the broker. print "Running strategy" strat = mtgox_scalper.Strategy("BTC", feed, brk) if plot: plt = plotter.StrategyPlotter(strat, plotBuySell=False) plt.getOrCreateSubplot("volatility").addDataSeries( "Volatility", strat.returnsVolatility) strat.run() print "Result: %.2f" % strat.getResult() if plot: plt.plot()