Many of the world's major financial markets are electronic, in the sense that all communication among traders and internal record-keeping at exchanges is entirely mediated and executed by digital computer systems and associated communications networks; and many such markets are also highly automated, in the sense that they are heavily populated by automatic algorithmic trading system which have largely replaced human traders at the point of execution in many spot markets. This has created significant demand for people skilled in writing and managing algorithmic trading systems. To provide a complete education and training in this field it is highly desirable to allow students/trainees to study the operation of their own algorithmic trading systems running live on a real financial exchange, interacting dynamically with other automated traders. This paper describes the Bristol Stock Exchange (BSE), a simulator designed and developed to meet that need. BSE provides a full implementation of the Limit Order Book (LOB) at the heart of modern financial exchanges, and includes reference implementations of several well-known leading algorithmic trading systems. BSE allows users to submit a variety of order-types including market, limit, fill-or-kill, timeto-live, immediate-or-cancel, iceberg; orders for specific actions at market-open and market-close; and linked pairs of contingent orders. BSE can be configured to allow empirical studies of issues in order routing between multiple exchanges and the performance of cross-market arbitrage trading algorithms. BSE also has provision for varying the exchange's fee structure, including implementing maker-taker and takermaker pricing models, The Python source-code for BSE, which has been under ongoing development and extension since 2012, along with extensive documentation, is freely available on the GitHub online public repository, and can be used as a publicdomain platform for teaching and research.