Exemplo n.º 1
0
    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()))
Exemplo n.º 2
0
    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()))
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
	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))
Exemplo n.º 6
0
    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())
Exemplo n.º 7
0
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()