All Projects → finlab-python → finlab_crypto

finlab-python / finlab_crypto

Licence: GPL-3.0 license
Documentation

Programming Languages

python
139335 projects - #7 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to finlab crypto

TradeBot
Crypto trading bot using Binance API (Java)
Stars: ✭ 292 (+48.22%)
Mutual labels:  backtesting
aku
Aku - Toy Backtesting/Trading Engine
Stars: ✭ 27 (-86.29%)
Mutual labels:  backtesting
awesome-tradingview
Curated list of noteworthy TradingView Strategies, Indicators and Alert Scripts for Trading Bots (PineScript)
Stars: ✭ 173 (-12.18%)
Mutual labels:  backtesting
epymetheus
Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away. Fast execution of profit-take/loss-cut orders is built-in. Seamless with Pandas.
Stars: ✭ 29 (-85.28%)
Mutual labels:  backtesting
bitfinex-ohlc-import
Imports historical OHLC data from Bitfinex
Stars: ✭ 27 (-86.29%)
Mutual labels:  backtesting
Backtrader
Python Backtesting library for trading strategies
Stars: ✭ 7,846 (+3882.74%)
Mutual labels:  backtesting
roq-samples
How to use the Roq C++20 API for Live Cryptocurrency Algorithmic and High-Frequency Trading as well as for Back-Testing and Historical Simulation
Stars: ✭ 119 (-39.59%)
Mutual labels:  backtesting
SierraChartZorroPlugin
A Zorro broker API plugin for Sierra Chart, written in Win32 C++.
Stars: ✭ 22 (-88.83%)
Mutual labels:  backtesting
AI-for-Trading
📈This repo contains detailed notes and multiple projects implemented in Python related to AI and Finance. Follow the blog here: https://purvasingh.medium.com
Stars: ✭ 59 (-70.05%)
Mutual labels:  backtesting
pyalgotrading
Official Python Package for Algorithmic Trading APIs powered by AlgoBulls
Stars: ✭ 134 (-31.98%)
Mutual labels:  backtesting
TAcharts
Apply popular TA tools and charts to candlestick data with NumPy.
Stars: ✭ 131 (-33.5%)
Mutual labels:  backtesting
gekko-batcher
Batch backtest tool for Gekko.
Stars: ✭ 34 (-82.74%)
Mutual labels:  backtesting
Zvt
modular quant framework.
Stars: ✭ 1,801 (+814.21%)
Mutual labels:  backtesting
modeltime.resample
Resampling Tools for Time Series Forecasting with Modeltime
Stars: ✭ 12 (-93.91%)
Mutual labels:  backtesting
binance-downloader
Python tool to download Binance Candlestick (k-line) data from REST API
Stars: ✭ 44 (-77.66%)
Mutual labels:  backtesting
autoxd
A股回测框架, 模拟实盘账户交易, 适合编写T+0策略
Stars: ✭ 71 (-63.96%)
Mutual labels:  backtesting
Stocksharp
Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).
Stars: ✭ 4,601 (+2235.53%)
Mutual labels:  backtesting
dukascopy-tools
✨ Download historical price tick data for Crypto, Stocks, ETFs, CFDs, Forex via CLI and Node.js ✨
Stars: ✭ 128 (-35.03%)
Mutual labels:  backtesting
gym-mtsim
A general-purpose, flexible, and easy-to-use simulator alongside an OpenAI Gym trading environment for MetaTrader 5 trading platform (Approved by OpenAI Gym)
Stars: ✭ 196 (-0.51%)
Mutual labels:  backtesting
plutus-algo-backtesting
Algorithmic Trading : A python framework to run backtest on stocks using your own custom algorithmic strategies
Stars: ✭ 28 (-85.79%)
Mutual labels:  backtesting

Build Status PyPI version codecov

Develop and verify crypto trading strategies at a glance.

Key Features

Installation

pip install finlab_crypto

Colab Example

Usage

Setup Research Environment (Recommend)

Create directory ./history/ for saving historical data. If Colab notebook is detected, it creates GoogleDrive/crypto_workspace/history and link the folder to ./history/.

import finlab_crypto
finlab_crypto.setup()

Get Historical Price

ohlcv = finlab_crypto.crawler.get_all_binance('BTCUSDT', '4h')
ohlcv.head()

'dataframe'

Trading Strategy

@finlab_crypto.Strategy(n1=20, n2=60)
def sma_strategy(ohlcv):
  n1 = sma_strategy.n1
  n2 = sma_strategy.n2
  
  sma1 = ohlcv.close.rolling(int(n1)).mean()
  sma2 = ohlcv.close.rolling(int(n2)).mean()
  return (sma1 > sma2), (sma1 < sma2)

Backtest

# default fee and slipagge are 0.1% and 0.1%

vars =  {'n1': 20, 'n2': 60}
portfolio = sma_strategy.backtest(ohlcv, vars, freq='4h', plot=True)

image

Optimization

import numpy as np
vars = {
  'n1': np.arange(10, 100, 5), 
  'n2': np.arange(10, 100, 5)
}
portfolio = sma_strategy.backtest(ohlcv, vars, freq='4h', plot=True)

cumulative returns parameter performance parameter range view

Live Trading

To perform live trading of a strategy, the following 3 sections should be executed when any candle is complete.

1. Create TradingMethods

First, we need to encapsulate a strategy into TradingMethod

from finlab_crypto.online import TradingMethod, TradingPortfolio, render_html

# create TradingMethod for live trading
tm_sma = TradingMethod(
    name='live-strategy-sma'
    symbols=['ADAUSDT', 'DOTBTC', 'ETHBTC'], freq='4h', lookback=1200,
    strategy=sma_strategy,
    variables=dict(n1 = 35, n2 = 105,),
    weight=5000,
    weight_unit='USDT',
    execution_price='close' # trade at close or open price
)

2. register TradingMethods to TradingPortfolio

A TradingPortfolio can sync the virtual portfolio to your Binance trading account. A TradingPortfolio contains many TradingMethods, which should be executed whenever any new candle is (going to) closed. You can decide when to rebalance the portfolio by giving execute_before_candle_complete when creating the TradingPortfolio:

  • execute_before_candle_complete=True: rebalance right before a candle is closed (i.e. setting xx:59 for 1h frequency strategy), so you can execute orders faster then others. However, signal hazards may occur due to incomplete candles.
  • execute_before_candle_complete=False (default): rebalance right after a candle is closed (i.e. setting xx:00 for 1h frequency strategy)

The above information is crucial to help TradingPortfolio decide whether to remove incomplete candles when generating trading signals or not. However, Tradingportfolio will not execute periodically for you. So, you should set up a crontab or cloud function to execute it. We recommend you run the code by yourself before setting the crontab or cloud function.

# setup portftolio
BINANCE_KEY = '' # Enter your key and secret here!
BINANCE_SECRET = ''

tp = TradingPortfolio(BINANCE_KEY, BINANCE_SECRET, execute_before_candle_complete=False)
tp.register(tm0)

# additional trading methods can be registered
# tp.register(tm1)

3. view and execute orders

Finally, we could call tp.get_ohlcvs() to get history data of all trading assets and call tp.get_latest_signals to calculate the trading signals. The aggregate information is created using tp.calculate_position_size. All the information can be viewed by tp.render_html.

ohlcvs = tp.get_ohlcvs()
signals = tp.get_latest_signals(ohlcvs)
position, position_btc, new_orders = tp.calculate_position_size(signals)

render_html(signals, position, position_btc, new_orders, order_results)

If the result makes sense, use tp.execute_orders to sync the position of your real account. Please make an issue if there is any bug:

# (order) mode can be either 'TEST', 'MARKET', 'LIMIT'
# TEST mode will show orders without real executions.
order_results = tp.execute_orders(new_orders, mode='TEST') 

Testing

The following script runs all test cases on your local environment. Creating an isolated python environment is recommended. To test crawler functions, please provide Binance API's key and secret by setting environment variables BINANCE_KEY and BINANCE_SECRET, respectively.

git clone https://github.com/finlab-python/finlab_crypto.git
cd finlab_crypto
pip install requirements.txt
pip install coverage
BINANCE_KEY=<<YOUR_BINANCE_KEY>> BINANCE_SECRET=<<YOUR_BINANCE_SECRET>> coverage run -m unittest discover --pattern *_test.py

Updates

Version 0.2.21

  • fix pyecharts compatibility
  • set the default argument client of get_nbars_binance

Version 0.2.20

  • fix get_all_binance last candle not updated

Version 0.2.19

  • fix bar color

Verison 0.2.18

  • fix stop loss and take profit and add them into tests

Verison 0.2.17

  • update vectorbt version

Version 0.2.16

  • update pandas version

Version 0.2.15

  • fix tp.portfolio_backtest

Version 0.2.14

  • add execute_before_candle_complete
  • add weight and weight_unit for TradingMethod

Version 0.2.12

  • fix numba version

Version 0.2.11 Version 0.2.10

  • fix numpy version

Version 0.2.8

  • merge transactions to reduce fees

Version 0.2.7

  • fix test error (request binance api too fast)
  • add USDC as base stable coin (tp.set_default_stable_coin('USDC'))

Version 0.2.6

  • fix version of pandas==1.1.5, since pandas==1.2.0 is not compatable with vectorbt
  • fix show_parameters function in Strategy and Filter

Version 0.2.5

  • fix weight_btc error
  • fix strategy mutable input

Verison 0.2.4

  • fix entry price online.py

Version 0.2.3

  • fix execution price issue

Version 0.2.2: not stable

  • improve syntax
  • add execution price for the strategy

Version 0.2.1

  • fix vectorbt version

Version 0.2.0

  • update vectorbt to 0.14.4

Version 0.1.19

  • refactor(strategy.py): refactor strategy
  • refactor(cscv.py): refactor cscv
  • add cscv_nbins and cscv_objective to strategy.backtest
  • add bitmex support

Version 0.1.18

  • fix(crawler): get_n_bars
  • fix(TradingPortfolio): get_ohlcv
  • fix(TradingPortfolio): portfolio_backtest

Version 0.1.17

  • fix error for latest_signal asset_btc_value
  • add unittest for latest_signal

Version 0.1.16

  • fix web page error
  • fix error for zero orders

Version 0.1.15

  • fix web page error

Version 0.1.14

  • refine render_html function

Version 0.1.13

  • refine display html for TradingPortfolio

Version 0.1.12

  • add delay when portfolio backtesting
  • fix colab compatability
  • improve interface of TradingPortfolio

Version 0.1.11

  • fix portfolio backtest error
  • add last date equity for backtest

Version 0.1.10

  • add portfolio backtest
  • rename online.py functions
  • refactor error tolerance of different position in online.py functions
  • set usdt to excluded asset when calculate position size

Version 0.1.9

  • set 'filters' as an optional argument on TradingMethod
  • set plot range dynamically
  • portfolio backtest

Version 0.1.8

  • fix talib parameter type incompatable issue

Version 0.1.7

  • fix talib parameter type incompatable issue

Version 0.1.6

  • fix talib-binary compatable issue using talib_strategy or talib_filter

Version 0.1.5

  • add filters to online.py
  • add lambda argument options to talib_filter
  • move talib_filter to finlab_crypto package

Version 0.1.4

  • fix talib filter and strategy pandas import error
  • fix talib import error in indicators, talib_strategy, and talib_filter

Version 0.1.3

  • remove progress bar when only single strategy is backtested
  • adjust online portfolio to support leaverge
  • new theme for overfitting plots
  • fix online order with zero order amount
  • fix SD2 for overfitting plots

Version 0.1.2

  • fix strategy variables

Version 0.1.1

  • fix talib error
  • add filters folder
  • add excluded assets when sync portfolio
  • add filter folder to setup
  • fix variable eval failure

Version 0.1.0

  • add filter interface
  • add talib strategy wrapper
  • add talib filter wrapper

Version 0.0.9.dev1

  • vectorbt heatmap redesign
  • improve optimization plots
  • redesign strategy interface
  • add new function setup, to replace setup_colab

Version 0.0.8.dev1

  • fix transaction duplicate bug

Version 0.0.7.dev1

  • fix bugs of zero transaction

Version 0.0.6.dev1

  • fix latest signal
  • rename strategy.recent_signal
  • restructure rebalance function in online.py

Version 0.0.5.dev1

  • add init module
  • add colab setup function
  • set vectorbt default
  • fix crawler duplicated index

Version 0.0.4.dev1

  • add seaborn to dependencies
  • remove talib-binary from dependencies
  • fix padding style

Version 0.0.3.dev1

  • remove logs when calculating portfolio
  • add render html to show final portfolio changes
  • add button in html to place real trade with google cloud function

Version 0.0.2.dev1

  • skip heatmap if it is broken
  • add portfolio strategies
  • add talib dependency
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].