예제 #1
0
 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
예제 #2
0
    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 = []
예제 #3
0
 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)
예제 #4
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)
예제 #5
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)
예제 #6
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']