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.
Files changed (403) hide show
  1. {cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info → cyqnt_trd-0.1.9.dev4}/PKG-INFO +2 -1
  2. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/__init__.py +22 -0
  3. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/__init__.py +0 -0
  4. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/cli.py +25 -0
  5. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/config.py +4 -0
  6. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/run_output.py +125 -0
  7. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/template_hint.py +47 -0
  8. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/core/types.py +8 -0
  9. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/__init__.py +0 -0
  10. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/account.py +52 -0
  11. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/derivatives.py +52 -0
  12. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/funding.py +37 -0
  13. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/http_client.py +12 -0
  14. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/kline.py +44 -0
  15. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/market_bundle.py +28 -0
  16. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/market_cache.py +47 -0
  17. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/open_interest.py +56 -0
  18. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/orderbook.py +18 -0
  19. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/pro.py +9 -0
  20. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/scanner.py +2 -0
  21. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/search.py +15 -0
  22. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/ticker.py +43 -0
  23. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/tradfi.py +7 -0
  24. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/web3.py +29 -0
  25. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/web3_rest.py +8 -0
  26. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/data/workflow.py +24 -0
  27. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/decision/__init__.py +0 -0
  28. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/decision/direction.py +5 -0
  29. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/decision/sizing.py +10 -0
  30. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/execution/__init__.py +0 -0
  31. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/execution/orders.py +76 -0
  32. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/execution/position.py +10 -0
  33. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/__init__.py +0 -0
  34. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/pnl.py +5 -0
  35. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/signals.py +6 -0
  36. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/monitoring/stops.py +5 -0
  37. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/__init__.py +0 -0
  38. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/pipeline.py +7 -0
  39. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/scheduler.py +6 -0
  40. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/orchestration/state.py +11 -0
  41. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/__init__.py +0 -0
  42. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/graduated_tp.py +146 -0
  43. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/limits.py +10 -0
  44. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/risk/stop_loss.py +7 -0
  45. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/scoring/__init__.py +0 -0
  46. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/scoring/combinators.py +8 -0
  47. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/scoring/gates.py +11 -0
  48. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/__init__.py +0 -0
  49. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/derivatives.py +6 -0
  50. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/momentum.py +26 -0
  51. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/structure.py +10 -0
  52. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/trend.py +19 -0
  53. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/volatility.py +9 -0
  54. cyqnt_trd-0.1.9.dev4/atomic_compat/atomic_strategy_lib/signals/volume.py +10 -0
  55. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/__init__.py +8 -1
  56. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/BLOCKS_API.md +835 -0
  57. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/__init__.py +151 -0
  58. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/_utils.py +159 -0
  59. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/conditions.py +563 -0
  60. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/data.py +454 -0
  61. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/decision.py +230 -0
  62. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/derivatives.py +273 -0
  63. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/entry.py +158 -0
  64. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/execution.py +197 -0
  65. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/exit.py +488 -0
  66. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/indicators.py +867 -0
  67. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/limits.py +178 -0
  68. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/microstructure.py +94 -0
  69. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/patterns.py +395 -0
  70. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/regime.py +118 -0
  71. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/risk.py +314 -0
  72. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/scoring.py +394 -0
  73. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/sizing.py +523 -0
  74. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/stop_loss.py +111 -0
  75. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/strategy.py +395 -0
  76. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/universe.py +201 -0
  77. cyqnt_trd-0.1.9.dev4/cyqnt_trd/blocks/verdicts.py +473 -0
  78. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/README.md +194 -0
  79. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/__init__.py +116 -0
  80. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/adapters.py +308 -0
  81. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/__init__.py +92 -0
  82. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/computes.py +681 -0
  83. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/derivatives_detectors.py +177 -0
  84. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/structure.py +249 -0
  85. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/atomic_signals/volume_detectors.py +95 -0
  86. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/config.py +246 -0
  87. cyqnt_trd-0.1.9.dev4/cyqnt_trd/compat/types.py +401 -0
  88. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/__init__.py +75 -0
  89. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/_cache.py +94 -0
  90. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/_subprocess.py +119 -0
  91. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/account.py +224 -0
  92. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/funding.py +152 -0
  93. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/kline.py +236 -0
  94. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/oi.py +171 -0
  95. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/orderbook.py +154 -0
  96. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/pro.py +178 -0
  97. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/ratios.py +261 -0
  98. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/scanner.py +228 -0
  99. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/ticker.py +278 -0
  100. cyqnt_trd-0.1.9.dev4/cyqnt_trd/data_cli/workflow.py +227 -0
  101. cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/README.md +96 -0
  102. cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/__init__.py +59 -0
  103. cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/_subprocess.py +204 -0
  104. cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/filters.py +173 -0
  105. cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/orders.py +344 -0
  106. cyqnt_trd-0.1.9.dev4/cyqnt_trd/exec_cli/position.py +118 -0
  107. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/__init__.py +4 -0
  108. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/__init__.py +20 -0
  109. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/data/cme.py +732 -0
  110. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/data/derivatives.py +363 -0
  111. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/historical.py +56 -5
  112. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/data/liquidations.py +329 -0
  113. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/cme_hf_ingest.py +87 -0
  114. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/cme_ingest.py +41 -0
  115. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/cme_yfinance_ingest.py +68 -0
  116. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/common.py +88 -1
  117. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_backtest.py +49 -17
  118. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_paper.py +8 -15
  119. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/entrypoints/mvp_paper_daemon.py +752 -0
  120. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_runtime_consistency.py +8 -15
  121. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/__init__.py +44 -0
  122. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/pnl.py +148 -0
  123. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/signals.py +263 -0
  124. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/monitoring/stops.py +153 -0
  125. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/__init__.py +63 -0
  126. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/pipeline.py +257 -0
  127. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/scheduler.py +207 -0
  128. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/orchestration/state.py +272 -0
  129. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/__init__.py +8 -0
  130. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/numba_kernels.py +195 -0
  131. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/plugins.py +468 -0
  132. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/simulation/__init__.py +25 -0
  133. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/simulation/live_paper_session.py +709 -0
  134. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/numba_runner.py +413 -31
  135. cyqnt_trd-0.1.9.dev4/cyqnt_trd/standard_bot/simulation/python_live_paper_session.py +737 -0
  136. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/LANA_IMPLEMENTATION_PLAN.md +301 -0
  137. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/ada_usdt_multi_tf.py +128 -0
  138. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/channel_breakout.py +60 -0
  139. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/consecutive_opposite_days.py +62 -0
  140. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/ema_rsi_10pt.py +236 -0
  141. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/hermes_v12_1h_trend.py +75 -0
  142. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/lana_cron_takeprofit.py +240 -0
  143. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/lana_style_momentum.py +118 -0
  144. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/profitable_3indicators.py +120 -0
  145. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/sol_eth_qualification.py +349 -0
  146. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategies/turtle_breakout_v3.py +51 -0
  147. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/README.md +24 -0
  148. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/SUPPORT_MATRIX.md +101 -0
  149. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/__init__.py +68 -0
  150. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/bb-squeeze-momentum/README.md +14 -0
  151. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/bb-squeeze-momentum/case.json +46 -0
  152. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/bb-squeeze-momentum/preset.json +24 -0
  153. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/btc-multi-factor-trend/README.md +17 -0
  154. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/btc-multi-factor-trend/case.json +52 -0
  155. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/btc-multi-factor-trend/preset.json +24 -0
  156. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/quadruple-filter-breakout/README.md +12 -0
  157. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/quadruple-filter-breakout/case.json +44 -0
  158. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/quadruple-filter-breakout/preset.json +21 -0
  159. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/rsi-mean-reversion/README.md +17 -0
  160. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/rsi-mean-reversion/case.json +37 -0
  161. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/rsi-mean-reversion/preset.json +16 -0
  162. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/structure-breakout-priceaction/README.md +11 -0
  163. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/structure-breakout-priceaction/case.json +41 -0
  164. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/cases/structure-breakout-priceaction/preset.json +15 -0
  165. cyqnt_trd-0.1.9.dev4/cyqnt_trd/strategy_cases/catalog.json +36 -0
  166. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4/cyqnt_trd.egg-info}/PKG-INFO +2 -1
  167. cyqnt_trd-0.1.9.dev4/cyqnt_trd.egg-info/SOURCES.txt +637 -0
  168. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd.egg-info/requires.txt +1 -0
  169. cyqnt_trd-0.1.9.dev4/cyqnt_trd.egg-info/top_level.txt +2 -0
  170. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/pyproject.toml +12 -3
  171. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/requirements.txt +1 -0
  172. cyqnt_trd-0.1.9.dev4/tests/test_strategy_cases.py +33 -0
  173. cyqnt_trd-0.1.9.dev2/cyqnt_trd/standard_bot/simulation/__init__.py +0 -16
  174. cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info/SOURCES.txt +0 -246
  175. cyqnt_trd-0.1.9.dev2/cyqnt_trd.egg-info/top_level.txt +0 -7
  176. cyqnt_trd-0.1.9.dev2/docs/backtests/btc_ma_cross_1h_500.json +0 -3388
  177. cyqnt_trd-0.1.9.dev2/docs/backtests/btc_ma_cross_numba_1h_120.json +0 -2808
  178. cyqnt_trd-0.1.9.dev2/docs/backtests/btc_mtf_ma_cross_5m_1h_20_20_90d.json +0 -166933
  179. cyqnt_trd-0.1.9.dev2/docs/backtests/btc_mtf_ma_cross_5m_1h_20_20_90d_summary.md +0 -41
  180. cyqnt_trd-0.1.9.dev2/docs/backtests/btc_mtf_ma_spread_5m_1h_20_20_600.json +0 -4109
  181. cyqnt_trd-0.1.9.dev2/docs/backtests/btc_price_ma_1h_500.json +0 -4399
  182. cyqnt_trd-0.1.9.dev2/docs/backtests/eth_ma_cross_1h_500.json +0 -3322
  183. cyqnt_trd-0.1.9.dev2/docs/backtests/eth_price_ma_1h_500.json +0 -4399
  184. cyqnt_trd-0.1.9.dev2/docs/backtests/llm_strategy_evolution_2026-04-13.json +0 -1059
  185. cyqnt_trd-0.1.9.dev2/docs/backtests/llm_strategy_evolution_2026-04-13.md +0 -86
  186. cyqnt_trd-0.1.9.dev2/docs/backtests/ma_backtest_suite_2026-04-09.md +0 -62
  187. cyqnt_trd-0.1.9.dev2/docs/backtests/sol_ma_cross_1h_500.json +0 -3322
  188. cyqnt_trd-0.1.9.dev2/docs/backtests/sol_price_ma_1h_500.json +0 -4378
  189. cyqnt_trd-0.1.9.dev2/docs/signal_specs/multi_timeframe_ma_spread_CN.md +0 -72
  190. cyqnt_trd-0.1.9.dev2/docs/standard_bot_migration.md +0 -108
  191. cyqnt_trd-0.1.9.dev2/docs/standard_bot_mvp.md +0 -263
  192. cyqnt_trd-0.1.9.dev2/docs/standard_bot_progress_2026-04-09.md +0 -245
  193. cyqnt_trd-0.1.9.dev2/docs/standard_bot_progress_2026-04-09_CN.md +0 -247
  194. cyqnt_trd-0.1.9.dev2/references/backtest-workflow.md +0 -65
  195. cyqnt_trd-0.1.9.dev2/references/natural-language-to-strategy.md +0 -63
  196. cyqnt_trd-0.1.9.dev2/references/repo-bootstrap.md +0 -75
  197. cyqnt_trd-0.1.9.dev2/references/risk-controls.md +0 -79
  198. cyqnt_trd-0.1.9.dev2/references/strategy-routing.md +0 -34
  199. cyqnt_trd-0.1.9.dev2/references/trading-modes.md +0 -78
  200. cyqnt_trd-0.1.9.dev2/references/watcher-session.md +0 -117
  201. cyqnt_trd-0.1.9.dev2/scripts/llm_strategy_evolution.py +0 -1014
  202. cyqnt_trd-0.1.9.dev2/test/real_time_trade.py +0 -1203
  203. cyqnt_trd-0.1.9.dev2/test/track_k_line_continue.py +0 -372
  204. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_config_and_execution.py +0 -176
  205. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_historical_data.py +0 -424
  206. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_monitor_http.py +0 -251
  207. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_multi_timeframe_ma_signal.py +0 -160
  208. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_mvp_backtest.py +0 -104
  209. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_numba_backtest.py +0 -546
  210. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_paper_runtime.py +0 -262
  211. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_run_manager.py +0 -47
  212. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_runtime_consistency.py +0 -244
  213. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_signal_alignment.py +0 -190
  214. cyqnt_trd-0.1.9.dev2/tests/standard_bot/test_signal_plugins.py +0 -73
  215. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/LICENSE +0 -0
  216. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/MANIFEST.in +0 -0
  217. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/README.md +0 -0
  218. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/README.md +0 -0
  219. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/__init__.py +0 -0
  220. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/factor_test.py +0 -0
  221. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/framework.py +0 -0
  222. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/backtesting/strategy_backtest.py +0 -0
  223. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/diagnose_api.py +0 -0
  224. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/__init__.py +0 -0
  225. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_futures_data.py +0 -0
  226. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_kline_with_factor.py +0 -0
  227. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_trending_data.py +0 -0
  228. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/get_data/get_web3_trending_data.py +0 -0
  229. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/online_trading/__init__.py +0 -0
  230. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/online_trading/realtime_price_tracker.py +0 -0
  231. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/config.py +0 -0
  232. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/core/__init__.py +0 -0
  233. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/core/contracts.py +0 -0
  234. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/_ssl_utils.py +0 -0
  235. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/adapters.py +0 -0
  236. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/alignment.py +0 -0
  237. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/downloader.py +0 -0
  238. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/interfaces.py +0 -0
  239. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/data/snapshot.py +0 -0
  240. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/__init__.py +0 -0
  241. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_mainnet_execution.py +0 -0
  242. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_monitor_http.py +0 -0
  243. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_run_manager.py +0 -0
  244. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_execution.py +0 -0
  245. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_ma_demo.py +0 -0
  246. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/entrypoints/mvp_testnet_roundtrip.py +0 -0
  247. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/__init__.py +0 -0
  248. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/binance_futures_mainnet.py +0 -0
  249. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/binance_futures_testnet.py +0 -0
  250. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/idempotency.py +0 -0
  251. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/interfaces.py +0 -0
  252. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/paper.py +0 -0
  253. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/execution/rules.py +0 -0
  254. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/__init__.py +0 -0
  255. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/interfaces.py +0 -0
  256. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/run_manager.py +0 -0
  257. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/runtime/runner.py +0 -0
  258. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/encoders.py +0 -0
  259. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/interfaces.py +0 -0
  260. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/signal/registry.py +0 -0
  261. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/execution_kernels.py +0 -0
  262. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/interfaces.py +0 -0
  263. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/metrics_kernels.py +0 -0
  264. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/standard_bot/simulation/runner.py +0 -0
  265. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test.py +0 -0
  266. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/README.md +0 -0
  267. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/get_network_info.py +0 -0
  268. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/realtime_price_tracker.py +0 -0
  269. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/test_script/test_order.py +0 -0
  270. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/README.md +0 -0
  271. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/__init__.py +0 -0
  272. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/example_test_alpha.py +0 -0
  273. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/example_usage.py +0 -0
  274. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/__init__.py +0 -0
  275. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/adx_factor.py +0 -0
  276. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/ao_factor.py +0 -0
  277. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/bbp_factor.py +0 -0
  278. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/cci_factor.py +0 -0
  279. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/ema_factor.py +0 -0
  280. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/ma_factor.py +0 -0
  281. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/macd_factor.py +0 -0
  282. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/momentum_factor.py +0 -0
  283. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/rsi_factor.py +0 -0
  284. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/stochastic_factor.py +0 -0
  285. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/stochastic_tsi_factor.py +0 -0
  286. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/uo_factor.py +0 -0
  287. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor/williams_r_factor.py +0 -0
  288. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/factor_details.json +0 -0
  289. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/__init__.py +0 -0
  290. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha1.py +0 -0
  291. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha10.py +0 -0
  292. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha100.py +0 -0
  293. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha101.py +0 -0
  294. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha11.py +0 -0
  295. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha12.py +0 -0
  296. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha13.py +0 -0
  297. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha14.py +0 -0
  298. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha15.py +0 -0
  299. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha16.py +0 -0
  300. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha17.py +0 -0
  301. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha18.py +0 -0
  302. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha19.py +0 -0
  303. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha2.py +0 -0
  304. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha20.py +0 -0
  305. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha21.py +0 -0
  306. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha22.py +0 -0
  307. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha23.py +0 -0
  308. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha24.py +0 -0
  309. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha25.py +0 -0
  310. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha26.py +0 -0
  311. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha27.py +0 -0
  312. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha28.py +0 -0
  313. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha29.py +0 -0
  314. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha3.py +0 -0
  315. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha30.py +0 -0
  316. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha31.py +0 -0
  317. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha32.py +0 -0
  318. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha33.py +0 -0
  319. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha34.py +0 -0
  320. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha35.py +0 -0
  321. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha36.py +0 -0
  322. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha37.py +0 -0
  323. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha38.py +0 -0
  324. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha39.py +0 -0
  325. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha4.py +0 -0
  326. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha40.py +0 -0
  327. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha41.py +0 -0
  328. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha42.py +0 -0
  329. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha43.py +0 -0
  330. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha44.py +0 -0
  331. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha45.py +0 -0
  332. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha46.py +0 -0
  333. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha47.py +0 -0
  334. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha48.py +0 -0
  335. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha49.py +0 -0
  336. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha5.py +0 -0
  337. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha50.py +0 -0
  338. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha51.py +0 -0
  339. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha52.py +0 -0
  340. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha53.py +0 -0
  341. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha54.py +0 -0
  342. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha55.py +0 -0
  343. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha56.py +0 -0
  344. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha57.py +0 -0
  345. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha58.py +0 -0
  346. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha59.py +0 -0
  347. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha6.py +0 -0
  348. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha60.py +0 -0
  349. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha61.py +0 -0
  350. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha62.py +0 -0
  351. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha63.py +0 -0
  352. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha64.py +0 -0
  353. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha65.py +0 -0
  354. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha66.py +0 -0
  355. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha67.py +0 -0
  356. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha68.py +0 -0
  357. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha69.py +0 -0
  358. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha7.py +0 -0
  359. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha70.py +0 -0
  360. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha71.py +0 -0
  361. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha72.py +0 -0
  362. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha73.py +0 -0
  363. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha74.py +0 -0
  364. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha75.py +0 -0
  365. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha76.py +0 -0
  366. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha77.py +0 -0
  367. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha78.py +0 -0
  368. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha79.py +0 -0
  369. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha8.py +0 -0
  370. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha80.py +0 -0
  371. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha81.py +0 -0
  372. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha82.py +0 -0
  373. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha83.py +0 -0
  374. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha84.py +0 -0
  375. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha85.py +0 -0
  376. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha86.py +0 -0
  377. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha87.py +0 -0
  378. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha88.py +0 -0
  379. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha89.py +0 -0
  380. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha9.py +0 -0
  381. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha90.py +0 -0
  382. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha91.py +0 -0
  383. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha92.py +0 -0
  384. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha93.py +0 -0
  385. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha94.py +0 -0
  386. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha95.py +0 -0
  387. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha96.py +0 -0
  388. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha97.py +0 -0
  389. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha98.py +0 -0
  390. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha99.py +0 -0
  391. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/alpha_utils.py +0 -0
  392. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/create_all_alphas.py +0 -0
  393. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/generate_alphas.py +0 -0
  394. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/selected_alpha/test_alpha.py +0 -0
  395. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/signal/__init__.py +0 -0
  396. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/signal/factor_based_signal.py +0 -0
  397. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/trading_signal/signal/ma_signal.py +0 -0
  398. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/utils/__init__.py +0 -0
  399. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd/utils/set_user.py +0 -0
  400. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/cyqnt_trd.egg-info/dependency_links.txt +0 -0
  401. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/setup.cfg +0 -0
  402. {cyqnt_trd-0.1.9.dev2 → cyqnt_trd-0.1.9.dev4}/setup.py +0 -0
  403. {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.dev2
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"
@@ -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,4 @@
1
+ """shim — re-export cyqnt_trd.compat.config"""
2
+ from cyqnt_trd.compat.config import ( # noqa: F401
3
+ DEFAULT_CONFIG, load_config, merge_config, get_section, resolve_workspace_path,
4
+ )
@@ -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
+ )
@@ -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,2 @@
1
+ """shim — atomic.data.scanner (re-export full_market_scan etc.)"""
2
+ from cyqnt_trd.data_cli import full_market_scan, scan_with_filter # noqa: F401
@@ -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: []