Leveraged Futures Exchange for Simulated Trading (LFEST)
:radioactive: This is a personal project, use a your own risk.
lfest-rs is a simulated futures exchange capable of leveraged positions.
You fed it external market data through the MarketUpdate enum to update the internal state.
Where you either provide bid and ask price or information derived from a candle.
Macros (bba, candle) make it easy to construct the concrete variant.
For simplicity's sake (and performance) the exchange does not use an order book.
Features:
- :currency_exchange: Fixed point arithmetic using fpdec crate, for super fast and precise numeric calculations.
- :brain: Use of newtype pattern to enforce the correct function IO.
Examples includeBaseCurrency,QuoteCurrency,FeeandLeverage.
This makes it impossible to mistakenly input for example aUSDdenoted value into a function that expects aBTCdenoted value. - :satellite: Flexible market data integration through the
MarketUpdatetype and associated macros. - :chart: Integrated performance tracking.
Use the existingFullTrackor implement your own using theAccountTrackertrait. - :heavy_check_mark: Broad test coverage, to get closer to ensured correctness.
- :mag: Auditable due to its small and consice codebase. < 8k LOC
- :page_with_curl: Supports both linear and inverse futures contracts.
Order Types
The supported order types are:
Market: aggressively execute against the best bid / askLimit: passively place an order into the orderbook
Performance Metrics:
The following performance metrics are available when using the FullTrack AccountTracker,
but you may define any performance metric by implementing the AccountTracker trait.
win_ratio: wins / total_tradesprofit_loss_ratio: avg_win_amnt / avg_loss_amnttotal_rpnl: Total realized profit and losssharpesortinocumulative fees: Sum total of fees payed to the exchangemax_drawdown_wallet_balance: Maximum fraction the wallet balance has decreased from its high.max_drawdown_total: Drawdown including unrealized profit and lossnum_trades: The total number of trades executedturnover: The total quantity executedtrade_percentage: trades / total_trade_opportunitiesbuy_ratio: buys / total_tradeslimit_order_fill_ratiolimit_order_cancellation_ratiohistorical_value_at_riskcornish_fisher_value_at_riskd_ratio
Some of these metric may behave differently from what you would expect, so make sure to take a look at the code.
How to use
To use this crate in your project, add the following to your Cargo.toml:
[dependencies]
lfest = "0.29.0"
Then proceed to use it in your code. For an example see examples
TODOs:
- proper liquidations
- Rework some internal components for greater clarity and simplicity
- Order filters (price and quantity)
Contributions
If you find a bug or would like to help out, feel free to create a pull-request.
Donations :moneybag: :money_with_wings:
I you would like to support the development of this crate, feel free to send over a donation:
Monero (XMR) address:
47xMvxNKsCKMt2owkDuN1Bci2KMiqGrAFCQFSLijWLs49ua67222Wu3LZryyopDVPYgYmAnYkSZSz9ZW2buaDwdyKTWGwwb

License
Copyright (C) 2020 <Mathis Wellmann wellmannmathis@gmail.com>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.
