ThirstyScholar / trading-bitcoin-with-reinforcement-learning

An (unofficial) implementation of the post "Trading Bitcoin with Reinforcement Learning".
https://launchpad.ai/blog/trading-bitcoin
MIT License
97 stars 25 forks source link

Trading Bitcoin with Reinforcement Learning

This post describes how to apply reinforcement learning algorithm to trade Bitcoin. This repository provides an implementation aims to reproduce the result.

- **BnH** A *buy-and-hold* strategy that always hold 2 Bitcoins starting from the beginning of the test period. - **RL** A trained RL agent making trading decisions to hold 0~4 Bitcoins given the current market condition. - **MMT** A *momentum* strategy that holds 4 Bitcoins when the 30-period SMA cross-over than the current closing price and 0 Bitcoin otherwise. Dependencies - Python3.6 - NumPy 1.17.1 - Pandas 0.25.1 - Matplotlib 3.1.1 - PyTorch 1.2.0 (CPU only) ## Data The minute-by-minute data is downloaded from [Kaggle](https://www.kaggle.com/mczielinski/bitcoin-historical-data/data). I resample them into 15-minute interval and compute all the features we need. Then I save the two dataframes under `bitcoin-historical-data`. Note that, - I delete the row indexed `2017-04-15 23:00:00` after resampling since there is a clear error. This is done in the `remove_outlier()` method under the `Data` class. - Due to request, I include the 15-minute data in `bitcoin-historical-data` (due to size constraint on GitHub, I cannot update the 1-minute data and the feature dataframe generated from the 15-minute data.) ## How to run ```bash # E.g. clone to local (say to Downloads) cd ~/Downloads/trading-bitcoin-with-reinforcement-learning/ # Usage: python main.py # If argument not provided, the default file path # './bitcoin-historical-data/coinbaseUSD_1-min_data.csv' is given python main.py ./bitcoin-historical-data/coinbaseUSD_1-min_data.csv ``` ***Note: I observed substantial variability in the test result therefore the equity curve you got may not be 100% the same as mine.***