def main(plot): instrument = "bitmex_LTCZ18" initialCash = 1000 vwapWindowSize = 100 buyThreshold = 0.02 sellThreshold = 0.01 # barFeed = csvfeed.GenericBarFeed(bar.Frequency.MINUTE*30) # barFeed.addBarsFromCSV(instrument, "30min-bitstampUSD.csv") feed = Feed(Frequency.SECOND) feed.loadBars('bitmex_LTCZ18', test_back=True) brk = broker.BacktestingBroker(initialCash, feed) strat = VWAPMomentum(feed, brk, instrument, vwapWindowSize, buyThreshold, sellThreshold) if plot: plt = plotter.StrategyPlotter(strat) plt.getInstrumentSubplot(instrument).addDataSeries( "VWAP", strat.getVWAP()) strat.run() if plot: plt.plot()
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 __init__(self, feed, *params): actions, initialCash, ncoins, history, simnum = params policy = QLearningDecisionPolicy(actions, history + 2, simnum) brk = broker.BacktestingBroker(initialCash, feed) strategy.BacktestingStrategy.__init__(self, feed, brk) self.__instrument = "BTC" self.__prices = feed[self.__instrument].getCloseDataSeries() self.__position = None self.__posSize = 0.05 self.__RLinitialCash = initialCash self.__RLncoins = ncoins self.__RLpolicy = policy self.__RLhistory = history
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 main(plot): instrument = "BTC" initialCash = 100 vwapWindowSize = 400 buyThreshold = 0.05 sellThreshold = 0.01 barFeed = csvfeed.GenericBarFeed(bar.Frequency.MINUTE*30) barFeed.addBarsFromCSV(instrument, "30min-bitstampUSD.csv") brk = broker.BacktestingBroker(initialCash, barFeed) strat = VWAPMomentum(barFeed, brk, instrument, vwapWindowSize, buyThreshold, sellThreshold) if plot: plt = plotter.StrategyPlotter(strat) plt.getInstrumentSubplot(instrument).addDataSeries("VWAP", strat.getVWAP()) strat.run() if plot: plt.plot()
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(plot): priceCurrency = "USD" instrument = "BTC/USD" vwapWindowSize = 100 buyThreshold = 0.02 sellThreshold = 0.01 barFeed = csvfeed.GenericBarFeed(bar.Frequency.MINUTE * 30) barFeed.addBarsFromCSV(instrument, "30min-bitstampUSD.csv") brk = broker.BacktestingBroker({priceCurrency: 1000}, barFeed) strat = VWAPMomentum(barFeed, brk, instrument, vwapWindowSize, buyThreshold, sellThreshold) if plot: from pyalgotrade import plotter plt = plotter.StrategyPlotter(strat) plt.getInstrumentSubplot(instrument).addDataSeries( "VWAP", strat.getVWAP()) strat.run() if plot: plt.plot()