cyqnt-trd 0.1.9.dev0__tar.gz → 0.1.9.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cyqnt_trd-0.1.9.dev0/cyqnt_trd.egg-info → cyqnt_trd-0.1.9.dev2}/PKG-INFO +45 -22
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/README.md +28 -8
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/__init__.py +1 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/get_data/get_trending_data.py +0 -1
- cyqnt_trd-0.1.9.dev2/cyqnt_trd/standard_bot/data/_ssl_utils.py +39 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/adapters.py +7 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/downloader.py +7 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/historical.py +1 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/common.py +58 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_backtest.py +52 -2
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_monitor_http.py +11 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_paper.py +33 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_runtime_consistency.py +33 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/signal/__init__.py +16 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/signal/numba_kernels.py +388 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/signal/plugins.py +731 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/simulation/execution_kernels.py +36 -8
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/simulation/numba_runner.py +51 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info}/PKG-INFO +45 -22
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd.egg-info/SOURCES.txt +1 -7
- cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info/requires.txt +21 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd.egg-info/top_level.txt +0 -1
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/pyproject.toml +18 -14
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/repo-bootstrap.md +18 -17
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/requirements.txt +12 -12
- cyqnt_trd-0.1.9.dev2/scripts/llm_strategy_evolution.py +1014 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_numba_backtest.py +146 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_signal_alignment.py +63 -0
- cyqnt_trd-0.1.9.dev0/cyqnt_trd.egg-info/requires.txt +0 -18
- cyqnt_trd-0.1.9.dev0/docs/backtests/btc_mtf_local_historical_smoke.json +0 -4623
- cyqnt_trd-0.1.9.dev0/docs/backtests/donchian_breakout_smoke.json +0 -4895
- cyqnt_trd-0.1.9.dev0/docs/backtests/e2e_mtf_backtest.json +0 -4858
- cyqnt_trd-0.1.9.dev0/docs/backtests/e2e_usercheck.json +0 -4858
- cyqnt_trd-0.1.9.dev0/docs/backtests/e2e_usercheck_rebuilt_venv.json +0 -4858
- cyqnt_trd-0.1.9.dev0/docs/backtests/tmp_mtf_window.json +0 -2378
- cyqnt_trd-0.1.9.dev0/docs/backtests/verification_mtf_ma_cross_5m_1h_20_20.json +0 -166936
- cyqnt_trd-0.1.9.dev0/scripts/llm_strategy_evolution.py +0 -531
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/LICENSE +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/MANIFEST.in +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/backtesting/README.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/backtesting/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/backtesting/factor_test.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/backtesting/framework.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/backtesting/strategy_backtest.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/diagnose_api.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/get_data/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/get_data/get_futures_data.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/get_data/get_kline_with_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/get_data/get_web3_trending_data.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/online_trading/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/online_trading/realtime_price_tracker.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/config.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/core/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/core/contracts.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/alignment.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/data/snapshot.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_mainnet_execution.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_run_manager.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_execution.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_ma_demo.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_roundtrip.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/binance_futures_mainnet.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/binance_futures_testnet.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/idempotency.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/paper.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/execution/rules.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/runtime/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/runtime/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/runtime/run_manager.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/runtime/runner.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/signal/encoders.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/signal/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/signal/registry.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/simulation/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/simulation/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/simulation/metrics_kernels.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/simulation/runner.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/test.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/test_script/README.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/test_script/get_network_info.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/test_script/realtime_price_tracker.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/test_script/test_order.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/README.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/example_test_alpha.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/example_usage.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/adx_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/ao_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/bbp_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/cci_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/ema_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/ma_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/macd_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/momentum_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/rsi_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/stochastic_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/stochastic_tsi_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/uo_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor/williams_r_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/factor_details.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha1.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha10.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha100.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha101.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha11.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha12.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha13.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha14.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha15.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha16.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha17.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha18.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha19.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha2.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha20.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha21.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha22.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha23.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha24.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha25.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha26.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha27.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha28.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha29.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha3.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha30.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha31.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha32.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha33.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha34.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha35.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha36.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha37.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha38.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha39.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha4.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha40.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha41.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha42.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha43.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha44.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha45.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha46.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha47.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha48.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha49.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha5.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha50.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha51.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha52.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha53.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha54.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha55.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha56.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha57.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha58.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha59.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha6.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha60.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha61.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha62.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha63.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha64.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha65.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha66.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha67.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha68.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha69.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha7.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha70.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha71.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha72.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha73.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha74.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha75.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha76.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha77.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha78.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha79.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha8.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha80.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha81.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha82.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha83.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha84.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha85.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha86.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha87.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha88.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha89.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha9.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha90.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha91.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha92.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha93.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha94.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha95.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha96.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha97.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha98.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha99.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/alpha_utils.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/create_all_alphas.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/generate_alphas.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/selected_alpha/test_alpha.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/signal/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/signal/factor_based_signal.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/trading_signal/signal/ma_signal.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/utils/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/utils/set_user.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd.egg-info/dependency_links.txt +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/btc_ma_cross_1h_500.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/btc_ma_cross_numba_1h_120.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/btc_mtf_ma_cross_5m_1h_20_20_90d.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/btc_mtf_ma_cross_5m_1h_20_20_90d_summary.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/btc_mtf_ma_spread_5m_1h_20_20_600.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/btc_price_ma_1h_500.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/eth_ma_cross_1h_500.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/eth_price_ma_1h_500.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/llm_strategy_evolution_2026-04-13.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/llm_strategy_evolution_2026-04-13.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/ma_backtest_suite_2026-04-09.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/sol_ma_cross_1h_500.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/backtests/sol_price_ma_1h_500.json +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/signal_specs/multi_timeframe_ma_spread_CN.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/standard_bot_migration.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/standard_bot_mvp.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/standard_bot_progress_2026-04-09.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/docs/standard_bot_progress_2026-04-09_CN.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/backtest-workflow.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/natural-language-to-strategy.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/risk-controls.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/strategy-routing.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/trading-modes.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/references/watcher-session.md +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/setup.cfg +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/setup.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/test/real_time_trade.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/test/test_now_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/test/track_k_line_continue.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_config_and_execution.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_historical_data.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_monitor_http.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_multi_timeframe_ma_signal.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_mvp_backtest.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_paper_runtime.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_run_manager.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_runtime_consistency.py +0 -0
- {cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/tests/standard_bot/test_signal_plugins.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cyqnt-trd
|
|
3
|
-
Version: 0.1.9.
|
|
3
|
+
Version: 0.1.9.dev2
|
|
4
4
|
Summary: A cryptocurrency trading toolkit centered on the standard_bot backtesting, paper signal, and execution workflow
|
|
5
5
|
Author-email: Haowen Wang <wanghw@zju.edu.cn>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -14,27 +14,30 @@ Classifier: Programming Language :: Python :: 3
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.8
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.9
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
18
|
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
18
|
-
Requires-Python: <3.
|
|
19
|
+
Requires-Python: <3.12,>=3.8
|
|
19
20
|
Description-Content-Type: text/markdown
|
|
20
21
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: pandas
|
|
22
|
-
Requires-Dist: numpy
|
|
23
|
-
Requires-Dist: polars
|
|
24
|
-
Requires-Dist: numba
|
|
25
|
-
Requires-Dist: pyarrow
|
|
26
|
-
Requires-Dist: matplotlib
|
|
27
|
-
Requires-Dist: scipy
|
|
28
|
-
Requires-Dist: requests
|
|
29
|
-
Requires-Dist: binance-sdk-spot
|
|
30
|
-
Requires-Dist: binance-sdk-derivatives-trading-usds-futures
|
|
31
|
-
Requires-Dist: binance-sdk-algo
|
|
32
|
-
Requires-Dist: binance-common
|
|
22
|
+
Requires-Dist: pandas==2.3.3
|
|
23
|
+
Requires-Dist: numpy==1.24.4
|
|
24
|
+
Requires-Dist: polars==1.0.0
|
|
25
|
+
Requires-Dist: numba==0.60.0
|
|
26
|
+
Requires-Dist: pyarrow==21.0.0
|
|
27
|
+
Requires-Dist: matplotlib==3.7.5
|
|
28
|
+
Requires-Dist: scipy==1.10.1
|
|
29
|
+
Requires-Dist: requests==2.32.5
|
|
30
|
+
Requires-Dist: binance-sdk-spot==8.2.1
|
|
31
|
+
Requires-Dist: binance-sdk-derivatives-trading-usds-futures==10.0.1
|
|
32
|
+
Requires-Dist: binance-sdk-algo==2.6.0
|
|
33
|
+
Requires-Dist: binance-common==3.8.0
|
|
33
34
|
Provides-Extra: dev
|
|
34
35
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
35
36
|
Requires-Dist: pytest-cov<5.0.0,>=4.0.0; extra == "dev"
|
|
36
37
|
Requires-Dist: black<24.0.0,>=22.0.0; extra == "dev"
|
|
37
38
|
Requires-Dist: ruff<0.2.0,>=0.1.0; extra == "dev"
|
|
39
|
+
Provides-Extra: market-data
|
|
40
|
+
Requires-Dist: yfinance>=0.2.38; extra == "market-data"
|
|
38
41
|
Dynamic: license-file
|
|
39
42
|
|
|
40
43
|
# cyqnt-trd
|
|
@@ -59,6 +62,25 @@ The current recommended path is:
|
|
|
59
62
|
pip install cyqnt-trd
|
|
60
63
|
```
|
|
61
64
|
|
|
65
|
+
The package supports Python `>=3.8,<3.12`, which includes Binance AI's Python `3.11.2`.
|
|
66
|
+
|
|
67
|
+
For HTTPS requests, `cyqnt-trd` resolves the CA bundle in this order:
|
|
68
|
+
|
|
69
|
+
1. `REQUESTS_CA_BUNDLE`
|
|
70
|
+
2. `SSL_CERT_FILE`
|
|
71
|
+
3. `CURL_CA_BUNDLE`
|
|
72
|
+
4. Linux system CA bundle: `/etc/ssl/certs/ca-certificates.crt`
|
|
73
|
+
5. `certifi`
|
|
74
|
+
6. `requests` default verification behavior
|
|
75
|
+
|
|
76
|
+
For special Linux deployments where Binance endpoints are signed by an internal CA that exists only in the
|
|
77
|
+
system trust store, set the deployment CA bundle via environment variables, for example:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
|
|
81
|
+
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
|
|
82
|
+
```
|
|
83
|
+
|
|
62
84
|
### For development
|
|
63
85
|
|
|
64
86
|
```bash
|
|
@@ -152,17 +174,18 @@ The `standard_bot` mainline currently includes Numba-backed support for:
|
|
|
152
174
|
|
|
153
175
|
Key dependencies include:
|
|
154
176
|
|
|
155
|
-
- `pandas
|
|
156
|
-
- `polars
|
|
157
|
-
- `numba
|
|
158
|
-
- `pyarrow
|
|
159
|
-
- `requests
|
|
177
|
+
- `pandas==2.3.3`
|
|
178
|
+
- `polars==1.0.0`
|
|
179
|
+
- `numba==0.60.0`
|
|
180
|
+
- `pyarrow==21.0.0`
|
|
181
|
+
- `requests==2.32.5`
|
|
160
182
|
|
|
161
183
|
Binance SDK dependencies:
|
|
162
184
|
|
|
163
|
-
- `binance-sdk-spot`
|
|
164
|
-
- `binance-sdk-derivatives-trading-usds-futures`
|
|
165
|
-
- `binance-sdk-algo`
|
|
185
|
+
- `binance-sdk-spot==8.2.1`
|
|
186
|
+
- `binance-sdk-derivatives-trading-usds-futures==10.0.1`
|
|
187
|
+
- `binance-sdk-algo==2.6.0`
|
|
188
|
+
- `binance-common==3.8.0`
|
|
166
189
|
- `binance-common`
|
|
167
190
|
|
|
168
191
|
## License
|
|
@@ -20,6 +20,25 @@ The current recommended path is:
|
|
|
20
20
|
pip install cyqnt-trd
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
The package supports Python `>=3.8,<3.12`, which includes Binance AI's Python `3.11.2`.
|
|
24
|
+
|
|
25
|
+
For HTTPS requests, `cyqnt-trd` resolves the CA bundle in this order:
|
|
26
|
+
|
|
27
|
+
1. `REQUESTS_CA_BUNDLE`
|
|
28
|
+
2. `SSL_CERT_FILE`
|
|
29
|
+
3. `CURL_CA_BUNDLE`
|
|
30
|
+
4. Linux system CA bundle: `/etc/ssl/certs/ca-certificates.crt`
|
|
31
|
+
5. `certifi`
|
|
32
|
+
6. `requests` default verification behavior
|
|
33
|
+
|
|
34
|
+
For special Linux deployments where Binance endpoints are signed by an internal CA that exists only in the
|
|
35
|
+
system trust store, set the deployment CA bundle via environment variables, for example:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
|
|
39
|
+
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
|
|
40
|
+
```
|
|
41
|
+
|
|
23
42
|
### For development
|
|
24
43
|
|
|
25
44
|
```bash
|
|
@@ -113,17 +132,18 @@ The `standard_bot` mainline currently includes Numba-backed support for:
|
|
|
113
132
|
|
|
114
133
|
Key dependencies include:
|
|
115
134
|
|
|
116
|
-
- `pandas
|
|
117
|
-
- `polars
|
|
118
|
-
- `numba
|
|
119
|
-
- `pyarrow
|
|
120
|
-
- `requests
|
|
135
|
+
- `pandas==2.3.3`
|
|
136
|
+
- `polars==1.0.0`
|
|
137
|
+
- `numba==0.60.0`
|
|
138
|
+
- `pyarrow==21.0.0`
|
|
139
|
+
- `requests==2.32.5`
|
|
121
140
|
|
|
122
141
|
Binance SDK dependencies:
|
|
123
142
|
|
|
124
|
-
- `binance-sdk-spot`
|
|
125
|
-
- `binance-sdk-derivatives-trading-usds-futures`
|
|
126
|
-
- `binance-sdk-algo`
|
|
143
|
+
- `binance-sdk-spot==8.2.1`
|
|
144
|
+
- `binance-sdk-derivatives-trading-usds-futures==10.0.1`
|
|
145
|
+
- `binance-sdk-algo==2.6.0`
|
|
146
|
+
- `binance-common==3.8.0`
|
|
127
147
|
- `binance-common`
|
|
128
148
|
|
|
129
149
|
## License
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helpers for resolving the CA bundle used by outbound HTTPS requests.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
_LINUX_SYSTEM_CA = "/etc/ssl/certs/ca-certificates.crt"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def resolve_ca_bundle() -> Union[str, bool]:
|
|
16
|
+
"""
|
|
17
|
+
Resolve the CA bundle for HTTPS requests.
|
|
18
|
+
|
|
19
|
+
Resolution order:
|
|
20
|
+
1. Explicit deployment environment variables
|
|
21
|
+
2. Linux system CA bundle
|
|
22
|
+
3. certifi bundle when available
|
|
23
|
+
4. requests default verification behavior
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
for env_var in ("REQUESTS_CA_BUNDLE", "SSL_CERT_FILE", "CURL_CA_BUNDLE"):
|
|
27
|
+
value = os.environ.get(env_var, "").strip()
|
|
28
|
+
if value and Path(value).exists():
|
|
29
|
+
return value
|
|
30
|
+
|
|
31
|
+
if Path(_LINUX_SYSTEM_CA).exists():
|
|
32
|
+
return _LINUX_SYSTEM_CA
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
import certifi
|
|
36
|
+
|
|
37
|
+
return certifi.where()
|
|
38
|
+
except ImportError: # pragma: no cover - depends on environment packaging
|
|
39
|
+
return True
|
|
@@ -13,6 +13,7 @@ from typing import Dict, List, Optional
|
|
|
13
13
|
import requests
|
|
14
14
|
|
|
15
15
|
from ..core import Bar, BundleMeta, MarketBundle, MarketQuery
|
|
16
|
+
from ._ssl_utils import resolve_ca_bundle
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
_SPOT_KLINES_URL = "https://api.binance.com/api/v3/uiKlines"
|
|
@@ -87,7 +88,12 @@ class BinanceRestMarketDataAdapter:
|
|
|
87
88
|
if market_query.time_range.end_ts is not None:
|
|
88
89
|
params["endTime"] = int(market_query.time_range.end_ts)
|
|
89
90
|
|
|
90
|
-
response = requests.get(
|
|
91
|
+
response = requests.get(
|
|
92
|
+
self.base_url,
|
|
93
|
+
params=params,
|
|
94
|
+
timeout=self.timeout,
|
|
95
|
+
verify=resolve_ca_bundle(),
|
|
96
|
+
)
|
|
91
97
|
response.raise_for_status()
|
|
92
98
|
return response.json()
|
|
93
99
|
|
|
@@ -14,6 +14,7 @@ import requests
|
|
|
14
14
|
|
|
15
15
|
from .alignment import timeframe_to_ms
|
|
16
16
|
from .historical import build_history_path, ensure_pyarrow_available
|
|
17
|
+
from ._ssl_utils import resolve_ca_bundle
|
|
17
18
|
from .adapters import _FUTURES_KLINES_URL, _SPOT_KLINES_URL
|
|
18
19
|
|
|
19
20
|
try:
|
|
@@ -179,6 +180,11 @@ class HistoricalBinanceDownloader:
|
|
|
179
180
|
"limit": int(self.chunk_limit),
|
|
180
181
|
}
|
|
181
182
|
session = self.session or requests
|
|
182
|
-
response = session.get(
|
|
183
|
+
response = session.get(
|
|
184
|
+
self.base_url,
|
|
185
|
+
params=params,
|
|
186
|
+
timeout=self.timeout,
|
|
187
|
+
verify=resolve_ca_bundle(),
|
|
188
|
+
)
|
|
183
189
|
response.raise_for_status()
|
|
184
190
|
return response.json()
|
|
@@ -72,6 +72,10 @@ def build_market_data_adapter(
|
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
+
def infer_contract_multiplier(*, market_type: str, symbol: str) -> float:
|
|
76
|
+
return 1.0
|
|
77
|
+
|
|
78
|
+
|
|
75
79
|
def build_strategy_pipeline(
|
|
76
80
|
*,
|
|
77
81
|
strategy: str,
|
|
@@ -87,6 +91,17 @@ def build_strategy_pipeline(
|
|
|
87
91
|
overbought: float,
|
|
88
92
|
donchian_window: int = 20,
|
|
89
93
|
breakout_buffer_bps: float = 0.0,
|
|
94
|
+
adx_period: int = 14,
|
|
95
|
+
adx_threshold: float = 25.0,
|
|
96
|
+
atr_ma_period: int = 20,
|
|
97
|
+
atr_period: int = 14,
|
|
98
|
+
atr_multiplier: float = 2.0,
|
|
99
|
+
bollinger_period: int = 20,
|
|
100
|
+
bollinger_stddev_multiplier: float = 2.0,
|
|
101
|
+
macd_fast_period: int = 12,
|
|
102
|
+
macd_slow_period: int = 26,
|
|
103
|
+
macd_signal_period: int = 9,
|
|
104
|
+
macd_histogram_threshold: float = 0.0,
|
|
90
105
|
primary_ma_period: int = 20,
|
|
91
106
|
reference_ma_period: int = 20,
|
|
92
107
|
spread_threshold_bps: float = 0.0,
|
|
@@ -133,6 +148,49 @@ def build_strategy_pipeline(
|
|
|
133
148
|
"breakout_buffer_bps": breakout_buffer_bps,
|
|
134
149
|
},
|
|
135
150
|
}
|
|
151
|
+
elif strategy == "adx_trend_strength":
|
|
152
|
+
plugin_spec = {
|
|
153
|
+
"plugin_id": "adx_trend_strength",
|
|
154
|
+
"config": {
|
|
155
|
+
"instrument_id": symbol,
|
|
156
|
+
"timeframe": interval,
|
|
157
|
+
"period": adx_period,
|
|
158
|
+
"adx_threshold": adx_threshold,
|
|
159
|
+
},
|
|
160
|
+
}
|
|
161
|
+
elif strategy == "atr_breakout":
|
|
162
|
+
plugin_spec = {
|
|
163
|
+
"plugin_id": "atr_breakout",
|
|
164
|
+
"config": {
|
|
165
|
+
"instrument_id": symbol,
|
|
166
|
+
"timeframe": interval,
|
|
167
|
+
"ma_period": atr_ma_period,
|
|
168
|
+
"atr_period": atr_period,
|
|
169
|
+
"atr_multiplier": atr_multiplier,
|
|
170
|
+
},
|
|
171
|
+
}
|
|
172
|
+
elif strategy == "bollinger_mean_reversion":
|
|
173
|
+
plugin_spec = {
|
|
174
|
+
"plugin_id": "bollinger_mean_reversion",
|
|
175
|
+
"config": {
|
|
176
|
+
"instrument_id": symbol,
|
|
177
|
+
"timeframe": interval,
|
|
178
|
+
"period": bollinger_period,
|
|
179
|
+
"stddev_multiplier": bollinger_stddev_multiplier,
|
|
180
|
+
},
|
|
181
|
+
}
|
|
182
|
+
elif strategy == "macd_trend_follow":
|
|
183
|
+
plugin_spec = {
|
|
184
|
+
"plugin_id": "macd_trend_follow",
|
|
185
|
+
"config": {
|
|
186
|
+
"instrument_id": symbol,
|
|
187
|
+
"timeframe": interval,
|
|
188
|
+
"fast_period": macd_fast_period,
|
|
189
|
+
"slow_period": macd_slow_period,
|
|
190
|
+
"signal_period": macd_signal_period,
|
|
191
|
+
"histogram_threshold": macd_histogram_threshold,
|
|
192
|
+
},
|
|
193
|
+
}
|
|
136
194
|
elif strategy == "multi_timeframe_ma_spread":
|
|
137
195
|
plugin_spec = {
|
|
138
196
|
"plugin_id": "multi_timeframe_ma_spread",
|
{cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_backtest.py
RENAMED
|
@@ -17,6 +17,7 @@ from .common import (
|
|
|
17
17
|
build_market_data_adapter,
|
|
18
18
|
build_strategy_pipeline,
|
|
19
19
|
build_time_range,
|
|
20
|
+
infer_contract_multiplier,
|
|
20
21
|
make_registry,
|
|
21
22
|
)
|
|
22
23
|
from ..simulation import NumbaBacktestRunner, SnapshotBacktestRunner
|
|
@@ -31,7 +32,17 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
31
32
|
parser.add_argument("--engine", choices=["python", "numba"], default="numba")
|
|
32
33
|
parser.add_argument(
|
|
33
34
|
"--strategy",
|
|
34
|
-
choices=[
|
|
35
|
+
choices=[
|
|
36
|
+
"moving_average_cross",
|
|
37
|
+
"price_moving_average",
|
|
38
|
+
"rsi_reversion",
|
|
39
|
+
"donchian_breakout",
|
|
40
|
+
"adx_trend_strength",
|
|
41
|
+
"atr_breakout",
|
|
42
|
+
"bollinger_mean_reversion",
|
|
43
|
+
"macd_trend_follow",
|
|
44
|
+
"multi_timeframe_ma_spread",
|
|
45
|
+
],
|
|
35
46
|
default="moving_average_cross",
|
|
36
47
|
)
|
|
37
48
|
parser.add_argument("--secondary-interval", default="1h")
|
|
@@ -43,6 +54,17 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
43
54
|
parser.add_argument("--overbought", type=float, default=70.0)
|
|
44
55
|
parser.add_argument("--donchian-window", type=int, default=20)
|
|
45
56
|
parser.add_argument("--breakout-buffer-bps", type=float, default=0.0)
|
|
57
|
+
parser.add_argument("--adx-period", type=int, default=14)
|
|
58
|
+
parser.add_argument("--adx-threshold", type=float, default=25.0)
|
|
59
|
+
parser.add_argument("--atr-ma-period", type=int, default=20)
|
|
60
|
+
parser.add_argument("--atr-period", type=int, default=14)
|
|
61
|
+
parser.add_argument("--atr-multiplier", type=float, default=2.0)
|
|
62
|
+
parser.add_argument("--bollinger-period", type=int, default=20)
|
|
63
|
+
parser.add_argument("--bollinger-stddev-multiplier", type=float, default=2.0)
|
|
64
|
+
parser.add_argument("--macd-fast-period", type=int, default=12)
|
|
65
|
+
parser.add_argument("--macd-slow-period", type=int, default=26)
|
|
66
|
+
parser.add_argument("--macd-signal-period", type=int, default=9)
|
|
67
|
+
parser.add_argument("--macd-histogram-threshold", type=float, default=0.0)
|
|
46
68
|
parser.add_argument("--primary-ma-period", type=int, default=20)
|
|
47
69
|
parser.add_argument("--reference-ma-period", type=int, default=20)
|
|
48
70
|
parser.add_argument("--spread-threshold-bps", type=float, default=0.0)
|
|
@@ -54,6 +76,10 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
54
76
|
parser.add_argument("--impact-slippage-bps", type=float, default=0.0)
|
|
55
77
|
parser.add_argument("--funding-bps-per-bar", type=float, default=0.0)
|
|
56
78
|
parser.add_argument("--max-bar-volume-fraction", type=float, default=0.10)
|
|
79
|
+
parser.add_argument("--contract-multiplier", type=float, default=None)
|
|
80
|
+
parser.add_argument("--quantity-step", type=float, default=0.0)
|
|
81
|
+
parser.add_argument("--min-quantity", type=float, default=0.0)
|
|
82
|
+
parser.add_argument("--fixed-fee-per-contract", type=float, default=0.0)
|
|
57
83
|
parser.add_argument("--tail-bars", type=int, default=120)
|
|
58
84
|
parser.add_argument("--output-json", default=None)
|
|
59
85
|
return add_historical_data_arguments(parser)
|
|
@@ -111,6 +137,17 @@ def main() -> int:
|
|
|
111
137
|
overbought=args.overbought,
|
|
112
138
|
donchian_window=args.donchian_window,
|
|
113
139
|
breakout_buffer_bps=args.breakout_buffer_bps,
|
|
140
|
+
adx_period=args.adx_period,
|
|
141
|
+
adx_threshold=args.adx_threshold,
|
|
142
|
+
atr_ma_period=args.atr_ma_period,
|
|
143
|
+
atr_period=args.atr_period,
|
|
144
|
+
atr_multiplier=args.atr_multiplier,
|
|
145
|
+
bollinger_period=args.bollinger_period,
|
|
146
|
+
bollinger_stddev_multiplier=args.bollinger_stddev_multiplier,
|
|
147
|
+
macd_fast_period=args.macd_fast_period,
|
|
148
|
+
macd_slow_period=args.macd_slow_period,
|
|
149
|
+
macd_signal_period=args.macd_signal_period,
|
|
150
|
+
macd_histogram_threshold=args.macd_histogram_threshold,
|
|
114
151
|
primary_ma_period=args.primary_ma_period,
|
|
115
152
|
reference_ma_period=args.reference_ma_period,
|
|
116
153
|
spread_threshold_bps=args.spread_threshold_bps,
|
|
@@ -128,6 +165,7 @@ def main() -> int:
|
|
|
128
165
|
"commission_bps": args.commission_bps,
|
|
129
166
|
"taker_fee_bps": args.taker_fee_bps if args.taker_fee_bps is not None else args.commission_bps,
|
|
130
167
|
"funding_bps_per_bar": args.funding_bps_per_bar,
|
|
168
|
+
"fixed_fee_per_contract": args.fixed_fee_per_contract,
|
|
131
169
|
},
|
|
132
170
|
slippage_model={
|
|
133
171
|
"slippage_bps": args.slippage_bps,
|
|
@@ -137,6 +175,14 @@ def main() -> int:
|
|
|
137
175
|
extras={
|
|
138
176
|
"engine": args.engine,
|
|
139
177
|
"execution_assumption": "signal_at_bar_close_fill_next_bar_open",
|
|
178
|
+
"market_type": args.market_type,
|
|
179
|
+
"contract_multiplier": (
|
|
180
|
+
args.contract_multiplier
|
|
181
|
+
if args.contract_multiplier is not None
|
|
182
|
+
else infer_contract_multiplier(market_type=args.market_type, symbol=args.symbol.upper())
|
|
183
|
+
),
|
|
184
|
+
"quantity_step": args.quantity_step,
|
|
185
|
+
"min_quantity": args.min_quantity,
|
|
140
186
|
},
|
|
141
187
|
)
|
|
142
188
|
|
|
@@ -169,11 +215,15 @@ def main() -> int:
|
|
|
169
215
|
if args.engine == "numba":
|
|
170
216
|
print(
|
|
171
217
|
"execution_model=signal_at_bar_close_fill_next_bar_open "
|
|
172
|
-
"taker_fee_bps=%.4f funding_bps_per_bar=%.4f max_bar_volume_fraction=%.4f"
|
|
218
|
+
"taker_fee_bps=%.4f funding_bps_per_bar=%.4f max_bar_volume_fraction=%.4f "
|
|
219
|
+
"contract_multiplier=%.4f quantity_step=%.4f fixed_fee_per_contract=%.4f"
|
|
173
220
|
% (
|
|
174
221
|
float(request.fee_model.get("taker_fee_bps", 0.0)),
|
|
175
222
|
float(request.fee_model.get("funding_bps_per_bar", 0.0)),
|
|
176
223
|
float(request.slippage_model.get("max_bar_volume_fraction", 0.0)),
|
|
224
|
+
float(request.extras.get("contract_multiplier", 1.0)),
|
|
225
|
+
float(request.extras.get("quantity_step", 0.0)),
|
|
226
|
+
float(request.fee_model.get("fixed_fee_per_contract", 0.0)),
|
|
177
227
|
)
|
|
178
228
|
)
|
|
179
229
|
if trades:
|
{cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_monitor_http.py
RENAMED
|
@@ -172,6 +172,17 @@ def handler_factory(args, *, runner_override=None):
|
|
|
172
172
|
overbought=float(payload.get("overbought", 70.0)),
|
|
173
173
|
donchian_window=int(payload.get("donchian_window", 20)),
|
|
174
174
|
breakout_buffer_bps=float(payload.get("breakout_buffer_bps", 0.0)),
|
|
175
|
+
adx_period=int(payload.get("adx_period", 14)),
|
|
176
|
+
adx_threshold=float(payload.get("adx_threshold", 25.0)),
|
|
177
|
+
atr_ma_period=int(payload.get("atr_ma_period", 20)),
|
|
178
|
+
atr_period=int(payload.get("atr_period", 14)),
|
|
179
|
+
atr_multiplier=float(payload.get("atr_multiplier", 2.0)),
|
|
180
|
+
bollinger_period=int(payload.get("bollinger_period", 20)),
|
|
181
|
+
bollinger_stddev_multiplier=float(payload.get("bollinger_stddev_multiplier", 2.0)),
|
|
182
|
+
macd_fast_period=int(payload.get("macd_fast_period", 12)),
|
|
183
|
+
macd_slow_period=int(payload.get("macd_slow_period", 26)),
|
|
184
|
+
macd_signal_period=int(payload.get("macd_signal_period", 9)),
|
|
185
|
+
macd_histogram_threshold=float(payload.get("macd_histogram_threshold", 0.0)),
|
|
175
186
|
primary_ma_period=int(payload.get("primary_ma_period", 20)),
|
|
176
187
|
reference_ma_period=int(payload.get("reference_ma_period", 20)),
|
|
177
188
|
spread_threshold_bps=float(payload.get("spread_threshold_bps", 0.0)),
|
{cyqnt_trd-0.1.9.dev0 → cyqnt_trd-0.1.9.dev2}/cyqnt_trd/standard_bot/entrypoints/mvp_paper.py
RENAMED
|
@@ -29,7 +29,17 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
29
29
|
parser.add_argument("--market-type", choices=["spot", "futures"], default="spot")
|
|
30
30
|
parser.add_argument(
|
|
31
31
|
"--strategy",
|
|
32
|
-
choices=[
|
|
32
|
+
choices=[
|
|
33
|
+
"moving_average_cross",
|
|
34
|
+
"price_moving_average",
|
|
35
|
+
"rsi_reversion",
|
|
36
|
+
"donchian_breakout",
|
|
37
|
+
"adx_trend_strength",
|
|
38
|
+
"atr_breakout",
|
|
39
|
+
"bollinger_mean_reversion",
|
|
40
|
+
"macd_trend_follow",
|
|
41
|
+
"multi_timeframe_ma_spread",
|
|
42
|
+
],
|
|
33
43
|
default="moving_average_cross",
|
|
34
44
|
)
|
|
35
45
|
parser.add_argument("--fast-window", type=int, default=5)
|
|
@@ -40,6 +50,17 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
40
50
|
parser.add_argument("--overbought", type=float, default=70.0)
|
|
41
51
|
parser.add_argument("--donchian-window", type=int, default=20)
|
|
42
52
|
parser.add_argument("--breakout-buffer-bps", type=float, default=0.0)
|
|
53
|
+
parser.add_argument("--adx-period", type=int, default=14)
|
|
54
|
+
parser.add_argument("--adx-threshold", type=float, default=25.0)
|
|
55
|
+
parser.add_argument("--atr-ma-period", type=int, default=20)
|
|
56
|
+
parser.add_argument("--atr-period", type=int, default=14)
|
|
57
|
+
parser.add_argument("--atr-multiplier", type=float, default=2.0)
|
|
58
|
+
parser.add_argument("--bollinger-period", type=int, default=20)
|
|
59
|
+
parser.add_argument("--bollinger-stddev-multiplier", type=float, default=2.0)
|
|
60
|
+
parser.add_argument("--macd-fast-period", type=int, default=12)
|
|
61
|
+
parser.add_argument("--macd-slow-period", type=int, default=26)
|
|
62
|
+
parser.add_argument("--macd-signal-period", type=int, default=9)
|
|
63
|
+
parser.add_argument("--macd-histogram-threshold", type=float, default=0.0)
|
|
43
64
|
parser.add_argument("--secondary-interval", default="1h")
|
|
44
65
|
parser.add_argument("--primary-ma-period", type=int, default=20)
|
|
45
66
|
parser.add_argument("--reference-ma-period", type=int, default=20)
|
|
@@ -117,6 +138,17 @@ def main() -> int:
|
|
|
117
138
|
overbought=args.overbought,
|
|
118
139
|
donchian_window=args.donchian_window,
|
|
119
140
|
breakout_buffer_bps=args.breakout_buffer_bps,
|
|
141
|
+
adx_period=args.adx_period,
|
|
142
|
+
adx_threshold=args.adx_threshold,
|
|
143
|
+
atr_ma_period=args.atr_ma_period,
|
|
144
|
+
atr_period=args.atr_period,
|
|
145
|
+
atr_multiplier=args.atr_multiplier,
|
|
146
|
+
bollinger_period=args.bollinger_period,
|
|
147
|
+
bollinger_stddev_multiplier=args.bollinger_stddev_multiplier,
|
|
148
|
+
macd_fast_period=args.macd_fast_period,
|
|
149
|
+
macd_slow_period=args.macd_slow_period,
|
|
150
|
+
macd_signal_period=args.macd_signal_period,
|
|
151
|
+
macd_histogram_threshold=args.macd_histogram_threshold,
|
|
120
152
|
primary_ma_period=args.primary_ma_period,
|
|
121
153
|
reference_ma_period=args.reference_ma_period,
|
|
122
154
|
spread_threshold_bps=args.spread_threshold_bps,
|
|
@@ -49,7 +49,17 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
49
49
|
parser.add_argument("--market-type", choices=["spot", "futures"], default="futures")
|
|
50
50
|
parser.add_argument(
|
|
51
51
|
"--strategy",
|
|
52
|
-
choices=[
|
|
52
|
+
choices=[
|
|
53
|
+
"moving_average_cross",
|
|
54
|
+
"price_moving_average",
|
|
55
|
+
"rsi_reversion",
|
|
56
|
+
"donchian_breakout",
|
|
57
|
+
"adx_trend_strength",
|
|
58
|
+
"atr_breakout",
|
|
59
|
+
"bollinger_mean_reversion",
|
|
60
|
+
"macd_trend_follow",
|
|
61
|
+
"multi_timeframe_ma_spread",
|
|
62
|
+
],
|
|
53
63
|
default="multi_timeframe_ma_spread",
|
|
54
64
|
)
|
|
55
65
|
parser.add_argument("--fast-window", type=int, default=5)
|
|
@@ -60,6 +70,17 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
60
70
|
parser.add_argument("--overbought", type=float, default=70.0)
|
|
61
71
|
parser.add_argument("--donchian-window", type=int, default=20)
|
|
62
72
|
parser.add_argument("--breakout-buffer-bps", type=float, default=0.0)
|
|
73
|
+
parser.add_argument("--adx-period", type=int, default=14)
|
|
74
|
+
parser.add_argument("--adx-threshold", type=float, default=25.0)
|
|
75
|
+
parser.add_argument("--atr-ma-period", type=int, default=20)
|
|
76
|
+
parser.add_argument("--atr-period", type=int, default=14)
|
|
77
|
+
parser.add_argument("--atr-multiplier", type=float, default=2.0)
|
|
78
|
+
parser.add_argument("--bollinger-period", type=int, default=20)
|
|
79
|
+
parser.add_argument("--bollinger-stddev-multiplier", type=float, default=2.0)
|
|
80
|
+
parser.add_argument("--macd-fast-period", type=int, default=12)
|
|
81
|
+
parser.add_argument("--macd-slow-period", type=int, default=26)
|
|
82
|
+
parser.add_argument("--macd-signal-period", type=int, default=9)
|
|
83
|
+
parser.add_argument("--macd-histogram-threshold", type=float, default=0.0)
|
|
63
84
|
parser.add_argument("--entry-threshold", type=float, default=0.0)
|
|
64
85
|
parser.add_argument("--primary-ma-period", type=int, default=20)
|
|
65
86
|
parser.add_argument("--reference-ma-period", type=int, default=20)
|
|
@@ -143,6 +164,17 @@ def main() -> int:
|
|
|
143
164
|
overbought=args.overbought,
|
|
144
165
|
donchian_window=args.donchian_window,
|
|
145
166
|
breakout_buffer_bps=args.breakout_buffer_bps,
|
|
167
|
+
adx_period=args.adx_period,
|
|
168
|
+
adx_threshold=args.adx_threshold,
|
|
169
|
+
atr_ma_period=args.atr_ma_period,
|
|
170
|
+
atr_period=args.atr_period,
|
|
171
|
+
atr_multiplier=args.atr_multiplier,
|
|
172
|
+
bollinger_period=args.bollinger_period,
|
|
173
|
+
bollinger_stddev_multiplier=args.bollinger_stddev_multiplier,
|
|
174
|
+
macd_fast_period=args.macd_fast_period,
|
|
175
|
+
macd_slow_period=args.macd_slow_period,
|
|
176
|
+
macd_signal_period=args.macd_signal_period,
|
|
177
|
+
macd_histogram_threshold=args.macd_histogram_threshold,
|
|
146
178
|
primary_ma_period=args.primary_ma_period,
|
|
147
179
|
reference_ma_period=args.reference_ma_period,
|
|
148
180
|
spread_threshold_bps=args.spread_threshold_bps,
|
|
@@ -13,8 +13,16 @@ from .interfaces import (
|
|
|
13
13
|
from .encoders import EncodedCloseSeries, encode_close_series, series_for
|
|
14
14
|
from .numba_kernels import NUMBA_AVAILABLE
|
|
15
15
|
from .plugins import (
|
|
16
|
+
AdxTrendStrengthConfig,
|
|
17
|
+
AdxTrendStrengthPlugin,
|
|
18
|
+
AtrBreakoutConfig,
|
|
19
|
+
AtrBreakoutPlugin,
|
|
20
|
+
BollingerMeanReversionConfig,
|
|
21
|
+
BollingerMeanReversionPlugin,
|
|
16
22
|
DonchianBreakoutConfig,
|
|
17
23
|
DonchianBreakoutPlugin,
|
|
24
|
+
MacdTrendFollowConfig,
|
|
25
|
+
MacdTrendFollowPlugin,
|
|
18
26
|
MovingAverageCrossConfig,
|
|
19
27
|
MovingAverageCrossPlugin,
|
|
20
28
|
MultiTimeframeMaSpreadConfig,
|
|
@@ -28,11 +36,19 @@ from .plugins import (
|
|
|
28
36
|
from .registry import PipelineStepResult, SignalPluginRegistry
|
|
29
37
|
|
|
30
38
|
__all__ = [
|
|
39
|
+
"AdxTrendStrengthConfig",
|
|
40
|
+
"AdxTrendStrengthPlugin",
|
|
41
|
+
"AtrBreakoutConfig",
|
|
42
|
+
"AtrBreakoutPlugin",
|
|
31
43
|
"BatchSignalPlugin",
|
|
44
|
+
"BollingerMeanReversionConfig",
|
|
45
|
+
"BollingerMeanReversionPlugin",
|
|
32
46
|
"DonchianBreakoutConfig",
|
|
33
47
|
"DonchianBreakoutPlugin",
|
|
34
48
|
"EncodedCloseSeries",
|
|
35
49
|
"IncrementalSignalPlugin",
|
|
50
|
+
"MacdTrendFollowConfig",
|
|
51
|
+
"MacdTrendFollowPlugin",
|
|
36
52
|
"MovingAverageCrossConfig",
|
|
37
53
|
"MovingAverageCrossPlugin",
|
|
38
54
|
"MultiTimeframeMaSpreadConfig",
|