Example #1
0
class VirtualMarket_Impl(VirtualMarket_Base):
    def __init__(self):
        self._balance = 0
        self._position = 0
        from marketsim.gen._out.event._event import Event
        self.on_traded = Event()
        self.orderBook = OfTrader()
        event.subscribe(self.inner.on_order_created,
                        _(self).onOrderCreated, self)

    _internals = ['orderBook']

    @property
    def amount(self):
        return self._position

    @property
    def PnL(self):
        return self._balance

    def onOrderCreated(self, order, source):
        self.orderBook.process(
            request.EvalMarketOrder(
                order.side, order.volumeUnmatched,
                _(self, order.side, order.volumeUnmatched)._update))

    def _update(self, side, volume, (price, volumeUnmatched)):
        matched = volume - volumeUnmatched
        self._position += -matched if side == Side.Sell else matched
        self._balance += price if side == Side.Sell else -price
        self.on_traded.fire(self)
Example #2
0
class VirtualMarket_Impl(VirtualMarket_Base):

    def __init__(self):
        self._balance = 0
        self._position = 0
        from marketsim.gen._out.event._event import Event
        self.on_traded = Event()
        self.orderBook = OfTrader()
        event.subscribe(self.inner.on_order_created, _(self).onOrderCreated, self)

    _internals = ['orderBook']

    @property
    def amount(self):
        return self._position

    @property
    def PnL(self):
        return self._balance

    def onOrderCreated(self, order, source):
        self.orderBook.process(
                    request.EvalMarketOrder(
                                order.side,
                                order.volumeUnmatched,
                                _(self,
                                  order.side,
                                  order.volumeUnmatched)._update))


    def _update(self, side, volume, (price, volumeUnmatched)):
        matched = volume - volumeUnmatched
        self._position += -matched if side == Side.Sell else matched
        self._balance += price if side == Side.Sell else -price
        self.on_traded.fire(self)