Metadata-Version: 2.4
Name: fast-trading-simulator
Version: 0.1.1
Summary: Numba accelerated minimalist trading simulator
Home-page: https://github.com/SerenaTradingResearch/fast-trading-simulator
Author: Ricky Ding
Author-email: e0134117@u.nus.edu
License: MIT
Keywords: trading,simulator,numba,quant,minimalist
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Office/Business :: Financial
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: numba
Requires-Dist: numpy
Requires-Dist: TA-Lib
Requires-Dist: matplotlib
Requires-Dist: pymoo
Requires-Dist: trading_models
Requires-Dist: crypto_data_downloader
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary


## Intro

- `Numba` accelerated `minimalist` trading simulator

![](https://raw.githubusercontent.com/SerenaTradingResearch/fast-trading-simulator/refs/heads/main/test/simulate.png)

## Usage

```bash
pip install fast-trading-simulator
```

- [Simulation data (2025-08-01 to 2025-11-20)](https://raw.githubusercontent.com/SerenaTradingResearch/fast-trading-simulator/refs/heads/main/test/futures_data_2025-08-01_2025-11-20.pkl)

```py
import numpy as np
import talib as ta
from crypto_data_downloader.utils import load_pkl
from trading_models.utils import D_TYPE

from fast_trading_simulator.sim import map_trades, simulate

path = "./futures_data_2025-08-01_2025-11-20.pkl"
data: D_TYPE = load_pkl(path, gz=True)

ref_sym = "BTCUSDT"
price_idx = 1
delta = 0.05

T = len(data[ref_sym])
data = {k: v for k, v in data.items() if len(v) == T}
all_act = []
for sym, v in data.items():
    p = v[:, price_idx]
    obs = p / ta.KAMA(p, 20) - 1
    pos = np.where(obs < -delta, 1, 0)
    pos = np.where(obs > delta, -1, pos)
    lev = np.full(T, 20)
    timeout = np.full(T, 10)
    take_profit = np.full(T, 0.01)
    stop_loss = np.full(T, -0.9)
    act = np.array([pos, lev, timeout, take_profit, stop_loss]).T
    all_act.append(act)
market = np.array(list(data.values()))
action = np.array(all_act)
tot_fee = 1e-3
liq_fee = np.full(len(data), 0.02)

trades = simulate(market, action, tot_fee, liq_fee, use_ratio=0.2, alloc_ratio=0.01)
map_trades(trades, plot=True)

```
