Beispiel #1
0
    def testLoadFilterFromAndTo(self):
        feed = barfeed.CSVTradeFeed()
        feed.addBarsFromCSV(common.get_data_file_path("bitstampUSD.csv"),
                            instrument=INSTRUMENT,
                            fromDateTime=dt.as_utc(
                                datetime.datetime(2012, 5, 29)),
                            toDateTime=datetime.datetime(2012, 5, 31))
        loaded = [(dateTime, bars) for dateTime, bars in feed]

        self.assertEqual(len(loaded), 579)

        self.assertEqual(loaded[0][0],
                         dt.as_utc(datetime.datetime(2012, 5, 29, 1, 47, 52)))
        b = loaded[0][1].getBar(INSTRUMENT)
        self.assertEqual(b.getDateTime(),
                         dt.as_utc(datetime.datetime(2012, 5, 29, 1, 47, 52)))
        self.assertEqual(b.getClose(), 5.07)
        self.assertEqual(b.getVolume(), 1.39081288)

        self.assertEqual(loaded[-1][0],
                         dt.as_utc(datetime.datetime(2012, 5, 30, 23, 49, 21)))
        b = loaded[-1][1].getBar(INSTRUMENT)
        self.assertEqual(b.getDateTime(),
                         dt.as_utc(datetime.datetime(2012, 5, 30, 23, 49, 21)))
        self.assertEqual(b.getClose(), 5.14)
        self.assertEqual(b.getVolume(), 20)
def backtest(strategyClass, is_optimization, is_tick, start_date, end_date,
             symbol, frequency, position_size, lb, i):
    if is_tick:
        feed = bitbf.CSVTradeFeed()
        feed.addBarsFromCSV("../xbtusd_trades.csv",
                            'XBTUSD',
                            fromDateTime=start_date,
                            toDateTime=end_date)
    else:
        feed = GenericBarFeed(bar.Frequency.MINUTE, maxLen=10000)
        feed.setColumnName('datetime', 'Date')
        feed.setDateTimeFormat('%Y-%m-%dT%H:%M:%S.%fZ')
        feed.setBarFilter(csvfeed.DateRangeFilter(start_date, end_date))
        feed.addBarsFromCSV("XBTUSD", "../BITMEX_SPOT_BTC_USD_1MIN.csv")

    if is_optimization:
        strat = local.run(strategyClass,
                          feed,
                          parameters_generator(),
                          workerCount=None,
                          logLevel=10,
                          batchSize=1)
        print(strat.getResult(), strat.getParameters())
    else:
        strat = strategyClass(feed, None, symbol, int(frequency),
                              position_size, lb, i)

        strat.run()
Beispiel #3
0
    def testLoadNoFilter(self):
        feed = barfeed.CSVTradeFeed()
        feed.addBarsFromCSV(common.get_data_file_path("bitstampUSD.csv"))
        loaded = [(dateTime, bars) for dateTime, bars in feed]

        self.assertEqual(len(loaded), 9999)

        self.assertEqual(loaded[0][0],
                         dt.as_utc(datetime.datetime(2011, 9, 13, 13, 53, 36)))
        b = loaded[0][1].getBar(INSTRUMENT)
        self.assertEqual(b.getDateTime(),
                         dt.as_utc(datetime.datetime(2011, 9, 13, 13, 53, 36)))
        self.assertEqual(b.getClose(), 5.8)
        self.assertEqual(b.getPrice(), 5.8)
        self.assertEqual(b.getVolume(), 1.0)

        self.assertEqual(
            loaded[-1][0],
            dt.as_utc(datetime.datetime(2012, 5, 31, 8, 41, 18, 5)))
        b = loaded[-1][1].getBar(INSTRUMENT)
        self.assertEqual(
            b.getDateTime(),
            dt.as_utc(datetime.datetime(2012, 5, 31, 8, 41, 18, 5)))
        self.assertEqual(b.getClose(), 5.1)
        self.assertEqual(b.getPrice(), 5.1)
        self.assertEqual(b.getVolume(), 0.39215686)
Beispiel #4
0
    def testLoadFilterFrom(self):
        feed = barfeed.CSVTradeFeed()
        feed.addBarsFromCSV(common.get_data_file_path("bitstampUSD.csv"),
                            INSTRUMENT,
                            fromDateTime=dt.as_utc(
                                datetime.datetime(2012, 5, 29)))
        loaded = [(dateTime, bars) for dateTime, bars in feed]

        self.assertEqual(len(loaded), 646)

        self.assertEqual(loaded[0][0],
                         dt.as_utc(datetime.datetime(2012, 5, 29, 1, 47, 52)))
        b = loaded[0][1].getBar(INSTRUMENT)
        self.assertEqual(b.getDateTime(),
                         dt.as_utc(datetime.datetime(2012, 5, 29, 1, 47, 52)))
        self.assertEqual(b.getClose(), 5.07)
        self.assertEqual(b.getPrice(), 5.07)
        self.assertEqual(b.getVolume(), 1.39081288)

        self.assertEqual(
            loaded[-1][0],
            dt.as_utc(datetime.datetime(2012, 5, 31, 8, 41, 18, 5)))
        b = loaded[-1][1].getBar(INSTRUMENT)
        self.assertEqual(
            b.getDateTime(),
            dt.as_utc(datetime.datetime(2012, 5, 31, 8, 41, 18, 5)))
        self.assertEqual(b.getClose(), 5.1)
        self.assertEqual(b.getPrice(), 5.1)
        self.assertEqual(b.getVolume(), 0.39215686)
def main(end, months):
    barFeed = barfeed.CSVTradeFeed()
    start = end - timedelta(months * 365 / 12)
    barFeed.addBarsFromCSV("/home/mcstar/data/.coinbaseUSD.csv",
                           fromDateTime=start,
                           toDateTime=end)
    resample.resample_to_csv(barFeed, bar.Frequency.MINUTE * 30,
                             "./30min-btc-%s.csv" % (start.year))
def main(end,months,minutes=30):
	barFeed = barfeed.CSVTradeFeed()
	start = end - timedelta(months*365/12)
	print "Resampling from %s to %s" % (start,end)
	barFeed.addBarsFromCSV("/home/mcstar/data/coinbaseUSD.csv", fromDateTime=start, toDateTime=end)
	path = "./%smin-BTC-%s.csv" % (minutes,end.year)
	resample.resample_to_csv(barFeed, bar.Frequency.MINUTE*minutes, path)
	print "Saved to ",path 
def main():
    '''
    mid 先要从网站手动下载tick压缩文件
    手动解压后通过此程序转化周期
    '''
    barFeed = barfeed.CSVTradeFeed()
    barFeed.addBarsFromCSV("bitstampUSD.csv",
                           fromDateTime=datetime.datetime(2014, 1, 1),
                           toDateTime=datetime.datetime(2014, 2, 1))
    resample.resample_to_csv(barFeed, bar.Frequency.MINUTE * 30,
                             "30min-bitstampUSD.csv")
Beispiel #8
0
    def testMinTrade(self):
        class TestStrategy(strategy.BaseStrategy):
            def __init__(self, feed, brk):
                strategy.BaseStrategy.__init__(self, feed, brk)
                self.pos = None

            def onBars(self, bars):
                if not self.pos:
                    self.pos = self.enterLongLimit("BTC", 4.99, 1, True)

        barFeed = btcbarfeed.CSVTradeFeed()
        barFeed.addBarsFromCSV(tc_common.get_data_file_path("bitstampUSD.csv"))
        brk = broker.BacktestingBroker(100, barFeed)
        strat = TestStrategy(barFeed, brk)
        with self.assertRaisesRegexp(Exception, "Trade must be >= 5"):
            strat.run()
Beispiel #9
0
    def testMinTrade(self):
        class TestStrategy(strategy.BaseStrategy):
            def __init__(self, feed, brk):
                strategy.BaseStrategy.__init__(self, feed, brk)
                self.pos = None

            def onBars(self, bars):
                if not self.pos:
                    self.pos = self.enterLongLimit(INSTRUMENT, 4.99, 1, True)

        barFeed = btcbarfeed.CSVTradeFeed()
        barFeed.addBarsFromCSV(tc_common.get_data_file_path("bitstampUSD.csv"),
                               instrument=INSTRUMENT)
        brk = broker.BacktestingBroker({PRICE_CURRENCY: 100}, barFeed)
        strat = TestStrategy(barFeed, brk)
        with self.assertRaisesRegexp(Exception, "USD amount must be >= 25"):
            strat.run()
    def testBitcoinChartsFeed(self):
        class TestStrategy(strategy.BaseStrategy):
            def __init__(self, feed, brk):
                strategy.BaseStrategy.__init__(self, feed, brk)
                self.pos = None

            def onBars(self, bars):
                if not self.pos:
                    self.pos = self.enterLongLimit("BTC", 5.83, 1, True)

        barFeed = btcbarfeed.CSVTradeFeed()
        barFeed.addBarsFromCSV(tc_common.get_data_file_path("bitstampUSD.csv"))
        brk = broker.BacktestingBroker(100, barFeed)
        strat = TestStrategy(barFeed, brk)
        strat.run()
        self.assertEquals(strat.pos.getShares(), 1)
        self.assertEquals(strat.pos.entryActive(), False)
        self.assertEquals(strat.pos.isOpen(), True)
        self.assertEquals(strat.pos.getEntryOrder().getAvgFillPrice(), 5.83)
Beispiel #11
0
    def testBitcoinChartsFeed(self):
        class TestStrategy(strategy.BaseStrategy):
            def __init__(self, feed, brk):
                strategy.BaseStrategy.__init__(self, feed, brk)
                self.pos = None

            def onBars(self, bars):
                if not self.pos:
                    self.pos = self.enterLongLimit(INSTRUMENT, 5.83, 5, True)

        barFeed = btcbarfeed.CSVTradeFeed()
        barFeed.addBarsFromCSV(tc_common.get_data_file_path("bitstampUSD.csv"),
                               instrument=INSTRUMENT)
        brk = broker.BacktestingBroker({PRICE_CURRENCY: 100}, barFeed)
        strat = TestStrategy(barFeed, brk)
        strat.run()
        self.assertEqual(strat.pos.getShares(), 5)
        self.assertEqual(strat.pos.entryActive(), False)
        self.assertEqual(strat.pos.isOpen(), True)
        self.assertEqual(strat.pos.getEntryOrder().getAvgFillPrice(),
                         round((3 * 5.83 + 2 * 5.76) / 5.0, 2))
Beispiel #12
0
def main():
    barFeed = barfeed.CSVTradeFeed()
    barFeed.addBarsFromCSV("bitstampUSD.csv", fromDateTime=datetime.datetime(2014, 1, 1))
    resample.resample_to_csv(barFeed, bar.Frequency.MINUTE*30, "30min-bitstampUSD.csv")
Beispiel #13
0
def main(file_in, file_out, freq):
    barFeed = barfeed.CSVTradeFeed()
    barFeed.addBarsFromCSV(file_in, fromDateTime=datetime.datetime(2014, 1, 1))
    resample.resample_to_csv(barFeed, bar.Frequency.MINUTE * freq, file_out)