Algorithmic Trading Bitcoin.
Lightweight, extensible program for algorithmically trading cryptocurrencies and derivatives across multiple exchanges.
AlgoCoin is an event based trading system written in python. It comes with support for live trading across (and between) multiple exchanges, fully integrated backtesting support, slippage and transaction cost modeling, and robust reporting and risk mitigation through manual and programatic algorithm controls.
Like Zipline, the inspriation for this system, AlgoCoin exposes a single algorithm class which is utilized for both live trading and backtesting. The algorithm class is simple enough to write and test algorithms quickly, but extensible enough to allow for complex slippage and transaction cost modeling, as well as mid- and post- trade analysis.
Eventual coverage:
- GDAX (Coinbase Pro)
- Gemini
- Binance
- Bitfinex
- ItBit
- Kraken
- Poloniex
- Bitstamp
- CEX
- HitBTC
- LakeBTC
- BitMEX (derivatives)
- Deribit (derivatives)
Porting to use ccxt
Exchange | Pairs |
---|---|
Gemini | BTC-USD, ZEC-USD, ZEC-BTC, ZEC-ETH, ETH-BTC, ETH-USD |
GDAX | BTC-USD, BTC-ETH, BTC-LTC, BTC-BCH, ETH-USD, LTC-USD, BCH-USD, ETH-BTC, LTC-BTC, BCH-BTC |
Install the library from pip:
pip install algocoin
Install the library from source:
python setup.py install
You should creat API keys for exchanges you wish to trade on. For this example, we will assume a GDAX sandbox account with trading enabled. I usually put my keys in a set of shell scripts that are gitignored, so I don't post anything by accident. My scripts look something like:
export GEMINI_API_KEY=...
export GEMINI_API_SECRET=...
export GEMINI_API_PASS=...
Prior to running, I then source the keys I need.
Let's make sure everything worked out by running a sample strategy on the GDAX sandbox exchange:
python3 -m algocoin --sandbox
Trading strategies implement the TradingStrategy
abstract class in algocoin.lib.strategy
. This has a number of required methods for handling messages:
- onBuy
- onSell
- onTrade
- onChange
- onDone
- onError
- onOpen
- onReceived
There are also a variety of optional methods for more granular control over risk/execution/backtesting, such as slippage
, transactionCost
, onHalt
, onContinue
, etc.
An instance of TradingStrategy
class is able to run live or against a set of historical trade/quote data. When instantiating a TradingEngine
object with a TradingEngineConfig
object, the TradingEngineConfig
has a type
which can be set to live
, sandbox
, or backtest
. Some additional methods are then usable on the TradingStrategy
, including the onAnalyze
method which allows you to visualize algorithm performance.
Historical data is relatively sparse, but the provided fetchdata.sh
script will help grab historical data from bitcoincharts.com.
Currently only the Gemini sandbox is supported, the other exchanges have discontinued theirs. To run in sandbox, set TradingEngineConfig.type
to Sandbox.
When you want to run live, set TradingEngineConfig.type
to Live. You will want to become familiar with the risk and execution engines, as these control things like max drawdown, max risk accrual, execution eagerness, etc.