Alchemist_lib is an automatic trading library for cryptocurrencies that allow to personalize the portfolio based on a specific strategy.
- Easy to use: The interface is similar to zipline, a popular backtesting software for stocks.
- Portfolio personalization: You can choose the weight of every element on the portfolio.
- Most common technical analysis indicators already integrated.
- Execute orders on the most famous exchanges.
- Possibility to visualize the asset allocation and the portfolio value charts for every strategy thanks to alchemist-view.
- Fully documented and hosted on readthedocs.
The following exchanges are available to trade on:
- Python3
- Mysql
See the installing documentation.
Strategy description: Hold a portfolio equally composed by Ethereum and BitcoinCash.
from alchemist_lib.portfolio import LongsOnlyPortfolio from alchemist_lib.broker import PoloniexBroker from alchemist_lib.tradingsystem import TradingSystem import alchemist_lib.exchange as exch import pandas as pd def set_weights(df): df["weight"] = 0.5 #Because there are just two assets. return df def select_universe(session): poloniex_assets = exch.get_assets(session = session, exchange_name = "poloniex") my_universe = [] for asset in poloniex_assets: if asset.ticker == "ETH" or asset.ticker == "BCH": my_universe.append(asset) return my_universe def handle_data(session, universe): #The value of alpha is useless in this case. df = pd.DataFrame(data = {"asset" : universe, "alpha" : 0}, columns = ["asset", "alpha"]).set_index("asset") return df algo = TradingSystem(name = "BuyAndHold", portfolio = LongsOnlyPortfolio(capital = 0.02), set_weights = set_weights, select_universe = select_universe, handle_data = handle_data, broker = PoloniexBroker(api_key = "APIKEY", secret_key = "SECRETKEY"), paper_trading = True) algo.run(delay = "15M", frequency = 1)
Alchemist_lib works with three methods:
- set_weights
- select_universe
- handle_data
set_weights is used to set the weight that an asset has respect the others within the portfolio. The sum of every weight must be close to 1. Must returns a pandas dataframe with two columns: "asset" and "alpha", where "asset" is the index.
select_universe filters the assets saved on the database and returns just the ones the strategy will take into consideration.
handle_data is the most importat one because it manages the trading logic. Must returns a pandas dataframe with two columns: "asset" and "alpha", where "asset" is the index.
You can find other examples in the examples
directory.
A bug tracker is provided by Github.