Ejemplo n.º 1
0
    def createAccount(self, cash, commission=0):
        ''' create account '''
        raise NotImplementedError
        account=Account()
        # account.commission = commission
        account.deposit(cash)
        self.__accounts[account.accountId]=account
        self.__accountPositions[account.accountId]=[]  # list contains tuple (time, position)

        return account.accountId
Ejemplo n.º 2
0
    def setUp(self):
        self.pubsub = MockRedis()
        self.trans = connection.begin()
        self.session = Session(connection)

        currency = Currency(name='Pesos', code='ARG')
        self.exchange = Exchange(name='Merval', code='MERV', currency=currency)
        self.owner = Owner(name='poor owner')
        self.broker = Broker(name='broker1')
        self.account = Account(owner=self.owner, broker=self.broker)
        self.account.deposit(Money(amount=10000, currency=currency))
Ejemplo n.º 3
0
    def setUp(self):
        self.trans = connection.begin()
        self.session = Session(connection)

        currency = Currency(name='Pesos', code='ARG')
        self.exchange = Exchange(name='Merval', code='MERV', currency=currency)
        self.owner = Owner(name='poor owner')
        self.broker = Broker(name='broker1')
        self.account = Account(owner=self.owner, broker=self.broker)
        self.account.deposit(Money(amount=10000, currency=currency))
Ejemplo n.º 4
0
 def setUp(self):
     pesos = Currency(name='Pesos', code='ARG')
     merval = Exchange(name='Merval', code='MERV', currency=pesos)
     owner = Owner(name='test user')
     self.account = Account(owner=owner)
     self.security = Stock(symbol='YPF', exchange=merval)
     self.tick = {
         'pattern': None,
         'data': {
             'volume30d': '12165.08453826',
             'timestamp': '1446070419',
             'high': '305',
             'ask': 302.7022,
             'last': '302.632',
             'bid': 301.0001,
             'low': '294.51',
             'volume': '437.07501250'
         },
         'type': 'message',
         'security': self.security,
         'channel': b'BTC'
     }
Ejemplo n.º 5
0
class testTradingCenter(unittest.TestCase):

    def setUp(self):
        self.trans = connection.begin()
        self.session = Session(connection)

        currency = Currency(name='Pesos', code='ARG')
        self.exchange = Exchange(name='Merval', code='MERV', currency=currency)
        self.owner = Owner(name='poor owner')
        self.broker = Broker(name='broker1')
        self.account = Account(owner=self.owner, broker=self.broker)
        self.account.deposit(Money(amount=10000, currency=currency))

    def tearDown(self):
        self.trans.rollback()
        self.session.close()

    def test_open_orders_by_order_id(self):
        stock=Stock(symbol='symbol', description='a stock', ISIN='US123456789', exchange=self.exchange)
        order1=BuyOrder(account=self.account, security=stock, price=13.2, share=10)
        order2=BuyOrder(account=self.account, security=stock, price=13.25, share=10)
        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc=TradingCenter(self.session)
        order=tc.open_order_by_id(order1.id)
        self.assertEquals(order1, order)

        order=tc.open_order_by_id(100)
        self.assertEquals(None, order)

    def testGetOpenOrdersBySymbol(self):

        stock=Stock(symbol='symbol', description='a stock', ISIN='US123456789', exchange=self.exchange)
        order1=BuyOrder(account=self.account, security=stock, price=13.2, share=10)
        order2=BuyOrder(account=self.account, security=stock, price=13.25, share=10)
        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc=TradingCenter(self.session)
        orders=tc.open_orders_by_symbol('symbol')
        self.assertEquals([order1, order2], list(orders))

    def testCancelOrder(self):

        stock=Stock(symbol='symbol', description='a stock', ISIN='US123456789', exchange=self.exchange)
        order1=BuyOrder(account=self.account, security=stock, price=13.2, share=10)
        order2=BuyOrder(account=self.account, security=stock, price=13.25, share=10)

        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc=TradingCenter(self.session)

        order1.cancel()
        self.assertEquals([order2], tc.open_orders)
        self.assertEquals([order1], tc.cancel_orders)
        self.assertEquals(CancelOrderStage, type(order1.current_stage))

        order2.cancel()
        self.assertEquals([], tc.open_orders)
        self.assertEquals([order1, order2], tc.cancel_orders)

    def testCancelAllOpenOrders(self):
        security=Stock(symbol='symbol', description='a stock', ISIN='US123456789', exchange=self.exchange)
        order1=BuyOrder(account=self.account, security=security, price=13.2, share=10)
        order2=BuyOrder(account=self.account, security=security, price=13.25, share=10)

        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc=TradingCenter(self.session)

        tc.cancel_all_open_orders()

        self.assertEquals([], tc.open_orders)

    def testConsume(self):
        pass

    def testPostConsume(self):
        pass

    def testCreateAccountWithMetrix(self):
        pass
Ejemplo n.º 6
0
        'db': 0,
    }
    redis_conn = StrictRedis(**config)
    engine = create_engine('sqlite://')
    session_factory = sessionmaker(bind=engine)
    Session = scoped_session(session_factory)
    session = Session()

    Base.metadata.create_all(engine)
    usd = Currency(name='Dollar', code='USD')
    nasdaq = Exchange(name='NASDAQ', currency=usd)
    stock_ebay = Stock(symbol='EBAY', exchange=nasdaq, ISIN='US2786421030', description='')

    owner = Owner(name='Lucky')
    broker = Broker(name='Cheap Broker')
    account = Account(owner=owner, broker=broker)
    pesos = Currency(name='Pesos', code='ARG')
    account.deposit(Money(amount=1000, currency=pesos))
    config_file = "backtest_smaPortfolio.ini"
    config = PyConfig(config_file)
    strategy = StrategyFactory.create_strategy(config.get(CONF_ULTRAFINANCE_SECTION, CONF_STRATEGY_NAME),
                                               config.getSection(CONF_ULTRAFINANCE_SECTION))

    th_tick_feeder = BackTesterThread(config, redis_conn, securities=[stock_ebay])

    start = datetime.now()
    end = datetime.now() - timedelta(days=30)
    th_trading_engine = TradingEngineThread(redis_conn.pubsub(), securities=[stock_ebay], strategy=strategy)

    th_tick_feeder.start()
    th_trading_engine.start()
Ejemplo n.º 7
0
class testTradingCenter(unittest.TestCase):
    def setUp(self):
        self.pubsub = MockRedis()
        self.trans = connection.begin()
        self.session = Session(connection)

        currency = Currency(name='Pesos', code='ARG')
        self.exchange = Exchange(name='Merval', code='MERV', currency=currency)
        self.owner = Owner(name='poor owner')
        self.broker = Broker(name='broker1')
        self.account = Account(owner=self.owner, broker=self.broker)
        self.account.deposit(Money(amount=10000, currency=currency))

    def tearDown(self):
        self.trans.rollback()
        self.session.close()

    def test_retrievet_open_orders(self):

        stock = Stock(symbol='symbol',
                      description='a stock',
                      ISIN='US123456789',
                      exchange=self.exchange)
        order1 = BuyOrder(account=self.account,
                          security=stock,
                          price=13.2,
                          share=10)
        order2 = BuyOrder(account=self.account,
                          security=stock,
                          price=13.25,
                          share=10)
        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc = TradingCenter(self.session, self.pubsub)
        orders = tc.open_orders(stock)
        self.assertEquals([order1, order2], list(orders))

    def testCancelOrder(self):

        stock = Stock(symbol='symbol',
                      description='a stock',
                      ISIN='US123456789',
                      exchange=self.exchange)
        order1 = BuyOrder(account=self.account,
                          security=stock,
                          price=13.2,
                          share=10)
        order2 = BuyOrder(account=self.account,
                          security=stock,
                          price=13.25,
                          share=10)

        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc = TradingCenter(self.session, self.pubsub)

        order1.cancel()
        self.assertEquals([order2], tc.open_orders(stock))
        # cancel open orders
        self.assertEquals([order2], tc.cancel_orders())
        self.assertEquals(CancelOrderStage, type(order1.current_stage))
        self.assertEquals([], tc.open_orders(stock))

    def testCancelAllOpenOrders(self):
        security = Stock(symbol='symbol',
                         description='a stock',
                         ISIN='US123456789',
                         exchange=self.exchange)
        order1 = BuyOrder(account=self.account,
                          security=security,
                          price=13.2,
                          share=10)
        order2 = BuyOrder(account=self.account,
                          security=security,
                          price=13.25,
                          share=10)

        self.session.add(order1)
        self.session.add(order2)
        self.session.commit()

        tc = TradingCenter(self.session, self.pubsub)

        tc.cancel_orders()

        self.assertEquals([], tc.open_orders(security))

    def testConsume(self):
        pass

    def testPostConsume(self):
        pass

    def testCreateAccountWithMetrix(self):
        pass
Ejemplo n.º 8
0
    engine = create_engine('sqlite://')
    session_factory = sessionmaker(bind=engine)
    Session = scoped_session(session_factory)
    session = Session()

    Base.metadata.create_all(engine)
    usd = Currency(name='Dollar', code='USD')
    nasdaq = Exchange(name='NASDAQ', currency=usd)
    stock_ebay = Stock(symbol='EBAY',
                       exchange=nasdaq,
                       ISIN='US2786421030',
                       description='')

    owner = Owner(name='Lucky')
    broker = Broker(name='Cheap Broker')
    account = Account(owner=owner, broker=broker)
    pesos = Currency(name='Pesos', code='ARG')
    account.deposit(Money(amount=1000, currency=pesos))
    config_file = "backtest_smaPortfolio.ini"
    config = PyConfig(config_file)
    strategy = StrategyFactory.create_strategy(
        config.get(CONF_ULTRAFINANCE_SECTION, CONF_STRATEGY_NAME),
        config.getSection(CONF_ULTRAFINANCE_SECTION))

    th_tick_feeder = TickFeederThread(config,
                                      redis_conn,
                                      securities=[stock_ebay])

    start = datetime.now()
    end = datetime.now() - timedelta(days=30)
    th_trading_engine = TradingEngineThread(redis_conn.pubsub(),
Ejemplo n.º 9
0
    def run_test(self):
        """ run one test """
        self._execute()
        self._printResult()


# ###########Util function################################
def getBackTestResultDbName(securities, strategyName, start_tick_date, end_trade_date):
    """ get table name for back test result"""
    return "%s__%s__%s__%s" % (
        "_".join(securities) if len(securities) <= 1 else len(securities),
        strategyName,
        start_tick_date,
        end_trade_date if end_trade_date else "Now",
    )


if __name__ == "__main__":
    account = Account()
    account.deposit(1000)
    backtester = BackTester(
        "backtest_zscoreMomentumPortfolio.ini",
        account=account,
        start_tick_date=19901010,
        start_trade_date=19901010,
        end_trade_date=20131010,
    )
    backtester.setup()
    backtester.runTests()
    backtester.printMetrics()