Esempio n. 1
0
    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
Esempio n. 2
0
    def build_stream(self, dirname_in, filename_out):
        self.stream = Stream()
        self.stream.begin(filename_out)

        self.__process_companies(dirname_in)

        self.stream.end()
Esempio n. 3
0
def main(stream_path):
    print "hello"

    tv = TimeValidator()

    for event in Stream.next_event(stream_path):
        tv.process(event)

    print "All done, seems correct"
Esempio n. 4
0
def main(stream_path):
    print "hello"

    tv = TimeValidator()

    for event in Stream.next_event(stream_path):
        tv.process(event)

    print "All done, seems correct"
Esempio n. 5
0
    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()
Esempio n. 6
0
    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
Esempio n. 7
0
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)
Esempio n. 8
0
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()
Esempio n. 9
0
    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()
Esempio n. 10
0
 def __init__(self, filename):
     self.__stream = Stream()
     self.__stream.begin(filename)
Esempio n. 11
0
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)))