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
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 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 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' }
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
'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()
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
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(),
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()