+ +
+

Live Trading

+

This document explains how to get started with live trading.

+
+

Supported Exchanges

+

Catalyst can trade against these exchanges:

+
    +
  • Bitfinex, id= bitfinex
  • +
  • Bittrex, id= bittrex
  • +
  • Poloniex, id= poloniex
  • +
+
+
+

Authentication

+

Most exchanges require token key/secret combination for authentication. By +convention, Catalyst uses an auth.json file to hold this data.

+

This example illustrates the convention using the Bitfinex exchange. +Here is how to generate key and secret values for the Bitfinex exchange: +https://docs.bitfinex.com/v1/docs/api-access. Most exchanges follow +a similar process.

+

The auth.json file:

+
{
+  "name": "bitfinex",
+  "key": "my-key",
+  "secret": "my-secret"
+}
+
+
+

The file goes here: ~/.catalyst/data/exchanges/bitfinex/auth.json

+

Note that the bitfinex part in the directory above corresponds to the id of the Bitfinex +exchange as defined in the “Supported Exchanges” section above. +Attempting to run an algorithm where the targeted exchange is missing +its auth.json file will create the directory structure and create an empty +auth.json file, but will result in an error.

+
+
+

Currency Symbols

+

Catalyst introduces a universal convention to reference +trading pairs and individual currencies. This +is required to ensure that the symbol() api predictably +returns the correct asset regardless of the targeted exchange.

+

Exchanges tend to use their own convention to represent currencies +(e.g. XBT and BTC both represent Bitcoin on different exchanges). +Trading pairs are also inconsistent. For example, Bitfinex +puts the market currency before the base currency without a +separator, Bittrex puts the base currency first and uses a dash +seperator.

+

Here is the Catalyst convention:

+

[Market Currency]_[Base Currency] all lowercase.

+

Currency symbols (e.g. btc, eth, ltc) follow the Bittrex convention.

+

Here are some examples:

+
# With Bitfinex
+bitcoin_usd_asset = symbol('btc_usd')
+ethereum_bitcoin_asset = symbol('eth_btc')
+
+# With Bittrex
+ethereum_bitcoin_asset = symbol('eth_btc')
+neo_ethereum_asset = symbol('neo_eth)
+
+
+

Note that the trading pairs are always referenced in the same manner. +However, not all trading pairs are available on all exchanges. An +error will occur if the specified trading pair is not trading +on the exchange. To check which currency pairs are available on each +of the supported exchanges, see `Catalyst Market Coverage <https://www.enigma.co/catalyst/status`_.

+
+
+

Trading an Algorithm

+

There is no special convention to follow when writing an +algorithm for live trading. The same algorithm should work in +backtest and live execution mode without modification.

+

What differs are the arguments provided to the catalyst client or +run_algorithm() interface. Here is the same example in both interfaces:

+
catalyst live -f my_algo_code -x bitfinex -c btc -n my_algo_name
+
+
+
run_algorithm(
+    initialize=initialize,
+    handle_data=handle_data,
+    analyze=analyze,
+    exchange_name='bitfinex',
+    live=True,
+    algo_namespace='my_algo_name',
+    base_currency='btc'
+)
+
+
+

Here is the breakdown of the new arguments:

+
    +
  • live: Boolean flag which enables live trading.
  • +
  • exchange_name: The name of the targeted exchange +(supported values: bitfinex, bittrex).
  • +
  • algo_namespace: A arbitrary label assigned to your algorithm for +data storage purposes.
  • +
  • base_currency: The base currency used to calculate the +statistics of your algorithm. Currently, the base currency of all +trading pairs of your algorithm must match this value.
  • +
+

Here is a complete algorithm for reference: +Buy Low and Sell High

+
+
+ + +