├── .chat ├── .deletedTopics ├── config.json ├── functions.json └── workflows │ ├── auto_command │ └── action │ │ ├── finish │ │ └── _setting_.json │ │ ├── new_document │ │ └── _setting_.json │ │ ├── run_shell │ │ └── _setting_.json │ │ ├── run_shell_file │ │ └── _setting_.json │ │ └── update_file │ │ ├── _setting_.json │ │ └── handler.py │ ├── default │ ├── command │ │ ├── code │ │ │ ├── _setting_.json │ │ │ ├── instruct.txt │ │ │ └── python.txt │ │ ├── code_actions │ │ │ ├── _setting_.json │ │ │ └── instruct.txt │ │ ├── commit_message │ │ │ ├── _setting_.json │ │ │ └── instruct.txt │ │ └── release_note │ │ │ ├── _setting_.json │ │ │ └── instruct.txt │ └── context │ │ └── git_log_for_releasenote │ │ └── _setting_.json │ ├── extension │ └── command │ │ └── extension │ │ ├── _setting_.json │ │ └── instruct.txt │ ├── extension_demo │ └── action │ │ ├── get_project_tree │ │ └── _setting_.json │ │ └── load_file │ │ └── _setting_.json │ └── tree │ └── context │ └── tree │ └── _setting_.json ├── .gitignore ├── .ipynb_checkpoints ├── test-checkpoint.ipynb └── test_model-checkpoint.ipynb ├── .vscode └── extensions.json ├── README.md ├── avellaneda_stoikov ├── Cargo.lock ├── Cargo.toml ├── MANIFEST.in ├── as_market_maker1.py ├── as_market_maker2.py ├── pyproject.toml ├── setup.py └── src │ ├── .github │ └── workflows │ │ └── CI.yml │ ├── .gitignore │ ├── avellaneda_stoikov.rs │ ├── eie │ ├── calibration │ │ ├── aksolver_factory.rs │ │ ├── empirical_intensity_estimator.rs │ │ ├── mod.rs │ │ ├── multicurve_aksolver.rs │ │ ├── regression_aksolver.rs │ │ └── spread_intensity_curve.rs │ ├── estimator_executor.rs │ ├── intensity_estimator.rs │ ├── intensity_info.rs │ ├── mod.rs │ ├── pic │ │ └── sic.png │ └── readme.md │ └── lib.rs ├── catalog └── data │ ├── crypto_future │ ├── BTCUSDT_230929.BINANCE │ │ └── part-0.parquet │ ├── BTCUSDT_231229.BINANCE │ │ └── part-0.parquet │ ├── ETHUSDT_230929.BINANCE │ │ └── part-0.parquet │ └── ETHUSDT_231229.BINANCE │ │ └── part-0.parquet │ └── crypto_perpetual │ ├── 1000FLOKIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── 1000LUNCBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── 1000LUNCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── 1000PEPEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── 1000SHIBBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── 1000SHIBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── 1000XECUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── 1INCHUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AAVEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ACHUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ADABUSD-PERP.BINANCE │ └── part-0.parquet │ ├── ADAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AGIXBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── AGIXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AGLDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ALGOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ALICEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ALPHAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AMBBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── AMBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ANCBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── ANKRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ANTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── APEBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── APEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── API3USDT-PERP.BINANCE │ └── part-0.parquet │ ├── APTBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── APTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ARBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ARKMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ARKUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ARPAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ARUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ASTRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ATAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ATOMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AUCTIONBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── AUDIOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AVAXBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── AVAXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── AXSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BAKEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BALUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BANDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BATUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BCHUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BELUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BLUEBIRDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BLURUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BLZUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BNBBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── BNBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BNTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BNXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BTCBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── BTCDOMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BTCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── BTSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── C98USDT-PERP.BINANCE │ └── part-0.parquet │ ├── CELOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CELRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CFXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CHRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CHZUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CKBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── COCOSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── COMBOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── COMPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── COTIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CRVUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CTKUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CTSIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CVCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CVXBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── CVXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── CYBERUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DARUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DASHUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DEFIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DENTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DGBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DODOBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── DODOXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DOGEBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── DOGEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DOTBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── DOTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DUSKUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── DYDXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── EDUUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── EGLDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ENJUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ENSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── EOSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ETCBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── ETCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ETHBTC-PERP.BINANCE │ └── part-0.parquet │ ├── ETHBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── ETHUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FETUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FILBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── FILUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FLMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FLOWUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FOOTBALLUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FRONTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FTMBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── FTMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FTTBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── FTTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── FXSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── GALABUSD-PERP.BINANCE │ └── part-0.parquet │ ├── GALAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── GALBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── GALUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── GMTBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── GMTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── GMXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── GRTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── GTCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HBARUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HFTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HIFIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HIGHUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HNTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HOOKUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── HOTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ICPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ICXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── IDEXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── IDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── IMXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── INJUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── IOSTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── IOTAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── IOTXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── JASMYUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── JOEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── KAVAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── KEYUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── KLAYUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── KNCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── KSMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LDOBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── LDOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LEVERBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── LEVERUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LINAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LINKBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── LINKUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LITUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LPTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LQTYUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LRCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LTCBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── LTCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── LUNA2USDT-PERP.BINANCE │ └── part-0.parquet │ ├── MAGICUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MANAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MASKUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MATICBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── MATICUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MAVUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MDTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MINAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MKRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── MTLUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── NEARBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── NEARUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── NEOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── NKNUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── NMRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── OCEANUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── OGNUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── OMGUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ONEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ONTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── OPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── OXTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── PENDLEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── PEOPLEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── PERPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── PHBBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── PHBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── QNTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── QTUMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RADUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RAYUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RDNTUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── REEFUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RENUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RLCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RNDRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ROSEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RSRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RUNEUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── RVNUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SANDBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── SANDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SEIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SFPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SKLUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SNXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SOLBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── SOLUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SPELLUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SRMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SSVUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── STGUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── STMXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── STORJUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── STXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SUIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SUSHIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── SXPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── THETAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── TLMBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── TLMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── TOMOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── TRBUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── TRUUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── TRXBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── TRXUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── TUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── UMAUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── UNFIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── UNIBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── UNIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── USDCUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── VETUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── WAVESBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── WAVESUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── WLDUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── WOOUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XEMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XLMUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XMRUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XRPBUSD-PERP.BINANCE │ └── part-0.parquet │ ├── XRPUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XTZUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XVGUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── XVSUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── YFIUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── YGGUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ZECUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ZENUSDT-PERP.BINANCE │ └── part-0.parquet │ ├── ZILUSDT-PERP.BINANCE │ └── part-0.parquet │ └── ZRXUSDT-PERP.BINANCE │ └── part-0.parquet ├── compare ├── nautilus │ ├── backtest.py │ ├── catalog │ │ ├── compressed │ │ │ ├── AVAX-BUSD.parquet │ │ │ ├── ETH-BUSD.parquet │ │ │ └── ETH-USDT.parquet │ │ ├── data │ │ │ ├── bar.parquet │ │ │ │ ├── _common_metadata │ │ │ │ └── instrument_id=ETHUSDT.BINANCE │ │ │ │ │ └── 1654012800000000000-1656829980000000000-BINANCE-1-MINUTE-LAST-EXTERNAL-0.parquet │ │ │ └── currency_pair.parquet │ │ │ │ ├── 0-0-0.parquet │ │ │ │ └── _common_metadata │ │ └── get_binance.py │ ├── double_ma_strategy.py │ ├── double_ma_strategyV2.py │ ├── nautilus_trader.png │ ├── plot.py │ ├── preprocess_eth.py │ └── test.log └── vnpy │ ├── backtest.py │ ├── double_ma_strategy.py │ ├── vnpy_result.jpeg │ └── vnpy_results.png ├── example_data ├── .ipynb_checkpoints │ ├── Untitled-checkpoint.ipynb │ ├── analysis-checkpoint.ipynb │ ├── factor_analysis-checkpoint.py │ └── test-checkpoint.ipynb ├── Untitled.ipynb ├── __init__.py ├── __pycache__ │ ├── factor_analysis.cpython-310.pyc │ ├── graph.cpython-310.pyc │ └── utils.cpython-310.pyc ├── analysis.ipynb ├── binance_kline_download.py ├── coin_tags.csv ├── filtered_symbols.txt ├── tools │ ├── __pycache__ │ │ ├── enums.cpython-310.pyc │ │ └── utility.cpython-310.pyc │ ├── bar_data_form.sh │ ├── concat_df.py │ ├── download_kline.py │ ├── download_metrics.py │ ├── enums.py │ ├── filter_coin.py │ ├── filtered_symbols.txt │ ├── utility.py │ └── � └── � ├── finml_extension ├── Cargo.toml ├── LICENSE.txt ├── pyproject.toml ├── python │ └── finml_extension │ │ ├── __init__.py │ │ └── hop.py ├── requirements.txt ├── rust-toolchain.toml └── src │ ├── hop │ ├── mod.rs │ └── rolling_ops.rs │ └── lib.rs ├── finml_lib ├── README.md ├── __init__.py ├── alpha_research │ ├── __init__.py │ ├── __pycache__ │ │ └── __init__.cpython-310.pyc │ ├── evaluate │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-310.pyc │ │ │ ├── factor_analysis.cpython-310.pyc │ │ │ ├── graph.cpython-310.pyc │ │ │ └── utils.cpython-310.pyc │ │ ├── basic.py │ │ ├── example.py │ │ ├── factor_analysis.py │ │ ├── factor_preprocessing.py │ │ ├── graph.py │ │ ├── single_factor_analysis.py │ │ └── utils.py │ ├── feed │ │ ├── .ipynb_checkpoints │ │ │ ├── Untitled-checkpoint.ipynb │ │ │ ├── alpha_example-checkpoint.py │ │ │ ├── base-checkpoint.py │ │ │ ├── expr_engine-checkpoint.py │ │ │ └── ops-checkpoint.py │ │ ├── Untitled.ipynb │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-310.pyc │ │ │ ├── base.cpython-310.pyc │ │ │ ├── expr_engine.cpython-310.pyc │ │ │ ├── ops.cpython-310.pyc │ │ │ └── plexpr_func.cpython-310.pyc │ │ ├── alpha_example.py │ │ ├── base.py │ │ ├── expr_engine.py │ │ ├── ops.py │ │ ├── plexpr_func.py │ │ └── test.py │ └── process │ │ └── orthogonalization.py ├── bar_aggregation │ ├── __init__.py │ ├── aggregate_extended_bar.pxd │ ├── aggregate_extended_bar.py │ ├── aggregate_extended_bar.pyx │ ├── aggregate_imbalance_bar.pxd │ ├── aggregate_imbalance_bar.pyx │ ├── aggregate_orderflow_bar.pxd │ ├── aggregate_orderflow_bar.pyx │ ├── extended_bar.pxd │ ├── extended_bar.py │ ├── extended_bar.pyx │ ├── imbalance_bar.pxd │ ├── imbalance_bar.pyx │ ├── orderflowbar.pxd │ └── orderflowbar.pyx ├── czsc │ ├── analyse.py │ ├── base_object.py │ ├── enums.py │ ├── twist.py │ └── utils.py ├── features │ ├── Cargo.lock │ ├── Cargo.toml │ └── src │ │ ├── build.sh │ │ ├── entropy.rs │ │ ├── fracdiff.rs │ │ ├── kalmanfilter.rs │ │ ├── lib.rs │ │ ├── microstructure.rs │ │ ├── orderblock.rs │ │ ├── ouprocess.rs │ │ ├── peak.rs │ │ ├── rollregression.rs │ │ ├── rollstats.rs │ │ ├── sadf.rs │ │ └── smartmoney.rs ├── finml │ ├── __init__.py │ ├── backtest │ │ ├── __init__.py │ │ └── backtest.py │ ├── data │ │ ├── __init__.py │ │ ├── datamodule.py │ │ ├── dataset.py │ │ └── handler.py │ ├── evaluation │ │ ├── __init__.py │ │ ├── cross_validation.py │ │ ├── feature_importance.py │ │ └── metrics.py │ ├── labeling │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-310.pyc │ │ │ └── get_label.cpython-310.pyc │ │ └── get_label.py │ ├── models │ │ ├── CNNTransformer │ │ │ ├── __init__.py │ │ │ ├── model_tools.py │ │ │ └── models.py │ │ ├── WaveNet │ │ │ ├── __init__.py │ │ │ ├── model_tools.py │ │ │ └── models.py │ │ ├── __init__.py │ │ ├── base.py │ │ ├── gru.py │ │ ├── lassonet.py │ │ ├── lightgbm │ │ │ ├── __init__.py │ │ │ ├── dual_train.py │ │ │ ├── lightgbm_binary classification.py │ │ │ ├── lightgbm_tools.py │ │ │ └── test_example.py │ │ ├── loss.py │ │ └── xgboost │ │ │ ├── __init__.py │ │ │ ├── xgboost_tools.py │ │ │ └── xgboost_train.py │ ├── sampling │ │ ├── __init__.py │ │ ├── aggregate_bars.py │ │ ├── filter.py │ │ └── get_weights.py │ └── utils │ │ ├── __init__.py │ │ ├── bet_size.py │ │ └── stats.py ├── indicators │ ├── supertrend3.pxd │ └── supertrend3.pyx └── setup.py ├── notebook ├── CNNTransformer.md ├── GMlGBCzXgAEk2Oc.jpg ├── Richard Grinold, Ronald Kahn-Active Portfolio Management_ A Quantitative Approach for Producing Superior Returns and Controlling Risk-McGraw-Hill (1999).pdf └── binance_analysis.ipynb ├── process ├── backtest_example.py ├── config.json ├── get_all_instruments.py ├── orderbook_write.py ├── preprocess_trade_data.py └── tick2timebar.py ├── resources.md ├── scaler.pkl ├── streamlit_app ├── __init__.py ├── __pycache__ │ ├── data_scheme.cpython-310.pyc │ ├── io_tool.cpython-310.pyc │ ├── plot.cpython-310.pyc │ └── stream2batch.cpython-310.pyc ├── data_scheme.py ├── factor_analysis.py ├── io_tool.py ├── main.py ├── plot.py ├── stream2batch.py ├── test.py └── trade_analysis.py ├── test.ipynb ├── test ├── aggTrade_agg.py ├── aggregate_timebar.py ├── backtest_genericdata.py ├── binance_top_search_symbols.py ├── dolar_bar_aggregation.py ├── generate_dataset.py ├── genericdata_strategy.py ├── imbalance_bar_strategy.py ├── kline2paquet.py ├── orderflowbar_aggregate.py ├── quantitle_xgboost.py ├── ray_tune_gru_example.py ├── test_diff.py ├── test_extended_bar_aggregation.py ├── test_features.py ├── test_get_label.py ├── test_imbalance_bar_aggregation.py ├── test_quantitle_loss.py ├── test_sample.py ├── test_train_xgb.py ├── test_tuneta.py ├── test_value_select.py ├── time_bar_aggregation.py ├── train_xgboost_meta.py └── volume_bar_aggreation.py ├── test_agg.py ├── test_model.ipynb ├── tool_test ├── data_record.py ├── data_record_run.py ├── hyperopt.py ├── load_orderbook_delta.py ├── scalper_search.py └── streaming_agg.py └── � /.chat/.deletedTopics: -------------------------------------------------------------------------------- 1 | 70439e61332299748f12dc5f6de6f72d717b8c228c884cd4ed108ab595b9fe42 2 | 5a511358c5a4c386ef729c1dc95749ac3a7895ea4963b3d47b1c02733ff2ce9c 3 | 552d1c6948f09725646e73686e0f8fc67294909f607bd5eff4f436c96621ee4b -------------------------------------------------------------------------------- /.chat/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "model": "gpt-4", 3 | "provider": "OpenAI", 4 | "tokens-per-prompt": 6000, 5 | "OpenAI": { 6 | "temperature": 0, 7 | "stream": true 8 | } 9 | } -------------------------------------------------------------------------------- /.chat/workflows/auto_command/action/finish/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "finish_task", 3 | "description": "Flag task as finished", 4 | "type": [ 5 | "task" 6 | ], 7 | "args": [ 8 | ], 9 | "action": "finish_task", 10 | "handler": [ 11 | "echo", 12 | "Task finished" 13 | ] 14 | } -------------------------------------------------------------------------------- /.chat/workflows/auto_command/action/new_document/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "new_file", 3 | "description": "create new file or replace file with new content", 4 | "type": [ 5 | "*" 6 | ], 7 | "args": [ 8 | { 9 | "name": "fileName", 10 | "description": "target file name to create", 11 | "type": "string", 12 | "from": "content.fileName" 13 | }, 14 | { 15 | "name": "content", 16 | "description": "content to write to file", 17 | "type": "string", 18 | "as": "file", 19 | "from": "content.content" 20 | } 21 | ], 22 | "action": "new_file", 23 | "handler": [ 24 | "cp", 25 | "${content}", 26 | "${fileName}" 27 | ] 28 | } -------------------------------------------------------------------------------- /.chat/workflows/auto_command/action/run_shell/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "run_shell", 3 | "description": "run shell script", 4 | "type": [ 5 | "shell-singleline" 6 | ], 7 | "args": [ 8 | { 9 | "name": "script", 10 | "description": "shell command to run, for example: [\"ls\", \"/tmp\"]", 11 | "type": "string", 12 | "from": "content.content" 13 | } 14 | ], 15 | "action": "run_shell", 16 | "handler": [ 17 | "${script}" 18 | ] 19 | } -------------------------------------------------------------------------------- /.chat/workflows/auto_command/action/run_shell_file/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "run_shell_file", 3 | "description": "run shell script file", 4 | "type": [ 5 | "shell" 6 | ], 7 | "args": [ 8 | { 9 | "name": "script_file", 10 | "description": "shell script file to run", 11 | "type": "string", 12 | "as": "file", 13 | "from": "content.content" 14 | } 15 | ], 16 | "action": "run_shell", 17 | "handler": [ 18 | "bash", 19 | "${script_file}" 20 | ] 21 | } -------------------------------------------------------------------------------- /.chat/workflows/auto_command/action/update_file/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "update_file", 3 | "description": "replace selections of file with specified content", 4 | "type": ["update"], 5 | "args": [{ 6 | "name": "fileName", 7 | "description": "target file name to update", 8 | "type": "string", 9 | "from": "content.fileName" 10 | }, { 11 | "name": "old_content", 12 | "description": "old content to replaced", 13 | "type": "string", 14 | "from": "content.content.old" 15 | }, { 16 | "name": "content", 17 | "description": "content to write to file", 18 | "type": "string", 19 | "from": "content.content.new" 20 | }], 21 | "action": "update_file", 22 | "handler": ["python", "${CurDir}/handler.py", "${fileName}", "${old_content}", "${content}"] 23 | } -------------------------------------------------------------------------------- /.chat/workflows/auto_command/action/update_file/handler.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | def replace_text_in_file(fileName: str, old_content: str, newContent: str) -> None: 4 | """ 5 | Replace text in a file within the specified range with new content. 6 | 7 | :param fileName: The name of the file to modify. 8 | :param startPos: The starting position of the range to replace. 9 | :param endPos: The ending position of the range to replace. 10 | :param newContent: The new content to replace the specified range with. 11 | """ 12 | with open(fileName, 'r') as file: 13 | content = file.read() 14 | 15 | # how many times old_content occurs in content 16 | count = content.count(old_content) 17 | # if count is not 1, then we can't replace the text 18 | if count != 1: 19 | # output error message to stderr and exit 20 | print(f"Error: {old_content} occurs {count} times in {fileName}.", file=sys.stderr) 21 | exit(-1) 22 | 23 | # replace old_content with new_content 24 | modified_content = content.replace(old_content, new_content) 25 | 26 | with open(fileName, 'w') as file: 27 | file.write(modified_content) 28 | 29 | 30 | if __name__ == "__main__": 31 | try: 32 | file_name = sys.argv[1] 33 | old_content = sys.argv[2] 34 | new_content = sys.argv[3] 35 | 36 | replace_text_in_file(file_name, old_content, new_content) 37 | except Exception as e: 38 | print(e, file=sys.stderr) 39 | exit(-1) 40 | exit(0) -------------------------------------------------------------------------------- /.chat/workflows/default/command/code/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "pattern": "code", 3 | "description": "write code (default)", 4 | "message": "", 5 | "default": true, 6 | "instructions": ["instruct.txt", "python.txt"] 7 | } -------------------------------------------------------------------------------- /.chat/workflows/default/command/code/instruct.txt: -------------------------------------------------------------------------------- 1 | As a software developer assistant, your tasks are to: 2 | 3 | - Provide a clear and concise response to address the user's requirements. 4 | - Write code and give advice based on given code or information in the if provided. 5 | - Follow language-specific best practices and common coding standards. 6 | 7 | When responding: 8 | 9 | 1. First summarize the requirements or provided information in your own words. 10 | The summary should better be written in bullet points (excluding code). 11 | 2. When modifying the provided code, include the entire modified functions, but exclude any unmodified functions. 12 | If any global statements are changed, include the full global statements; otherwise, do not include them. 13 | 3. Enclose code or changes within blocks using triple backticks (```), and include the programming language and the file path. 14 | For example: 15 | ```python path=./path/to/file.py 16 | print("Hello, World!") 17 | ``` 18 | Do your best to deduce the file path based on the given or previous messages. 19 | If you are still uncertain about the file path of the code, feel free to omit it. 20 | 4. Use separate code blocks for different files. 21 | 5. When providing a suggestion or instruction, begin by explaining the reason behind it. 22 | 6. You may not receive all the direct information needed for your task. 23 | Analyze the given to understand how existing code was written, and use this knowledge for your task. 24 | 7. Note that not all previous messages are necessarily relevant. 25 | You may encounter duplicate or conflicting messages, and the later messages should be considered as the most accurate. 26 | 27 | If you need more information, ask for it. 28 | -------------------------------------------------------------------------------- /.chat/workflows/default/command/code/python.txt: -------------------------------------------------------------------------------- 1 | When writing Python code, include type hints where appropriate and maintain compliance with PEP-8 guidelines, such as providing docstrings for modules, classes, and functions. 2 | -------------------------------------------------------------------------------- /.chat/workflows/default/command/code_actions/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "pattern": "modify_actions", 3 | "description": "generate modify action list", 4 | "message": "output modify action list.", 5 | "default": false, 6 | "show": false, 7 | "instructions": ["instruct.txt"] 8 | } -------------------------------------------------------------------------------- /.chat/workflows/default/command/code_actions/instruct.txt: -------------------------------------------------------------------------------- 1 | As a software developer assistant, your tasks are to: 2 | 3 | - Provide a clear and concise response to address the user's requirements. 4 | - Write code and give advice based on given code or information in the if provided. 5 | - Follow language-specific best practices and common coding standards. 6 | 7 | When responding: 8 | 9 | 1. 输出为修改动作列表。例如: 10 | ``` 11 | ```json 12 | [ 13 | { 14 | "action": "delete", 15 | "content": "} catch (error) {\n\t}" 16 | }, 17 | { 18 | "action": "insert", 19 | "insert_before": "try {\n\tconst v = 30;", 20 | "content": "const val = 50;" 21 | }, 22 | { 23 | "action": "insert", 24 | "insert_after": "try {\n\tconst v = 0;", 25 | "content": "const val = 20;" 26 | }, 27 | { 28 | "action": "modify", 29 | "original_content": "const newVal = 30;", 30 | "new_content": "const newVal = 35;" 31 | } 32 | ] 33 | ``` 34 | ``` 35 | 2. insert_before、insert_after尽量对应多行内容,避免原代码中存在多个匹配位置。例如: 36 | 原代码为: 37 | ``` 38 | def hello1(): 39 | print('a') 40 | def hello2(): 41 | print('a') 42 | ``` 43 | 针对insert_after来说,好的修改是: 44 | ``` 45 | 'insert_after': 'def hello2():\n print('a')' 46 | ``` 47 | 不好的修改示例: 48 | ``` 49 | 'insert_after': ' print('a')' 50 | ``` 51 | 不好的示例中会有多个匹配成功的位置,会产生插入内容位置错误。 52 | 3. 需要插入到语句块之后的内容,不能插入到语句块中间。例如: 53 | ``` 54 | def hello(): 55 | a = 30; 56 | if a>30: 57 | print('a') 58 | else: 59 | print('b') 60 | ``` 61 | 如果需要在if语句块之后插入新内容,那么正确的写法是: 62 | ``` 63 | { 64 | "action": "insert", 65 | "insert_after": "\tif a>30:\n\t\tprint('a')"\n\telse:\n\t\tprint('b')", 66 | "content": "print('c')" 67 | } 68 | ``` 69 | 错误的写法是: 70 | ``` 71 | { 72 | "action": "insert", 73 | "insert_after": "\tif a>30:", 74 | "content": "print('c')" 75 | } 76 | ``` 77 | 4. 新插入代码,如果有多个位置适合插入,那么插入到第一个合适位置。 78 | 5. 插入函数时,确保插入到对应语句完整代码块之后或之前,避免对原代码块有语法结构的破坏。 -------------------------------------------------------------------------------- /.chat/workflows/default/command/commit_message/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "pattern": "commit_message", 3 | "description": "write a commit message", 4 | "message": "write a commit message", 5 | "default": false, 6 | "instructions": ["instruct.txt"] 7 | } -------------------------------------------------------------------------------- /.chat/workflows/default/command/commit_message/instruct.txt: -------------------------------------------------------------------------------- 1 | As a software developer assistant, your task is to provide clear and concise responses and write commit messages based on given code, requirements, or conversations. 2 | Follow these guidelines: 3 | 4 | 1. A commit message should include a title and multiple body lines. 5 | 2. Adhere to best practices, such as keeping titles under 50 characters and limiting body lines to under 72 characters. 6 | 3. Format all commit messages by enclosing each message within a block of triple backticks (```), and include 'commitmsg' alongside the beginning backticks. 7 | For example: 8 | ```commitmsg 9 | The title 10 | 11 | - The first bullet point. 12 | - The second bullet point. 13 | ``` 14 | 4. Utilize the diff output in the to create the summary. 15 | 5. Utilize the previous messages, if provided in the end of this prompt, to improve the title or bullet points by clearly conveying the intention of code changes. 16 | Note that not all previous messages are necessarily relevant. 17 | For example, disregard any previous commit messages you have written. 18 | You may encounter duplicate or conflicting messages, and the later messages should be considered as the most accurate. 19 | 6. Prioritize the diff output in the given and focus on actual code changes. 20 | Disregard any previous messages unrelated to the diff output. 21 | 22 | If you need more information, ask for it. 23 | -------------------------------------------------------------------------------- /.chat/workflows/default/command/release_note/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "pattern": "release_note", 3 | "description": "write release note for release", 4 | "message": "write release note for release", 5 | "default": false, 6 | "instructions": ["instruct.txt"] 7 | } -------------------------------------------------------------------------------- /.chat/workflows/default/command/release_note/instruct.txt: -------------------------------------------------------------------------------- 1 | As a software developer assistant, your task is to provide clear and concise responses and write release notes based on the given context. 2 | Follow these guidelines: 3 | 4 | 1. A release note should at least contain two sections, "Highlights" and "Change Log" unless required otherwise. 5 | 2. In the "Highlights" section, summarize and list the most important changes in the release, ordered by importance. 6 | 3. In the "Change Log" section, list all the changes in the release. 7 | Classify the changes into different subsections, including but not limited to improvements, bug fixes, and documentation. 8 | Try best to void putting changes in a "Other Changes" subsection. 9 | 4. For each subsection of "Change Log", further group and summarize the changes into a bullet list. 10 | Try best to group more than one commit into a bullet. 11 | At the end of each bullet, include the issue numbers or commit hashes in parentheses if applicable. 12 | 5. Format a release note by enclosing it within a block of triple backticks (```), and include 'release' alongside the beginning backticks. 13 | 14 | Here is an example: 15 | ```release 16 | ## Highlights 17 | 18 | - Added commitmsg as block type for commit messages 19 | - Fixed a bug in the order of storing prompts 20 | - Replaced video with gifs in README.md 21 | 22 | ## Change Log 23 | 24 | ### Improvements 25 | 26 | - Optimized the order of messages (1e6a130) 27 | - Added token counting utils (#32) (e3c2064, 2e6e130) 28 | - Limited token number for Assistant to make prompt (312fbfe, afffe48) 29 | - Added commitmsg as code type for commit messages (f49dd6d) 30 | 31 | ### Bug Fixes 32 | 33 | - Fixed a bug in the order of storing prompts (24d8009) 34 | - Fixed a bug of overwriting request token number (600ea31) 35 | 36 | ### Documentation 37 | 38 | - Replaced video with gifs in README.md (b50f081, d5aa6d2, 3c8a6bf, a5a81a9) 39 | - Updated instruct.txt (27fe87f) 40 | ``` 41 | 42 | If you need more information, ask for it. -------------------------------------------------------------------------------- /.chat/workflows/default/context/git_log_for_releasenote/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "git_log_releasenote", 3 | "description": "git log for write release note", 4 | "edit": true, 5 | "command": ["git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:\"%h - %B\""] 6 | } -------------------------------------------------------------------------------- /.chat/workflows/extension/command/extension/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "pattern": "extension", 3 | "description": "Create extension for DevChat", 4 | "message": "", 5 | "default": false, 6 | "args": 0, 7 | "instructions": ["instruct.txt"] 8 | } 9 | -------------------------------------------------------------------------------- /.chat/workflows/extension/command/extension/instruct.txt: -------------------------------------------------------------------------------- 1 | DevChat has three types of extension, context, command, and action. 2 | 3 | Context extension include two files: _setting_.json and handle.py. 4 | _setting_.json like this: 5 | ``` json 6 | { 7 | "name": "demo_python", 8 | "description": "Demo for python context", 9 | "command": ["python", "${CurDir}/handle.py"] 10 | } 11 | ``` 12 | handle.py will print data to stdout as context to GPT. 13 | _setting_.json and handle.py are place in .chat/workflows/${extension_name}/context/${context_name}. 14 | 15 | command extension include one more files, _setting_.json is necessary. 16 | _setting_.json for command like this: 17 | ``` json 18 | { 19 | "pattern": "ft {{prompt}}", 20 | "description": "Some test. $1 is xxx, $2 is xxx", 21 | "message": "In the given code, eliminate the feature flags tied to the key '$1', while preserving the code associated with the '$2'return value. Also, maintain any other code not related to these feature flags. Ignore the defaultValue. Provide just the code, excluding any descriptions.", 22 | "default": false, 23 | "args": 2, 24 | "instructions": [] 25 | } 26 | ``` 27 | instructions is a list of files, like this file. 28 | in pattern field, "{{prompt}}" means this command needs user input. if command doesn't need user input, don't include space in this field. 29 | default is always false. 30 | args means there are two arguments need user input. 31 | _setting_.json and ${instructions files} are place in .chat/workflows/${extension_name}/command/${command_name}. 32 | 33 | action extion include one more files, _setting_.json is necessary. 34 | _setting_.json for action like this: 35 | ``` json 36 | { 37 | "name": "new_file", 38 | "description": "create new file with specified content", 39 | "type": [ 40 | "*" 41 | ], 42 | "args": [ 43 | { 44 | "name": "fileName", 45 | "description": "target file name to create", 46 | "type": "string", 47 | "from": "content.fileName" 48 | }, 49 | { 50 | "name": "content", 51 | "description": "content to write to file", 52 | "type": "string", 53 | "as": "file", 54 | "from": "content.content" 55 | } 56 | ], 57 | "action": "new_file", 58 | "handler": [ 59 | "cp", 60 | "${content}", 61 | "${fileName}" 62 | ] 63 | } 64 | ``` 65 | "as": "file", it means content of this arg will save to a file, it will use the file name as arg value. 66 | `"type": ["*"]` means this action can suitable for any block type. 67 | `"from": "content.content"` means where this arg value is from. content has two fields, fileName and content. Depending on the block type, content.content may contain other required subfields. 68 | _setting_.json is place in .chat/workflows/${extension_name}/action/${action_name}. -------------------------------------------------------------------------------- /.chat/workflows/extension_demo/action/get_project_tree/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "get_project_tree", 3 | "description": "Get project file list", 4 | "type": ["project"], 5 | "action": "get_project_tree", 6 | "args": [ 7 | ], 8 | "handler": ["git", "ls-files"] 9 | } -------------------------------------------------------------------------------- /.chat/workflows/extension_demo/action/load_file/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "load_file", 3 | "description": "Load file content", 4 | "type": ["file"], 5 | "action": "load_file", 6 | "args": [ 7 | { 8 | "name": "fileName", 9 | "description": "Specify the file, which content will be loaded", 10 | "type": "string", 11 | "from": "content.content.fileName" 12 | } 13 | ], 14 | "handler": ["cat", "${fileName}"] 15 | } -------------------------------------------------------------------------------- /.chat/workflows/tree/context/tree/_setting_.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tree", 3 | "description": "Directory structure of workspace", 4 | "edit": true, 5 | "command": ["tree -I \"__pycache__|\\.pytest_cache\""] 6 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .ipynb_checkpoints/Untitled-checkpoint.ipynb 3 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "github.copilot", 4 | "github.copilot-chat" 5 | ] 6 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nautilus_tutorial 2 | Examples of nautilus script 3 | 4 | (1)avellaneda_stoikov 5 | A corrected version from https://github.com/zhenpingfeng/burgerflipper to bindge to python model. 6 | 7 | -------------------------------------------------------------------------------- /avellaneda_stoikov/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "avellaneda_stoikov" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | pyo3 = { version = "0.16.5", features = ["extension-module"] } 10 | linreg = "0.2.0" 11 | log = "0.4.17" 12 | 13 | [lib] 14 | name = "avellaneda_stoikov" 15 | crate-type = ["cdylib"] -------------------------------------------------------------------------------- /avellaneda_stoikov/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include Cargo.toml 2 | recursive-include src * -------------------------------------------------------------------------------- /avellaneda_stoikov/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel", "setuptools-rust"] -------------------------------------------------------------------------------- /avellaneda_stoikov/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import sys 3 | 4 | from setuptools import setup 5 | 6 | from setuptools_rust import RustExtension 7 | 8 | setup( 9 | rust_extensions=[RustExtension("avellaneda_stoikov.avellaneda_stoikov")], 10 | ) -------------------------------------------------------------------------------- /avellaneda_stoikov/src/.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - master 8 | pull_request: 9 | 10 | jobs: 11 | linux: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: messense/maturin-action@v1 16 | with: 17 | manylinux: auto 18 | command: build 19 | args: --release --sdist -o dist --find-interpreter 20 | - name: Upload wheels 21 | uses: actions/upload-artifact@v2 22 | with: 23 | name: wheels 24 | path: dist 25 | 26 | windows: 27 | runs-on: windows-latest 28 | steps: 29 | - uses: actions/checkout@v3 30 | - uses: messense/maturin-action@v1 31 | with: 32 | command: build 33 | args: --release -o dist --find-interpreter 34 | - name: Upload wheels 35 | uses: actions/upload-artifact@v2 36 | with: 37 | name: wheels 38 | path: dist 39 | 40 | macos: 41 | runs-on: macos-latest 42 | steps: 43 | - uses: actions/checkout@v3 44 | - uses: messense/maturin-action@v1 45 | with: 46 | command: build 47 | args: --release -o dist --universal2 --find-interpreter 48 | - name: Upload wheels 49 | uses: actions/upload-artifact@v2 50 | with: 51 | name: wheels 52 | path: dist 53 | 54 | release: 55 | name: Release 56 | runs-on: ubuntu-latest 57 | if: "startsWith(github.ref, 'refs/tags/')" 58 | needs: [ macos, windows, linux ] 59 | steps: 60 | - uses: actions/download-artifact@v2 61 | with: 62 | name: wheels 63 | - name: Publish to PyPI 64 | uses: messense/maturin-action@v1 65 | env: 66 | MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} 67 | with: 68 | command: upload 69 | args: --skip-existing * -------------------------------------------------------------------------------- /avellaneda_stoikov/src/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | 3 | # Byte-compiled / optimized / DLL files 4 | __pycache__/ 5 | .pytest_cache/ 6 | *.py[cod] 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | .venv/ 14 | env/ 15 | bin/ 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | include/ 26 | man/ 27 | venv/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | pip-selfcheck.json 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | 45 | # Translations 46 | *.mo 47 | 48 | # Mr Developer 49 | .mr.developer.cfg 50 | .project 51 | .pydevproject 52 | 53 | # Rope 54 | .ropeproject 55 | 56 | # Django stuff: 57 | *.log 58 | *.pot 59 | 60 | .DS_Store 61 | 62 | # Sphinx documentation 63 | docs/_build/ 64 | 65 | # PyCharm 66 | .idea/ 67 | 68 | # VSCode 69 | .vscode/ 70 | 71 | # Pyenv 72 | .python-version -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/calibration/aksolver_factory.rs: -------------------------------------------------------------------------------- 1 | #[derive(Debug, Copy, Clone)] 2 | pub enum SolverType { 3 | MultiCurve, 4 | LogRegression, 5 | } 6 | 7 | #[derive(Debug, Copy, Clone)] 8 | pub struct AkSolverFactory { 9 | solver_type: SolverType, 10 | } 11 | 12 | impl AkSolverFactory { 13 | /** 14 | * @param intensities Array of intensities (Y axis of Spread - Intensity curve) 15 | * @return array with estimated A and k (A, k) 16 | */ 17 | pub fn new(t: &SolverType) -> Self { 18 | AkSolverFactory { solver_type: *t } 19 | } 20 | pub fn get_solver_type(&self) -> SolverType { 21 | self.solver_type 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/calibration/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod aksolver_factory; 2 | pub mod empirical_intensity_estimator; 3 | pub mod multicurve_aksolver; 4 | pub mod regression_aksolver; 5 | pub mod spread_intensity_curve; 6 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/calibration/multicurve_aksolver.rs: -------------------------------------------------------------------------------- 1 | use log::debug; 2 | use std::time::Instant; 3 | 4 | pub struct MultiCurveAkSolver { 5 | pub spread_specification: Vec, 6 | pub a_estimates: Vec, 7 | pub k_estimates: Vec, 8 | } 9 | 10 | impl MultiCurveAkSolver{ 11 | pub fn new(spread_specification:&[f64]) -> Self { 12 | let n_estimates = spread_specification.len() * (spread_specification.len() - 1) / 2; 13 | let spread_specification = spread_specification.iter().map(|&val| val.abs()).collect(); 14 | MultiCurveAkSolver { 15 | spread_specification: spread_specification, 16 | a_estimates: vec![0.0; n_estimates], 17 | k_estimates: vec![0.0; n_estimates], 18 | } 19 | } 20 | pub fn solve_ak(&mut self, intensities: &[f64]) -> (f64, f64) { 21 | let ins = Instant::now(); 22 | 23 | let mut est_idx = 0; 24 | for i in 0..intensities.len() - 1 { 25 | for j in i + 1..intensities.len() { 26 | self.k_estimates[est_idx] = (intensities[j] / intensities[i]).ln() 27 | / (self.spread_specification[i] - self.spread_specification[j]); 28 | self.a_estimates[est_idx] = intensities[i] 29 | * (self.k_estimates[est_idx] * self.spread_specification[i]).exp(); 30 | est_idx += 1; 31 | } 32 | } 33 | 34 | let a_mean = self.mean(&self.a_estimates).unwrap(); 35 | let k_mean = self.mean(&self.k_estimates).unwrap(); 36 | debug!("MultiCurveAkSolver time: {:?}", ins.elapsed()); 37 | return (a_mean, k_mean); 38 | } 39 | pub fn mean(&self, data: &[f64]) -> Option { 40 | let sum = data.iter().sum::(); 41 | let count = data.len(); 42 | 43 | match count { 44 | positive if positive > 0 => Some(sum / count as f64), 45 | _ => None, 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/calibration/regression_aksolver.rs: -------------------------------------------------------------------------------- 1 | use linreg::linear_regression_of; 2 | use log::debug; 3 | use std::time::Instant; 4 | 5 | pub struct RegressionAkSolver { 6 | pub last_valid_value: (f64, f64), 7 | pub spread_specification: Vec, 8 | } 9 | 10 | 11 | impl RegressionAkSolver { 12 | pub fn new(spread_specification: &[f64]) -> Self { 13 | let spread_specification = spread_specification.iter().map(|&val| val.abs()).collect(); 14 | RegressionAkSolver { 15 | last_valid_value: (0f64, 0f64), 16 | spread_specification: spread_specification, 17 | } 18 | } 19 | pub fn solve_ak(&mut self, intensities: &[f64]) -> (f64, f64) { 20 | let ins = Instant::now(); 21 | 22 | let mut tuples: Vec<(f64, f64)> = Vec::new(); 23 | for i in 0..self.spread_specification.len() { 24 | tuples.push((self.spread_specification[i], intensities[i].ln())); 25 | } 26 | 27 | let (slope, intercept): (f64, f64) = 28 | linear_regression_of(&tuples).unwrap_or_else(|_| self.last_valid_value); 29 | 30 | self.last_valid_value = (slope, intercept); 31 | debug!("RegressionAkSolver time: {:?}", ins.elapsed()); 32 | return (intercept.exp(), -slope); 33 | } 34 | pub fn mean(&self, data: &[f64]) -> Option { 35 | let sum = data.iter().sum::(); 36 | let count = data.len(); 37 | 38 | match count { 39 | positive if positive > 0 => Some(sum / count as f64), 40 | _ => None, 41 | } 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/estimator_executor.rs: -------------------------------------------------------------------------------- 1 | pub struct EstimatorExecutor {} 2 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/intensity_estimator.rs: -------------------------------------------------------------------------------- 1 | use super::{ 2 | calibration::{ 3 | aksolver_factory::AkSolverFactory, spread_intensity_curve::SpreadIntensityCurve, 4 | }, 5 | intensity_info::IntensityInfo, 6 | }; 7 | 8 | pub struct IntensityEstimator { 9 | sell_execution_intensity: SpreadIntensityCurve, 10 | buy_execution_intensity: SpreadIntensityCurve, 11 | init_done_ts: Option, 12 | is_initializing: bool, 13 | is_initialized: bool, 14 | w: u64, 15 | } 16 | 17 | impl IntensityEstimator { 18 | pub fn new( 19 | spread_step: f64, 20 | n_spreads: usize, 21 | w: u64, 22 | dt: u64, 23 | solver_factor: AkSolverFactory, 24 | ) -> Self { 25 | IntensityEstimator { 26 | sell_execution_intensity: SpreadIntensityCurve::new( 27 | spread_step, 28 | n_spreads, 29 | dt, 30 | solver_factor.clone(), 31 | ), 32 | buy_execution_intensity: SpreadIntensityCurve::new( 33 | -spread_step, 34 | n_spreads, 35 | dt, 36 | solver_factor.clone(), 37 | ), 38 | init_done_ts: None, 39 | is_initializing: true, 40 | is_initialized: false, 41 | w: w, 42 | } 43 | } 44 | 45 | pub fn on_tick(&mut self, bid: f64, ask: f64, ts: u64) -> bool { 46 | if self.is_initializing { 47 | self.init(ts); 48 | } 49 | 50 | let mid_price = (bid + ask) / 2.0; 51 | let window_start = ts - self.w; 52 | self.sell_execution_intensity 53 | .on_tick(mid_price, bid, ts, window_start); 54 | self.buy_execution_intensity 55 | .on_tick(mid_price, ask, ts, window_start); 56 | return self.is_initialized; 57 | } 58 | 59 | pub fn init(&mut self, ts: u64) { 60 | match self.init_done_ts { 61 | Some(ts) => { 62 | if self.init_done_ts.unwrap() <= ts { 63 | self.is_initialized = true; 64 | self.is_initializing = false; 65 | } 66 | } 67 | None => { 68 | self.init_done_ts = Some(ts + self.w); 69 | } 70 | } 71 | } 72 | 73 | pub fn estimate(&mut self, ts: u64) -> IntensityInfo { 74 | let window_start = ts - self.w; 75 | return IntensityInfo::new( 76 | self.buy_execution_intensity.estimate_ak(ts, window_start), 77 | self.sell_execution_intensity.estimate_ak(ts, window_start), 78 | ); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/intensity_info.rs: -------------------------------------------------------------------------------- 1 | #[derive(Debug, Copy, Clone)] 2 | pub struct IntensityInfo { 3 | pub buy_a: f64, 4 | pub buy_k: f64, 5 | pub sell_a: f64, 6 | pub sell_k: f64, 7 | } 8 | 9 | impl IntensityInfo { 10 | pub fn new(buy_ak: (f64, f64), sell_ak: (f64, f64)) -> Self { 11 | IntensityInfo { 12 | buy_a: buy_ak.0, 13 | buy_k: buy_ak.1, 14 | sell_a: sell_ak.0, 15 | sell_k: sell_ak.1, 16 | } 17 | } 18 | 19 | pub fn get_sell_fill_intensity(&self, spread: f64) -> f64 { 20 | return get_intensity(spread, self.sell_a, self.sell_k); 21 | } 22 | 23 | pub fn get_buy_fill_intensity(&self, spread: f64) -> f64 { 24 | return get_intensity(spread, self.buy_a, self.buy_k); 25 | } 26 | 27 | pub fn get_sell_spread(&self, intensity: f64) -> f64 { 28 | return get_spread(intensity, self.sell_a, self.sell_k); 29 | } 30 | 31 | pub fn get_buy_spread(&self, intensity: f64) -> f64 { 32 | return get_spread(intensity, self.buy_a, self.buy_k); 33 | } 34 | 35 | pub fn get_ak(&self) -> (f64, f64, f64, f64) { 36 | (self.buy_a, self.buy_k, self.sell_a, self.sell_k) 37 | } 38 | } 39 | 40 | pub fn get_intensity(target_spread: f64, a: f64, k: f64) -> f64 { 41 | return a * (-k * target_spread).exp(); 42 | } 43 | 44 | pub fn get_spread(target_intensity: f64, a: f64, k: f64) -> f64 { 45 | return -((target_intensity / a).ln()) / k; 46 | } 47 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod calibration; 2 | pub mod estimator_executor; 3 | pub mod intensity_estimator; 4 | pub mod intensity_info; 5 | -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/pic/sic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/avellaneda_stoikov/src/eie/pic/sic.png -------------------------------------------------------------------------------- /avellaneda_stoikov/src/eie/readme.md: -------------------------------------------------------------------------------- 1 | # Poisson intensity of limit order execution, calibration of parameters A and k using level 1 tick data 2 | 3 | ## Description 4 | 5 | A limit order placed at a price *St ± δ*, has the instantaneous probability of execution *λ(δ)dt* where the intensity *λ(δ)* is given by: 6 | 7 | *λ(δ) = A e -kδ* 8 | 9 | *λ* - Poisson order execution intensity 10 | *δ* - spread (distance from mid price *St*) 11 | *A* - parameter, positively related to trading intensity 12 | *k* - parameter, positively related to market depth 13 | 14 | Package Execution Intensity Estimator (EIE) contains single and multi threaded calibration procedure of *A* and *k* parameters. 15 | Methods that calculate intensity *λ(δ, A, k)* and spread *δ(λ, A, k)* are provided as well. 16 | Algorithm operates on level 1 tick data, therefore it is suitable in a setting where liquidity is not fully observable (i.e. dark pools). 17 | Calibration is two step procedure performed separately for buy and sell limit orders. 18 |
**Steps:** 19 | - For each spread *δk* of *N* predefined spreads *(δ0 , δ1 , δ2 , ... δN-1)* 20 | estimate execution intensity *λ(δk)* using "waiting time" approach described in [[1]](#references) 4.4.2.. 21 | Result of this step is set of *N* points *(δk , λ(δk))* on empirical Spread Intensity Curve (SIC) 22 | - Estimate *A* and *k* based on *N* points from previous step. This can be achieved by various approaches. 23 | Code implements two approaches described in [[2]](#references) 3.2: 24 | - ***LOG_REGRESSION*** performs OLS regression of *log(λk)* on *δk*. Finally *k = -slope* and *A = e intercept* 25 | - ***MULTI_CURVE*** from set of *N* points creates *Ns = (N\*(N-1))/2* unique pairs fo points *((δx , λx) , (δy , λy))*. 26 | For each set of points solves the following set of equations for *A'* and *k'* : 27 | *λx = A' e -k'δx* 28 | *λy = A' e -k'δy* 29 | Final estimates are *A = mean(A'1 , A'2 , ... A'Ns)* and *k = mean(k'1 , k'2 , ... k'Ns)* 30 | 31 | Once *A* and *k* are calibrated, depending on context of usage, user can specify: 32 | - spread *δ* to obtain corresponding intensity *λ(δ)* 33 | - intensity *λ* to obtain corresponding spread *δ(λ)* 34 |

35 | ![gamma-surface](pic/sic.png) -------------------------------------------------------------------------------- /avellaneda_stoikov/src/lib.rs: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------------------------------------- 2 | // Copyright (C) 2015-2022 Nautech Systems Pty Ltd. All rights reserved. 3 | // https://nautechsystems.io 4 | // 5 | // Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); 6 | // You may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | // ------------------------------------------------------------------------------------------------- 15 | 16 | pub mod eie; 17 | pub mod avellaneda_stoikov; 18 | 19 | -------------------------------------------------------------------------------- /catalog/data/crypto_future/BTCUSDT_230929.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_future/BTCUSDT_230929.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_future/BTCUSDT_231229.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_future/BTCUSDT_231229.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_future/ETHUSDT_230929.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_future/ETHUSDT_230929.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_future/ETHUSDT_231229.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_future/ETHUSDT_231229.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000FLOKIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000FLOKIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000LUNCBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000LUNCBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000LUNCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000LUNCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000PEPEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000PEPEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000SHIBBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000SHIBBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000SHIBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000SHIBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1000XECUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1000XECUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/1INCHUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/1INCHUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AAVEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AAVEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ACHUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ACHUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ADABUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ADABUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ADAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ADAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AGIXBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AGIXBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AGIXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AGIXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AGLDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AGLDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ALGOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ALGOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ALICEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ALICEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ALPHAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ALPHAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AMBBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AMBBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AMBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AMBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ANCBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ANCBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ANKRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ANKRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ANTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ANTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/APEBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/APEBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/APEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/APEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/API3USDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/API3USDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/APTBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/APTBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/APTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/APTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ARBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ARBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ARKMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ARKMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ARKUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ARKUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ARPAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ARPAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ARUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ARUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ASTRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ASTRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ATAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ATAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ATOMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ATOMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AUCTIONBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AUCTIONBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AUDIOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AUDIOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AVAXBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AVAXBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AVAXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AVAXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/AXSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/AXSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BAKEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BAKEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BALUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BALUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BANDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BANDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BATUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BATUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BCHUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BCHUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BELUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BELUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BLUEBIRDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BLUEBIRDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BLURUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BLURUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BLZUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BLZUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BNBBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BNBBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BNBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BNBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BNTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BNTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BNXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BNXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BTCBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BTCBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BTCDOMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BTCDOMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BTCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BTCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/BTSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/BTSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/C98USDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/C98USDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CELOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CELOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CELRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CELRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CFXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CFXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CHRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CHRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CHZUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CHZUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CKBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CKBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/COCOSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/COCOSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/COMBOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/COMBOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/COMPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/COMPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/COTIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/COTIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CRVUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CRVUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CTKUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CTKUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CTSIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CTSIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CVCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CVCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CVXBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CVXBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CVXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CVXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/CYBERUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/CYBERUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DARUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DARUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DASHUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DASHUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DEFIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DEFIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DENTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DENTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DGBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DGBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DODOBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DODOBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DODOXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DODOXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DOGEBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DOGEBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DOGEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DOGEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DOTBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DOTBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DOTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DOTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DUSKUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DUSKUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/DYDXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/DYDXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/EDUUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/EDUUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/EGLDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/EGLDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ENJUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ENJUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ENSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ENSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/EOSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/EOSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ETCBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ETCBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ETCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ETCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ETHBTC-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ETHBTC-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ETHBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ETHBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ETHUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ETHUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FETUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FETUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FILBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FILBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FILUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FILUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FLMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FLMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FLOWUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FLOWUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FOOTBALLUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FOOTBALLUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FRONTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FRONTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FTMBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FTMBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FTMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FTMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FTTBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FTTBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FTTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FTTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/FXSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/FXSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GALABUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GALABUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GALAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GALAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GALBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GALBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GALUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GALUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GMTBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GMTBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GMTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GMTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GMXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GMXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GRTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GRTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/GTCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/GTCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HBARUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HBARUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HFTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HFTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HIFIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HIFIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HIGHUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HIGHUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HNTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HNTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HOOKUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HOOKUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/HOTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/HOTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ICPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ICPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ICXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ICXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/IDEXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/IDEXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/IDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/IDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/IMXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/IMXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/INJUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/INJUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/IOSTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/IOSTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/IOTAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/IOTAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/IOTXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/IOTXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/JASMYUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/JASMYUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/JOEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/JOEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/KAVAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/KAVAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/KEYUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/KEYUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/KLAYUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/KLAYUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/KNCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/KNCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/KSMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/KSMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LDOBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LDOBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LDOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LDOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LEVERBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LEVERBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LEVERUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LEVERUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LINAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LINAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LINKBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LINKBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LINKUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LINKUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LITUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LITUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LPTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LPTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LQTYUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LQTYUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LRCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LRCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LTCBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LTCBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LTCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LTCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/LUNA2USDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/LUNA2USDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MAGICUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MAGICUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MANAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MANAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MASKUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MASKUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MATICBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MATICBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MATICUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MATICUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MAVUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MAVUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MDTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MDTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MINAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MINAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MKRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MKRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/MTLUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/MTLUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/NEARBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/NEARBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/NEARUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/NEARUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/NEOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/NEOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/NKNUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/NKNUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/NMRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/NMRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/OCEANUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/OCEANUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/OGNUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/OGNUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/OMGUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/OMGUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ONEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ONEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ONTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ONTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/OPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/OPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/OXTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/OXTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/PENDLEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/PENDLEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/PEOPLEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/PEOPLEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/PERPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/PERPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/PHBBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/PHBBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/PHBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/PHBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/QNTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/QNTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/QTUMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/QTUMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RADUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RADUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RAYUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RAYUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RDNTUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RDNTUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/REEFUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/REEFUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RENUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RENUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RLCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RLCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RNDRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RNDRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ROSEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ROSEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RSRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RSRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RUNEUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RUNEUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/RVNUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/RVNUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SANDBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SANDBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SANDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SANDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SEIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SEIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SFPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SFPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SKLUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SKLUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SNXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SNXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SOLBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SOLBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SOLUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SOLUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SPELLUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SPELLUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SRMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SRMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SSVUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SSVUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/STGUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/STGUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/STMXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/STMXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/STORJUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/STORJUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/STXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/STXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SUIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SUIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SUSHIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SUSHIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/SXPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/SXPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/THETAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/THETAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TLMBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TLMBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TLMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TLMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TOMOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TOMOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TRBUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TRBUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TRUUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TRUUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TRXBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TRXBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TRXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TRXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/TUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/TUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/UMAUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/UMAUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/UNFIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/UNFIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/UNIBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/UNIBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/UNIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/UNIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/USDCUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/USDCUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/VETUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/VETUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/WAVESBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/WAVESBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/WAVESUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/WAVESUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/WLDUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/WLDUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/WOOUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/WOOUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XEMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XEMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XLMUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XLMUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XMRUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XMRUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XRPBUSD-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XRPBUSD-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XRPUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XRPUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XTZUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XTZUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XVGUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XVGUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/XVSUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/XVSUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/YFIUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/YFIUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/YGGUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/YGGUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ZECUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ZECUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ZENUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ZENUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ZILUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ZILUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /catalog/data/crypto_perpetual/ZRXUSDT-PERP.BINANCE/part-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/catalog/data/crypto_perpetual/ZRXUSDT-PERP.BINANCE/part-0.parquet -------------------------------------------------------------------------------- /compare/nautilus/catalog/compressed/AVAX-BUSD.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/compressed/AVAX-BUSD.parquet -------------------------------------------------------------------------------- /compare/nautilus/catalog/compressed/ETH-BUSD.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/compressed/ETH-BUSD.parquet -------------------------------------------------------------------------------- /compare/nautilus/catalog/compressed/ETH-USDT.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/compressed/ETH-USDT.parquet -------------------------------------------------------------------------------- /compare/nautilus/catalog/data/bar.parquet/_common_metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/data/bar.parquet/_common_metadata -------------------------------------------------------------------------------- /compare/nautilus/catalog/data/bar.parquet/instrument_id=ETHUSDT.BINANCE/1654012800000000000-1656829980000000000-BINANCE-1-MINUTE-LAST-EXTERNAL-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/data/bar.parquet/instrument_id=ETHUSDT.BINANCE/1654012800000000000-1656829980000000000-BINANCE-1-MINUTE-LAST-EXTERNAL-0.parquet -------------------------------------------------------------------------------- /compare/nautilus/catalog/data/currency_pair.parquet/0-0-0.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/data/currency_pair.parquet/0-0-0.parquet -------------------------------------------------------------------------------- /compare/nautilus/catalog/data/currency_pair.parquet/_common_metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/catalog/data/currency_pair.parquet/_common_metadata -------------------------------------------------------------------------------- /compare/nautilus/catalog/get_binance.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from datetime import date,datetime 3 | import time 4 | import pandas as pd 5 | 6 | def unix_time_millis(date): 7 | # epoch = datetime.utcfromtimestamp(0) 8 | dt = datetime.strptime(date, "%Y-%m-%d") 9 | # return int((dt - epoch).total_seconds() * 1000) 10 | return int(dt.timestamp() * 1000) 11 | 12 | def GetKlines_USDT(symbol='BTC',start='2020-8-10',end='2021-8-10',period='1h'): 13 | Klines = [] 14 | start_time = unix_time_millis(start) 15 | end_time = unix_time_millis(end) 16 | while start_time < end_time: 17 | res = requests.get('https://fapi.binance.com/fapi/v1/klines?symbol=%sUSDT&interval=%s&startTime=%s&limit=1000'%(symbol,period,start_time)) 18 | res_list = res.json() 19 | Klines += res_list 20 | #print(datetime.utcfromtimestamp(start_time/1000).strftime('%Y-%m-%d %H:%M:%S') ,len(res_list)) 21 | start_time = res_list[-1][0] 22 | return pd.DataFrame(Klines,columns=[ 'open_time','open','high','low','close','amount','close_time','volume','count','buy_amount','buy_volume','null']).astype('float') 23 | 24 | def GetKlines_BUSD(symbol='BTC',start='2020-8-10',end='2021-8-10',period='1h'): 25 | Klines = [] 26 | start_time = unix_time_millis(start) 27 | end_time = unix_time_millis(end) 28 | while start_time < end_time: 29 | res = requests.get('https://fapi.binance.com/fapi/v1/klines?symbol=%sUSDT&interval=%s&startTime=%s&limit=1000'%(symbol,period,start_time)) 30 | res_list = res.json() 31 | Klines += res_list 32 | #print(datetime.utcfromtimestamp(start_time/1000).strftime('%Y-%m-%d %H:%M:%S') ,len(res_list)) 33 | start_time = res_list[-1][0] 34 | df = pd.DataFrame(Klines,columns=['open_time','open','high','low','close','amount','close_time','volume','count','buy_amount','buy_volume','null']).astype('float') 35 | df["open_time"] = df["open_time"]/1000 36 | return df 37 | 38 | if __name__ == "__main__": 39 | # all_coins = ['BTC', 'ETH', 'BNB', 'ADA', 'XRP', 'DOGE', 'SOL', 'FTT', 'AVAX', 'NEAR', 'GMT', 'APE', 'GAL', 'FTM', 'DODO', 'ANC', 40 | # 'GALA', 'TRX', '1000LUNC', 'LUNA2', 'DOT', 'TLM', 'ICP', 'WAVES', 'LINK'] 41 | all_coins = ['ETH'] 42 | for coin in all_coins: 43 | df = GetKlines_USDT(symbol=coin,start='2022-6-1',end='2022-7-3',period='1m') 44 | df.to_parquet(f"compressed/{coin}-USDT.parquet") 45 | -------------------------------------------------------------------------------- /compare/nautilus/nautilus_trader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/nautilus/nautilus_trader.png -------------------------------------------------------------------------------- /compare/nautilus/plot.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import pandas as pd 3 | df = pd.read_csv("account.csv") 4 | df["date"] = df['Unnamed: 0'].apply(pd.Timestamp).values 5 | plt.plot(df['date'],df['total']) 6 | plt.show() 7 | -------------------------------------------------------------------------------- /compare/vnpy/backtest.py: -------------------------------------------------------------------------------- 1 | from zenquant.ctastrategy.backtesting import BacktestingEngine, OptimizationSetting 2 | from zenquant.ctastrategy.strategies.double_ma_strategy import ( 3 | DoubleMaStrategy 4 | ) 5 | from datetime import datetime 6 | 7 | ##注意start和end要在数据库中, 8 | ##调用utils中的download_binance 下载数据存储于/home/username/.vntrader 9 | engine = BacktestingEngine() 10 | engine.set_parameters( 11 | vt_symbol="ETHUSDT.BINANCE", 12 | interval="1m", 13 | start=datetime(2022, 6, 1), 14 | end=datetime(2022, 7, 1), 15 | rate=0.0004, ## commision_rate 16 | slippage=0, 17 | size=1, 18 | pricetick=0.01, 19 | capital=1_000_000, 20 | ) 21 | engine.add_strategy(DoubleMaStrategy, { 22 | "fast_window":10, 23 | "slow_windw":60, 24 | "trade_size":0.1, 25 | }) 26 | 27 | engine.load_data() 28 | engine.run_backtesting() 29 | df = engine.calculate_result() 30 | engine.calculate_statistics() 31 | engine.show_chart() 32 | df = engine.daily_df 33 | import matplotlib.pyplot as plt 34 | plt.plot(df.index,df.balance) 35 | plt.savefig("vnpy_result.jpeg") -------------------------------------------------------------------------------- /compare/vnpy/vnpy_result.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/vnpy/vnpy_result.jpeg -------------------------------------------------------------------------------- /compare/vnpy/vnpy_results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/compare/vnpy/vnpy_results.png -------------------------------------------------------------------------------- /example_data/.ipynb_checkpoints/Untitled-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 5 6 | } 7 | -------------------------------------------------------------------------------- /example_data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/__init__.py -------------------------------------------------------------------------------- /example_data/__pycache__/factor_analysis.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/__pycache__/factor_analysis.cpython-310.pyc -------------------------------------------------------------------------------- /example_data/__pycache__/graph.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/__pycache__/graph.cpython-310.pyc -------------------------------------------------------------------------------- /example_data/__pycache__/utils.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/__pycache__/utils.cpython-310.pyc -------------------------------------------------------------------------------- /example_data/filtered_symbols.txt: -------------------------------------------------------------------------------- 1 | BTC/USDT 2 | ETH/USDT 3 | BNB/USDT 4 | NEO/USDT 5 | LTC/USDT 6 | QTUM/USDT 7 | ADA/USDT 8 | XRP/USDT 9 | EOS/USDT 10 | IOTA/USDT 11 | XLM/USDT 12 | ONT/USDT 13 | TRX/USDT 14 | ETC/USDT 15 | ICX/USDT 16 | VET/USDT 17 | BCH/USDT 18 | LINK/USDT 19 | WAVES/USDT 20 | HOT/USDT 21 | ZIL/USDT 22 | ZRX/USDT 23 | BAT/USDT 24 | XMR/USDT 25 | ZEC/USDT 26 | IOST/USDT 27 | CELR/USDT 28 | DASH/USDT 29 | OMG/USDT 30 | THETA/USDT 31 | ENJ/USDT 32 | MATIC/USDT 33 | ATOM/USDT 34 | ONE/USDT 35 | FTM/USDT 36 | ALGO/USDT 37 | DOGE/USDT 38 | ANKR/USDT 39 | MTL/USDT 40 | TOMO/USDT 41 | DENT/USDT 42 | CVC/USDT 43 | CHZ/USDT 44 | BAND/USDT 45 | XTZ/USDT 46 | REN/USDT 47 | RVN/USDT 48 | HBAR/USDT 49 | NKN/USDT 50 | KAVA/USDT 51 | ARPA/USDT 52 | IOTX/USDT 53 | RLC/USDT 54 | OGN/USDT 55 | BTS/USDT 56 | COTI/USDT 57 | SOL/USDT 58 | CTSI/USDT 59 | CHR/USDT 60 | STMX/USDT 61 | KNC/USDT 62 | LRC/USDT 63 | COMP/USDT 64 | SC/USDT 65 | ZEN/USDT 66 | SNX/USDT 67 | DGB/USDT 68 | SXP/USDT 69 | MKR/USDT 70 | STORJ/USDT 71 | MANA/USDT 72 | YFI/USDT 73 | BAL/USDT 74 | BLZ/USDT 75 | SRM/USDT 76 | ANT/USDT 77 | CRV/USDT 78 | SAND/USDT 79 | OCEAN/USDT 80 | DOT/USDT 81 | RSR/USDT 82 | TRB/USDT 83 | SUSHI/USDT 84 | KSM/USDT 85 | EGLD/USDT 86 | RUNE/USDT 87 | BEL/USDT 88 | UNI/USDT 89 | AVAX/USDT 90 | HNT/USDT 91 | FLM/USDT 92 | ALPHA/USDT 93 | AAVE/USDT 94 | NEAR/USDT 95 | FIL/USDT 96 | AUDIO/USDT 97 | CTK/USDT 98 | AXS/USDT 99 | UNFI/USDT 100 | ROSE/USDT 101 | XEM/USDT 102 | SKL/USDT 103 | GRT/USDT 104 | 1INCH/USDT 105 | REEF/USDT 106 | CELO/USDT 107 | BTCST/USDT 108 | LIT/USDT 109 | SFP/USDT 110 | ALICE/USDT 111 | LINA/USDT 112 | BAKE/USDT 113 | AR/USDT 114 | MASK/USDT 115 | LPT/USDT 116 | ATA/USDT 117 | GTC/USDT 118 | KLAY/USDT 119 | C98/USDT 120 | RAY/USDT 121 | DYDX/USDT 122 | GALA/USDT 123 | ENS/USDT 124 | PEOPLE/USDT 125 | -------------------------------------------------------------------------------- /example_data/tools/__pycache__/enums.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/tools/__pycache__/enums.cpython-310.pyc -------------------------------------------------------------------------------- /example_data/tools/__pycache__/utility.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/tools/__pycache__/utility.cpython-310.pyc -------------------------------------------------------------------------------- /example_data/tools/bar_data_form.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #set variables 4 | startDate="2022-01-01" 5 | endDate="2023-07-09" 6 | interval="5m" 7 | store_dir="../example_data/" 8 | # Read symbols from filtered_symbols.txt and gather them into an array 9 | symbols=() 10 | while IFS= read -r symbol 11 | do 12 | # Remove the slash from the symbol 13 | symbol=$(echo "$symbol" | tr -d '/') 14 | symbols+=("$symbol") 15 | done < filtered_symbols.txt 16 | 17 | 18 | # Convert the symbols array to a string, shuffle it, and convert it back to an array 19 | #IFS=$'\n' symbols=($(printf '%s\n' "${symbols[@]}" | shuf)) 20 | # Iterate over the symbols array 21 | for symbol in "${symbols[@]}" 22 | do 23 | #STORE_DIRECTORY=$store_dir python3 download_kline.py -s $symbol -t um -i $interval -skip-monthly 1 -startDate $startDate -endDate $endDate 24 | #STORE_DIRECTORY=$store_dir python3 download_metrics.py -s $symbol -t um -startDate $startDate -endDate $endDate 25 | python3 concat_df.py --symbol $symbol --interval $interval --store_dir $store_dir --startDate $startDate --endDate $endDate 26 | done -------------------------------------------------------------------------------- /example_data/tools/enums.py: -------------------------------------------------------------------------------- 1 | from datetime import * 2 | 3 | YEARS = ['2017', '2018', '2019', '2020', '2021', '2022', '2023'] 4 | INTERVALS = ["1s", "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d", "3d", "1w", "1mo"] 5 | DAILY_INTERVALS = ["1s", "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d"] 6 | TRADING_TYPE = ["spot", "um", "cm"] 7 | MONTHS = list(range(1,13)) 8 | PERIOD_START_DATE = '2020-01-01' 9 | BASE_URL = 'https://data.binance.vision/' 10 | START_DATE = date(int(YEARS[0]), MONTHS[0], 1) 11 | END_DATE = datetime.date(datetime.now()) -------------------------------------------------------------------------------- /example_data/tools/filter_coin.py: -------------------------------------------------------------------------------- 1 | import ccxt 2 | import datetime 3 | 4 | # Initialize Binance Futures 5 | exchange = ccxt.binance({ 6 | 'enableRateLimit': True, # this option is mandatory to minimize the risk of being banned by the exchange 7 | 'options': { 8 | 'defaultType': 'future', # this line enables the futures trading 9 | }, 10 | }) 11 | 12 | # Get all symbols 13 | markets = exchange.load_markets() 14 | symbols = [symbol for symbol in markets.keys() if symbol.endswith('/USDT')] 15 | 16 | # Filter symbols that were up before 2022-1-1 17 | filtered_symbols = [] 18 | for symbol in symbols: 19 | try: 20 | # Fetch the earliest available OHLCV data 21 | ohlcv = exchange.fetch_ohlcv(symbol, '1d', since=0, limit=1) 22 | if ohlcv: 23 | # The timestamp is the first element of the OHLCV data 24 | timestamp = ohlcv[0][0] 25 | up_market_day = datetime.datetime.fromtimestamp(timestamp / 1e3) 26 | if up_market_day < datetime.datetime(2022, 1, 1): 27 | filtered_symbols.append(symbol) 28 | except ccxt.BaseError as e: 29 | print(f"An error occurred while fetching OHLCV data for {symbol}: {str(e)}") 30 | 31 | # Write filtered symbols to a text file 32 | with open('filtered_symbols.txt', 'w') as f: 33 | for symbol in filtered_symbols: 34 | f.write(symbol + '\n') 35 | 36 | print(f"Filtered symbols have been written to filtered_symbols.txt") -------------------------------------------------------------------------------- /example_data/tools/filtered_symbols.txt: -------------------------------------------------------------------------------- 1 | BTC/USDT 2 | ETH/USDT 3 | BNB/USDT 4 | NEO/USDT 5 | LTC/USDT 6 | QTUM/USDT 7 | ADA/USDT 8 | XRP/USDT 9 | EOS/USDT 10 | IOTA/USDT 11 | XLM/USDT 12 | ONT/USDT 13 | TRX/USDT 14 | ETC/USDT 15 | ICX/USDT 16 | VET/USDT 17 | BCH/USDT 18 | LINK/USDT 19 | WAVES/USDT 20 | HOT/USDT 21 | ZIL/USDT 22 | ZRX/USDT 23 | BAT/USDT 24 | XMR/USDT 25 | ZEC/USDT 26 | IOST/USDT 27 | CELR/USDT 28 | DASH/USDT 29 | OMG/USDT 30 | THETA/USDT 31 | ENJ/USDT 32 | MATIC/USDT 33 | ATOM/USDT 34 | ONE/USDT 35 | FTM/USDT 36 | ALGO/USDT 37 | DOGE/USDT 38 | ANKR/USDT 39 | MTL/USDT 40 | TOMO/USDT 41 | DENT/USDT 42 | CVC/USDT 43 | CHZ/USDT 44 | BAND/USDT 45 | XTZ/USDT 46 | REN/USDT 47 | RVN/USDT 48 | HBAR/USDT 49 | NKN/USDT 50 | KAVA/USDT 51 | ARPA/USDT 52 | IOTX/USDT 53 | RLC/USDT 54 | OGN/USDT 55 | BTS/USDT 56 | COTI/USDT 57 | SOL/USDT 58 | CTSI/USDT 59 | CHR/USDT 60 | STMX/USDT 61 | KNC/USDT 62 | LRC/USDT 63 | COMP/USDT 64 | SC/USDT 65 | ZEN/USDT 66 | SNX/USDT 67 | DGB/USDT 68 | SXP/USDT 69 | MKR/USDT 70 | STORJ/USDT 71 | MANA/USDT 72 | YFI/USDT 73 | BAL/USDT 74 | BLZ/USDT 75 | SRM/USDT 76 | ANT/USDT 77 | CRV/USDT 78 | SAND/USDT 79 | OCEAN/USDT 80 | DOT/USDT 81 | RSR/USDT 82 | TRB/USDT 83 | SUSHI/USDT 84 | KSM/USDT 85 | EGLD/USDT 86 | RUNE/USDT 87 | BEL/USDT 88 | UNI/USDT 89 | AVAX/USDT 90 | HNT/USDT 91 | FLM/USDT 92 | ALPHA/USDT 93 | AAVE/USDT 94 | NEAR/USDT 95 | FIL/USDT 96 | AUDIO/USDT 97 | CTK/USDT 98 | AXS/USDT 99 | UNFI/USDT 100 | ROSE/USDT 101 | XEM/USDT 102 | SKL/USDT 103 | GRT/USDT 104 | 1INCH/USDT 105 | REEF/USDT 106 | CELO/USDT 107 | BTCST/USDT 108 | LIT/USDT 109 | SFP/USDT 110 | ALICE/USDT 111 | LINA/USDT 112 | BAKE/USDT 113 | AR/USDT 114 | MASK/USDT 115 | LPT/USDT 116 | ATA/USDT 117 | GTC/USDT 118 | KLAY/USDT 119 | C98/USDT 120 | RAY/USDT 121 | DYDX/USDT 122 | GALA/USDT 123 | ENS/USDT 124 | PEOPLE/USDT 125 | -------------------------------------------------------------------------------- /example_data/tools/�: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/tools/� -------------------------------------------------------------------------------- /example_data/�: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/example_data/� -------------------------------------------------------------------------------- /finml_extension/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "finml_extension" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | [lib] 8 | name = "_finml_extension" 9 | crate-type = ["cdylib"] 10 | 11 | 12 | [dependencies] 13 | pyo3 = {version = "*", features = ["extension-module"]} 14 | pyo3-polars = {version = "0.11", features = ["derive"]} 15 | polars = {version = "0.37", features = ["dynamic_group_by","performant", "lazy", "dtype-array", "array_count","log","nightly"]} 16 | serde = {version = "*", features=["derive"]} 17 | hashbrown = {version = "0.14.2", features=["nightly"]} 18 | -------------------------------------------------------------------------------- /finml_extension/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 T. Qin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /finml_extension/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["maturin>=1.2,<2.0"] 3 | build-backend = "maturin" 4 | 5 | [project] 6 | name = "finml_extension" 7 | requires-python = ">=3.8" 8 | version = "0.1.0" 9 | 10 | license = {file = "LICENSE.txt"} 11 | classifiers = [ 12 | "Development Status :: 4 - Beta", 13 | "Programming Language :: Rust", 14 | "Programming Language :: Python :: Implementation :: CPython", 15 | "Programming Language :: Python :: Implementation :: PyPy", 16 | "License :: OSI Approved :: MIT License", 17 | ] 18 | authors = [ 19 | {name = "yfclark", email = "1825617022@qq.com"}, 20 | ] 21 | dependencies = [ 22 | "polars >= 0.20.6", 23 | ] 24 | 25 | keywords = ["polars-extension", "scientific-computing", "data-science"] 26 | 27 | [tool.maturin] 28 | python-source = "python" 29 | features = ["pyo3/extension-module"] 30 | module-name = "finml_extension._finml_extension" 31 | 32 | [project.optional-dependencies] 33 | dev = [ 34 | "numpy", 35 | "pre-commit", 36 | ] 37 | 38 | [tool.ruff] 39 | line-length = 100 40 | fix = true 41 | src = ["python"] -------------------------------------------------------------------------------- /finml_extension/python/finml_extension/__init__.py: -------------------------------------------------------------------------------- 1 | from finml_extension.hop import RollingOps 2 | 3 | version = "0.1.0" 4 | __all__ = ["RollinOps"] -------------------------------------------------------------------------------- /finml_extension/python/finml_extension/hop.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | import polars as pl 3 | from polars.utils.udfs import _get_shared_lib_location 4 | from typing import Union 5 | 6 | _lib = _get_shared_lib_location(__file__) 7 | 8 | 9 | @pl.api.register_expr_namespace("hop") 10 | class RollingOps: 11 | 12 | def __init__(self, expr: pl.Expr): 13 | self._expr: pl.Expr = expr 14 | def rolling_idxmax( 15 | self, 16 | window: int, 17 | by_columns: Union[str, list[str]] = None, 18 | ): 19 | if by_columns is None: 20 | return self._expr.register_plugin( 21 | lib=_lib, 22 | symbol="pl_rolling_idxmax", 23 | kwargs={"window": window, "by_columns": None}, 24 | is_elementwise=True, 25 | ) 26 | else: 27 | if isinstance(by_columns, str): 28 | by_columns = [by_columns] 29 | return self._expr.register_plugin( 30 | lib=_lib, 31 | symbol="pl_rolling_idxmax", 32 | args= [pl.col(name) for name in by_columns], 33 | kwargs={"window": window, "by_columns": by_columns}, 34 | is_elementwise=True, 35 | ) -------------------------------------------------------------------------------- /finml_extension/requirements.txt: -------------------------------------------------------------------------------- 1 | maturin[patchelf] 2 | polars 3 | -------------------------------------------------------------------------------- /finml_extension/rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly-2024-01-24" -------------------------------------------------------------------------------- /finml_extension/src/hop/mod.rs: -------------------------------------------------------------------------------- 1 | mod rolling_ops; 2 | -------------------------------------------------------------------------------- /finml_extension/src/lib.rs: -------------------------------------------------------------------------------- 1 | #![feature(float_gamma)] 2 | use pyo3::prelude::*; 3 | mod hop; 4 | #[pymodule] 5 | fn _finml_extension(_py: Python, _m: &PyModule) -> PyResult<()> { 6 | Ok(()) 7 | } -------------------------------------------------------------------------------- /finml_lib/README.md: -------------------------------------------------------------------------------- 1 | # finml 2 | tools for Ml trading. 3 | -------------------------------------------------------------------------------- /finml_lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/__init__.py -------------------------------------------------------------------------------- /finml_lib/alpha_research/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/__init__.py -------------------------------------------------------------------------------- /finml_lib/alpha_research/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/evaluate/__init__.py -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/evaluate/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/__pycache__/factor_analysis.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/evaluate/__pycache__/factor_analysis.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/__pycache__/graph.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/evaluate/__pycache__/graph.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/__pycache__/utils.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/evaluate/__pycache__/utils.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/basic.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | import numpy as np 3 | from scipy.optimize import curve_fit 4 | 5 | def half_decay_fit(x,y): 6 | # Exponential decay function 7 | def exp_decay(x, a, c): 8 | return c * np.exp(a * x) 9 | 10 | # Fit the curve 11 | popt, _ = curve_fit(exp_decay, x, y) 12 | a, c = popt 13 | halflife = np.log(2) / a 14 | return halflife 15 | 16 | def three_sigma(expr: pl.Expr, n: int = 3) -> [pl.Expr]: 17 | mean = expr.mean() 18 | std = expr.std() 19 | low = mean - n * std 20 | high = mean + n * std 21 | return low,high 22 | 23 | def mad(expr: pl.Expr, n: int = 3) -> [pl.Expr]: 24 | median = expr.median() 25 | mad_median = (expr - median).abs().median() 26 | high = median + n * mad_median 27 | low = median - n * mad_median 28 | return low,high 29 | 30 | def quantile(expr: pl.Expr, l: float = 0.025, h: float = 0.975) -> [pl.Expr]: 31 | low = expr.quantile(l) 32 | high = expr.quantile(h) 33 | return low,high 34 | 35 | def zscore_scale(expr: pl.Expr) -> [pl.Expr]: 36 | mean = expr.mean() 37 | std = expr.std() 38 | return mean, std, (expr - mean) / std 39 | 40 | def robust_scale(expr: pl.Expr) -> [pl.Expr]: 41 | median = expr.median() 42 | mad_median = (expr - median).abs().median() 43 | return median, mad_median, (expr - median) / mad_median 44 | 45 | def minmax_scale(expr: pl.Expr) -> [pl.Expr]: 46 | min_expr = expr.min() 47 | max_expr = expr.max() 48 | return min_expr, max_expr, (expr - min_expr) / (max_expr - min_expr) 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /finml_lib/alpha_research/evaluate/example.py: -------------------------------------------------------------------------------- 1 | from factor_preprocessing import preprocessing_extreme, preprocessing_scale 2 | from single_factor_analysis import multi_period_ic_analysis 3 | import polars as pl 4 | import numpy as np 5 | 6 | if __name__ == "__main__": 7 | filename = "../example_data/data.parquet" 8 | df = pl.read_parquet(filename) 9 | df = df.with_columns( 10 | [ 11 | pl.col("date").alias("datetime"), 12 | pl.col("asset").alias("symbol") 13 | ] 14 | ) 15 | df = df.sort(["symbol", "datetime"]) 16 | for i in np.arange(3,20): 17 | df = df.with_columns( 18 | (pl.col("close").shift(-i)/pl.col("close")-1.0).over("symbol").alias(f"label_{i}") 19 | ) 20 | df = df.drop_nulls() 21 | df = df.sort(["symbol", "datetime"]) 22 | df = df.with_columns( 23 | pl.int_range(pl.len()).alias("index") 24 | ) 25 | df = df.filter((pl.col("symbol")!=pl.lit("s_0091")) & (pl.col("symbol")!=pl.lit("s_0465"))) 26 | #print(df.columns) 27 | factor_name = "close" 28 | df = df.group_by("symbol").map_groups( 29 | lambda x: preprocessing_extreme( 30 | x, 31 | method = "three_sigma", 32 | process_columns = [factor_name], 33 | n = 1 34 | ) 35 | ) 36 | #print(df.select(pl.all().is_null().sum())) 37 | #w = df.group_by("symbol").agg([pl.col("close_low").min(),pl.col("close_high").max()]) 38 | #print(w.filter((pl.col("close_low")-pl.col("close_high")).abs()<1e-6)) 39 | df = df.group_by("symbol").map_groups( 40 | lambda x: preprocessing_scale( 41 | x, 42 | method = "zscore", 43 | process_columns = [factor_name+"_clip"] 44 | ) 45 | ) 46 | #print(df.select(pl.all().is_null().sum())) 47 | ic_df = multi_period_ic_analysis( 48 | df = df, 49 | analysis_column = factor_name+"_clip_zscore", 50 | label_column_prefix = "label", 51 | method = "IC", 52 | abs_threshold = 0.02, 53 | p_value_threshold = 0.05, 54 | start_period = 3, 55 | decay_period = 20 56 | ) 57 | 58 | print(ic_df) -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/.ipynb_checkpoints/expr_engine-checkpoint.py: -------------------------------------------------------------------------------- 1 | import re 2 | from ops import Operators,register_all_ops 3 | from base import Feature 4 | 5 | class ExprEngine: 6 | @classmethod 7 | def init(cls): 8 | register_all_ops() 9 | 10 | @staticmethod 11 | def parse_field(field): 12 | # Following patterns will be matched: 13 | # - $close -> Feature("close") 14 | # - $close5 -> Feature("close5") 15 | # - $open+$close -> Feature("open")+Feature("close") 16 | if not isinstance(field, str): 17 | field = str(field) 18 | return re.sub(r"\$(\w+)", r'Feature("\1")', re.sub(r"(\w+\s*)\(", r"Operators.\1(", field)) 19 | 20 | @staticmethod 21 | def get_expression(feature): 22 | feature = ExprEngine.parse_field(feature) 23 | print(feature) 24 | try: 25 | expr = eval(feature) 26 | except: 27 | print('error',feature) 28 | raise 29 | return expr 30 | 31 | -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/feed/__init__.py -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/feed/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/__pycache__/base.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/feed/__pycache__/base.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/__pycache__/expr_engine.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/feed/__pycache__/expr_engine.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/__pycache__/ops.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/feed/__pycache__/ops.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/__pycache__/plexpr_func.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/alpha_research/feed/__pycache__/plexpr_func.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/expr_engine.py: -------------------------------------------------------------------------------- 1 | import re 2 | from ops import Operators,register_all_ops 3 | from base import Feature 4 | 5 | class ExprEngine: 6 | @classmethod 7 | def init(cls): 8 | register_all_ops() 9 | 10 | @staticmethod 11 | def parse_field(field): 12 | # Following patterns will be matched: 13 | # - $close -> Feature("close") 14 | # - $close5 -> Feature("close5") 15 | # - $open+$close -> Feature("open")+Feature("close") 16 | if not isinstance(field, str): 17 | field = str(field) 18 | return re.sub(r"\$(\w+)", r'Feature("\1")', re.sub(r"(\w+\s*)\(", r"Operators.\1(", field)) 19 | 20 | @staticmethod 21 | def get_expression(feature): 22 | feature = ExprEngine.parse_field(feature) 23 | try: 24 | expr = eval(feature) 25 | except: 26 | print('error',feature) 27 | raise 28 | return expr 29 | 30 | -------------------------------------------------------------------------------- /finml_lib/alpha_research/feed/plexpr_func.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | 3 | def percentile_rank(expr: pl.Expr) -> pl.Expr: 4 | """ 5 | Calculate the percentile rank of a series. 6 | 7 | Parameters 8 | ---------- 9 | expr : pl.Expr 10 | The series to calculate the percentile rank of. 11 | 12 | Returns 13 | ------- 14 | pl.Expr 15 | The percentile rank of the series. 16 | """ 17 | 18 | return expr.rank().last() / (expr.len() - expr.null_count()) 19 | 20 | 21 | def rank_pct(expr: pl.Expr) -> pl.Expr: 22 | """ 23 | Calculate the rank percent of a series. 24 | 25 | Parameters 26 | ---------- 27 | expr : pl.Expr 28 | The series to calculate the rank percent of. 29 | 30 | Returns 31 | ------- 32 | pl.Expr 33 | The rank percent of the series. 34 | """ 35 | return expr.rank() / (expr.len() - expr.null_count()) 36 | 37 | def slope(x:pl.Expr, y: pl.Expr) -> pl.Expr: 38 | """ 39 | Calculate the slope of a linear regression line between x and y. 40 | 41 | Parameters 42 | ---------- 43 | x : pl.Expr 44 | The x values of the linear regression line. 45 | y : pl.Expr 46 | The y values of the linear regression line. 47 | 48 | Returns 49 | ------- 50 | pl.Expr 51 | The slope of the linear regression line. 52 | """ 53 | return (pl.corr(x, y) * y.std()) / x.std() 54 | 55 | def rsqure(x:pl.Expr, y: pl.Expr) -> pl.Expr: 56 | """ 57 | Calculate the R^2 value of a linear regression line between x and y. 58 | 59 | Parameters 60 | ---------- 61 | x : pl.Expr 62 | The x values of the linear regression line. 63 | y : pl.Expr 64 | The y values of the linear regression line. 65 | 66 | Returns 67 | ------- 68 | pl.Expr 69 | The R^2 value of the linear regression line. 70 | """ 71 | return pl.corr(x, y).pow(2) 72 | 73 | def residual(x: pl.Expr, y: pl.Expr) -> pl.Expr: 74 | """ 75 | Calculate the residuals of a linear regression line between x and y. 76 | 77 | Parameters 78 | ---------- 79 | x : pl.Expr 80 | The x values of the linear regression line. 81 | y : pl.Expr 82 | The y values of the linear regression line. 83 | 84 | Returns 85 | ------- 86 | pl.Expr 87 | The residuals of the linear regression line. 88 | """ 89 | slope = (pl.corr(x, y) * y.std()) / x.std() 90 | intercept = y.mean() - slope * x.mean() 91 | return (y - (slope * x + intercept)).last() -------------------------------------------------------------------------------- /finml_lib/alpha_research/process/orthogonalization.py: -------------------------------------------------------------------------------- 1 | #write Symmetric,GramSchmidt,Canonical -------------------------------------------------------------------------------- /finml_lib/bar_aggregation/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/bar_aggregation/__init__.py -------------------------------------------------------------------------------- /finml_lib/bar_aggregation/extended_bar.pxd: -------------------------------------------------------------------------------- 1 | 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Copyright (C) 2015-2023 Nautech Systems Pty Ltd. All rights reserved. 5 | # https://nautechsystems.io 6 | # 7 | # Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); 8 | # You may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # ------------------------------------------------------------------------------------------------- 17 | 18 | from nautilus_trader.model.data.bar cimport Bar 19 | 20 | 21 | cdef class ExtendedBar(Bar): 22 | cdef double bids_value_level_0 23 | cdef double bids_value_level_1 24 | cdef double bids_value_level_2 25 | cdef double bids_value_level_3 26 | cdef double bids_value_level_4 27 | cdef double asks_value_level_0 28 | cdef double asks_value_level_1 29 | cdef double asks_value_level_2 30 | cdef double asks_value_level_3 31 | cdef double asks_value_level_4 32 | 33 | @staticmethod 34 | cdef ExtendedBar from_dict_c(dict values) 35 | 36 | @staticmethod 37 | cdef dict to_dict_c(Bar obj) 38 | 39 | -------------------------------------------------------------------------------- /finml_lib/bar_aggregation/imbalance_bar.pxd: -------------------------------------------------------------------------------- 1 | 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Copyright (C) 2015-2023 Nautech Systems Pty Ltd. All rights reserved. 5 | # https://nautechsystems.io 6 | # 7 | # Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); 8 | # You may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # ------------------------------------------------------------------------------------------------- 17 | 18 | from nautilus_trader.model.data.bar cimport Bar 19 | 20 | 21 | cdef class ImbalanceBar(Bar): 22 | cdef double small_buy_value 23 | cdef double big_buy_value 24 | cdef double small_sell_value 25 | cdef double big_sell_value 26 | 27 | @staticmethod 28 | cdef ImbalanceBar from_dict_c(dict values) 29 | 30 | @staticmethod 31 | cdef dict to_dict_c(Bar obj) 32 | 33 | -------------------------------------------------------------------------------- /finml_lib/bar_aggregation/orderflowbar.pxd: -------------------------------------------------------------------------------- 1 | 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Copyright (C) 2015-2023 Nautech Systems Pty Ltd. All rights reserved. 5 | # https://nautechsystems.io 6 | # 7 | # Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); 8 | # You may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # ------------------------------------------------------------------------------------------------- 17 | 18 | from nautilus_trader.model.data.bar cimport Bar 19 | 20 | 21 | cdef class OrderFlowBar(Bar): 22 | cdef double imbalance_pressure_price 23 | cdef double imbalance_support_price 24 | cdef int pressure_levels 25 | cdef int support_levels 26 | cdef double point_of_control 27 | cdef double top_imbalance_level1 28 | cdef double top_imbalance_level2 29 | cdef double bottom_imbalance_level1 30 | cdef double bottom_imbalance_level2 31 | cdef double delta 32 | 33 | 34 | @staticmethod 35 | cdef OrderFlowBar from_dict_c(dict values) 36 | 37 | @staticmethod 38 | cdef dict to_dict_c(OrderFlowBar obj) 39 | 40 | -------------------------------------------------------------------------------- /finml_lib/czsc/enums.py: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------------------------- 2 | # Copyright (C) 2015-2022 Nautech Systems Pty Ltd. All rights reserved. 3 | # https://nautechsystems.io 4 | # 5 | # Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); 6 | # You may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # ------------------------------------------------------------------------------------------------- 15 | 16 | from enum import Enum 17 | from enum import unique 18 | 19 | @unique 20 | class Mark(Enum): 21 | DI = 0 ##bottom 22 | DING = 1 ##top 23 | 24 | @unique 25 | class Direction(Enum): 26 | UP = 0 27 | DOWN = 1 28 | OSCILLATION= 2 29 | 30 | @unique 31 | class BIType(Enum): 32 | OLD = 0 33 | NEW = 1 34 | TB = 2 ##top and bottom 35 | 36 | @unique 37 | class LineType(Enum): 38 | BI = 0 39 | XD = 1 40 | 41 | @unique 42 | class ZSProcessType(Enum): 43 | INTERATE = 0 ##interate 44 | INSIDE = 1 45 | 46 | @unique 47 | class SupportType(Enum): 48 | HL = 0 ## high and low 49 | TB = 1 ##top and bottom 50 | 51 | @unique 52 | class DivergenceType(Enum): 53 | BI = 0 54 | XD = 1 55 | ZSD = 2 56 | OSCILLATION = 3 57 | TREND = 4 58 | 59 | @unique 60 | class TradePointType(Enum): 61 | OneBuy = 0 62 | OneSell = 1 63 | TwoBuy = 2 64 | TwoSell = 3 65 | ThreeBuy = 4 66 | ThreeSell = 5 67 | L2Buy = 6 68 | L2Sell = 7 69 | L3Buy = 8 70 | L3Sell = 9 71 | -------------------------------------------------------------------------------- /finml_lib/features/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "features" 3 | version = "0.1.0" 4 | authors = ["yfclark"] 5 | edition = "2021" 6 | 7 | [dependencies] 8 | pyo3 = { version = "0.16.5", features = ["extension-module"] } 9 | approx = "0.3" 10 | nalgebra = "0.31.4" 11 | statrs = "0.13" 12 | 13 | [lib] 14 | name = "features" 15 | crate-type = ["cdylib"] 16 | -------------------------------------------------------------------------------- /finml_lib/features/src/build.sh: -------------------------------------------------------------------------------- 1 | https_proxy=socks5://127.0.0.1:7890 cargo build -------------------------------------------------------------------------------- /finml_lib/features/src/lib.rs: -------------------------------------------------------------------------------- 1 | use pyo3::prelude::*; 2 | pub mod fracdiff; 3 | pub mod entropy; 4 | pub mod sadf; 5 | pub mod microstructure; 6 | pub mod rollstats; 7 | pub mod rollregression; 8 | pub mod kalmanfilter; 9 | pub mod orderblock; 10 | pub mod peak; 11 | 12 | use crate::entropy::Entropy; 13 | use crate::fracdiff::FracDiff; 14 | use crate::microstructure::MicroStructucture; 15 | use crate::rollstats::RollStats; 16 | use crate::rollregression::RollRegression; 17 | use crate::kalmanfilter::KalmanFilter; 18 | use crate::orderblock::OrderBlockDetector; 19 | use crate::peak::PeakDetector; 20 | 21 | 22 | 23 | #[pymodule] 24 | #[pyo3(name = "features")] 25 | fn features(_py: Python, m: &PyModule) -> PyResult<()> { 26 | m.add_class::()?; 27 | m.add_class::()?; 28 | m.add_class::< Entropy>()?; 29 | m.add_class::()?; 30 | m.add_class::()?; 31 | m.add_class::()?; 32 | m.add_class::()?; 33 | m.add_class::()?; 34 | Ok(()) 35 | } -------------------------------------------------------------------------------- /finml_lib/features/src/ouprocess.rs: -------------------------------------------------------------------------------- 1 | use pyo3::prelude::*; 2 | extern crate nalgebra; 3 | 4 | 5 | #[pyclass] 6 | #[derive(Debug)] 7 | struct OUProcess { 8 | mu: f64, 9 | sigma: f64, 10 | theta: f64, 11 | initialized:bool, 12 | } 13 | 14 | #[pymethods] 15 | impl OUProcess { 16 | 17 | fn new(mu: f64, sigma: f64, theta: f64) -> Self { 18 | OUProcess { 19 | mu, 20 | sigma, 21 | theta, 22 | initialized: false, 23 | } 24 | } 25 | 26 | fn update_raw(&mut self, input_x: f64, input_y: f64) { 27 | self.initialized = true; 28 | 29 | } 30 | 31 | fn reset(&mut self) { 32 | self.initialized = false; 33 | } 34 | 35 | fn initialized(&self) -> bool { 36 | self.initialized 37 | } 38 | } -------------------------------------------------------------------------------- /finml_lib/features/src/rollregression.rs: -------------------------------------------------------------------------------- 1 | 2 | use pyo3::prelude::*; 3 | use std::collections::VecDeque; 4 | use crate::sadf; 5 | 6 | #[pyclass] 7 | #[derive(Debug)] 8 | pub struct RollRegression { 9 | period: usize, 10 | input_array_x: VecDeque, 11 | input_array_y: VecDeque, 12 | slope: f64, 13 | intercept: f64, 14 | residual: f64, 15 | initialized: bool, 16 | } 17 | 18 | #[pymethods] 19 | impl RollRegression { 20 | #[new] 21 | pub fn new(period: usize) -> Self { 22 | Self { 23 | period: period, 24 | input_array_x: VecDeque::with_capacity(period), 25 | input_array_y: VecDeque::with_capacity(period), 26 | initialized: false, 27 | slope: 0.0, 28 | intercept: 0.0, 29 | residual: 0.0, 30 | } 31 | } 32 | 33 | pub fn update_raw(&mut self, input_x: f64, input_y: f64) { 34 | self.input_array_x.push_back(input_x); 35 | self.input_array_y.push_back(input_y); 36 | if self.input_array_x.len() >= self.period { 37 | self.initialized = true; 38 | } 39 | if self.input_array_x.len() >=self.period + 1 40 | { 41 | self.input_array_x.pop_front(); 42 | self.input_array_y.pop_front(); 43 | (self.slope, self.intercept, self.residual) = sadf::ols_linear_regression(&self.input_array_x, &self.input_array_y); 44 | } 45 | } 46 | 47 | pub fn reset(&mut self) { 48 | self.initialized = false; 49 | } 50 | 51 | pub fn initialized(&self) -> bool { 52 | self.initialized 53 | } 54 | 55 | pub fn slope(&self) -> f64 { 56 | self.slope 57 | } 58 | 59 | pub fn intercept(&self) -> f64 { 60 | self.intercept 61 | } 62 | 63 | pub fn residual(&self) -> f64 { 64 | self.residual 65 | } 66 | } 67 | 68 | #[cfg(test)] 69 | mod tests { 70 | use super::*; 71 | //use approx::assert_abs_diff_eq; 72 | #[test] 73 | fn test_stats() { 74 | let mut sta = RollRegression::new(5); 75 | let values = vec![2,4,6,8,10,12,14,16,18,20]; 76 | for (i, &val) in values.iter().enumerate() 77 | { 78 | sta.update_raw(i as f64, val as f64); 79 | println!("The length of input_array_x is {}",sta.input_array_x.len()); 80 | println!("{:?}",sta.input_array_x); 81 | println!("{}",sta.slope()); 82 | println!("{}",sta.intercept()); 83 | println!("{}",sta.residual()); 84 | } 85 | sta.reset(); 86 | assert!(!sta.initialized()); 87 | } 88 | } 89 | 90 | -------------------------------------------------------------------------------- /finml_lib/finml/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/backtest/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/backtest/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/data/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/data/handler.py: -------------------------------------------------------------------------------- 1 | from sklearn.preprocessing import MinMaxScaler,StandardScaler 2 | 3 | class MinMaxNorm: 4 | def __init__(self): 5 | self.scaler = MinMaxScaler() 6 | self.fitted = False 7 | 8 | def fit(self,X): 9 | self.fitted = True 10 | return self.scaler.fit(X) 11 | 12 | def fit_transform(self,X): 13 | self.fitted = True 14 | return self.scaler.fit_transform(X) 15 | 16 | def transform(self,X): 17 | return self.scaler.transform(X) 18 | 19 | def inverse_transform(self,X): 20 | return self.scaler.inverse_transform(X) 21 | 22 | def is_fitted(self): 23 | return self.fitted 24 | 25 | class StandardNorm: 26 | def __init__(self): 27 | self.scaler = StandardScaler() 28 | self.fitted = False 29 | 30 | def fit(self,X): 31 | self.fitted = True 32 | return self.scaler.fit(X) 33 | 34 | def fit_transform(self,X): 35 | self.fitted = True 36 | return self.scaler.fit_transform(X) 37 | 38 | def transform(self,X): 39 | return self.scaler.transform(X) 40 | 41 | def inverse_transform(self,X): 42 | return self.scaler.inverse_transform(X) 43 | 44 | def is_fitted(self): 45 | return self.fitted 46 | 47 | 48 | -------------------------------------------------------------------------------- /finml_lib/finml/evaluation/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/evaluation/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/evaluation/metrics.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import torch 4 | 5 | class Metrics: 6 | NEG_LOG_LOSS = 'neg_log_loss' 7 | ACCURACY = 'accuracy' 8 | 9 | def negtivate_MSE(pred, label): 10 | if isinstance(pred,torch.Tensor): 11 | loss = (pred - label) ** 2 12 | return -torch.mean(loss) 13 | elif isinstance(pred,np.ndarray): 14 | loss = (pred - label) ** 2 15 | return -np.mean(loss) 16 | 17 | def sharpe_ratio(returns: np.ndarray, axis=None): 18 | """ 19 | Calculate the classic Sharpe ratio = mean(returns)/std(returns) 20 | """ 21 | return np.mean(returns, axis=axis) / np.std(returns, axis=axis) -------------------------------------------------------------------------------- /finml_lib/finml/labeling/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/labeling/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/labeling/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/labeling/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/finml/labeling/__pycache__/get_label.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/labeling/__pycache__/get_label.cpython-310.pyc -------------------------------------------------------------------------------- /finml_lib/finml/models/CNNTransformer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/models/CNNTransformer/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/models/WaveNet/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/models/WaveNet/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/models/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/models/base.py: -------------------------------------------------------------------------------- 1 | import abc 2 | 3 | class BaseModel(metaclass=abc.ABCMeta): 4 | """Modeling things""" 5 | 6 | @abc.abstractmethod 7 | def predict(self, *args, **kwargs) -> object: 8 | """Make predictions after modeling things""" 9 | 10 | def __call__(self, *args, **kwargs) -> object: 11 | """leverage Python syntactic sugar to make the models' behaviors like functions""" 12 | return self.predict(*args, **kwargs) 13 | 14 | class Model(BaseModel): 15 | """Learnable Models""" 16 | 17 | def fit(self, X, y): 18 | raise NotImplementedError() 19 | 20 | @abc.abstractmethod 21 | def predict(self, feature) -> object: 22 | raise NotImplementedError() 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /finml_lib/finml/models/lassonet.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import pytorch_lightning as pl 4 | 5 | -------------------------------------------------------------------------------- /finml_lib/finml/models/lightgbm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/models/lightgbm/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/models/lightgbm/test_example.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | import pandas as pd 3 | import numpy as np 4 | from finml.models.lightgbm.lightgbm_binary_classification import train_folds 5 | from finml.models.lightgbm.lightgbm_tools import define_args 6 | 7 | if __name__ == "__main__": 8 | # Example Data Preparation 9 | np.random.seed(42) 10 | train_data = pd.DataFrame(np.random.rand(1000, 10), columns=[f"feature_{i}" for i in range(10)]) 11 | test_data = pd.DataFrame(np.random.rand(200, 10), columns=[f"feature_{i}" for i in range(10)]) 12 | train_label = pd.DataFrame({"label": np.random.randint(0, 2, size=1000)}) 13 | test_label = pd.DataFrame({"label": np.random.randint(0, 2, size=200)}) 14 | event_times = pl.DataFrame({"event_starts":range(1000),"event_ends":range(20,1020,1)}) 15 | args = define_args() 16 | models,score = train_folds( 17 | pl.from_pandas(train_data), 18 | pl.from_pandas(train_label), 19 | event_times, 20 | args, 21 | True, 22 | num_class = 2 , 23 | dual_iterations = 2 24 | ) -------------------------------------------------------------------------------- /finml_lib/finml/models/loss.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | import torch.nn as nn 4 | import torch.nn.functional as F 5 | from functools import partial 6 | from torchmetrics.functional import concordance_corrcoef 7 | 8 | class BalanceBCELoss(nn.Module): 9 | def __init__(self,): 10 | 11 | 12 | class Tilde_Q(nn.Module): 13 | def __init__(self,alpha=0.99,gamma=1): 14 | super(Tilde_Q, self).__init__() 15 | self.alpha = alpha 16 | self.gamma = gamma 17 | def forward(self, input, target): 18 | ''' 19 | input: (batch_size,sequence_length) 20 | target: (batch_size,sequence_length) 21 | ''' 22 | bacth_size = input.size(0) 23 | sequence_length = input.size(1) 24 | shift_loss = sequence_length * F.smooth_l1_loss( 25 | torch.ones_like(input)*1.0/sequence_length, 26 | F.softmax(input-target,dim = 1) 27 | ) 28 | 29 | # same main frquency 30 | freq_input = torch.fft.rfft(input, dim = 1,norm="ortho").abs() 31 | freq_target = torch.fft.rfft(target, dim = 1,norm="ortho").abs() 32 | phase_loss = F.smooth_l1_loss( 33 | torch.ones_like(freq_input.argmax()), 34 | freq_input.argmax()/freq_target.argmax() 35 | ) 36 | corr_loss = concordance_corrcoef(input,target) 37 | corr_loss = F.smooth_l1_loss( 38 | torch.ones_like(corr_loss), 39 | corr_loss 40 | ) 41 | loss = self.alpha * shift_loss + (1.0 - self.alpha)* phase_loss + self.gamma * corr_loss 42 | return loss 43 | def neg_loss(self, input, target): 44 | return -self(input,target) -------------------------------------------------------------------------------- /finml_lib/finml/models/xgboost/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/models/xgboost/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/models/xgboost/xgboost_tools.py: -------------------------------------------------------------------------------- 1 | import xgboost as xgb 2 | import numpy as np 3 | 4 | def save_model( 5 | models, 6 | bar_type, 7 | base_dir = "models", 8 | ): 9 | import os 10 | for i in range(len(models)): 11 | file_path = os.path.join(base_dir,bar_type+"_"+str(i)+".txt") 12 | models[i].save_model(file_path) 13 | 14 | def load_model( 15 | bar_type, 16 | n_split = 5, 17 | base_dir = "models", 18 | xgb_type="classifier" 19 | ): 20 | import os 21 | models = [] 22 | for i in range(n_split): 23 | if xgb_type == "classifier": 24 | model = xgb.XGBClassifier() 25 | else: 26 | model = xgb.XGBRegressor() 27 | file_path = os.path.join(base_dir,bar_type+"_"+str(i)+".txt") 28 | model.load_model(file_path) 29 | models.append(model) 30 | return models 31 | 32 | def preidct_prob( 33 | models, 34 | feature 35 | ): 36 | feature = feature.reshape((1,-1)) 37 | results = [] 38 | for model in models: 39 | results.append(model.predict_proba(feature)) 40 | return np.mean(results,axis=0)[0] -------------------------------------------------------------------------------- /finml_lib/finml/sampling/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/sampling/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/sampling/aggregate_bars.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | 3 | def agg_timebar(bars,period): 4 | 5 | start_group = bars[0,"timestamp"]//(10**3*period) 6 | bars = bars.with_columns( 7 | [ 8 | (pl.col("timestamp")//(10**3*period) - start_group).alias("group_id"), 9 | ] 10 | ) 11 | bars = bars.with_columns( 12 | [ 13 | (pl.col("group_id").shift(1).fill_null(strategy='backward')).alias("group_id") 14 | ] 15 | ) 16 | # aggregate bars 17 | newbars = bars.groupby("group_id").agg( 18 | [ 19 | (pl.col("timestamp").last()-pl.col("timestamp").last()%(10**3*period)).alias("ts_event"), 20 | pl.col("price").first().alias("open"), 21 | pl.col("price").max().alias("high"), 22 | pl.col("price").min().alias("low"), 23 | pl.col("price").last().alias("close"), 24 | pl.col("quantity").sum().alias("volume"), 25 | ] 26 | ) 27 | newbars = newbars.sort("ts_event") 28 | # select columns 29 | newbars = newbars.select( 30 | [ 31 | pl.col("open"), 32 | pl.col("high"), 33 | pl.col("low"), 34 | pl.col("close"), 35 | pl.col("volume"), 36 | pl.col("ts_event").alias("ts_init"), 37 | pl.col("ts_event"), 38 | ] 39 | ) 40 | return newbars -------------------------------------------------------------------------------- /finml_lib/finml/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/finml_lib/finml/utils/__init__.py -------------------------------------------------------------------------------- /finml_lib/finml/utils/bet_size.py: -------------------------------------------------------------------------------- 1 | from scipy.stats import norm 2 | def get_bet_size(prob,max_size = 5, num_classes =2): 3 | if prob >= 1.0: 4 | prob = prob -0.00000001 5 | bet_sizes = (prob - 1/num_classes) / (prob * (1 - prob))**0.5 6 | 7 | bet_sizes = max_size*( 2.0 * norm.cdf(bet_sizes) - 1) 8 | 9 | return bet_sizes -------------------------------------------------------------------------------- /finml_lib/finml/utils/stats.py: -------------------------------------------------------------------------------- 1 | from scipy.stats import rv_continuous 2 | import polars as pl 3 | import pandas as pd 4 | import numpy as np 5 | class KDERv(rv_continuous): 6 | 7 | def __init__(self, kde, *args, **kwargs): 8 | super().__init__(*args, **kwargs) 9 | self._kde = kde 10 | 11 | def _pdf(self, x, *args): 12 | return self._kde.pdf(x) 13 | 14 | def corrections( 15 | factor:pd.DataFrame, 16 | label:pd.DataFrame, 17 | drop_feature_corr_threshold = 0.7, 18 | corr_type: str ="spearman", 19 | ): 20 | ''' 21 | corr_type: {‘pearson’, ‘kendall’, ‘spearman’} or callable 22 | ''' 23 | if isinstance(factor,pl.DataFrame): 24 | factor = factor.to_pandas() 25 | if isinstance(label,pl.DataFrame): 26 | label = label.to_pandas() 27 | factor = factor.dropna() 28 | label = label.dropna() 29 | correlations = factor.drop(columns=["datetime"]).corr(method=corr_type) 30 | upper_tri = correlations.where(np.triu(np.ones(correlations.shape),k=1).astype(np.bool_)) 31 | to_drop = [column for column in upper_tri.columns if any(upper_tri[column] > drop_feature_corr_threshold)] 32 | factor = factor.drop(columns=to_drop) 33 | df = factor.merge(label,left_on="datetime",right_on="datetime",how="right") 34 | df = df.drop(columns=["datetime"]) 35 | # split 36 | df_in = df.iloc[:int(0.5*len(df))] 37 | df_out = df.iloc[int(0.5*len(df)):] 38 | in_sample_corr = df_in.corr(method=corr_type)["label"] 39 | out_sample_corr = df_out.corr(method=corr_type)["label"] 40 | results = pd.concat([in_sample_corr,out_sample_corr],axis=1) 41 | results.columns=["IS_label_corr","OS_label_corr"] 42 | results["OS_corr_abs"] = results["OS_label_corr"].abs() 43 | corr = results[results.index!="label"] 44 | corr = corr[corr["IS_label_corr"]*corr["OS_label_corr"]>0] 45 | corr = corr.sort_values(by = "OS_corr_abs",ascending=False) 46 | return corr.drop(columns=["OS_corr_abs"]) 47 | 48 | 49 | def test_imbalance_corr(df): 50 | df = df.select( 51 | [ 52 | pl.col("buyer_maker_imbalance"), 53 | pl.col("label"), 54 | ]) 55 | df_train = df[:int(0.7*df.shape[0])] 56 | df_test = df[int(0.7*df.shape[0]):] 57 | in_sample_corr = df_train.select(pl.corr("buyer_maker_imbalance","label"))[0,0] 58 | out_sample_corr = df_test.select(pl.corr("buyer_maker_imbalance","label"))[0,0] 59 | print(f'the in sample corr of buyer_maker_imbalance is {in_sample_corr}') 60 | print(f'the out sample corr of buyer_maker_imbalance is {out_sample_corr}') 61 | return [in_sample_corr,out_sample_corr] -------------------------------------------------------------------------------- /finml_lib/indicators/supertrend3.pxd: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------------------------- 2 | # Copyright (C) 2015-2022 Nautech Systems Pty Ltd. All rights reserved. 3 | # https://nautechsystems.io 4 | # 5 | # Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); 6 | # You may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # ------------------------------------------------------------------------------------------------- 15 | 16 | from nautilus_trader.indicators.atr cimport AverageTrueRange 17 | from nautilus_trader.indicators.average.ema cimport ExponentialMovingAverage 18 | from nautilus_trader.indicators.base.indicator cimport Indicator 19 | from nautilus_trader.model.data cimport Bar 20 | 21 | 22 | cdef class SuperTrend3(Indicator): 23 | cdef AverageTrueRange _atr 24 | 25 | cdef readonly int period 26 | """The window period.\n\n:returns: `int`""" 27 | cdef readonly double k_multiplier 28 | """The k multiplier.\n\n:returns: `double`""" 29 | cdef readonly bint use_close 30 | """The zigzag use_close param.\n\n:returns: `double`""" 31 | cdef readonly double _previous_upper_band 32 | """The previous value of the upper channel.\n\n:returns: `double`""" 33 | cdef readonly double _previous_lower_band 34 | """The previous value of the lower channel.\n\n:returns: `double`""" 35 | cdef readonly double _current_upper_band 36 | """The current value of the upper channel.\n\n:returns: `double`""" 37 | cdef readonly double _current_lower_band 38 | """The current value of the lower channel.\n\n:returns: `double`""" 39 | cdef readonly double direction 40 | """The current direction.\n\n:returns: `double`""" 41 | cdef readonly double previous_direction 42 | """The previous direction.\n\n:returns: `double`""" 43 | cdef readonly bint change_direction 44 | """The value shows that whether the supertrend direction has changed.\n\n:returns: `bint`""" 45 | cpdef void handle_bar(self, Bar bar) except * 46 | cpdef void update_raw(self, double high, double low, double close) except * 47 | -------------------------------------------------------------------------------- /finml_lib/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | setup( 4 | name="finml", 5 | version="0.1.0.0", 6 | description="finml -- tools for ml trading.", 7 | long_description=open("README.md").read(), 8 | long_description_content_type="text/markdown", 9 | author='yfclark <1825617022.yf@gmail.com>', 10 | packages=[ 11 | package for package in find_packages() if package.startswith('finml') 12 | ], 13 | license="Apache License 2.0", 14 | zip_safe=True, 15 | python_requires=">=3.10", 16 | install_requires=[ 17 | "polars", 18 | "pyarrow", 19 | "numpy", 20 | "pandas", 21 | "scipy", 22 | #"ray[rllib]", 23 | #"xgboost", 24 | #"xgboost_ray", 25 | "optuna", 26 | "scikit-learn", 27 | "matplotlib", 28 | #"torch", 29 | #"torchmetrics" 30 | ], 31 | ) 32 | -------------------------------------------------------------------------------- /notebook/GMlGBCzXgAEk2Oc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/notebook/GMlGBCzXgAEk2Oc.jpg -------------------------------------------------------------------------------- /notebook/Richard Grinold, Ronald Kahn-Active Portfolio Management_ A Quantitative Approach for Producing Superior Returns and Controlling Risk-McGraw-Hill (1999).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/notebook/Richard Grinold, Ronald Kahn-Active Portfolio Management_ A Quantitative Approach for Producing Superior Returns and Controlling Risk-McGraw-Hill (1999).pdf -------------------------------------------------------------------------------- /process/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "api_key":"31a4cb3a99a499bb9c435149752ec100d4f9a03342cf27ec942376d8a12e645e", 3 | "api_secret":"ba7c0dd40514a6a18eae609f2efa9956b4934f6c13f977f6d21b359b60de8771" 4 | } -------------------------------------------------------------------------------- /process/get_all_instruments.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from gettext import Catalog 3 | import os 4 | import json 5 | import secrets 6 | from nautilus_trader.adapters.binance.common.enums import BinanceAccountType 7 | from nautilus_trader.adapters.binance.factories import get_cached_binance_http_client 8 | from nautilus_trader.adapters.binance.futures.providers import BinanceFuturesInstrumentProvider 9 | from nautilus_trader.common.clock import LiveClock 10 | from nautilus_trader.common.logging import Logger 11 | from nautilus_trader.persistence.catalog.parquet import ParquetDataCatalog 12 | from nautilus_trader.persistence.external.core import write_objects 13 | 14 | async def write_all_instruments(key,secret,instrument_id = "BTCUSDT.BINANCE"): 15 | clock = LiveClock() 16 | account_type = BinanceAccountType.FUTURES_USDT 17 | 18 | client = get_cached_binance_http_client( 19 | loop=asyncio.get_event_loop(), 20 | clock=clock, 21 | logger=Logger(clock=clock), 22 | account_type=account_type, 23 | key=key, 24 | secret=secret, 25 | is_testnet=True, 26 | ) 27 | #client.connect() 28 | 29 | provider = BinanceFuturesInstrumentProvider( 30 | client=client, 31 | logger=Logger(clock=clock), 32 | account_type=BinanceAccountType.FUTURES_USDT, 33 | ) 34 | await client.connect() 35 | 36 | await provider.load_all_async() 37 | 38 | instruments = provider.list_all() 39 | catalog = ParquetDataCatalog("../catalog/.") 40 | write_objects(catalog,instruments) 41 | await client.disconnect() 42 | return provider.find(instrument_id) 43 | 44 | if __name__ == "__main__": 45 | global data 46 | with open("config.json", 'r') as f: 47 | api_key_data = json.load(f) 48 | api_key = api_key_data['api_key'] 49 | api_secret = api_key_data['api_secret'] 50 | asyncio.run(write_all_instruments(api_key,api_secret)) -------------------------------------------------------------------------------- /process/orderbook_write.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | from nautilus_trader.persistence.catalog.parquet import ParquetDataCatalog 4 | from nautilus_trader.persistence.external.core import process_files, write_objects 5 | from nautilus_trader.persistence.external.readers import CSVReader 6 | from nautilus_trader.model.enums import BookTypeParser 7 | from nautilus_trader.model.orderbook.data import OrderBookSnapshot 8 | if __name__ == "__main__": 9 | import argparse 10 | import glob 11 | parser = argparse.ArgumentParser() 12 | parser.add_argument('--symbol',default='MATICUSDT') 13 | parser.add_argument("--venue",default='BINANCE') 14 | parser.add_argument("--fileloction",default="data/compressed") 15 | args = parser.parse_args() 16 | CATALOG_PATH ="catalog" 17 | catalog = ParquetDataCatalog(CATALOG_PATH) 18 | instrument_id = f"{args.symbol}-PERP.{args.venue}" 19 | instrument = catalog.instruments(instrument_ids=[instrument_id],as_nautilus=True)[0] 20 | 21 | fileloc = args.fileloction 22 | input_files = glob.glob("data/compressed/"+args.symbol+"-depth5*") 23 | print(input_files) 24 | 25 | book_type = BookTypeParser.from_str_py( 26 | "L2_MBP" 27 | ) 28 | def parser(df): 29 | for idx,r in df.iterrows(): 30 | ts = int(r['timestamp']/1000*10**9) #ms => ns 31 | book = OrderBookSnapshot( 32 | instrument_id=instrument.id, 33 | book_type= book_type, 34 | bids=[ 35 | (r['bp'+str(i)],r['bz'+str(i)]) for i in range(5,0,-1) 36 | ], 37 | asks=[ 38 | (r['ap'+str(i)],r['az'+str(i)]) for i in range(1,6) 39 | ], 40 | ts_event= ts, 41 | ts_init= ts, 42 | ) 43 | yield book 44 | 45 | process_files( 46 | glob_path=input_files, 47 | reader=CSVReader( 48 | block_parser= parser, 49 | ), 50 | catalog=catalog, 51 | ) 52 | 53 | write_objects(catalog, [instrument]) 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /process/preprocess_trade_data.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | from typing import Union 3 | import pandas as pd 4 | import pytz 5 | 6 | if __name__ =="__main__": 7 | import argparse 8 | parser = argparse.ArgumentParser() 9 | parser.add_argument('--name') 10 | args = parser.parse_args() 11 | df = pd.read_csv( 12 | args.name, 13 | header=None, 14 | names=["trade_id","price","quantity","quoteQty","timestamp","buyer_maker"] 15 | ) 16 | df.to_csv("processed"+args.name) -------------------------------------------------------------------------------- /scaler.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/scaler.pkl -------------------------------------------------------------------------------- /streamlit_app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/streamlit_app/__init__.py -------------------------------------------------------------------------------- /streamlit_app/__pycache__/data_scheme.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/streamlit_app/__pycache__/data_scheme.cpython-310.pyc -------------------------------------------------------------------------------- /streamlit_app/__pycache__/io_tool.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/streamlit_app/__pycache__/io_tool.cpython-310.pyc -------------------------------------------------------------------------------- /streamlit_app/__pycache__/plot.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/streamlit_app/__pycache__/plot.cpython-310.pyc -------------------------------------------------------------------------------- /streamlit_app/__pycache__/stream2batch.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/streamlit_app/__pycache__/stream2batch.cpython-310.pyc -------------------------------------------------------------------------------- /streamlit_app/data_scheme.py: -------------------------------------------------------------------------------- 1 | import pyarrow as pa 2 | import polars as pl 3 | 4 | allow_compute_dtypes = [ 5 | pl.Int8, 6 | pl.Int16, 7 | pl.Int32, 8 | pl.Int64, 9 | pl.UInt8, 10 | pl.UInt16, 11 | pl.UInt32, 12 | pl.UInt64, 13 | pl.Float32, 14 | pl.Float64, 15 | ] 16 | 17 | bar_schema = pa.schema( 18 | { 19 | "bar_type": pa.dictionary(pa.int8(), pa.string()), 20 | "instrument_id": pa.dictionary(pa.int64(), pa.string()), 21 | "open": pa.float64(), 22 | "high": pa.float64(), 23 | "low": pa.float64(), 24 | "close": pa.float64(), 25 | "volume": pa.float64(), 26 | "ts_event": pa.int64(), 27 | "ts_init": pa.int64(), 28 | } 29 | ) 30 | 31 | schema_dict = { 32 | "Bar":bar_schema, 33 | } -------------------------------------------------------------------------------- /streamlit_app/io_tool.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | import streamlit as st 3 | from data_scheme import allow_compute_dtypes 4 | 5 | def load_parquet( 6 | data_scheme, 7 | load_from_sidebar = False, 8 | info ="Choose a file", 9 | ): 10 | if load_from_sidebar: 11 | uploaded_file = st.sidebar.file_uploader(info) 12 | else: 13 | uploaded_file = st.file_uploader(info) 14 | if uploaded_file is not None: 15 | df = pl.read_parquet( 16 | uploaded_file, 17 | use_pyarrow = True, 18 | pyarrow_options = {"schema":data_scheme} 19 | ) 20 | return df 21 | 22 | def load_csv( 23 | load_from_sidebar = False, 24 | info ="Choose a file", 25 | ): 26 | if load_from_sidebar: 27 | uploaded_file = st.sidebar.file_uploader(info) 28 | else: 29 | uploaded_file = st.file_uploader(info) 30 | if uploaded_file is not None: 31 | df = pl.read_csv(uploaded_file) 32 | return df 33 | -------------------------------------------------------------------------------- /streamlit_app/main.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | from data_scheme import bar_schema,schema_dict 3 | from factor_analysis import ( 4 | load_parquet, 5 | get_label, 6 | create_zscore_tab, 7 | zscore_analysis 8 | ) 9 | 10 | 11 | 12 | if __name__ == "__main__": 13 | # write a sidebar to select factor analysis 14 | st.set_page_config(layout = "wide") 15 | st.sidebar.subheader('APP:') 16 | app_name = sorted(['Factor Analysis']) 17 | app = st.sidebar.selectbox('', app_name, index = 0) 18 | if app == 'Factor Analysis': 19 | data_type = st.sidebar.radio( 20 | "Select data type", 21 | ("Bar","Tick") 22 | ) 23 | if data_type == "Bar": 24 | df = load_parquet(schema_dict[data_type],True) 25 | if df is not None: 26 | df = get_label(df) 27 | st.title(f'Factor Analysis') 28 | options = st.selectbox( 29 | '', 30 | ["Zscore"], 31 | index = 0 32 | ) 33 | if options == "Zscore" and df is not None: 34 | zscore_widgets = create_zscore_tab(df) 35 | zscore_analysis(df,*zscore_widgets) 36 | 37 | -------------------------------------------------------------------------------- /streamlit_app/plot.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | 3 | def get_kline_plot_setting( 4 | df 5 | ): 6 | candlestick_data = df[["time", "open", "high", "low", "close"]].to_dicts() 7 | volume_data = df.select([pl.col("time"),pl.col("volume").alias("value")]).to_dicts() 8 | # Define the chart options 9 | chart_options = { 10 | "layout": { 11 | "textColor": 'black', 12 | "background": { 13 | "type": 'solid', 14 | "color": 'white' 15 | } 16 | } 17 | } 18 | 19 | # Define the series options 20 | series_options = [ 21 | { 22 | "type": 'Candlestick', 23 | "data": candlestick_data, 24 | "options": { 25 | "upColor": "#26a69a", 26 | "downColor": "#ef5350", 27 | "borderDownColor": "#ef5350", 28 | "borderUpColor": "#26a69a", 29 | "wickDownColor": "#ef5350", 30 | "wickUpColor": "#26a69a" 31 | } 32 | }, 33 | { 34 | "type": 'Histogram', 35 | "data": volume_data, 36 | "options": { 37 | "color": '#26a69a', 38 | "priceFormat": { 39 | "type": 'volume', 40 | }, 41 | "priceScaleId": "" # set as an overlay setting, 42 | }, 43 | "priceScale": { 44 | "scaleMargins": { 45 | "top": 0.7, 46 | "bottom": 0, 47 | } 48 | } 49 | } 50 | ] 51 | 52 | kline_options = {"chart": chart_options, "series": series_options} 53 | return kline_options 54 | 55 | 56 | def get_trade_lines_setting(trades): 57 | # Buy is represented by green, short is represented by red 58 | series_options = [] 59 | 60 | for trade in trades.iter_rows(named=True): 61 | line_data = [ 62 | {"time": trade["open_time"], "value": trade["avg_px_open"]}, 63 | {"time": trade["close_time"], "value": trade["avg_px_close"]} 64 | ] 65 | 66 | side = trade["entry"] == "BUY" 67 | color = "#00ff00" if side else "#ff0000" 68 | 69 | series_options.append({ 70 | "type": 'Line', 71 | "data": line_data, 72 | "options": { 73 | "color": color, 74 | "lineWidth": 2, 75 | "lineStyle": 0 # 0-Solid, 1-Dotted, 2-Dashed, 3-LargeDashed 76 | } 77 | }) 78 | 79 | return series_options 80 | 81 | -------------------------------------------------------------------------------- /streamlit_app/stream2batch.py: -------------------------------------------------------------------------------- 1 | from nautilus_trader.indicators.zigzag import Zigzag 2 | import polars as pl 3 | def batch_zizag( 4 | _df, 5 | threshold = 0.02, 6 | only_close = False, 7 | ): 8 | zigzag = Zigzag(threshold,only_close) 9 | datetimes = [] 10 | zigzag_values = [] 11 | for j in range(_df.shape[0]): 12 | if only_close: 13 | zigzag.update_raw(_df[j,"open"],_df[j,"close"],_df[j,"close"],_df[j,"close"],_df[j,"volume"],_df[j,"ts_event"]) 14 | else: 15 | zigzag.update_raw(_df[j,"open"],_df[j,"high"],_df[j,"low"],_df[j,"close"],_df[j,"volume"],_df[j,"ts_event"]) 16 | 17 | if zigzag.initialized: 18 | datetime = zigzag.zigzags_datetime[-2] 19 | value = zigzag.zigzags_values[-2] 20 | if len(datetimes) < 1 or datetime!=datetimes[-1]: 21 | datetimes.append(datetime) 22 | zigzag_values.append(value) 23 | zigzag_points = pl.DataFrame({ 24 | "ts_event":datetimes, 25 | "zigzag_points":zigzag_values, 26 | }) 27 | 28 | return zigzag_points -------------------------------------------------------------------------------- /streamlit_app/test.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | from streamlit_lightweight_charts import renderLightweightCharts 3 | 4 | chartOptions = { 5 | "layout": { 6 | "textColor": 'black', 7 | "background": { 8 | "type": 'solid', 9 | "color": 'white' 10 | } 11 | } 12 | } 13 | 14 | seriesCandlestickChart = [{ 15 | "type": 'Candlestick', 16 | "data": [ 17 | { "open": 10, "high": 10.63, "low": 9.49, "close": 9.55, "time": 1642427876 }, 18 | { "open": 9.55, "high": 10.30, "low": 9.42, "close": 9.94, "time": 1642514276 }, 19 | { "open": 9.94, "high": 10.17, "low": 9.92, "close": 9.78, "time": 1642600676 }, 20 | { "open": 9.78, "high": 10.59, "low": 9.18, "close": 9.51, "time": 1642687076 }, 21 | { "open": 9.51, "high": 10.46, "low": 9.10, "close": 10.17, "time": 1642773476 }, 22 | { "open": 10.17, "high": 10.96, "low": 10.16, "close": 10.47, "time": 1642859876 }, 23 | { "open": 10.47, "high": 11.39, "low": 10.40, "close": 10.81, "time": 1642946276 }, 24 | { "open": 10.81, "high": 11.60, "low": 10.30, "close": 10.75, "time": 1643032676 }, 25 | { "open": 10.75, "high": 11.60, "low": 10.49, "close": 10.93, "time": 1643119076 }, 26 | { "open": 10.93, "high": 11.53, "low": 10.76, "close": 10.96, "time": 1643205476 } 27 | ], 28 | "options": { 29 | "upColor": '#26a69a', 30 | "downColor": '#ef5350', 31 | "borderVisible": False, 32 | "wickUpColor": '#26a69a', 33 | "wickDownColor": '#ef5350' 34 | } 35 | }] 36 | 37 | st.subheader("Candlestick Chart sample") 38 | 39 | renderLightweightCharts([ 40 | { 41 | "chart": chartOptions, 42 | "series": seriesCandlestickChart 43 | } 44 | ], 'candlestick') -------------------------------------------------------------------------------- /streamlit_app/trade_analysis.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | import streamlit as st 3 | from streamlit_lightweight_charts import renderLightweightCharts 4 | import polars as pl 5 | from io_tool import load_parquet,load_csv 6 | from data_scheme import bar_schema,schema_dict 7 | from stream2batch import batch_zizag 8 | from plot import get_kline_plot_setting,get_trade_lines_setting 9 | 10 | 11 | if __name__ == "__main__": 12 | # write a sidebar to select factor analysis 13 | st.set_page_config(layout = "wide") 14 | st.sidebar.subheader('APP:') 15 | app_name = sorted(['Trade Analysis']) 16 | app = st.sidebar.selectbox('', app_name, index = 0) 17 | if app == 'Trade Analysis': 18 | data_type = st.sidebar.radio( 19 | "Select data type", 20 | ("Bar","Tick") 21 | ) 22 | if data_type == "Bar": 23 | #df = load_parquet(schema_dict[data_type],True,"load the bar data") 24 | df = load_csv(True,"load the bar data") 25 | trades = load_csv(False,"load the trade data") 26 | if df is not None and trades is not None: 27 | #convert ts_event to datetime 28 | df = df.with_columns( 29 | [ 30 | (pl.col("close_time")/10**3).alias("time") 31 | ] 32 | ) 33 | trades = trades.with_columns( 34 | [ 35 | (pl.col('ts_last')/10**9).alias("close_time"), 36 | ((pl.col('ts_last')-pl.col("duration_ns"))/10**9).alias("open_time") 37 | #pl.col('ts_closed').str.strptime(pl.Datetime).dt.timestamp().alias("ts_closed") 38 | ] 39 | ) 40 | kline_options = get_kline_plot_setting(df) 41 | trade_lines_option = get_trade_lines_setting(trades) 42 | kline_options["series"].extend(trade_lines_option) 43 | st.subheader("Candlestick Chart") 44 | renderLightweightCharts([kline_options], 'candlestick') 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /test/binance_top_search_symbols.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | from bs4 import BeautifulSoup 4 | 5 | url = "https://www.binance.com/en/futures/crypto-heatmap/" 6 | response = requests.get(url) 7 | soup = BeautifulSoup(response.text, "html.parser") 8 | 9 | script_tag = soup.find("script", id="__APP_DATA", type="application/json") 10 | script_content = script_tag.string 11 | 12 | # Extract the "topSearchedSymbols" data 13 | data = json.loads(script_content) 14 | top_searched_symbols = data['pageData']['redux']['markets']['topSearchedSymbols']['um'] 15 | 16 | # Filter the data to get the top 50 rank symbols 17 | filtered_symbols = [item["symbol"] for item in top_searched_symbols if item["rank"] <= 50] 18 | 19 | print(filtered_symbols) -------------------------------------------------------------------------------- /test/test_get_label.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | import pandas as pd 3 | import numpy as np 4 | import glob 5 | import matplotlib.pyplot as plt 6 | from get_label import * 7 | import pyarrow as pa 8 | 9 | ExtendedBar_SCHEMA = pa.schema( 10 | { 11 | "bar_type": pa.dictionary(pa.int8(), pa.string()), 12 | #"instrument_id": pa.dictionary(pa.int64(), pa.string()), 13 | "open": pa.float64(), 14 | "high": pa.float64(), 15 | "low": pa.float64(), 16 | "close": pa.float64(), 17 | "volume": pa.float64(), 18 | "bids_value_level_0": pa.float64(), 19 | "bids_value_level_1": pa.float64(), 20 | "bids_value_level_2": pa.float64(), 21 | "bids_value_level_3": pa.float64(), 22 | "bids_value_level_4": pa.float64(), 23 | "asks_value_level_0": pa.float64(), 24 | "asks_value_level_1": pa.float64(), 25 | "asks_value_level_2": pa.float64(), 26 | "asks_value_level_3": pa.float64(), 27 | "asks_value_level_4": pa.float64(), 28 | "ts_event": pa.int64(), 29 | "ts_init": pa.int64(), 30 | }, 31 | metadata={"type": "ExtendedBar"}, 32 | ) 33 | 34 | if __name__ == "__main__": 35 | filenames = glob.glob("../../catalog/data/genericdata_extended_bar.parquet/*.parquet") 36 | df = pl.read_parquet( 37 | filenames[0], 38 | use_pyarrow=True, 39 | pyarrow_options={"schema": ExtendedBar_SCHEMA} 40 | ) 41 | df = df.select( 42 | [pl.all(),pl.col("ts_event").alias("datetime")] 43 | ) 44 | labeled_df = create_label( 45 | df, 46 | threshold = 0.01, 47 | stop_loss = 0.005, 48 | ) 49 | -------------------------------------------------------------------------------- /tool_test/load_orderbook_delta.py: -------------------------------------------------------------------------------- 1 | 2 | from nautilus_trader.persistence.catalog.parquet import ParquetDataCatalog 3 | from nautilus_trader.persistence.loaders import BinanceOrderBookDeltaDataLoader 4 | from nautilus_trader.persistence.wranglers_v2 import OrderBookDeltaDataWranglerV2 5 | import pyarrow.ipc as ipc 6 | import pyarrow as pa 7 | 8 | if __name__ == "__main__": 9 | catalog = ParquetDataCatalog("../catalog/.") 10 | instrument_id = "FTMUSDT-PERP.BINANCE" 11 | instrument = catalog.instruments(instrument_ids=[instrument_id],as_nautilus=True)[0] 12 | path_update = "FTMUSDT-PERP.BINANCE.feather" 13 | wrangler = OrderBookDeltaDataWranglerV2(instrument_id,instrument.price_precision,instrument.size_precision) 14 | 15 | with open(path_update, 'rb') as source: 16 | reader = ipc.open_stream(source) 17 | table = reader.read_all() 18 | deltas = wrangler.from_arrow(table) 19 | catalog.write_data(deltas) 20 | -------------------------------------------------------------------------------- /�: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/graceyangfan/nautilus_tutorial/a24fa7a46b1e018f21e419ac49c5e2dc0c78cedb/� --------------------------------------------------------------------------------