def __init__(self, initialBalances, barFeed, commission=NoCommission(), instrumentTraits=DefaultInstrumentTraits()): super(Broker, self).__init__() assert isinstance(initialBalances, dict), "initialBalances must be a dictionary" assert all([isinstance(symbol, six.string_types) for symbol in initialBalances.keys()]), \ "Some keys are not strings" assert isinstance(barFeed, barfeed.BaseBarFeed ), "barFeed is not a subclass of barfeed.BaseBarFeed" self._balances = copy.copy(initialBalances) self._barFeed = barFeed self._commission = commission self._instrumentTraits = instrumentTraits self._activeOrders = {} self._instrumentPrice = {} self._useAdjustedValues = False self._fillStrategy = fillstrategy.DefaultStrategy( self._instrumentTraits) self._logger = logger.getLogger(__name__) # It is VERY important that the broker subscribes to barfeed events before the strategy. barFeed.getNewValuesEvent().subscribe(self.onBars) self._nextOrderId = 1 self._started = False
def __init__(self, barFeed, cash=10000): if self.realTrade: super().__init__(barFeed, self.realBroker) else: temp = Broker(cash, barFeed) temp.setAllowNegativeCash(True) fillstg = fillstrategy.DefaultStrategy( None) # 设置一个不检查有成交量的fill strategy temp.setFillStrategy(fillstg) super().__init__(barFeed, temp)
def __init__(self, cash, barFeed, commission=None): super(Broker, self).__init__(cash, barFeed) if commission is None: self.__commission = NoCommission() else: self.__commission = commission self.__instrumentPrice = {} # Used by setShares self.__fillStrategy = fillstrategy.DefaultStrategy() self.__logger = logger.getLogger(Broker.LOGGER_NAME) # It is VERY important that the broker subscribes to barfeed events before the strategy. barFeed.getNewValuesEvent().subscribe(self.onBars)
def __init__(self, cash, barFeed, commission=None): super(Broker, self).__init__() assert(cash != None) self.__cash = cash if commission is None: self.__commission = NoCommission() else: self.__commission = commission self.__shares = {} self.__activeOrders = {} self.__useAdjustedValues = False self.__fillStrategy = fillstrategy.DefaultStrategy() self.__logger = logger.getLogger(Broker.LOGGER_NAME) # It is VERY important that the broker subscribes to barfeed events before the strategy. barFeed.getNewValuesEvent().subscribe(self.onBars) self.__barFeed = barFeed self.__allowNegativeCash = False self.__nextOrderId = 1
def __init__(self, cash, tickFeed, commission=None): super(Broker, self).__init__() assert (cash >= 0) self.__cash = cash if commission is None: self.__commission = NoCommission() else: self.__commission = commission self.__shares = {} self.__instrumentPrice = {} # Used by setShares self.__activeOrders = {} self.__fillStrategy = fillstrategy.DefaultStrategy() self.__logger = logger.getLogger(Broker.LOGGER_NAME) # It is VERY important that the broker subscribes to tickfeed events before the strategy. tickFeed.getNewValuesEvent().subscribe(self.onTicks) self.__tickFeed = tickFeed self.__allowNegativeCash = False self.__nextOrderId = 1 self.__started = False
def setUp(self): BaseTestCase.setUp(self) self.barsBuilder = broker_backtesting_test.BarsBuilder( BaseTestCase.TestInstrument, bar.Frequency.MINUTE) self.strategy = fillstrategy.DefaultStrategy()
def initEa(self, timeFrom=None, timeTo=None): self.results = {} feed = self.getFeedNew(timeFrom=timeFrom, timeTo=timeTo) self.mid_DEFAULT_MAX_LEN = 10 * DEFAULT_MAX_LEN mid_DEFAULT_MAX_LEN = self.mid_DEFAULT_MAX_LEN #mid set init cash cash_or_brk = 1000000 volumeLimit = 0.5 #mid used to calculate available volume for an order: availableVolume = volumeLeft * volumeLimit #mid set fillstrategy fillStrategy = fillstrategy.DefaultStrategy(volumeLimit=volumeLimit) broker = backtesting.Broker(cash_or_brk, feed) broker.setFillStrategy(fillStrategy) #mid init base strategy.BacktestingStrategy.__init__(self, feed, broker) #mid 计算ma将使用当天的收盘价格计算 #mid 1) self.closePrices = {} self.longPosition = {} self.shortPosition = {} self.buySignal = {} self.sellSignal = {} self.timeFrom = timeFrom self.timeTo = timeTo #mid follow vars will be used only this class self.__portfolio_value = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 记录资产组合(cash + 各个持仓证券的价值和)的合计价值变化 self.__available_cash = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 记录资产组合的现金变化 self.__long_exitBar_pnl = {} #mid 多头平仓bar产生的pnl self.__long_position_volume = {} #mid 当前多头数量 self.__long_position_cost = {} #mid 当前持有多头开仓成本 self.__long_position_currentBar_pnl = {} #mid 当前持有多头当前bar产生的pnl self.__long_position_pnl = {} #mid 当前多头累计产生的pnl self.__short_exitBar_pnl = {} self.__short_position_volume = {} #mid 当前持有头寸数量 self.__short_position_cost = {} #mid 当前持有头寸开仓成本 self.__short_position_currentBar_pnl = {} #mid 当前持有头寸价值 self.__short_position_pnl = {} self.__position_cumulativePNL = { } #mid 当前 symbol 持有头寸cumulative pnl 价值(包括该symbol多头和空头的所有开仓平仓产生的pnl) self.__buy = {} self.__sell = {} for instrument in self.instruments: dataSeries = feed[instrument] dataSeries.setMaxLen(mid_DEFAULT_MAX_LEN) closeSeries = dataSeries.getCloseDataSeries() #mid 2) prices = closeSeries prices.setMaxLen(mid_DEFAULT_MAX_LEN) #mid follow vars will be used in subclass self.closePrices[instrument] = prices self.longPosition[instrument] = None self.shortPosition[instrument] = None self.buySignal[instrument] = False self.sellSignal[instrument] = False #mid follow vars will be used only this class self.__long_exitBar_pnl[instrument] = None self.__short_exitBar_pnl[instrument] = None self.__long_position_volume[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 当前持有头寸数量 self.__short_position_volume[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 当前持有头寸数量 self.__long_position_cost[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 当前持有头寸开仓成本 self.__short_position_cost[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 当前持有头寸开仓成本 self.__long_position_currentBar_pnl[ instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 当前持有头寸价值 self.__short_position_currentBar_pnl[ instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) #mid 当前持有头寸价值 self.__short_position_pnl[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) self.__long_position_pnl[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) self.__position_cumulativePNL[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) self.__buy[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN) self.__sell[instrument] = SequenceDataSeries( maxLen=mid_DEFAULT_MAX_LEN)
def setUp(self): super(DefaultStrategyTestCase, self).setUp() self.barsBuilder = broker_backtesting_test.BarsBuilder(INSTRUMENT, bar.Frequency.MINUTE) self.strategy = fillstrategy.DefaultStrategy(backtesting.DefaultInstrumentTraits())