Pytradesimulator
Python based exchange simulator using FIX protocol
Install / Use
/learn @abhi-g80/PytradesimulatorREADME
Python exchange simulator ######################### .. image:: https://github.com/abhi-g80/pytradesimulator/actions/workflows/build.yaml/badge.svg :target: https://github.com/abhi-g80/pytradesimulator/actions/workflows/build.yaml/badge.svg
A python based trading exchange running on FIX.4.2.
The exchange performs order matching based on FIFO order matching algorithm. Amending existing order is also supported via FIX :code:OrderCancelReplaceRequest message.
Order types
.. code-block:: bash
Limit
Market
Run
Running ordering client and exchange server.
Clone the repo and run the following commands,
.. code-block:: bash
$ cd pytradesim
$ mkdir logs
$ ./server.py
$ ./client.py configs/client1.cfg
Running market data client and market data adapter.
.. code-block:: bash
$ ./market_client.py configs/mdclient1.cfg
$ ./market_data.py
Example
Start market data client.
.. code-block:: bash
$ ./market_data.py
2020-05-23 18:31:52.701728 [INFO ] (main ) Logging set to info.
2020-05-23 18:31:52.711440 [INFO ] (onCreate ) Successfully created sessions FIX.4.2:MARKET->MDCLIENT1.
2020-05-23 18:31:52.716357 [INFO ] (onCreate ) Successfully created sessions FIX.4.2:MARKET->MDCLIENT2.
2020-05-23 18:31:52.717506 [INFO ] (main ) FIX.4.2 maarket data server started.
2020-05-23 18:32:12.909809 [INFO ] (onLogon ) FIX.4.2:MARKET->MDCLIENT1 successfully logged in.
2020-05-23 18:32:34.697594 [INFO ] (onLogon ) FIX.4.2:MARKET->MDCLIENT2 successfully logged in.
Start the market data clients and subscribe to instruments (example, MSFT, HYG).
.. code-block:: bash
$ ./market_client.py configs/mdclient1.cfg -d
2020-05-23 18:32:12.901025 [INFO ] (main ) Logging set to debug.
2020-05-23 18:32:12.907327 [INFO ] (onCreate ) Successfully created session FIX.4.2:MDCLIENT1->MARKET.
2020-05-23 18:32:12.909923 [INFO ] (onLogon ) FIX.4.2:MDCLIENT1->MARKET session successfully logged in.
Enter symbol to subscribe: MSFT
2020-05-23 18:32:38.002055 [DEBUG ] (toApp ) Sending 8=FIX.4.29=12935=V34=249=MDCLIENT152=20200523-16:32:38.00000056=MARKET146=155=MSFT262=TESTREQUEST1263=1264=10267=3269=0269=1269=210=218 session FIX.4.2:MDCLIENT1->MARKET
Start the exchange server.
.. code-block:: bash
$ ./server.py
2020-05-23 18:31:57.270028 [INFO ] (main ) Logging set to info.
2020-05-23 18:31:57.276828 [INFO ] (onCreate ) Successfully created session FIX.4.2:EXCHANGE->CLIENT1.
2020-05-23 18:31:57.280955 [INFO ] (onCreate ) Successfully created session FIX.4.2:EXCHANGE->CLIENT2.
2020-05-23 18:31:57.281989 [INFO ] (main ) FIX.4.2 server started.
2020-05-23 18:31:57.284128 [INFO ] (main ) Started market data publisher at port 9000.
Start the trading clients.
.. code-block:: bash
$ ./client.py configs/client1.cfg
2020-05-23 18:32:48.812824 [INFO ] (main ) Logging set to info.
2020-05-23 18:32:48.820117 [INFO ] (onCreate ) Successfully created session FIX.4.2:CLIENT1->EXCHANGE.
2020-05-23 18:32:48.821577 [INFO ] (onLogon ) FIX.4.2:CLIENT1->EXCHANGE session successfully logged in.
Enter choice :-
1. New order
2. Replace order
3. Delete order
>
To send a order in MSFT, select new order and then set the required prices.
.. code-block:: bash
Enter order :-
Symbol: MSFT
Price: 189
Quantity: 675
Side: buy
Type: limit
Sending new order...
2020-05-23 18:33:27.082369 [INFO ] (fromApp ) Got message 8=FIX.4.29=18035=834=349=EXCHANGE52=20200523-16:33:27.00000056=CLIENT16=18911=CLIENT1MSFT114=67517=MSFT_E_00000120=031=18932=67537=MSFT_O_00000138=67539=054=155=MSFT150=0151=010=111 for FIX.4.2:CLIENT1->EXCHANGE.
2020-05-23 18:33:27.082713 [INFO ] (process ) Order placed successfully.
2020-05-23 18:33:27.082950 [INFO ] (process ) Order: 17=MSFT_E_000001, 11=CLIENT1MSFT1 55=MSFT 32=675@31=189 54=1
Price published to market data client.
.. code-block:: bash
2020-05-23 18:33:27.560618 [INFO ] (fromApp ) Got message 8=FIX.4.29=9735=W34=449=MARKET52=20200523-16:33:27.00000056=MDCLIENT155=MSFT268=1269=0270=189271=67510=192 for FIX.4.2:MDCLIENT1->MARKET.
8=FIX.4.2|9=97|35=W|34=4|49=MARKET|52=20200523-16:33:27.000000|56=MDCLIENT1|55=MSFT|268=1|269=0|270=189|271=675|10=192|
Symbol: MSFT
+------------------+--------------------+
| bid_prc, bid_qty | ask_prc, ask_qty |
+------------------+--------------------+
| (189.0, 675.0) | ('Empty', 'Empty') |
+------------------+--------------------+
Trades done will be published to the clients and to the market data subscribers.
Test
All tests should pass.
.. code-block:: bash
$ py.test tests -v
Related Skills
node-connect
342.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.7kCommit, push, and open a PR
