akquant 0.2.34__tar.gz → 0.2.35__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.
- {akquant-0.2.34 → akquant-0.2.35}/Cargo.lock +1 -1
- {akquant-0.2.34 → akquant-0.2.35}/Cargo.toml +1 -1
- {akquant-0.2.34 → akquant-0.2.35}/PKG-INFO +1 -1
- {akquant-0.2.34 → akquant-0.2.35}/pyproject.toml +1 -1
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy.py +6 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_events.py +7 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/engine/core.rs +49 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/engine/python.rs +2 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_multisymbol_cross_section_consistency.py +75 -0
- {akquant-0.2.34 → akquant-0.2.35}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.github/workflows/deploy-docs.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.github/workflows/docs-quality.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.github/workflows/release.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.gitignore +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/.pre-commit-config.yaml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/CHANGELOG.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/CODE_OF_CONDUCT.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/CONTRIBUTING.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/LICENSE +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/README.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/assets/dashboard_preview.png +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/assets/logo.svg +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/assets/social_preview.png +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/CNAME +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/assets/akquant-icon.svg +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/assets/akquant-logo.svg +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/assets/reports/akquant_report.html +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/analyzer_plugin_spec.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/broker_capability_matrix.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/custom_broker_production_checklist.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/custom_broker_registry.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/data_feed_adapter_spec.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/live_functional_quickstart.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/llm.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/ml.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/multi_strategy_guide.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/multi_timeframe_feed_api.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/runtime_config.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/strategy_style_decision.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/timezone.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/advanced/warm_start.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/analysis.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/cross_section_checklist.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/custom_indicator.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/data.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/examples.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/factor.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/indicator_scenario_quickref.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/optimization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/python_basics.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/quant_basics.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/rust_indicator_reference.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/strategy.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/talib_indicator_playbook.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/testing.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/guide/visualization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/index.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/meta/architecture.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/meta/internals.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/reference/api.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/start/first_strategy.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/start/installation.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/start/quickstart.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/start/setup_guide.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/01_foundations.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/02_programming.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/03_data.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/04_backtest_engine.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/05_strategy.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/06_stock_a.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/07_futures.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/08_options.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/09_funds.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/10_analysis.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/11_optimization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/12_ml.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/13_visualization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/14_factor.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/15_live_trading.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/16_rust_indicators.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/en/textbook/index.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/javascripts/mathjax.js +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/javascripts/search-lang-filter.js +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/robots.txt +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/analyzer_plugin_spec.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/broker_capability_matrix.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/custom_broker_production_checklist.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/custom_broker_registry.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/data_feed_adapter_spec.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/live_functional_quickstart.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/llm.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/ml.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/multi_strategy_guide.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/multi_timeframe_feed_api.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/runtime_config.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/strategy_style_decision.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/timezone.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/advanced/warm_start.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/analysis.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/cross_section_checklist.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/custom_indicator.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/data.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/examples.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/factor.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/indicator_scenario_quickref.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/optimization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/python_basics.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/quant_basics.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/rust_indicator_reference.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/strategy.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/talib_indicator_playbook.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/testing.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/guide/visualization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/index.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/meta/architecture.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/meta/internals.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/reference/api.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/start/first_strategy.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/start/installation.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/start/quickstart.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/start/setup_guide.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/01_foundations.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/02_programming.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/03_data.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/04_backtest_engine.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/05_strategy.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/06_stock_a.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/07_futures.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/08_options.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/09_funds.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/10_analysis.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/11_optimization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/12_ml.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/13_visualization.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/14_factor.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/15_live_trading.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/16_rust_indicators.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/docs/zh/textbook/index.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/01_quickstart.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/02_parameter_optimization.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/03_parameter_optimization_advanced.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/04_mixed_assets.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/05_live_trading_ctp.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/06_complex_orders.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/07_option_test.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/08_event_callbacks.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/09_ml_framework.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/10_ml_walk_forward.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/11_plot_visualization.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/12_wfo_integrated.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/13_quantstats_report.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/14_multi_frequency.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/15_plot_intraday.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/16_adj_returns_signal.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/17_readme_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/18_benchmark_multisymbol.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/19_factor_expression.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/20_risk_management_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/21_warm_start_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/22_strategy_runtime_config_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/23_functional_callbacks_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/24_functional_tick_simulation_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/25_streaming_backtest_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/26_streaming_quickstart.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/27_streaming_monitoring_console.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/28_streaming_alerts_and_persist.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/29_streaming_event_report.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/30_streaming_report_oneclick.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/31_streaming_live_console.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/32_streaming_live_web.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/33_report_and_analysis_outputs.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/34_multi_strategy_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/35_custom_broker_registry_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/36_trailing_orders.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/37_feed_replay_alignment_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/38_live_functional_strategy_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/39_live_broker_submit_order_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/40_functional_multi_slot_risk_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/41_live_multi_slot_orchestration_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/42_live_broker_event_audit_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/43_target_weights_rebalance.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/44_strategy_source_loader_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/45_talib_indicator_playbook_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/46_broker_profile_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/47_margin_liquidation_audit_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/48_margin_liquidation_priority_compare.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/49_on_expiry_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/50_framework_hooks_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/51_class_tick_callbacks_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/52_pre_open_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/53_timer_to_pre_open_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/54_functional_pre_open_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/55_functional_ml_walk_forward.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/56_functional_warm_start_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/57_functional_multi_slot_warm_start_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/58_incremental_bootstrap_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/59_akshare_etf_rotation.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/60_custom_indicator_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/61_indicator_visualization_export_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/62_indicator_streaming_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/63_indicator_ws_bridge_demo.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/64_indicator_live_web.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/README.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/benchmark_utils.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/pb_mock.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/01_stock_dual_moving_average.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/02_stock_grid_trading.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/03_stock_atr_breakout.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/04_stock_momentum_rotation.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/05_stock_momentum_rotation_timer.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/06_stock_momentum_rotation_bucket.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/07_stock_momentum_rotation_on_timer.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/08_target_positions_long_short.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/strategies/README.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch01_quickstart.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch02_programming.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch03_data.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch04_comparison.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch05_strategy.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch06_stock_a.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch07_futures.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch08_options.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch09_funds.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch09_portfolio.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch10_analysis.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch11_optimization.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch12_ml.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch13_visualization.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch14_factor.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch15_live_trading.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/examples/textbook/ch15_strategy_loader.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/mkdocs.yml +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/akquant.pyi +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/analyzer_plugin.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/backtest/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/backtest/__init__.pyi +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/backtest/engine.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/backtest/result.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/checkpoint.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/config.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/data.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/factor/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/factor/engine.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/factor/ops.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/factor/parser.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/feed_adapter.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/fund/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/futures/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/base.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/ctp_adapter.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/ctp_native.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/factory.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/mapper.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/miniqmt.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/models.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/ptrade.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/gateway/registry.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/indicator.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/indicator_recording.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/indicator_stream.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/live.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/log.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/ml/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/ml/model.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/optimize.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/option/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/params.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/params_adapter.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/analysis.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/dashboard.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/indicator.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/report.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/strategy.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/plot/utils.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/py.typed +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/risk.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/sizer.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/stock/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_framework_hooks.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_history.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_loader.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_logging.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_ml.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_order_events.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_position.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_scheduler.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_time.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/strategy_trading_api.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/talib/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/talib/backend.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/talib/core.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/talib/funcs.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/utils/__init__.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/python/akquant/utils/inspector.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/requirements-dev.txt +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/scripts/cargo-test.sh +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/scripts/check_docs_api_examples.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/scripts/check_docs_links.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/scripts/dev-check.sh +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/scripts/find_legacy_execution_policy_calls.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/scripts/golden_baseline_report.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/account.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/analysis/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/analysis/python.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/analysis/result.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/analysis/tests.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/analysis/tracker.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/analysis/types.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/bin/stub_gen.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/clock.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/context.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/data/aggregator.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/data/batch.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/data/client.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/data/feed.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/data/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/engine/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/engine/state.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/error.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/event.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/event_manager.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/common.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/crypto.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/forex.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/futures.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/matcher.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/option.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/python.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/realtime.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/simulated.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/slippage.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/execution/stock.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/history.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/momentum.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/momentum_oscillators.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/momentum_rates.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/moving_average.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/moving_average_compound.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/moving_average_core.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/moving_average_transforms.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/moving_average_windowed.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/trend.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/trend_directional.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/trend_oscillators.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/trend_regression.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/volatility.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/volatility_price.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/volatility_stats.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators/volume.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/indicators.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/lib.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/margin/calculator.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/margin/engine.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/margin/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/china.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/core.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/corporate_action.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/fund.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/futures.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/manager.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/option.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/simple.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/market/stock.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/corporate_action.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/instrument.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/market_data.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/order.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/timer.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/model/types.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/order_manager.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/pipeline/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/pipeline/processor.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/pipeline/runner.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/pipeline/stages.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/portfolio.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/common.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/config.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/futures.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/manager.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/option.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/portfolio.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/rule.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/risk/stock.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/settlement/expiry.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/settlement/handler.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/settlement/manager.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/settlement/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/settlement/option.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/src/statistics/mod.rs +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/BASELINE_REPORT.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/LEGACY_EXECUTION_CALLS.md +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/futures_margin/equity_curve.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/futures_margin/metrics.json +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/futures_margin/orders.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/option_basic/equity_curve.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/option_basic/metrics.json +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/option_basic/orders.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/stock_t1/equity_curve.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/stock_t1/metrics.json +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/stock_t1/orders.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/baselines/stock_t1/trades.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/futures_margin/equity_curve.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/futures_margin/metrics.json +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/futures_margin/orders.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/option_basic/equity_curve.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/option_basic/metrics.json +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/option_basic/orders.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/stock_t1/equity_curve.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/stock_t1/metrics.json +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/stock_t1/orders.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/current/stock_t1/trades.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/data/future_margin.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/data/future_margin.parquet.sha256 +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/data/option_basic.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/data/option_basic.parquet.sha256 +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/data/stock_t1.parquet +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/data/stock_t1.parquet.sha256 +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/gen_data.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/runner.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/strategies/futures_margin.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/strategies/option_basic.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/strategies/stock_t1.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/golden/test_golden.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_account_risk_rules.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_custom_matcher.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_docs_api_examples.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_docs_links.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_engine.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_examples_regression.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_factor_engine.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_factor_ops.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_feed_adapter.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_gateway_callbacks.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_gateway_ctp_adapter.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_gateway_ctp_native.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_gateway_factory.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_gateway_mapper.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_gateway_registry.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_indicator_live_web_example.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_indicator_recording.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_inspector.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_live_runner_broker_bridge.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_orders_df.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_params_adapter.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_partial_filled_status.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_portfolio.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_quickstart_stream_consistency.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_report_helpers.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_report_plot_extensions.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_result_analysis_extensions.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_stop_orders.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_strategy_extras.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_strategy_timers_indicators.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_t_plus_one.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_talib_backend.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_talib_compat.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_trades_df.py +0 -0
- {akquant-0.2.34 → akquant-0.2.35}/tests/test_version.py +0 -0
|
@@ -28,6 +28,9 @@ from .akquant import (
|
|
|
28
28
|
)
|
|
29
29
|
from .indicator_recording import IndicatorRecorder
|
|
30
30
|
from .sizer import FixedSize, Sizer
|
|
31
|
+
from .strategy_events import (
|
|
32
|
+
flush_pending_order_events as _flush_pending_order_events_impl,
|
|
33
|
+
)
|
|
31
34
|
from .strategy_events import (
|
|
32
35
|
on_bar_event as _on_bar_event_impl,
|
|
33
36
|
)
|
|
@@ -1462,6 +1465,9 @@ class Strategy:
|
|
|
1462
1465
|
def _on_timer_event(self, payload: str, ctx: StrategyContext) -> None:
|
|
1463
1466
|
_on_timer_event_impl(self, payload, ctx)
|
|
1464
1467
|
|
|
1468
|
+
def _flush_pending_order_events(self, ctx: StrategyContext) -> None:
|
|
1469
|
+
_flush_pending_order_events_impl(self, ctx)
|
|
1470
|
+
|
|
1465
1471
|
def on_bar(self, bar: Bar) -> None:
|
|
1466
1472
|
"""
|
|
1467
1473
|
策略逻辑入口 (Bar 数据).
|
|
@@ -205,3 +205,10 @@ def on_timer_event(strategy: Any, payload: str, ctx: StrategyContext) -> None:
|
|
|
205
205
|
|
|
206
206
|
call_user_callback(strategy, "on_timer", payload, payload=payload)
|
|
207
207
|
_flush_indicator_snapshots(strategy)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def flush_pending_order_events(strategy: Any, ctx: StrategyContext) -> None:
|
|
211
|
+
"""Flush pending order/trade callbacks without invoking a user market callback."""
|
|
212
|
+
ensure_framework_state(strategy)
|
|
213
|
+
strategy.ctx = ctx
|
|
214
|
+
strategy._check_order_events()
|
|
@@ -1211,6 +1211,55 @@ impl Engine {
|
|
|
1211
1211
|
}
|
|
1212
1212
|
}
|
|
1213
1213
|
|
|
1214
|
+
pub(crate) fn flush_terminal_pending_order_events(
|
|
1215
|
+
&mut self,
|
|
1216
|
+
py: Python<'_>,
|
|
1217
|
+
strategy: &Bound<'_, PyAny>,
|
|
1218
|
+
) -> PyResult<()> {
|
|
1219
|
+
if self.state.order_manager.current_step_trades.is_empty()
|
|
1220
|
+
&& self.state.order_manager.current_step_rejected_orders.is_empty()
|
|
1221
|
+
{
|
|
1222
|
+
return Ok(());
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
self.ensure_strategy_slot_exists();
|
|
1226
|
+
self.ensure_strategy_context_capacity();
|
|
1227
|
+
let slot_count = self.strategy_slots.len();
|
|
1228
|
+
let active_orders = Arc::new(self.state.order_manager.active_orders.clone());
|
|
1229
|
+
let step_trades = self.state.order_manager.current_step_trades.clone();
|
|
1230
|
+
let step_rejected_orders = self.state.order_manager.current_step_rejected_orders.clone();
|
|
1231
|
+
let previous_cash = self.state.portfolio.cash;
|
|
1232
|
+
let previous_account_metrics = self.current_account_metrics();
|
|
1233
|
+
|
|
1234
|
+
for slot_index in 0..slot_count {
|
|
1235
|
+
self.active_strategy_slot = slot_index;
|
|
1236
|
+
let py_ctx = self.get_or_create_strategy_context(
|
|
1237
|
+
slot_index,
|
|
1238
|
+
active_orders.clone(),
|
|
1239
|
+
step_trades.clone(),
|
|
1240
|
+
step_rejected_orders.clone(),
|
|
1241
|
+
previous_cash,
|
|
1242
|
+
previous_account_metrics,
|
|
1243
|
+
)?;
|
|
1244
|
+
let slot_strategy = self
|
|
1245
|
+
.strategy_slot_strategies
|
|
1246
|
+
.get(slot_index)
|
|
1247
|
+
.and_then(|slot| slot.as_ref())
|
|
1248
|
+
.map(|slot| slot.clone_ref(py));
|
|
1249
|
+
if let Some(ref slot_py) = slot_strategy {
|
|
1250
|
+
slot_py
|
|
1251
|
+
.bind(py)
|
|
1252
|
+
.call_method1("_flush_pending_order_events", (py_ctx.clone_ref(py),))?;
|
|
1253
|
+
} else {
|
|
1254
|
+
strategy.call_method1("_flush_pending_order_events", (py_ctx,))?;
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
self.state.order_manager.current_step_trades.clear();
|
|
1259
|
+
self.state.order_manager.current_step_rejected_orders.clear();
|
|
1260
|
+
Ok(())
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1214
1263
|
pub(crate) fn build_pipeline(&self) -> PipelineRunner {
|
|
1215
1264
|
let mut pipeline = PipelineRunner::new();
|
|
1216
1265
|
// 1. Process events from previous iteration (or init)
|
|
@@ -548,6 +548,46 @@ class SellThenBuySameCycleStrategy(Strategy):
|
|
|
548
548
|
self.step += 1
|
|
549
549
|
|
|
550
550
|
|
|
551
|
+
class DailyRebalanceSellThenBuySameCycleStrategy(Strategy):
|
|
552
|
+
"""Validate day-rebalance callbacks also observe terminal same-cycle fills."""
|
|
553
|
+
|
|
554
|
+
def __init__(self) -> None:
|
|
555
|
+
"""Initialize staged rebalance state and callback logs."""
|
|
556
|
+
super().__init__()
|
|
557
|
+
self.step = 0
|
|
558
|
+
self.order_events: list[tuple[str, str, str]] = []
|
|
559
|
+
self.trade_events: list[tuple[str, str]] = []
|
|
560
|
+
|
|
561
|
+
def on_daily_rebalance(self, trading_date: object, timestamp: int) -> None:
|
|
562
|
+
"""Rotate from AAA to BBB during the framework rebalance hook."""
|
|
563
|
+
_ = (trading_date, timestamp)
|
|
564
|
+
if self.step == 1:
|
|
565
|
+
self.order_target_percent(symbol="AAA", target_percent=0.95)
|
|
566
|
+
elif self.step == 2:
|
|
567
|
+
self.order_target_percent(symbol="AAA", target_percent=0.0)
|
|
568
|
+
self.order_target_percent(symbol="BBB", target_percent=0.95)
|
|
569
|
+
self.step += 1
|
|
570
|
+
|
|
571
|
+
def on_order(self, order: Any) -> None:
|
|
572
|
+
"""Record observable order callbacks."""
|
|
573
|
+
self.order_events.append(
|
|
574
|
+
(
|
|
575
|
+
str(order.symbol),
|
|
576
|
+
str(order.side).split(".")[-1].lower(),
|
|
577
|
+
str(order.status).split(".")[-1].lower(),
|
|
578
|
+
)
|
|
579
|
+
)
|
|
580
|
+
|
|
581
|
+
def on_trade(self, trade: Any) -> None:
|
|
582
|
+
"""Record observable trade callbacks."""
|
|
583
|
+
self.trade_events.append(
|
|
584
|
+
(
|
|
585
|
+
str(trade.symbol),
|
|
586
|
+
str(trade.side).split(".")[-1].lower(),
|
|
587
|
+
)
|
|
588
|
+
)
|
|
589
|
+
|
|
590
|
+
|
|
551
591
|
class TargetPositionsLongShortRotationStrategy(Strategy):
|
|
552
592
|
"""Exercise multi-symbol signed target positions through one advanced API call."""
|
|
553
593
|
|
|
@@ -615,3 +655,38 @@ def test_same_cycle_sell_then_buy_uses_post_sell_cash_for_sizing() -> None:
|
|
|
615
655
|
final_positions = result.positions.iloc[-1]
|
|
616
656
|
assert float(final_positions.get("AAA", 0.0)) == 0.0
|
|
617
657
|
assert float(final_positions.get("BBB", 0.0)) >= 499.0
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
def test_daily_rebalance_same_cycle_terminal_fill_emits_callbacks() -> None:
|
|
661
|
+
"""Last-timestamp same-cycle fills should still reach order/trade callbacks."""
|
|
662
|
+
timestamps = [
|
|
663
|
+
pd.Timestamp("2023-01-02 10:00:00", tz="Asia/Shanghai"),
|
|
664
|
+
pd.Timestamp("2023-01-03 10:00:00", tz="Asia/Shanghai"),
|
|
665
|
+
pd.Timestamp("2023-01-04 10:00:00", tz="Asia/Shanghai"),
|
|
666
|
+
]
|
|
667
|
+
data_map = {
|
|
668
|
+
"AAA": _build_symbol_df("AAA", timestamps, [10.0, 10.0, 10.0]),
|
|
669
|
+
"BBB": _build_symbol_df("BBB", timestamps, [10.0, 10.0, 10.0]),
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
strategy = DailyRebalanceSellThenBuySameCycleStrategy()
|
|
673
|
+
result = run_backtest(
|
|
674
|
+
data=data_map,
|
|
675
|
+
strategy=strategy,
|
|
676
|
+
symbols=["AAA", "BBB"],
|
|
677
|
+
initial_cash=100000.0,
|
|
678
|
+
commission_rate=0.0,
|
|
679
|
+
stamp_tax_rate=0.0,
|
|
680
|
+
transfer_fee_rate=0.0,
|
|
681
|
+
min_commission=0.0,
|
|
682
|
+
lot_size=1,
|
|
683
|
+
fill_policy={"price_basis": "close", "temporal": "same_cycle"},
|
|
684
|
+
show_progress=False,
|
|
685
|
+
)
|
|
686
|
+
|
|
687
|
+
orders_df = result.orders_df.sort_values("created_at").reset_index(drop=True)
|
|
688
|
+
bbb_buys = orders_df[(orders_df["symbol"] == "BBB") & (orders_df["side"] == "buy")]
|
|
689
|
+
assert not bbb_buys.empty
|
|
690
|
+
assert set(bbb_buys["status"].astype(str).str.lower()) == {"filled"}
|
|
691
|
+
assert ("BBB", "buy", "filled") in strategy.order_events
|
|
692
|
+
assert ("BBB", "buy") in strategy.trade_events
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|