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
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
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() Session.remove()
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
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(), securities=[stock_ebay], strategy=strategy)
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()