def __init__(self, barFeed, cash=1000000): broker_ = BacktestingFuturesBroker(cash, barFeed) Strategy.__init__(self, barFeed, cash, broker_) self._position = None self._started = False self._db = InstrumentDb.Instance() self._riskfactor = 0.002
def __init__(self, sectorMap, modelType=None, cash=1000000, tradeStart=None, compounding=True, positionsFile=None, equityFile=None, returnsFile=None, summaryFile=None, parms=None): self._runGroups = {} self._startingCash = cash self._db = InstrumentDb.Instance() self._feed = MultiFeed() self._broker = BacktestingFuturesBroker( cash, self._feed, commission=FuturesCommission(2.50)) show = True for sec in sectorMap: for sym in sectorMap[sec]: self._feed.register_feed(Feed(self._db.get(sym))) # if desired can instantiate a strategy per symbol - may actually # want to think about this as a default behavior. The only thing # impacted is reporting of sector results # strategySymbols = { sym } # rgkey = '%s-%s' % (sec, sym) strategySymbols = sectorMap[sec] rgkey = sec if not modelType: modelType = 'breakout' strategy = StrategyFactory.create(modelType, self._feed, symbols=strategySymbols, broker=self._broker, cash=cash, compounding=compounding, parms=parms) self._runGroups[rgkey] = InstrumentedStrategy(strategy) if show: show = False strategy.showParms() self._trading = False self._posfile = self.__openFileorNull(positionsFile) self._equityfile = self.__openFileorNull(equityFile) self._returnsfile = self.__openFileorNull(returnsFile) self._summaryfile = self.__openFileorNull(summaryFile) self._dd = DrawDown() self._dd.attached(self) self._positionAlerts = []
def testMarketOrder(self): self._placed_markorder = False mf = MultiFeed() mf.register_feed(Feed(InstrumentDb.Instance().get('AC'))) self._broker = BacktestingFuturesBroker(1000000, mf) mf.subscribe(self.on_bars_1) self._broker.getOrderUpdatedEvent().subscribe(self.on_order_update_1) mf.start() self.assertEqual(self._broker.getCash(), 1000015.0) self.assertEqual(self._broker.calc_margin(), 160000.0)
def testShortEntry(self): self._placed_markorder = False mf = MultiFeed() mf.register_feed(Feed(InstrumentDb.Instance().get('CT'))) self._broker = BacktestingFuturesBroker(1000000, mf) mf.subscribe(self.on_bars_3) self._broker.getOrderUpdatedEvent().subscribe(self.on_order_update_3) mf.start() self.assertAlmostEqual(self._broker.getCash(), 1119750.0, places=2) self.assertEqual(self._broker.calc_margin(), 800000.0)
def testMarketOrderMarginCall(self): self._placed_markorder = False mf = MultiFeed() mf.register_feed(Feed(InstrumentDb.Instance().get('CT'))) self._broker = BacktestingFuturesBroker(1000000, mf) mf.subscribe(self.on_bars_2) self._broker.getOrderUpdatedEvent().subscribe(self.on_order_update_2) with self.assertRaisesRegexp(Exception, "Margin Call"): mf.start() self.assertAlmostEqual(self._broker.getCash(), 214000.0, places=2) self.assertEqual(self._broker.calc_margin(), 800000.0)
def __init__(self, barFeed, symbols = None, broker = None, cash = 1000000,\ compounding = True, parms = None): self._parms = self.defaultParms() if parms: self._parms.update(parms) if broker is None: broker = BacktestingFuturesBroker( cash, barFeed, commission=FuturesCommission(2.50)) Strategy.__init__(self, barFeed, cash, broker) if symbols is None: self._symbols = barFeed.symbols() else: self._symbols = symbols self._barFeed = barFeed self._longpositions = {} self._shortpositions = {} self._started = {} for sym in self._symbols: feed = self._barFeed.get_feed(sym) self._started[sym] = False feed.insert(ATR(name='atr', period=self._parms['atrPeriod'])) self._db = InstrumentDb.Instance() self._riskfactor = self._parms['riskFactor'] self._tradeHigh = {} self._tradeLow = {} self.prep_bar_feed() self._startingCash = cash self._compounding = compounding self._stop = self._parms['stop'] self._limit = self._parms['limit'] self._intraday = self._parms['intradayStop'] self._dynamic = self._parms['dynamicStop']