When Something Does Not Work¶
Try these in roughly this order. Most first-day problems are one of the first three.
Quick checks¶
| Question | Containers | Python package |
|---|---|---|
| Is everything running? | ./edumatcher.sh status |
pm-opctl-cli list |
| What did the exchange say when it started? | ./edumatcher.sh logs |
the log files under <data directory>/emo/ (the directory itself is in pm-opctl-cli show) |
| Which configuration is actually deployed? | ./edumatcher.sh shell pm-config-show |
pm-config-show |
| What is each process doing? | Log Operator Console at http://localhost:8091 | pm-log-cli |
| Am I looking at the exchange I think I am? | ./edumatcher.sh mounts |
pm-setup --show |
| Which ports are published? | ./edumatcher.sh urls |
— |
Common first-day problems¶
My order does not trade. Nobody is waiting on the other side at a price
that crosses yours. That is the market working correctly. Look at the book
(pm-viewer --symbol AAPL, BOOK|SYM=AAPL in pm-admin, or the Order Book
Viewer) to see the best bid and ask.
My order traded immediately, before the other trader did anything. The
book already had liquidity: a market maker's seeded quote, or the
market-maker bot of the container's mm-demo profile. Use an -nomm
configuration and the default profile, as in
Your First Trade, to start
from an empty book.
Every order is rejected with Market is closed. The configuration has a
timetable and the exchange is outside trading hours, or was left in CLOSED.
Move it on by hand from pm-admin (SESSION|STATE=PRE_OPEN, then
SESSION|STATE=CONTINUOUS), as in
Run a Trading Session,
or use a -basic configuration, which has no timetable.
The console will not connect, or says the participant is unknown.
Participant IDs are case-sensitive and must exist in the deployed
configuration; pm-config-show lists them. On the container route, run the
console inside the exchange (./edumatcher.sh shell), not on your own
machine.
pm-*: command not found. On the container route the commands only exist
inside the exchange: open ./edumatcher.sh shell first. On the Python route,
check that pipx put its directory on your PATH (pipx ensurepath).
A recorder's numbers are missing trades. pm-stats, pm-clearing and
pm-audit only record what happens while they are running. Start them before
the engine, which pm-opctl-cli and the container do for you.
I changed the configuration but nothing changed. A configuration must be
deployed and the processes restarted. On the container route,
./edumatcher.sh config … only takes effect after ./edumatcher.sh restart.
Two installations at once. A curl installation and a stack built from the
source checkout use the same container names and ports, so only one can run.
Both refuse to start on top of the other; ./edumatcher.sh mounts shows
which one owns the ports.
Still stuck?¶
The FAQ answers the next layer of questions, and the Operator's Guide has a full troubleshooting section in Running the Exchange. If something in this guide does not work as written, that is a documentation bug — please report it on GitHub.