There are numerous great and very powerful trading journals out there. However, I wanted to build a journal for traders who care about data security and privacy but also for individuals that need simplicity and flexibility.
By creating and sharing TradeNote as an open source project, I hope to help other days traders like myself store, discover and recollect trade patterns so they can become and remain consistent and profitable traders.
For support or feedback, feel free to join our Discord, or create an issue on this repository.
You can see upcoming features and project development on the project page.
TradeNote is a responsive website that runs on VueJs, JS and HTML and uses Parse for its backend.
If you like this project, please 🌟 this repository and don't hesitate to show me the money love ;)
TradeNote is divided in 2 sections, each being an essential building block for becoming a consistent trading and managing your trading business.
TradeNote offers a dashboard, daily view and calendar view so you can measure your progress. You can easily filter your trades by month or date range.
With TradeNote you can keep a daily diary of your trading journey to work on your trader psychology as well as add annotated screenshots of interesting setups or your entries. You can also write your (yearly) playbook.
TradeNote supports intraday and swing trades but keep in mind that the project arose from a personal need and as such is most widely used (and tested) for intraday stock trades (using TradeZero Broker).
Depending on the broker and thanks to the contribution of the community, you can import and journal the following assets in TradeNote: Stocks, Futures, Options (only tested on single options) and Forex.
Please look at the brokers folder to see the list of supported brokers and instructions for exporting and importing to TradeNote.
You can contact me via Discord if you wish to integrate your broker.
Alternatively, you can use the template and adapt it to your export file.
On daily page you can see your trades per day. You can add pattern, mistake and note to each of you trades. Moreover, you can specify your satisfaction with the trade (for example if you followed or not your rules) with thumbs up or down.
Besides notes for every trade, you can record things related to your every day trading, like feelings, moods and emotions or more technical related issues like patterns, in order to make important discoveries.
Upload screenshots of you trades ("Entry" option) or simply an interesting setup you have identified ("Setup" option) and make annotations for further analysis.
TradeNote uses MongodDB as its database. Please make sure to follow MongoDB's recommendations and requirements before installing and running TradeNote with MongoDB.
As an example, some users have experienced issues running MongoDB on a Raspberry Pi. At the time of writing, they managed to make it work using v4.4.8 of MongoDB rather than the latest version.
For detailed information, please read MongdoDB's production notes .
- Docker
- Docker Compose
- Node 18.X
- Download the docker-compose.yml file
- Run
docker compose up -d
This will automatically setup the database (mongodDB) and the TradeNote app.
You can then access the website on http://localhost:8080.
If you cannot access the website, please refer to the importante notice above (and try changing the mongo version) or get support via Discord
- Docker
- Node 18.X
- MongoDB
You need to have a running MongoDB database. Please see their Docker Hub for instructions.
Then, run the TradeNote image with its environment variables.
docker run \
-e MONGO_URI=<mongo_uri> \
-e TRADENOTE_DATABASE=<tradenote_database>
-e APP_ID=<app_id> \
-e MASTER_KEY=<master_key> \
-e TRADENOTE_PORT=<tradenote_port> \
-p <tradenote_port>:<tradenote_port> \
--name tradenote_app \
-d eleventrading/tradenote
- MONGO_URI: The MongoDB connection string, with tradenote database name and enforced access control (explanation). You can use any MongoDB instance you like. If you are using Docker, you can use the default MongoDB instance. (example: mongodb://tradenote:tradenote@mongo:27017/tradenote?authSource=admin)
- TRADENOTE_DATABASE: The TradeNote database name in the MongoDB (example: tradenote)
- APP_ID: Set a random string as application ID, which will be used to connect to the backend (no spaces) (example: 12345).
- MASTER_KEY: Set a random string as master key, which will be used to make root connections to the backend (no spaces) (example: 12345)
- TRADENOTE_PORT: TradeNote port number, from which you wish to serve the website. (example: 8080)
If you want to run the latest version of TradeNote you can also build the image locally, directly from GitHub repository.
- Clone from github
- cd into TradeNote directory
- Run
- For Docker Compose : Run
docker compose -f docker-compose-local.yml up -d
- For Docker: run
docker build -f docker/Dockerfile . -t tradenote:<tag>
- For Docker Compose : Run
- Clone the project (Master or Beta branch)
- cd into your project
- Run
npm install
- Run
APP_ID=xxx MASTER_KEY=xxx ANALYTICS_OFF="true" MONGO_USER=xxx MONGO_PASSWORD=xxx TRADENOTE_DATABASE=xxx MONGO_URL=xxx MONGO_PORT=xxx TRADENOTE_PORT=xxx NODE_ENV='dev' node index.js
Start by registering a user. Visit http://localhost:8080/register
to register a TradeNote user.
- Use any (random) email and set a password.
- Choose your broker and/or account timezone.
Please make sure to follow the instructions in the brokers folder for exporting and importing trades.
❗Important Notice❗
- Importing swing trades is currently in beta phase and being tested. Please use Discord if you have questions or comments.
- Importing swing trades is prone to P&L Discrepancy and it is therefore crucial to follow the instructions below.
To avoid open positions and/or P&L Discrepancy when importing swing trades, please make sure of the following.
- Begin importing from a point in time where you were flat (no previous open positions). If you begin importing from a point in time where you had pre-existing positions, there is a chance the data will be incorrect as TradeNote doesn’t know about these existing positions.
- Alternatively, before importing your file, if you know it contains execution(s) from an open position (and that you're closing or adding to), simply remove that/these execution(s).
Example 1 (recommended)
- You remember that on the 10th of August 2022 you did not have any open trades from before the 10th of August 2022
- You import your trades between 10/08/22-30/11/2023.
- From there, if you later decide to import trades before 10/08/22 they will likely be inaccurate and cause future discrepancies.
- If you import trades in between the dates, for example on the 12/03/2023, it will say "already imported" (this is standard TradeNote behavior - you cannot import already imported dates)
- If you import trades after 30/11/23 it will work.
- The best is to start with a clean TradeNote database but it is not mandatory as long as you respect these steps.
Example 2 (advanced)
- You want to start your imports 10th of August 2022, but you know you have 1 open trade from before.
- You want to import your trades between 10/08/22-30/11/2023 and you know that you closed the open trade on the 20th of August 2022.
- Edit your export file on the 20th of August 2022 by removing all executions related to closing the mentioned trade.
- The reste of the process is the same as example 1.
When you have an open trade you will see "Open" in the time column on the daily page and "Closed" when the swing trade has been closed. Hover your mouse over the question mark to get information when the trade was opened and closed.
P&L as well as partial close is calculated on the closing day.
This project uses Parse as its backend framework, for the following reasons:
- Manage the authentication (flow)
- Parse is a great framework for all API communications with the mongo database
- Parse acts as the server so that TradeNote does not need to run any server on its own, making it faster and lighter.
Additionally, if you want to view and manage the database, you can use MongoDB Compass or install and run the Parse Dashboard.
This projects uses PostHog as its product analytics suite to collect anonymous analytics about TradeNote installations and page views. This helps me better understand if and how people are using TradeNote and evaluate the outreach of my project. If you want to opt-out of this program, you can simply add -e ANALYTICS_OFF=true
when running the docker image.
During installation, mongoDB runs with persistent data. This way, if you restart or update your mongoDB container, your data will not be lost.
Additionally, you can, and should, backup your database.
For convenience, here is an example using s3cmd for backing up your database. As this is not part of the TradeNote projet, I will unfortunately not be able to provide support on this part. But you will find more information about this on google and stackoverflow.
I'm a trader and recreational developer. My days are very packed but I will do my best to answer your questions and update the code when needed. As such, do not hesitate to contact me if you would like to contribute and help improve this project. Things to work on and improve:
- Add support to other trading platforms
- Currently, the code has only been tested for day trading and it would be interesting to add support for swing and multi-day trading
- Improve front end layout and develop new ideas
- And more...
This project is open sourced under the GNU GPL v3 licence.