Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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()
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
 def setUp(self):
     super(DefaultStrategyTestCase, self).setUp()
     self.barsBuilder = broker_backtesting_test.BarsBuilder(INSTRUMENT, bar.Frequency.MINUTE)
     self.strategy = fillstrategy.DefaultStrategy(backtesting.DefaultInstrumentTraits())