- Add:
utils.token_extra_data
to load additional trading pair data - Add:
load_extra_metadata
to load buy and sell tax for given trading pairs - Add:
CandleUniverse(autoheal_pair_limit)
and reworked how to mitigate MEV issues on pricing data - Add:
heal_anomalies
to get rid of MEV anomalies, second attempt - handles anomalies detection and smoothing out better - Add:
GroupedCandleUniverse.calculate_returns
to easily get returns of each trading pair - Add:
Client.fetch_tvl_by_pair_ids(query_type=OHLCVCandleType.tvl_v2)
option to load /WETH quoted TVL data for Uniswap v3 - Change: Use
orjson
to faster serialisation of some data
- Add:
wrangle.normalise_volume
to deal with different volume formats of Uniswap v2 and v3 - Add: Support for Coingecko data loading and metadata cross referencing. See
tradingstrategy.alternative_data.coingecko
. - Add:
tradingstrategy.alternative_data.coingecko.categorise_pairs()
to tag trading pair data with their CoinGecko category - Add:
deduplicate_pairs_by_volume()
to make it easier to construct trading pair baskets from open-ended universes - Add:
Client.fetch_top_pairs(TopPairMethod.by_token_addresses)
- query the best trading pairs and token tax for given token addresses
- Fix: Allow to run without Jupyter notebook/IPython installed. Make sure you use
Client.create_live_client()
instead ofClient.create_jupyter_client()
- Fix: Python version pindown
<3.13
instead of<=3.12
as the pip did not allow minor versions like3.12.7
- Fix: Bad import line in
tradingstrategty.utils.wrangle
making the library not to import properly
- Add:
Client.fetch_top_pairs()
- create a helper function to create always expanding trading universe for external signal providers - Add:
forward_fill(forward_fill_until)
. The default behavior is to forward fill gaps between first and last candle. However the last candle might not be updated if we load live sparse data and there has been no trades (no candles). Force the forward fill to go until a certain timestamp. - Fix: Remove
eth_defi
imports, an optional dependency, in the core library
- Dependencies: Upgrade to Pandas 2.x. NumPy 2.x is still incompatible.
- Add:
aggregate_ohlcv_across_pairs()
: Aggregate volumen-weighted open/high/low/close/volume/liquidity across multiple trading pairs to create unified view of volume and liquidity for a single base token - Add:
Client.fetch_tvl_by_pair_ids()
to allow TVL/liquidity data loading for selected trading pairs - Add:
examine_price_between_time_anomalies()
- anomaly examination if open/close between days is a strange value - Add:
fix_prices_in_between_time_frames()
- to heal broken open/close entries caused by MEV bots - Add:
remove_min_max_price()
: Remove candles where open value is outside the floating point range - Add:
Client.fetch_clmm_liquidity_provision_candles_by_pair_ids()
- CLMM candle fetching, needed for Demeter based LP backtests
- Add:
fix_dex_price_data
for wrangling DEX price feeds and separate reusablewrangle
module - Add:
resample_dataframe
utility function. Useful for resampling dataframes with multiple columns that are not candlestick data - Add:
fix_bad_wicks(bad_open_close_threshold)
to massage the data - There are ~60 broken open price data points for U/ni v3 price feeds, cause unknown - Add:
filter_for_blacklisted_tokens
- Add:
DEXPair.from_series
helper - Add:
filter_pairs_default()
that will remove known bad tokens from the trading pair universe with multiple heurestics rules - Add:
build_liquidity_summary()
for creating trading universes based on the available liquidity - Internal change: Move trading pair filtering logic to its own module
- Fix: Fix for inconcistencies in lending data downloads
- Update: Having pd.MultiIndex instead of per-pair pd.DateTimeIndex on candles slows down price access on backtesting considerably
- Update: Binance progress bar now shows individual progress for each pair when there are less than 5 pairs
- Update
fetch_all_spot_symbols
API call to Binance - Add:
LendingReserveUniverse.limit_to_protocol()
- Fix: If there is an API key error when saving exchange universe, abort the operation with an exception
- Add support for Aave v2 dataset
- Change
pyarrow
schemas ofCandle
andXYLiquidity
to use double precision (float64) instead of float32 - Add
GroupedCandleUniverse(forward_fill)
option to the constructor - Add
PandasPairUniverse.iterate_tokens()
- Add
get_prior_timestamp(series: pd.Series, ts: pd.Timestamp)
as a separate utility function - Add
resample_candles(shift)
argument - Add
format_price(decimals)
argument - Add
Universe.get_default_chain()
method - Add
resample_price_series()
function - Fix Binance data using local timezone
- Fix Binance multipair data resampling not working correctly
- Add
remove_zero_candles()
function - Add
DEXPair.exchange_name
is set ifPandasPairUniverse(exchange_universe)
is given - Add
ChainId.centralised_exchange = -1
id that is used now for Binance loaded data
- Add fee argument to
generate_pairs_for_binance()
- Fix for Binance lending data, change daily rates to annual
- Add
PairNotFound(description)
to have better error messages on pair look-up failures - Stricter input type checks for exchanges when creating
Universe
- Add
UniswapV2MockClient.clear_caches
for compatibility withClient
in unit testing
- Add
PandasPairUniverse.get_token_by_symbol()
- Add
PandasPairUniverse.get_token(chain_id)
argument
- Update error message for Binance symbols
- Add more Binance data sideloading related utility functions to
tradingstrategy.binance.utils
Updates to BinanceDownloader
- Add
BinanceDownloader.fetch_approx_asset_trading_start_date()
to figure out when asset was listed on Binance - Change
BinanceDownloader.fetch_candlestick_data()
andBinanceDownloader.fetch_lending_rates()
to accept multiple pairs at once - Add progress bars
- Add symbol validation
- Fix
get_by_chain_and_factory()
was returningExchangeNotFoundError
instead of raising it
Binance data downloading added. Python 3.11, Python 3.12 and Pandas 2.x compatibility fixes.
- Add:
BinanceDownloader.fetch_approx_asset_trading_start_date()
to figure out when asset was listed on Binance - Fix:
BinanceDownloader
timestamps to be UTC - Add: Example script how to download Binance data for multiple assets and write in a single Parquet file
- Upgrade to support Python 3.12 with breaking
datetime.datetime.utcnow()
changes - Upgrade to support Pandas 2.x with breaking
pd.Timestamp.utcnow()
changes - Upgrade to web3-ethereum-defi latest with Python 3.12 compatibilty
- Upgrade to
pyarrow
14.0 for Python 3.12 compatibility datetime.datetime.utcnow()
anddatetime.datetime.utcfromtimestamp
workarounds - we do not need timezones that unnecessarily bloat data size- Add
naive_utcnow
for Python 3.12 compatibility - Add
naive_utcfromtimestamp
for Python 3.12 compatibility - Change from
pd.Timestamp.utcfromtimestamp()
topd.Timestamp.utcfromtimestamp().tz_localize(None)
when needed
- Fix
estimate_accrued_interest
crashing when there are gaps in data - Fix
resample_candles
to retainpair_id
column if one is present in data
- Add functionality for downloading and manipulating Binance candle and lending data to have alternative datasets to benchmark the strategies for overfit and data quality issues
- Add
resample_series()
method to work for single column pd.Series price data - Fix
CandleUniverse.get_candles_by_pair()
(add return value) - Fix
resample_candles()
method
- API update:
CandleUniverse.get_candles_by_pair()
acceptsDEXPair
besidespair_id
as an argument forward_fill()
can handlevolume
column
- Fix: DataFrame copy warning in
estimate_accrued_interest
- Add:
get_price_with_tolerance(pair_name_hint)
to have better exception messages - Fix:
CandleSampleUnavailable
exception message was tuple instead of newline separated string
- Add
LendingMetricUniverse.estimate_accrued_interest
so we can estimate the position cost and interest profit in backtesting
- Update candle mappings so volume doesn't get set to None
- Internal change: move
make_clickable
to module level, so it can be reused
- API change:
Client.create_live_client(settings_file_path)
argument allows to disable and reading of settings file, to avoid any confusion in Dockerised environments - Internal change: Unit tests do not try to poke settings file anymore
- Internal change: Use
parquet.read_table(memory_map=True)
to decrease RAM usage
- Add:
LendingReserveUniverse.limit_to_assets()
- Add:
filter_for_trading_fee(pairs_dataframe)
- Internal change: Add more asserts to
Universe
creation to catch human mistakes early - API change:
get_by_chain_and_symbol()
raisesUnknownLendingReserve
instead of returningNone
- Add more asserts to
Universe
creation to catch human mistakes early
- Remove duplicate timestamp label on visualisation
- Add:
DEXPair.get_link()
to get a direct link to the trading pair page - Add:
LendingReserve.get_link()
to get a direct link to the trading pair page - Add:
DEXPair.is_tradeable()
for quick checks if a pair has decent volume - Add:
PandasPairUniverse.get_exchange_for_pair()
- Add:
LendingMetricUniverse.get_single_value()
- Add: Aave Ghost (GHST) stablecoin
- Add: Jarvis Synthetic Euro (jEUR) stablecoin
- Add:
format_links_for_html_output()
helper to work withDataFrame
objects - API update:
get_pair_by_human_description()
can have exchange slug set toNone
matching the best trading pair across with the lowest fee across all DEXes - API update:
get_closest_pair(pair)
can now now takeDEXPair
instead of a primary key as a lookup parameter and also display the pair name in error message - Various exception message improvements
- Remove duplicate timestamp from candle labels
- Add: Progress bar to lending rate download
- Fix: JSONL download progress bar was missing the last refresh, leaving the progress bar a bit under 100%
- Use
tqdm_loggable
package everywhere to have more control over progress bars
- Multiple API changes to make working with lending easier
- Lending universe construction examples
- Add:
filter_for_base_tokens()
- Add:
filter_for_chain()
- Add:
DEXPair.get_base_token()
andDEXPair.get_quote_token()
- Add:
LendingReserveUniverse.can_leverage(token)
- Add:
LendingReserveUniverse.limit_to_chain()
- API update: Make all
Universe
members optional, as we can have lending only universes - API update:
get_rates_by_reserve()
can take a lending reserve object as an argument - API update:
Universe
checks constructor argument types are correct - Deprecate: Useless methods on
Universe
- Add concurrent write control to
CachedHTTPTransport
to allow multiple processes to write the same cached download file on the same system - Enable parallel tests
- Rename
UniswapV2MockClient.initialise_mock_data
to be more descriptive
- Refactor some common code from GenericMockClient and UniswapV2MockClient into MockClient. Note: GenericMockClient resides in tradeexecutor due to its reliance on certain imports
- More lending data points
- Add vToken details to Aave lending reserves
- Add liquidation threshold and such denormalised information to Aave lending reserves
- Fix: Lending rates cache bug - different datasets were using the same cache filename
- Add lending reserves and candles universe.
Now you can easily download and explore Aave v3 lending rates
with functions available in
tradingstrategy.lending
module
- Change
PandasPairUniverse.get_pair_by_human_description()
signature to be easier to use - More user friendly data not available / 404 error handling for lending candles
- Add
exchange_universe
argument toget_pair()
GroupedCandleUniverse.create_from_single_pair_dataframe(time_bucket)
parameter addedTimeBucket.from_pandas_timedelta()
added
- Add support for fetching lending candle data with
fetch_lending_candles_by_reserve_id()
- Rename
fetch_all_lending_protocol_reserves()
tofetch_all_lending_reserves()
- Delete
summarydataframe.py
and its dependents. This includesbacktrader.py
and theTradeSummary.to_dataframe
method. Backtrader has been unmaintained for a while.
- Add loaded trading pair data preprocesing and working around Parquet data problems
- Add
DataDecodeFailed(Exception)
that gives more context information if there is something wrong with the trading pair
- Fix test warnings by changing function calls from
create_single_pair_universe()
tocreate_pair_universe()
- Add
PairNotFoundError
andExchangeNotFoundError
for more helpful error messages - Add
last_supposed_candle_at
data tofetch_trading_data_availability()
- Fix
fetch_trading_data_availability()
using wrong format for pair id array
get_one_pair_from_pandas_universe(exchange)
support
- Bump web3-ethereum-defi to version 0.21
- Add
candle_decimals
parametermake_candle_labels()
that defaults to showing 4 decimal places on candlestick charts
- Optimisation:
get_price_with_tolerance()
: candle price lookup is much faster with sparse data match - Added
trading_strategy.utils.forward_fill
module for dealing with sparse data
- Optimisation:
get_price_with_tolerance()
: candle price lookup is 40x faster for exact timestamp matches
- API change: Now
get_single_pair_data()
raisesNoDataAvailable
instead of returning an empty data frame by default if there is not enough data at source - Fix unnecessary upper() in
is_stablecoin_like
- Fix Anvil chain id not fitting to Parquet data frame (assumed 16 bit uint for chain id)
- Add more stablecoins
- Add
DEXPair.volume_30d
shortcut - Add
DEXPair.from_row
shortcut
- Fix: Better error messages when
fetch_trading_data_availability()
cannot process input
- Add
DEXPair.fee_tier
to get the trading pair fee as 0..1 float - Add
PandasPairUniverse.create_pair_universe
- Deprecate
PandasPairUniverse.create_single_pair_universe
- Deprecate
PandasPairUniverse.create_limited_pair_universe
- Add
USDT.e
andUSDC.e
bridged stablecoins on Avalanche
- Add: caching to
get_candles_by_pair()
andget_single()
methods. This can result in backtesting time being more than halved. - Fix: Bad wick filtering code crashed on empty dataframes
- Add:
tradingstrategy.utils.groupeduniverse.fix_bad_wicks
to deal with candle data where high and low values are abnormal due to various price manipulation issues. - Update: Automatically filter bad wicks when creating a candle universe
- Add a shortcut function
tradingstrategy.pair.generate_address_columns()
to generatebase_token_address
andquote_token_address
columns - Update API:
resolve_pairs_based_on_ticker()
supportsHumanReadableTradingPairDescription
- Fix: Some error message polish
- Have classical
Candle.volume
field as buy volume and sell volume cannot be separated for Uniswap v3
- change
resample_candles()
to use timedelta instead of timebucket
- Fix JSON data loading for Uni v3 exchanges that lack trade count
- Add
fee_tier
option toget_one_pair_from_pandas_universe()
andget_pair_by_human_description()
- Bump max pairs to load over JSONL to 75
- Chart visualization fixes
- remove
price_chart_rel_size
andsubplot_rel_size
options (will all be specified inrelative_sizing
) - refactor and clean code in
tradingstrategy/charting/candle_chart.py
- remove
- Fix SyntaxError caused by a typo
- We have now
tradingstrategey.client.BaseClient
as the base class for different client implementations - Adding
UniswapV2MockClient
implementation that mimicsClient
, but reads all data from an EVM test backend. Makes live trading tests much easier. - Small improvements to PairUniverse
- Fix detached indicator charting bugs for different
volume_bar_modes
- Adds support for different subtitle font sizes
- Adds tests to make to catch charting bugs earlier in the future
- Bump depenedncies
- Add
ChainId.anvil
- Add support for detached technical indicators
- Web3 6.0 fixes
- Match dependencies and Python version pindowns with Web3.py 6.0
- Adding Ethereum Tester chain id
- Silence pandas warning in
PairGroupedUniverse.get_pair_ids()
- Rename "Binance Smart Chain" to "BNB Smart Chain"
- Add a new method
Client.fetch_all_lending_protocol_reserves()
for fetching data on supported decentralized lending protocols (only AAVE v3 at present). - Improve
validate_ohclv_dataframe()
to check for date/timestamp index as well as column
- Fixes for filtering by
chain_id
inExchangeUniverse
- Improve
resolve_pairs_based_on_ticker()
to be able to filter pairs with specified fee. Change default sorting criteriabuy_volume_all_time
to be function argument for more flexible filtering
- Add
GroupedCandleUniverse.get_last_entries_by_pair_and_timestamp(pair_id, timestamp)
for simplified candle data access - Add
PandasPairUniverse.get_pair(chain_id, exchange_id, base_token, quote_token)
for simplified pair access - Support passing
exchange_universe
inPandasPairUniverse
construction, so we have all metadata needed to look up pairs - Fixes to various token data accessor
- Same as 0.13.1 - fixing broken release
- Support Arbitrum L2 in
ChainId
class
A large impact optimisation update.
-
Optimise
PandasPairUniver.get_pair_by_id
to cache fullDEXPair
objects to speed up strategies using large number of trading pairs -
Make
DEXPair
Python__slots__
based to make the object property access faster -
Added
ResampledLiquidityUniverse
for faster backtesting with luidity data -
Allow different granularity of OHLCV and liquidity data in
Universe
- Release failed
- Add
LiquidityUniverse.get_liquidity_with_tolerance
- Quick fix on
get_pair_by_human_description
error message
- Improve
CandleSampleUnavailable
error messge further to offer friendly advises how to fix - Improve
ExchangeUniverse
interface with more helpful shorthand methods
- Add
ExchangeUniverse.from_collection()
- Pass
ExchangeUniverse
instance as a part ofUniverse.exchange_universe
instead just raw array of ofuniver.exchanges
- Better multipair lookup when typing out pair names by hand
- Add
tradingstrategy.pair.HumanReadableTradingPairDescription
- Add
PandasPairUniverse.get_pair_by_human_description
- Add default HTTP request retry policy to
Client
- Add default HTTP user agent to
Client
- More direct data feed infrastructure
- Fix
create_requests_client(add_exception_hook=True)
not working correctly - Add
GroupedCandleUniverse.create_from_multiple_candle_datafarames
- Add: Make
DEXPair
hashable - Fix: Historical candle download for JSONL endpoint - make time ranges to work correctly
- Change: Make JSONL cache filenames more descriptive
- Adding
Client.fetch_trading_data_availability
API - Moved
types.py
to properly Python 3.10 TypeAlias system
- Add
TradeSummary.show
to simplify usage in notebooks
- Fix missing dependencies because web3-ethereum-defi data extras
- Fix
make_candle_labels
not working correctly if some keys were not present in the OHCLV DataFrame - Add
VolumeBarMode
option tovisualise_ohlcv
to allow different rendering modes for volume bars, in-chart or outside chart - More implementation of direct-to-blockchain node data feeds
- Add the initial implementation for direct-to-blockchain node data feeds
- Add support for average duration statistic to be expressed in terms of
bars
- Framework for direct, real-time, date feeds directly from a blockchain node
- Add
uniswap_v2_incompatible
exchange type
- Make the default behavior not to return the current candle if asked by timestamp
- Switch to
tqdm-loggable
to have better download status behavior on headless configurations - Fine tune
visualise_ohlcv
label configuration
- Fix spelling
visualise_ohlcv
- Add candle charts with
visualise_ohclv
-
Optimize
groupeduniverse
class, specificallyget_timestamp_range()
method -
Optimize get pair speed
-
Remove the "no Content-Length header" warning if HTTP response lacks file size information
-
Fix
get_token()
not returning symbol information
- Added
Client.close()
andCachedHTTPTransport.close()
for explicit closing of streams - Fix
JUPYTER_PLATFORM_DIRS
warning when importing - Fixed bunch of Pandas warnings
- Add
pytest -Werror
to ensure the lib does not raise any warnings
- Escape hatch for interactive API key setup loop
- Added
Candle.generate_synthetic_sample
for mocking test data - Added
GroupedCandleUniverse.get_price_with_tolerance
to safely get the latest price in backtesting
- Make
matplotlib
optional inClient.setup_notebook
- Added
DEXPair.exchange_type
to support Uniswap v3 pairs
- Change: List
requests
as an explicit dependency for the client (Might have been causing issues with Pyodide builds)
- Change: Remove a lot of dependencies and cleaning up old code. The package with its dependencies should be now much more compact. Any old Backtrader or QSTrader code is behind an extra dependency in the Python package definition. There is no longer dependency to Ethereum or crypto packages that had C and were problematic install.
- Change: preparing for Pyodide support.
- Change: Bumped Python 3.10 because 3.10 is minimum for Pyodide
- Fix:
PairGroupedUniverse
did not have OHLCV data sorted bytimestamp
, but instead of waspair_id
,timestamp
causing some failures of managing expectations when accessing data. - Fix: Update tests to reflect new datasets from Trading Strategy API
- Added
Client.fetch_candles_by_pair_ids
that loads trading data for certain pairs
data over JSONL endpoint and avoids loading large Parquest candle and liquidity files. This makes it possible to run backtests on low memory environments. - Added
Client.fetch_candle_dataset
andread_parquest(filters)
to filter Parquest files when loading candle datasets to optimise memory usage. (At the moment this path is not used outside the tests.) - Change
ChainId
base class toIntEnum
instead ofEnum
for better type hinting - Change
PandasPairUniverse.build_index
to use Pandas DataFrame frame transpose, greatly speeding up the creation of the index - Fix:
get_closest_price
gets a closest price even if the timestamp and
and time bucket are not in the same internal - Added
environment/jupyterlite
for the upcoming WebAssembly integration
- Added
is_candle_green()
,is_candle_red()
helpers - Added
TimeBucket.to_pandas_timedelta()
helper - Added
upsample_candles()
helper - Added
unknown
andosmosis
blockchains
- Add
Token
presentation - Add
get_single_pair_data
shortcut - Add
PandasPairUniverse.get_by_symbols
shortcut - Add
PandasPairUniverse.get_all_tokens
shortcut - Add
get_exchange_by_id
shortcut - Add
summarydata.as_duration
Pandas summary table cell formatter - Fix
filter_for_quote_tokens
to be more strict (was checking either side of the pair, not quote token) - API change
create_single_pair_universe
now to acceptpick_by_highest_vol
- API change: Rename
Universe.time_frame
->Universe.time_bucket
to be consistent - Make download progress bars more human friendly
- Add
check_schema
option when creating PyArrow table exports for trading pairs - Fix type hint for
token1_decimals
- Better error message for
get_one_pair_from_pandas_universe
- Make
token0_symbol
andtoken1_symbol
optional as not all tokens have a symbol
- Patch the previous release to
token0_decimals
andtoken1_decimals
instead ofbase_token_decimals
to be more aligned with the other Uniswap pair data - Cleaning up API and API documentation
- Export
base_token_decimals
andquote_token_decimals
in trading pair datasets
- New time points for the time buckets
- Add
exchange_address
as a part of trading pair datasets - Add
get_by_chain_and_factory()
to decentralised exchange universe
- Add
buy_tax
,transfer_tax
,sell_tax
to trading pair datasets
- Fix download retries in live trading
- Add
stablecoin
module for upcoming stablecoin support fuctions - Add
DEXPair.convert_to_dataframe
- Add
filter_for_stablecoins
- Fix broken build
- Fix Macbook M1, macOS, arm64 compatibility. Updated Scipy, Pyarrow and Numpy dependencies.
- Renaming the package
tradingstrategy
->trading-strategy
to be consistent with the package naming practices. See the new Github repository.
- Fix download responses being buffered in CLI
- Test for
get_trading_pair_page_url()
in the downloaded dataset - Added support for Ganacher tester chain
- Added
Client.create_live_client
for live trading - More helper functions to help unit testing
tradingstrategy.utils.time
to check for incompatiblepandas.Timestamp
formats- Added
tradingstrategy.pair.filter_for_quote_tokens
- Added
get_all_samples_by_range
,iterate_samples_by_pair_range
shortcuts to consume trading pair data in strategies - Added
get_prior_timestamp
to calibrate your clock with the existing time index - Added
Client.clear_caches
to ensure fresh data downloads - Added
DEXPair.exchange_slug
andDEXPair.pair_slug
so we can point to web page URLs - Renamed
Sushiswap
->Sushi
as per their branding
- Adding chain id 61 for Ethereum Classic / Ethereum Tester
- Adding
GroupedCandleUniverse.create_empty()
andGroupedLiquidityUniverse.create_empty()
This is a release to get Trading Strategy client towards live trading.
- Created
tradingstrategy.universe.Universe
helper class to encapsulate trading universe - Added convenience method
PairUniverse.create_from_pyarrow_table_with_filters
so creating different trading universes is less lines of code - Added convenience method
tradingstrategy.utils.groupeduniverse.filter_for_pairs_on_exchanges
- Added helper methods to construct single trading pair universe, see
PandasPairUniverse.create_single_pair_universe
- Separate QSTrader to an optional dependency. Please install as
pip install tradingstrategy[qstrader]
. This is because QSTrader depends on Seaborn that depends on SciPy that does not work so good on Apple M1 macs. - Add the default connection and read timeout 15 seconds to all client downloads
- Reworked how QSTrader framework integration works. QSTrader was originally designed for stock markets, so it required few changes to make it more suitable for 24/7 cryptomarkets. Warning: QSTrader and its integration are both in beta. More work is needed to be done e.g. in fee calculations to make the integration smooth. See example on PancakeSwap momentum trading algorithm.
- Added portfolioanalyzer to make timeline of portfolio construction over the time. See example on PancakeSwap momentum trading algorithm.
- Include
seaborn
as a dependency as it is required forqstrader
plot output, otherwiseqstrader
was crashing. PairUniverse
supports indexed lookups to deal with the high pair count.- More convenience methods for candle and liquidity manipulation.
- Adding the preliminaty price impact analysis. See the example notebook. Read the blog post about the liquidity formation.
- Make fastquant dependency optional, as it was causing installation issues with its ccxt dependency
- Updated inline interactive setup from within Jupyter notebook
- Polish README, release process and docs
-
Multiple changes to make the multichain backtesting possible.
-
The documentation code examples will be updated to reflect multichain support over time and may work incorrectly at the moment. Getting Started tutorial is already updated.
-
This is a major release deprecating activity flags in the trading pair universe. The multichain trading pair data is too big to include inactivate trading pairs (800k+ total trading pairs). Thus, the pair universe set only contains active trading pairs after this release, making the trading pair universe less than 100k trading pairs again, making it more feasible to download the data.
-
ExchangeUniverse.get_by_chain_and_slug()
is now canonical way to refer to an exchange -
PairUniverse.get_pair_by_ticker_by_exchange()
is now canonical way to refer to a trading pair -
Clarify primary keys may not be stable and should no longer referred permanently
-
Exchange.homepage
andExchange.active_pair_count
fields added
- Make
ChainId
database more deterministic by loading all supported chains once and only once
- Add
chain_name
output field for exchange data
- Adding slug lookups for chains
- Add Binance Smart Chain and Polygon logos
- Fix the default API endpoint URL
- Adding embedded chain list repository
- Adding support for Binance Smart Chain
- Adding more metadata information on
ChainId
objects
- Adding
exchange_slug
andchain_slug
on theExchange
object
- Allow to customise color range for the trade success distribution diagram
-
Added custom
DEXTrader
base class, as the default logic with Backtrader was a bit insufficient -
Added trade analysis support for Backtrader strategies (earlier was QSTrader only)
-
Reworked trade analysis summaries and views
- Polish API key welcome setup
- Fixed not reading settings file from Google Drive