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()
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)
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")
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()
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)
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))
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")
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)