cyqnt-trd 0.1.9.dev2__tar.gz → 0.1.9.dev4__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.dev2/cyqnt_trd.egg-info → cyqnt_trd-0.1.9.dev4}/PKG-INFO +2 -1
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/__init__.py +22 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/cli.py +25 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/config.py +4 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/run_output.py +125 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/template_hint.py +47 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/types.py +8 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/account.py +52 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/derivatives.py +52 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/funding.py +37 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/http_client.py +12 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/kline.py +44 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/market_bundle.py +28 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/market_cache.py +47 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/open_interest.py +56 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/orderbook.py +18 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/pro.py +9 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/scanner.py +2 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/search.py +15 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/ticker.py +43 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/tradfi.py +7 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/web3.py +29 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/web3_rest.py +8 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/workflow.py +24 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/decision/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/decision/direction.py +5 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/decision/sizing.py +10 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/execution/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/execution/orders.py +76 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/execution/position.py +10 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/pnl.py +5 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/signals.py +6 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/stops.py +5 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/pipeline.py +7 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/scheduler.py +6 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/state.py +11 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/graduated_tp.py +146 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/limits.py +10 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/stop_loss.py +7 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/scoring/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/scoring/combinators.py +8 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/scoring/gates.py +11 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/__init__.py +0 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/derivatives.py +6 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/momentum.py +26 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/structure.py +10 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/trend.py +19 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/volatility.py +9 -0
- cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/volume.py +10 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/__init__.py +8 -1
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/BLOCKS_API.md +835 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/__init__.py +151 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/_utils.py +159 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/conditions.py +563 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/data.py +454 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/decision.py +230 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/derivatives.py +273 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/entry.py +158 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/execution.py +197 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/exit.py +488 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/indicators.py +867 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/limits.py +178 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/microstructure.py +94 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/patterns.py +395 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/regime.py +118 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/risk.py +314 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/scoring.py +394 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/sizing.py +523 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/stop_loss.py +111 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/strategy.py +395 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/universe.py +201 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/verdicts.py +473 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/README.md +194 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/__init__.py +116 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/adapters.py +308 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/__init__.py +92 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/computes.py +681 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/derivatives_detectors.py +177 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/structure.py +249 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/volume_detectors.py +95 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/config.py +246 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/types.py +401 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/__init__.py +75 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/_cache.py +94 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/_subprocess.py +119 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/account.py +224 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/funding.py +152 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/kline.py +236 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/oi.py +171 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/orderbook.py +154 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/pro.py +178 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/ratios.py +261 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/scanner.py +228 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/ticker.py +278 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/workflow.py +227 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/README.md +96 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/__init__.py +59 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/_subprocess.py +204 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/filters.py +173 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/orders.py +344 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/position.py +118 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/__init__.py +4 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/__init__.py +20 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/data/cme.py +732 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/data/derivatives.py +363 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/historical.py +56 -5
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/data/liquidations.py +329 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/cme_hf_ingest.py +87 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/cme_ingest.py +41 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/cme_yfinance_ingest.py +68 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/common.py +88 -1
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_backtest.py +49 -17
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_paper.py +8 -15
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/mvp_paper_daemon.py +752 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_runtime_consistency.py +8 -15
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/__init__.py +44 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/pnl.py +148 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/signals.py +263 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/stops.py +153 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/__init__.py +63 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/pipeline.py +257 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/scheduler.py +207 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/state.py +272 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/__init__.py +8 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/numba_kernels.py +195 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/plugins.py +468 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/simulation/__init__.py +25 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/simulation/live_paper_session.py +709 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/numba_runner.py +413 -31
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/simulation/python_live_paper_session.py +737 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/LANA_IMPLEMENTATION_PLAN.md +301 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/ada_usdt_multi_tf.py +128 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/channel_breakout.py +60 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/consecutive_opposite_days.py +62 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/ema_rsi_10pt.py +236 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/hermes_v12_1h_trend.py +75 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/lana_cron_takeprofit.py +240 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/lana_style_momentum.py +118 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/profitable_3indicators.py +120 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/sol_eth_qualification.py +349 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/turtle_breakout_v3.py +51 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/README.md +24 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/SUPPORT_MATRIX.md +101 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/__init__.py +68 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/bb-squeeze-momentum/README.md +14 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/bb-squeeze-momentum/case.json +46 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/bb-squeeze-momentum/preset.json +24 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/btc-multi-factor-trend/README.md +17 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/btc-multi-factor-trend/case.json +52 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/btc-multi-factor-trend/preset.json +24 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/quadruple-filter-breakout/README.md +12 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/quadruple-filter-breakout/case.json +44 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/quadruple-filter-breakout/preset.json +21 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/rsi-mean-reversion/README.md +17 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/rsi-mean-reversion/case.json +37 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/rsi-mean-reversion/preset.json +16 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/structure-breakout-priceaction/README.md +11 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/structure-breakout-priceaction/case.json +41 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/structure-breakout-priceaction/preset.json +15 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/catalog.json +36 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4/cyqnt_trd.egg-info}/PKG-INFO +2 -1
- cyqnt_trd-0.1.9.dev4/cyqnt_trd.egg-info/SOURCES.txt +637 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd.egg-info/requires.txt +1 -0
- cyqnt_trd-0.1.9.dev4/cyqnt_trd.egg-info/top_level.txt +2 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/pyproject.toml +12 -3
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/requirements.txt +1 -0
- cyqnt_trd-0.1.9.dev4/tests/test_strategy_cases.py +33 -0
- cyqnt_trd-0.1.9.dev2/cyqnt_trd/standard_bot/simulation/__init__.py +0 -16
- cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info/SOURCES.txt +0 -246
- cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info/top_level.txt +0 -7
- cyqnt_trd-0.1.9.dev2/docs/backtests/btc_ma_cross_1h_500.json +0 -3388
- cyqnt_trd-0.1.9.dev2/docs/backtests/btc_ma_cross_numba_1h_120.json +0 -2808
- cyqnt_trd-0.1.9.dev2/docs/backtests/btc_mtf_ma_cross_5m_1h_20_20_90d.json +0 -166933
- cyqnt_trd-0.1.9.dev2/docs/backtests/btc_mtf_ma_cross_5m_1h_20_20_90d_summary.md +0 -41
- cyqnt_trd-0.1.9.dev2/docs/backtests/btc_mtf_ma_spread_5m_1h_20_20_600.json +0 -4109
- cyqnt_trd-0.1.9.dev2/docs/backtests/btc_price_ma_1h_500.json +0 -4399
- cyqnt_trd-0.1.9.dev2/docs/backtests/eth_ma_cross_1h_500.json +0 -3322
- cyqnt_trd-0.1.9.dev2/docs/backtests/eth_price_ma_1h_500.json +0 -4399
- cyqnt_trd-0.1.9.dev2/docs/backtests/llm_strategy_evolution_2026-04-13.json +0 -1059
- cyqnt_trd-0.1.9.dev2/docs/backtests/llm_strategy_evolution_2026-04-13.md +0 -86
- cyqnt_trd-0.1.9.dev2/docs/backtests/ma_backtest_suite_2026-04-09.md +0 -62
- cyqnt_trd-0.1.9.dev2/docs/backtests/sol_ma_cross_1h_500.json +0 -3322
- cyqnt_trd-0.1.9.dev2/docs/backtests/sol_price_ma_1h_500.json +0 -4378
- cyqnt_trd-0.1.9.dev2/docs/signal_specs/multi_timeframe_ma_spread_CN.md +0 -72
- cyqnt_trd-0.1.9.dev2/docs/standard_bot_migration.md +0 -108
- cyqnt_trd-0.1.9.dev2/docs/standard_bot_mvp.md +0 -263
- cyqnt_trd-0.1.9.dev2/docs/standard_bot_progress_2026-04-09.md +0 -245
- cyqnt_trd-0.1.9.dev2/docs/standard_bot_progress_2026-04-09_CN.md +0 -247
- cyqnt_trd-0.1.9.dev2/references/backtest-workflow.md +0 -65
- cyqnt_trd-0.1.9.dev2/references/natural-language-to-strategy.md +0 -63
- cyqnt_trd-0.1.9.dev2/references/repo-bootstrap.md +0 -75
- cyqnt_trd-0.1.9.dev2/references/risk-controls.md +0 -79
- cyqnt_trd-0.1.9.dev2/references/strategy-routing.md +0 -34
- cyqnt_trd-0.1.9.dev2/references/trading-modes.md +0 -78
- cyqnt_trd-0.1.9.dev2/references/watcher-session.md +0 -117
- cyqnt_trd-0.1.9.dev2/scripts/llm_strategy_evolution.py +0 -1014
- cyqnt_trd-0.1.9.dev2/test/real_time_trade.py +0 -1203
- cyqnt_trd-0.1.9.dev2/test/track_k_line_continue.py +0 -372
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_config_and_execution.py +0 -176
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_historical_data.py +0 -424
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_monitor_http.py +0 -251
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_multi_timeframe_ma_signal.py +0 -160
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_mvp_backtest.py +0 -104
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_numba_backtest.py +0 -546
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_paper_runtime.py +0 -262
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_run_manager.py +0 -47
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_runtime_consistency.py +0 -244
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_signal_alignment.py +0 -190
- cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_signal_plugins.py +0 -73
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/LICENSE +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/MANIFEST.in +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/README.md +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/README.md +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/factor_test.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/framework.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/strategy_backtest.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/diagnose_api.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_futures_data.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_kline_with_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_trending_data.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_web3_trending_data.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/online_trading/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/online_trading/realtime_price_tracker.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/config.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/core/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/core/contracts.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/_ssl_utils.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/adapters.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/alignment.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/downloader.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/snapshot.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_mainnet_execution.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_monitor_http.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_run_manager.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_execution.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_ma_demo.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_roundtrip.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/binance_futures_mainnet.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/binance_futures_testnet.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/idempotency.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/paper.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/rules.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/run_manager.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/runner.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/encoders.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/registry.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/execution_kernels.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/interfaces.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/metrics_kernels.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/runner.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/README.md +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/get_network_info.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/realtime_price_tracker.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/test_order.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/README.md +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/example_test_alpha.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/example_usage.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/adx_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/ao_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/bbp_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/cci_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/ema_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/ma_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/macd_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/momentum_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/rsi_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/stochastic_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/stochastic_tsi_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/uo_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/williams_r_factor.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor_details.json +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha1.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha10.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha100.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha101.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha11.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha12.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha13.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha14.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha15.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha16.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha17.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha18.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha19.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha2.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha20.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha21.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha22.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha23.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha24.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha25.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha26.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha27.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha28.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha29.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha3.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha30.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha31.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha32.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha33.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha34.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha35.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha36.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha37.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha38.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha39.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha4.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha40.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha41.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha42.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha43.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha44.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha45.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha46.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha47.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha48.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha49.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha5.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha50.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha51.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha52.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha53.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha54.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha55.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha56.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha57.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha58.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha59.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha6.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha60.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha61.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha62.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha63.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha64.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha65.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha66.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha67.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha68.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha69.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha7.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha70.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha71.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha72.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha73.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha74.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha75.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha76.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha77.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha78.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha79.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha8.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha80.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha81.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha82.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha83.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha84.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha85.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha86.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha87.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha88.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha89.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha9.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha90.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha91.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha92.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha93.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha94.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha95.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha96.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha97.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha98.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha99.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha_utils.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/create_all_alphas.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/generate_alphas.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/test_alpha.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/signal/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/signal/factor_based_signal.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/signal/ma_signal.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/utils/__init__.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/utils/set_user.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd.egg-info/dependency_links.txt +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/setup.cfg +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/setup.py +0 -0
- {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/test/test_now_factor.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.dev4
|
|
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
|
|
@@ -27,6 +27,7 @@ Requires-Dist: pyarrow==21.0.0
|
|
|
27
27
|
Requires-Dist: matplotlib==3.7.5
|
|
28
28
|
Requires-Dist: scipy==1.10.1
|
|
29
29
|
Requires-Dist: requests==2.32.5
|
|
30
|
+
Requires-Dist: websockets<17,>=15.0.1
|
|
30
31
|
Requires-Dist: binance-sdk-spot==8.2.1
|
|
31
32
|
Requires-Dist: binance-sdk-derivatives-trading-usds-futures==10.0.1
|
|
32
33
|
Requires-Dist: binance-sdk-algo==2.6.0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""atomic_strategy_lib shim — thin re-export layer over cyqnt_trd.
|
|
2
|
+
|
|
3
|
+
This is NOT the original atomic_strategy_lib. It is a backward-compatibility
|
|
4
|
+
shim that lives next to cyqnt_trd and exposes the atomic public API surface
|
|
5
|
+
by delegating to the matching cyqnt_trd implementations.
|
|
6
|
+
|
|
7
|
+
Usage from a usage_project_case::
|
|
8
|
+
|
|
9
|
+
# _paths.py only needs to add this directory's parent
|
|
10
|
+
sys.path.insert(0, "<repo>/atomic_compat")
|
|
11
|
+
|
|
12
|
+
# Then existing code works unchanged:
|
|
13
|
+
from atomic_strategy_lib.signals.momentum import rsi_compute, rsi_current
|
|
14
|
+
from atomic_strategy_lib.scoring.gates import verdict_with_gate
|
|
15
|
+
# …etc
|
|
16
|
+
|
|
17
|
+
Internally these route to cyqnt_trd.compat.atomic_signals,
|
|
18
|
+
cyqnt_trd.blocks.verdicts, etc.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
__shim_for__ = "atomic_strategy_lib"
|
|
22
|
+
__shim_target__ = "cyqnt_trd"
|
|
File without changes
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""shim — atomic.core.cli helpers (run_cli / safe_float / CLIError).
|
|
2
|
+
|
|
3
|
+
These are subprocess primitives. Re-export from cyqnt_trd's wrappers.
|
|
4
|
+
"""
|
|
5
|
+
from cyqnt_trd.data_cli._subprocess import run_binance_cli, run_binance_pro_cli # noqa: F401
|
|
6
|
+
from cyqnt_trd.exec_cli._subprocess import CLIError # noqa: F401
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def run_cli(cmd, profile=None, timeout=30):
|
|
10
|
+
"""atomic shim: dispatch to run_binance_cli or run_binance_pro_cli based on cmd[0]."""
|
|
11
|
+
if not cmd:
|
|
12
|
+
return None
|
|
13
|
+
binary = cmd[0] if isinstance(cmd, list) else "binance-cli"
|
|
14
|
+
args = cmd[1:] if isinstance(cmd, list) else []
|
|
15
|
+
if "pro" in binary:
|
|
16
|
+
return run_binance_pro_cli(args, timeout=timeout)
|
|
17
|
+
return run_binance_cli(args, timeout=timeout)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def safe_float(val, default=0.0):
|
|
21
|
+
"""atomic shim: convert to float, return default on error."""
|
|
22
|
+
try:
|
|
23
|
+
return float(val) if val is not None else default
|
|
24
|
+
except (TypeError, ValueError):
|
|
25
|
+
return default
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"""shim — atomic.core.run_output.
|
|
2
|
+
|
|
3
|
+
This is a verbatim copy of atomic_strategy_lib.core.run_output. It uses
|
|
4
|
+
only stdlib (no atomic / cyqnt_trd dependencies), so we host it inline
|
|
5
|
+
in the shim package to avoid placing IO helpers inside cyqnt_trd's
|
|
6
|
+
main namespace.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import shutil
|
|
14
|
+
from dataclasses import dataclass
|
|
15
|
+
from datetime import datetime, timezone
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from typing import Any, Callable, Optional
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def atomic_write_text(path: Path, text: str, encoding: str = "utf-8") -> None:
|
|
21
|
+
"""Write text to a file atomically via tmp-then-rename.
|
|
22
|
+
|
|
23
|
+
Why: pipeline artifacts and state files (positions, signal logs) hold
|
|
24
|
+
workflow-critical data. A crash mid-write with plain ``write_text`` leaves
|
|
25
|
+
a truncated file that breaks the next load.
|
|
26
|
+
"""
|
|
27
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
28
|
+
tmp = path.with_suffix(path.suffix + ".tmp")
|
|
29
|
+
tmp.write_text(text, encoding=encoding)
|
|
30
|
+
os.replace(tmp, path)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass(frozen=True)
|
|
34
|
+
class RunOutput:
|
|
35
|
+
"""Resolved output paths for one pipeline run."""
|
|
36
|
+
|
|
37
|
+
path: Path
|
|
38
|
+
latest_path: Optional[Path]
|
|
39
|
+
runs_dir: Optional[Path]
|
|
40
|
+
run_id: Optional[str]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def prepare_run_output(
|
|
44
|
+
requested_out: str,
|
|
45
|
+
*,
|
|
46
|
+
default_out: str = "tmp/pipeline_result.json",
|
|
47
|
+
resolve_path: Optional[Callable[[str], Path]] = None,
|
|
48
|
+
) -> RunOutput:
|
|
49
|
+
"""Resolve output paths.
|
|
50
|
+
|
|
51
|
+
If the caller uses the default output path, write the durable artifact
|
|
52
|
+
into a unique run directory and mirror it to ``tmp/latest/...``. If the
|
|
53
|
+
caller explicitly supplies ``--out``, honor that path exactly and skip
|
|
54
|
+
mirroring.
|
|
55
|
+
"""
|
|
56
|
+
resolver = resolve_path or Path
|
|
57
|
+
requested = resolver(str(requested_out))
|
|
58
|
+
default = resolver(default_out)
|
|
59
|
+
|
|
60
|
+
if str(requested_out) != default_out and requested != default:
|
|
61
|
+
return RunOutput(path=requested, latest_path=None, runs_dir=None, run_id=None)
|
|
62
|
+
|
|
63
|
+
run_id = _new_run_id()
|
|
64
|
+
runs_dir = default.parent / "runs"
|
|
65
|
+
run_path = runs_dir / run_id / default.name
|
|
66
|
+
latest_path = default.parent / "latest" / default.name
|
|
67
|
+
return RunOutput(
|
|
68
|
+
path=run_path,
|
|
69
|
+
latest_path=latest_path,
|
|
70
|
+
runs_dir=runs_dir,
|
|
71
|
+
run_id=run_id,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def write_json_output(
|
|
76
|
+
output,
|
|
77
|
+
data: Any,
|
|
78
|
+
*,
|
|
79
|
+
keep_runs: int = 20,
|
|
80
|
+
**json_kwargs: Any,
|
|
81
|
+
) -> None:
|
|
82
|
+
"""Write JSON to the run artifact and update the latest mirror."""
|
|
83
|
+
if isinstance(output, RunOutput):
|
|
84
|
+
run_output = output
|
|
85
|
+
target = run_output.path
|
|
86
|
+
else:
|
|
87
|
+
run_output = None
|
|
88
|
+
target = Path(output)
|
|
89
|
+
|
|
90
|
+
text = json.dumps(data, **json_kwargs)
|
|
91
|
+
atomic_write_text(target, text)
|
|
92
|
+
|
|
93
|
+
if run_output and run_output.latest_path:
|
|
94
|
+
atomic_write_text(run_output.latest_path, text)
|
|
95
|
+
|
|
96
|
+
if run_output and run_output.runs_dir and keep_runs > 0:
|
|
97
|
+
prune_run_dirs(run_output.runs_dir, keep=keep_runs)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def prune_run_dirs(runs_dir: Path, *, keep: int = 20) -> None:
|
|
101
|
+
"""Keep the newest run directories by lexical run id, deleting older runs."""
|
|
102
|
+
if keep <= 0 or not runs_dir.exists():
|
|
103
|
+
return
|
|
104
|
+
|
|
105
|
+
run_dirs = sorted(
|
|
106
|
+
(p for p in runs_dir.iterdir() if p.is_dir()),
|
|
107
|
+
key=lambda p: p.name,
|
|
108
|
+
)
|
|
109
|
+
stale = run_dirs[:-keep]
|
|
110
|
+
for path in stale:
|
|
111
|
+
shutil.rmtree(path, ignore_errors=True)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _new_run_id() -> str:
|
|
115
|
+
stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ")
|
|
116
|
+
return f"{stamp}-{os.getpid()}"
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
__all__ = [
|
|
120
|
+
"RunOutput",
|
|
121
|
+
"atomic_write_text",
|
|
122
|
+
"prepare_run_output",
|
|
123
|
+
"prune_run_dirs",
|
|
124
|
+
"write_json_output",
|
|
125
|
+
]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""shim — atomic.core.template_hint.
|
|
2
|
+
|
|
3
|
+
Verbatim copy of atomic's template-hint emitter (pure stdlib utility,
|
|
4
|
+
no atomic / cyqnt_trd dependencies).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Iterable, Optional
|
|
12
|
+
|
|
13
|
+
_HEADER = "=" * 100
|
|
14
|
+
_TEMPLATE_DIR = "usage_project_cases/_templates"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def emit_template_hint(
|
|
18
|
+
template: str,
|
|
19
|
+
data_path,
|
|
20
|
+
summary_lines: Iterable[str],
|
|
21
|
+
*,
|
|
22
|
+
secondary_template: Optional[str] = None,
|
|
23
|
+
stream=sys.stdout,
|
|
24
|
+
) -> None:
|
|
25
|
+
"""Print a structured agent-facing template hint.
|
|
26
|
+
|
|
27
|
+
The block contains the primary template path, optional secondary template,
|
|
28
|
+
and a compact summary. *data_path* is intentionally not printed because
|
|
29
|
+
local result paths are internal runtime details, not user-facing content.
|
|
30
|
+
"""
|
|
31
|
+
stream.write(_HEADER + "\n")
|
|
32
|
+
stream.write("TEMPLATE HINT FOR AGENT\n")
|
|
33
|
+
stream.write(_HEADER + "\n")
|
|
34
|
+
stream.write(f" primary_template: {_TEMPLATE_DIR}/{template}\n")
|
|
35
|
+
if secondary_template:
|
|
36
|
+
stream.write(f" secondary_template: {_TEMPLATE_DIR}/{secondary_template}\n")
|
|
37
|
+
stream.write(" usage: render the user-facing report by filling the sections\n")
|
|
38
|
+
stream.write(" of primary_template from the structured result data.\n")
|
|
39
|
+
stream.write(" visibility: do not mention local JSON/Markdown paths in the final answer\n")
|
|
40
|
+
stream.write(" unless the user explicitly asks for saved artifact paths.\n")
|
|
41
|
+
stream.write("\nSUMMARY (for quick scan, not the final answer):\n")
|
|
42
|
+
for line in summary_lines:
|
|
43
|
+
stream.write(f" {line}\n")
|
|
44
|
+
stream.write(_HEADER + "\n")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
__all__ = ["emit_template_hint"]
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""shim — re-export cyqnt_trd.compat.types"""
|
|
2
|
+
from cyqnt_trd.compat.types import * # noqa: F401,F403
|
|
3
|
+
from cyqnt_trd.compat.types import (
|
|
4
|
+
Candle, Ticker, FundingRate, OpenInterest, OIHistoryPoint,
|
|
5
|
+
OrderBookLevel, OrderBook, Balance, Position, ExchangeFilter,
|
|
6
|
+
Signal, Score, Verdict, TradePlan, OrderResult, VelocityMetrics,
|
|
7
|
+
extract_closes,
|
|
8
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""shim — atomic.data.account"""
|
|
2
|
+
from cyqnt_trd.data_cli import fetch_account_balance, fetch_positions # noqa: F401
|
|
3
|
+
from cyqnt_trd.compat.types import Balance, Position
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def account_balance_fetch(asset="USDT", market="futures", profile=None,
|
|
7
|
+
binary="binance-cli"):
|
|
8
|
+
"""atomic-style — returns Balance dataclass."""
|
|
9
|
+
df = fetch_account_balance(asset=asset, market=market)
|
|
10
|
+
if df is None or df.empty:
|
|
11
|
+
return Balance(asset=asset, free=0.0, locked=0.0, total=0.0)
|
|
12
|
+
row = df.iloc[0]
|
|
13
|
+
return Balance(
|
|
14
|
+
asset=str(row.get("asset", asset)),
|
|
15
|
+
free=float(row.get("free", 0)),
|
|
16
|
+
locked=float(row.get("locked", 0)),
|
|
17
|
+
total=float(row.get("total", row.get("balance", 0))),
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def account_info_fetch(market="futures", profile=None, binary="binance-cli"):
|
|
22
|
+
"""atomic-style — returns dict with balances and positions."""
|
|
23
|
+
bal_df = fetch_account_balance(market=market)
|
|
24
|
+
pos_df = fetch_positions(market=market)
|
|
25
|
+
return {
|
|
26
|
+
"balances": bal_df.to_dict(orient="records") if bal_df is not None and not bal_df.empty else [],
|
|
27
|
+
"positions": pos_df.to_dict(orient="records") if pos_df is not None and not pos_df.empty else [],
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def position_fetch(symbol, market="futures", profile=None, binary="binance-cli"):
|
|
32
|
+
"""atomic-style — returns Position dataclass for a single symbol."""
|
|
33
|
+
df = fetch_positions(symbol=symbol, market=market)
|
|
34
|
+
if df is None or df.empty:
|
|
35
|
+
return Position(
|
|
36
|
+
symbol=symbol, direction="LONG", entry_price=0.0, quantity=0.0,
|
|
37
|
+
unrealized_pnl=0.0, leverage=1, margin_type="ISOLATED",
|
|
38
|
+
)
|
|
39
|
+
row = df.iloc[0]
|
|
40
|
+
qty = float(row.get("quantity", row.get("positionAmt", 0)))
|
|
41
|
+
direction = "LONG" if qty >= 0 else "SHORT"
|
|
42
|
+
return Position(
|
|
43
|
+
symbol=str(row.get("symbol", symbol)),
|
|
44
|
+
direction=direction,
|
|
45
|
+
entry_price=float(row.get("entry_price", row.get("entryPrice", 0))),
|
|
46
|
+
quantity=abs(qty),
|
|
47
|
+
unrealized_pnl=float(row.get("unrealized_pnl", row.get("unRealizedProfit", 0))),
|
|
48
|
+
leverage=int(row.get("leverage", 1) or 1),
|
|
49
|
+
margin_type=str(row.get("margin_type", row.get("marginType", "ISOLATED"))).upper(),
|
|
50
|
+
notional=float(row.get("notional", 0) or 0),
|
|
51
|
+
mark_price=float(row.get("mark_price", row.get("markPrice", 0)) or 0),
|
|
52
|
+
)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""shim — atomic.data.derivatives"""
|
|
2
|
+
from cyqnt_trd.data_cli import fetch_long_short_ratio # noqa: F401
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def long_short_ratio_fetch(symbol, period="5m", limit=30, ratio_type="topPosition",
|
|
6
|
+
profile=None, binary="binance-cli"):
|
|
7
|
+
"""atomic-style — returns list of dicts with timestamp + ratio.
|
|
8
|
+
|
|
9
|
+
ratio_type: 'topPosition' (top traders by position) or 'topAccount'
|
|
10
|
+
(top traders by account count) or 'global'.
|
|
11
|
+
"""
|
|
12
|
+
df = fetch_long_short_ratio(symbol, ratio_type=ratio_type, period=period, limit=limit)
|
|
13
|
+
if df is None or df.empty:
|
|
14
|
+
return []
|
|
15
|
+
return df.to_dict(orient="records")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def top_trader_ls_ratio_fetch(symbol, by="position", period="5m", limit=30,
|
|
19
|
+
profile=None, binary="binance-cli"):
|
|
20
|
+
"""atomic-style — top traders LS ratio."""
|
|
21
|
+
ratio_type = "topPosition" if by == "position" else "topAccount"
|
|
22
|
+
return long_short_ratio_fetch(symbol, period=period, limit=limit, ratio_type=ratio_type)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def basis_fetch(symbol, period="5m", limit=30, profile=None, binary="binance-cli"):
|
|
26
|
+
"""atomic-style basis (futures price - spot price). Returns list of dicts."""
|
|
27
|
+
try:
|
|
28
|
+
from cyqnt_trd.data_cli.ratios import fetch_basis as _impl
|
|
29
|
+
df = _impl(symbol, period=period, limit=limit)
|
|
30
|
+
return df.to_dict(orient="records") if df is not None and not df.empty else []
|
|
31
|
+
except (ImportError, AttributeError):
|
|
32
|
+
return []
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def taker_volume_fetch(symbol, period="5m", limit=30, profile=None, binary="binance-cli"):
|
|
36
|
+
"""atomic-style taker buy/sell volume. Returns list of dicts."""
|
|
37
|
+
try:
|
|
38
|
+
from cyqnt_trd.data_cli.ratios import fetch_taker_volume as _impl
|
|
39
|
+
df = _impl(symbol, period=period, limit=limit)
|
|
40
|
+
return df.to_dict(orient="records") if df is not None and not df.empty else []
|
|
41
|
+
except (ImportError, AttributeError):
|
|
42
|
+
return []
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def leverage_brackets_fetch(symbol, profile=None, binary="binance-cli"):
|
|
46
|
+
"""atomic-style leverage brackets. Returns list of dicts."""
|
|
47
|
+
try:
|
|
48
|
+
from cyqnt_trd.data_cli.ratios import fetch_leverage_brackets as _impl
|
|
49
|
+
df = _impl(symbol)
|
|
50
|
+
return df.to_dict(orient="records") if df is not None and not df.empty else []
|
|
51
|
+
except (ImportError, AttributeError):
|
|
52
|
+
return []
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""shim — atomic.data.funding"""
|
|
2
|
+
from cyqnt_trd.data_cli import fetch_funding_rate, fetch_funding_history # noqa: F401
|
|
3
|
+
from cyqnt_trd.compat.types import FundingRate
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def funding_rate_current(symbol, profile=None, binary="binance-cli"):
|
|
7
|
+
"""atomic-style — returns single FundingRate dataclass (latest)."""
|
|
8
|
+
df = fetch_funding_rate(symbol)
|
|
9
|
+
if df is None or df.empty:
|
|
10
|
+
return FundingRate(symbol=symbol, rate=0.0)
|
|
11
|
+
last = df.iloc[-1]
|
|
12
|
+
return FundingRate(
|
|
13
|
+
symbol=symbol,
|
|
14
|
+
rate=float(last.get("rate", last.get("funding_rate", 0))),
|
|
15
|
+
timestamp=int(last.get("timestamp", 0)) if "timestamp" in last else None,
|
|
16
|
+
mark_price=float(last.get("mark_price", 0) or 0) if "mark_price" in last else None,
|
|
17
|
+
index_price=float(last.get("index_price", 0) or 0) if "index_price" in last else None,
|
|
18
|
+
next_funding_time=int(last.get("next_funding_time", 0) or 0) if "next_funding_time" in last else None,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def funding_rate_fetch(symbol, profile=None, binary="binance-cli"):
|
|
23
|
+
"""atomic alias for funding_rate_current."""
|
|
24
|
+
return funding_rate_current(symbol)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def funding_rate_info(symbol, profile=None, binary="binance-cli"):
|
|
28
|
+
"""atomic alias — returns dict with rate + metadata."""
|
|
29
|
+
fr = funding_rate_current(symbol)
|
|
30
|
+
return {
|
|
31
|
+
"symbol": fr.symbol,
|
|
32
|
+
"rate": fr.rate,
|
|
33
|
+
"timestamp": fr.timestamp,
|
|
34
|
+
"mark_price": fr.mark_price,
|
|
35
|
+
"index_price": fr.index_price,
|
|
36
|
+
"next_funding_time": fr.next_funding_time,
|
|
37
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""shim — atomic.data.http_client (NOT PORTED — stubs).
|
|
2
|
+
|
|
3
|
+
Atomic's HTTP client wraps requests for direct REST. cyqnt_trd uses
|
|
4
|
+
binance-cli subprocess instead, so we don't need this. Callers that
|
|
5
|
+
import http_client get safe defaults.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def __getattr__(name):
|
|
10
|
+
if name.startswith("_"):
|
|
11
|
+
raise AttributeError(name)
|
|
12
|
+
return lambda *a, **k: None
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""shim — atomic.data.kline (atomic-named wrappers around cyqnt_trd.data_cli)"""
|
|
2
|
+
from cyqnt_trd.data_cli import fetch_klines, fetch_klines_multi_tf # noqa: F401
|
|
3
|
+
from cyqnt_trd.data_cli.kline import df_to_candles as _df_to_candles
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def kline_fetch(symbol, interval="1h", limit=100, market="spot",
|
|
7
|
+
profile=None, binary="binance-cli"):
|
|
8
|
+
"""atomic-style kline_fetch — returns list[Candle].
|
|
9
|
+
|
|
10
|
+
Internally delegates to fetch_klines (returns DataFrame) then converts.
|
|
11
|
+
"""
|
|
12
|
+
df = fetch_klines(symbol, interval=interval, limit=limit, market=market)
|
|
13
|
+
candles = []
|
|
14
|
+
if df.empty:
|
|
15
|
+
return candles
|
|
16
|
+
from cyqnt_trd.compat.types import Candle
|
|
17
|
+
for _, row in df.iterrows():
|
|
18
|
+
candles.append(Candle(
|
|
19
|
+
timestamp=int(row.get("open_time", 0)),
|
|
20
|
+
open=float(row.get("open", 0)),
|
|
21
|
+
high=float(row.get("high", 0)),
|
|
22
|
+
low=float(row.get("low", 0)),
|
|
23
|
+
close=float(row.get("close", 0)),
|
|
24
|
+
volume=float(row.get("volume", 0)),
|
|
25
|
+
quote_volume=float(row.get("quote_volume", 0)),
|
|
26
|
+
trades=int(row.get("trades", 0)),
|
|
27
|
+
))
|
|
28
|
+
return candles
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def kline_fetch_multi_tf(symbol, timeframes, limits=None, limit=None,
|
|
32
|
+
market="spot", profile=None, binary="binance-cli"):
|
|
33
|
+
"""atomic-style — returns dict[tf -> list[Candle]]."""
|
|
34
|
+
out = {}
|
|
35
|
+
for tf in timeframes:
|
|
36
|
+
lim = (limits or {}).get(tf, limit or 100)
|
|
37
|
+
out[tf] = kline_fetch(symbol, interval=tf, limit=lim, market=market)
|
|
38
|
+
return out
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def listing_age_fetch(symbol, profile=None, binary="binance-cli"):
|
|
42
|
+
"""atomic-style listing_age_fetch — re-export from data_cli."""
|
|
43
|
+
from cyqnt_trd.data_cli.kline import listing_age_fetch as _impl
|
|
44
|
+
return _impl(symbol)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""shim — atomic.data.market_bundle (cached facade over the per-source modules).
|
|
2
|
+
|
|
3
|
+
Atomic's market_bundle re-exports kline_fetch / ticker_24h_fetch /
|
|
4
|
+
funding_rate_current / open_interest_fetch / etc. with sqlite caching.
|
|
5
|
+
We re-export the same names from our individual shim modules; cache
|
|
6
|
+
behaviour is provided by cyqnt_trd.data_cli's in-memory cache.
|
|
7
|
+
"""
|
|
8
|
+
from atomic_strategy_lib.data.kline import ( # noqa: F401
|
|
9
|
+
kline_fetch, kline_fetch_multi_tf, listing_age_fetch,
|
|
10
|
+
)
|
|
11
|
+
from atomic_strategy_lib.data.ticker import ( # noqa: F401
|
|
12
|
+
ticker_24h_fetch, ticker_price_fetch, gainers_list_fetch,
|
|
13
|
+
)
|
|
14
|
+
from atomic_strategy_lib.data.funding import ( # noqa: F401
|
|
15
|
+
funding_rate_current, funding_rate_fetch, funding_rate_info,
|
|
16
|
+
)
|
|
17
|
+
from atomic_strategy_lib.data.open_interest import ( # noqa: F401
|
|
18
|
+
open_interest_fetch, oi_history_fetch,
|
|
19
|
+
)
|
|
20
|
+
from atomic_strategy_lib.data.orderbook import orderbook_fetch # noqa: F401
|
|
21
|
+
from atomic_strategy_lib.data.account import ( # noqa: F401
|
|
22
|
+
account_balance_fetch, account_info_fetch, position_fetch,
|
|
23
|
+
)
|
|
24
|
+
from atomic_strategy_lib.data.derivatives import ( # noqa: F401
|
|
25
|
+
long_short_ratio_fetch, top_trader_ls_ratio_fetch,
|
|
26
|
+
basis_fetch, taker_volume_fetch, leverage_brackets_fetch,
|
|
27
|
+
)
|
|
28
|
+
from atomic_strategy_lib.data.scanner import full_market_scan, scan_with_filter # noqa: F401
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""shim — atomic.data.market_cache.
|
|
2
|
+
|
|
3
|
+
Atomic uses sqlite-backed caching with typed read/write helpers. cyqnt_trd
|
|
4
|
+
uses a generic in-memory dict cache. We expose atomic's typed names as
|
|
5
|
+
no-op stubs so callers don't crash; actual caching happens transparently
|
|
6
|
+
inside cyqnt_trd.data_cli.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def cache_path(*args, **kwargs):
|
|
11
|
+
return None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_conn():
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def read_klines(*args, **kwargs):
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def write_klines(*args, **kwargs):
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def read_ticker(*args, **kwargs):
|
|
27
|
+
return None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def write_tickers(*args, **kwargs):
|
|
31
|
+
return None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def read_funding(*args, **kwargs):
|
|
35
|
+
return None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def write_funding(*args, **kwargs):
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def read_oi_history(*args, **kwargs):
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def write_oi_history(*args, **kwargs):
|
|
47
|
+
return None
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""shim — atomic.data.open_interest"""
|
|
2
|
+
from cyqnt_trd.data_cli import fetch_open_interest, fetch_oi_history # noqa: F401
|
|
3
|
+
from cyqnt_trd.compat.types import OpenInterest, OIHistoryPoint
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def open_interest_fetch(symbol, profile=None, binary="binance-cli"):
|
|
7
|
+
"""atomic-style — returns OpenInterest dataclass."""
|
|
8
|
+
df = fetch_open_interest(symbol)
|
|
9
|
+
if df is None or df.empty:
|
|
10
|
+
return OpenInterest(symbol=symbol, oi_base=0.0, oi_value=0.0)
|
|
11
|
+
row = df.iloc[0]
|
|
12
|
+
return OpenInterest(
|
|
13
|
+
symbol=symbol,
|
|
14
|
+
oi_base=float(row.get("oi_base", row.get("openInterest", 0))),
|
|
15
|
+
oi_value=float(row.get("oi_value", row.get("openInterestValue", 0))),
|
|
16
|
+
timestamp=int(row.get("timestamp", 0) or 0),
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def oi_history_fetch(symbol, period="5m", limit=30, profile=None, binary="binance-cli"):
|
|
21
|
+
"""atomic-style — returns list[OIHistoryPoint]."""
|
|
22
|
+
df = fetch_oi_history(symbol, interval=period, limit=limit)
|
|
23
|
+
if df is None or df.empty:
|
|
24
|
+
return []
|
|
25
|
+
out = []
|
|
26
|
+
for _, row in df.iterrows():
|
|
27
|
+
out.append(OIHistoryPoint(
|
|
28
|
+
timestamp=int(row.get("timestamp", 0)),
|
|
29
|
+
oi_value=float(row.get("oi_value", row.get("sumOpenInterestValue", 0))),
|
|
30
|
+
oi_base=float(row.get("oi_base", row.get("sumOpenInterest", 0))),
|
|
31
|
+
))
|
|
32
|
+
return out
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def oi_delta_pct(history):
|
|
36
|
+
"""Compute percentage change between oldest and newest OI points.
|
|
37
|
+
|
|
38
|
+
Sourced verbatim from atomic_strategy_lib.data.open_interest.oi_delta_pct.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
history : list[OIHistoryPoint]
|
|
43
|
+
OI history points ordered oldest → newest.
|
|
44
|
+
|
|
45
|
+
Returns
|
|
46
|
+
-------
|
|
47
|
+
Optional[float]
|
|
48
|
+
Percentage change, or None if fewer than 2 points or oldest is zero.
|
|
49
|
+
"""
|
|
50
|
+
if len(history) < 2:
|
|
51
|
+
return None
|
|
52
|
+
oldest = history[0].oi_value
|
|
53
|
+
newest = history[-1].oi_value
|
|
54
|
+
if oldest == 0:
|
|
55
|
+
return None
|
|
56
|
+
return ((newest - oldest) / oldest) * 100
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""shim — atomic.data.orderbook"""
|
|
2
|
+
from cyqnt_trd.data_cli import fetch_orderbook_depth, orderbook_imbalance # noqa: F401
|
|
3
|
+
from cyqnt_trd.compat.types import OrderBook, OrderBookLevel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def orderbook_fetch(symbol, market="futures", limit=20, profile=None,
|
|
7
|
+
binary="binance-cli"):
|
|
8
|
+
"""atomic-style — returns OrderBook dataclass."""
|
|
9
|
+
df = fetch_orderbook_depth(symbol, market=market, limit=limit)
|
|
10
|
+
if df is None or df.empty:
|
|
11
|
+
return OrderBook(symbol=symbol, bids=[], asks=[])
|
|
12
|
+
bids, asks = [], []
|
|
13
|
+
for _, row in df.iterrows():
|
|
14
|
+
if row.get("side") == "bid":
|
|
15
|
+
bids.append(OrderBookLevel(price=float(row["price"]), quantity=float(row["quantity"])))
|
|
16
|
+
elif row.get("side") == "ask":
|
|
17
|
+
asks.append(OrderBookLevel(price=float(row["price"]), quantity=float(row["quantity"])))
|
|
18
|
+
return OrderBook(symbol=symbol, bids=bids, asks=asks)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""shim — atomic.data.pro (re-export AI signal helpers)"""
|
|
2
|
+
from cyqnt_trd.data_cli import ( # noqa: F401
|
|
3
|
+
pro_indicators_fetch, pro_trade_signal_query, pro_trade_signal_rank,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def pro_arb_scan(*args, **kwargs):
|
|
8
|
+
"""Stub — atomic-only arb scanner."""
|
|
9
|
+
return []
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""shim — atomic.data.search (NOT PORTED — stubs)."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def hotrank_fetch(*args, **kwargs):
|
|
5
|
+
return []
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def trending_fetch(*args, **kwargs):
|
|
9
|
+
return []
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def __getattr__(name):
|
|
13
|
+
if name.startswith("_"):
|
|
14
|
+
raise AttributeError(name)
|
|
15
|
+
return lambda *a, **k: []
|