def setUp(self): self.now = datetime.datetime.now() self.stream = Stream() self.stream_file = tempfile.mkstemp()[1] self.stream.begin(self.stream_file) self.stream.add_event( EventStreamNew( self.now, OrderBuy( "CIA", 10, 21.34, datetime.datetime.strptime( "%s %s" % ("2012-11-24", "09:39:01"), "%Y-%m-%d %H:%M:%S")))) self.stream.add_event( EventStreamNew( self.now, OrderSell( "CIA", 10, 21.34, datetime.datetime.strptime( "%s %s" % ("2012-11-24", "09:39:01"), "%Y-%m-%d %H:%M:%S")))) self.stream.end() self.xml1 = XML1 % self.stream_file
def build_stream(self, dirname_in, filename_out): self.stream = Stream() self.stream.begin(filename_out) self.__process_companies(dirname_in) self.stream.end()
def main(stream_path): print "hello" tv = TimeValidator() for event in Stream.next_event(stream_path): tv.process(event) print "All done, seems correct"
def main(filename, plotter_str): plotter_class = Visualizer.__import_plotter(plotter_str) plotter = plotter_class() for event in Stream.next_event(filename): plotter.process(event) fig = plt.figure() plotter.draw_plot(fig) plt.show()
def create_from_config(stock_tree): stock = Stock() stock.stream_file = stock_tree.getElementsByTagName("stream_path")[0].firstChild.nodeValue # init clock Clock.start_from(Stream.next_event(stock.stream_file).next().timestamp) for sb_tree in stock_tree.getElementsByTagName("Stockbroker"): sb = Stockbroker.create_from_config(stock, sb_tree) stock.stockbrokers.append(sb) return stock
class StockTestCase(unittest.TestCase): def setUp(self): self.now = datetime.datetime.now() self.stream = Stream() self.stream_file = tempfile.mkstemp()[1] self.stream.begin(self.stream_file) self.stream.add_event( EventStreamNew( self.now, OrderBuy( "CIA", 10, 21.34, datetime.datetime.strptime( "%s %s" % ("2012-11-24", "09:39:01"), "%Y-%m-%d %H:%M:%S")))) self.stream.add_event( EventStreamNew( self.now, OrderSell( "CIA", 10, 21.34, datetime.datetime.strptime( "%s %s" % ("2012-11-24", "09:39:01"), "%Y-%m-%d %H:%M:%S")))) self.stream.end() self.xml1 = XML1 % self.stream_file def tearDown(self): #os.remove(self.stream_file) pass def test_create_from_config(self): tree = minidom.parseString(self.xml1) stock_tree = tree.getElementsByTagName("Stock")[0] stock = None stock = Stock.create_from_config(stock_tree) self.assertIsNotNone(stock) self.assertIsNotNone(stock.stream_file) self.assertEqual(len(stock.stockbrokers), 1) self.assertIsNotNone(stock.stockbrokers[0]) self.assertEqual(len(stock.stockbrokers[0].investors), 1) self.assertEqual(stock.stockbrokers[0].stock, stock) self.assertIsInstance(stock.stockbrokers[0], Stockbroker) self.assertIsNotNone(stock.stockbrokers[0].investors[0]) self.assertIsInstance(stock.stockbrokers[0].investors[0], DummyInvestor) self.assertEqual(stock.stockbrokers[0].investors[0].cash, 1000)
class InvestorReport(Report): __stream = None def __init__(self, filename): self.__stream = Stream() self.__stream.begin(filename) def order_placed(self, order): self.__stream.add_event(EventInvestorReportOrderPlaced(self.__now(), order)) def order_realized(self, order): self.__stream.add_event(EventInvestorReportOrderRealized(self.__now(), order)) def cash_transferred(self, cash): self.__stream.add_event(EventInvestorReportCashTransferred(self.__now(), cash)) def __now(self): return Clock.now()
def simulate(self): for event in Stream.next_event(self.stream_file): Clock.set_now(event.timestamp) self.stats['events'] += 1 if isinstance(event, (EventStockOpen, EventStockClose)): for sb in self.stockbrokers: sb.process(event) elif isinstance(event, (EventStreamNew, )): order = event.order order.owner = None self.new_order(order, None) for sb in self.stockbrokers: sb.process(EventStockOrderNew(event.timestamp, order)) self.match_orders()
def __init__(self, filename): self.__stream = Stream() self.__stream.begin(filename)
class Processor(object): def build_stream(self, dirname_in, filename_out): self.stream = Stream() self.stream.begin(filename_out) self.__process_companies(dirname_in) self.stream.end() def __process_companies(self, dirname): companies = [] for company in os.walk(dirname).next()[1]: companies.append(CompanyProcessor(dirname, company)) dates_set = set() for company in companies: dates_set.update(company.get_dates()) dates_ordered = sorted( dates_set, key=lambda date: datetime.datetime.strptime(date, "%Y-%m-%d")) for date in dates_ordered: self.__process_date(date, companies) def __process_date(self, date, companies): rows = [] correct_generators = [] correct_day = False generators = [company.get_row(date) for company in companies] for generator in generators: try: row, company_id = generator.next() row = (company_id, row, generator) rows.append(row) correct_generators.append(generator) except StopIteration as e: pass if correct_generators: # correct day (have transactions) correct_day = True if correct_day: self.stream.add_event( EventStockOpen( datetime.datetime.combine( datetime.datetime.strptime(date, "%Y-%m-%d"), datetime.time(9, 0)))) # main loop, multiplexing rows while correct_generators: row_data = min(rows, key=lambda row: datetime.datetime.strptime( row[1][0], "%H:%M:%S")) rows.remove(row_data) company_id, row, generator = row_data self.__process_row(row, date, company_id) try: row, company_id = generator.next() row = (company_id, row, generator) rows.append(row) except StopIteration as e: correct_generators.remove(generator) if correct_day: self.stream.add_event( EventStockClose( datetime.datetime.combine( datetime.datetime.strptime(date, "%Y-%m-%d"), datetime.time(18, 0)))) def __process_row(self, row, date, company_id): amount = int(row[3]) limit_price = decimal.Decimal(row[1].replace(',', '.')) timestamp = datetime.datetime.strptime("%s %s" % (date, row[0]), "%Y-%m-%d %H:%M:%S") expiration_date = timestamp + datetime.timedelta(days=1) self.stream.add_event( EventStreamNew( timestamp, OrderBuy(company_id, amount, limit_price, expiration_date))) self.stream.add_event( EventStreamNew( timestamp, OrderSell(company_id, amount, limit_price, expiration_date)))