monte-neo 0.15.1__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.
- monte_neo-0.15.1/.coveragerc +23 -0
- monte_neo-0.15.1/.dockerignore +31 -0
- monte_neo-0.15.1/.env.example +22 -0
- monte_neo-0.15.1/.github/dependabot.yml +17 -0
- monte_neo-0.15.1/.github/workflows/ci.yml +33 -0
- monte_neo-0.15.1/.gitignore +149 -0
- monte_neo-0.15.1/LICENSE +21 -0
- monte_neo-0.15.1/PKG-INFO +251 -0
- monte_neo-0.15.1/README.md +181 -0
- monte_neo-0.15.1/SECURITY.md +20 -0
- monte_neo-0.15.1/config.yaml +16 -0
- monte_neo-0.15.1/coverage_html/.gitignore +2 -0
- monte_neo-0.15.1/coverage_html/class_index.html +1661 -0
- monte_neo-0.15.1/coverage_html/coverage_html_cb_dd2e7eb5.js +735 -0
- monte_neo-0.15.1/coverage_html/function_index.html +5381 -0
- monte_neo-0.15.1/coverage_html/index.html +846 -0
- monte_neo-0.15.1/coverage_html/status.json +1 -0
- monte_neo-0.15.1/coverage_html/style_cb_9ff733b0.css +389 -0
- monte_neo-0.15.1/coverage_html/z_0ff8ecdeec75dd37_metal_engine_py.html +391 -0
- monte_neo-0.15.1/coverage_html/z_120c2080de519003_charts_py.html +250 -0
- monte_neo-0.15.1/coverage_html/z_120c2080de519003_metrics_py.html +226 -0
- monte_neo-0.15.1/coverage_html/z_120c2080de519003_trades_py.html +185 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_base_py.html +293 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_code_gen_py.html +176 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_custom_py.html +265 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_dynamic_py.html +306 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_evaluator_py.html +212 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_macd_py.html +186 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_metal_parser_py.html +191 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_numba_funcs_py.html +273 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_rsi_py.html +174 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_sma_py.html +192 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_technical_lib_py.html +183 -0
- monte_neo-0.15.1/coverage_html/z_2c8a38a5aba4312b_technical_py.html +126 -0
- monte_neo-0.15.1/coverage_html/z_46be5b825b6f355f_production_exporter_py.html +294 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_calculator_py.html +394 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_drawdown_py.html +291 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_numba_funcs_py.html +411 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_profit_factor_py.html +182 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_sharpe_py.html +266 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_types_py.html +113 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_utils_py.html +184 -0
- monte_neo-0.15.1/coverage_html/z_48046b19ba7c1450_winrate_py.html +302 -0
- monte_neo-0.15.1/coverage_html/z_5ad601d87a58dff4_downloader_py.html +351 -0
- monte_neo-0.15.1/coverage_html/z_5ad601d87a58dff4_sampler_py.html +373 -0
- monte_neo-0.15.1/coverage_html/z_5ad601d87a58dff4_storage_py.html +355 -0
- monte_neo-0.15.1/coverage_html/z_5ad601d87a58dff4_websocket_py.html +357 -0
- monte_neo-0.15.1/coverage_html/z_61156a7bfd9a4d71_engine_py.html +313 -0
- monte_neo-0.15.1/coverage_html/z_61156a7bfd9a4d71_float8_py.html +273 -0
- monte_neo-0.15.1/coverage_html/z_61156a7bfd9a4d71_indicators_py.html +241 -0
- monte_neo-0.15.1/coverage_html/z_61156a7bfd9a4d71_tensor_ops_py.html +212 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_config_py.html +160 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_evolution_ai_py.html +280 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_evolution_py.html +309 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_generator_py.html +269 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_generator_search_py.html +377 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_generator_utils_py.html +163 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_generator_worker_py.html +166 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_gpu_engine_py.html +100 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_gpu_lazy_py.html +277 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_gpu_scenarios_py.html +310 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_mlx_engine_py.html +416 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_optimizer_py.html +405 -0
- monte_neo-0.15.1/coverage_html/z_9e887609b9c7e728_validator_py.html +384 -0
- monte_neo-0.15.1/coverage_html/z_ad67c5d3cc28109e_app_py.html +304 -0
- monte_neo-0.15.1/coverage_html/z_ad67c5d3cc28109e_progress_py.html +243 -0
- monte_neo-0.15.1/coverage_html/z_ad67c5d3cc28109e_styles_py.html +228 -0
- monte_neo-0.15.1/coverage_html/z_b3f7225c6177de57__version_py.html +100 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_ast_utils_py.html +191 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_cache_py.html +184 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_config_py.html +244 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_console_py.html +102 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_logger_py.html +173 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_parallel_py.html +309 -0
- monte_neo-0.15.1/coverage_html/z_b7dc42965a3d1e29_visualization_py.html +218 -0
- monte_neo-0.15.1/coverage_html/z_ceb66e361d548389_manager_py.html +294 -0
- monte_neo-0.15.1/coverage_html/z_ceb66e361d548389_risk_py.html +145 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_cscv_py.html +163 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_engine_py.html +482 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_noise_py.html +353 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_scenarios_py.html +211 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_sensitivity_py.html +313 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_sequential_py.html +400 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_shuffler_py.html +324 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_types_py.html +166 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_utils_py.html +159 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_walk_forward_py.html +395 -0
- monte_neo-0.15.1/coverage_html/z_dec9456bbe122ee0_workers_py.html +302 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_custom_test_py.html +294 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_data_py.html +248 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_generator_py.html +219 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_hardware_py.html +278 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_leadership_py.html +226 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_main_py.html +248 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_mc_config_py.html +140 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_metrics_py.html +160 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_portfolio_py.html +269 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_results_py.html +341 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_settings_py.html +204 -0
- monte_neo-0.15.1/coverage_html/z_e454cea899750344_symbol_selector_py.html +303 -0
- monte_neo-0.15.1/docker/Dockerfile +43 -0
- monte_neo-0.15.1/docker/docker-compose.yml +19 -0
- monte_neo-0.15.1/docs/COMMERCIAL_RU.md +37 -0
- monte_neo-0.15.1/docs/INDEX.md +150 -0
- monte_neo-0.15.1/docs/METAL_NATIVE_BUILD.md +55 -0
- monte_neo-0.15.1/docs/api/README.md +13 -0
- monte_neo-0.15.1/docs/assets/demo_memory_plan.png +0 -0
- monte_neo-0.15.1/docs/assets/demo_sma_sweep.png +0 -0
- monte_neo-0.15.1/docs/assets/monteneo-logo.png +0 -0
- monte_neo-0.15.1/docs/development/CLAUDE.md +58 -0
- monte_neo-0.15.1/docs/development/api-documentation.md +28 -0
- monte_neo-0.15.1/docs/development/external-libs.md +27 -0
- monte_neo-0.15.1/docs/development/generation_mechanics.md +107 -0
- monte_neo-0.15.1/docs/development/performance.md +26 -0
- monte_neo-0.15.1/docs/development/rules.md +30 -0
- monte_neo-0.15.1/docs/development/testing.md +45 -0
- monte_neo-0.15.1/docs/en/COMMERCIAL.md +37 -0
- monte_neo-0.15.1/docs/examples/README.md +11 -0
- monte_neo-0.15.1/docs/guides/FAQ.md +40 -0
- monte_neo-0.15.1/docs/guides/quick-start.md +31 -0
- monte_neo-0.15.1/docs/project/BRANCHING.md +9 -0
- monte_neo-0.15.1/docs/project/CHANGELOG.md +275 -0
- monte_neo-0.15.1/docs/project/PACKAGING.md +70 -0
- monte_neo-0.15.1/docs/project/ROADMAP.md +70 -0
- monte_neo-0.15.1/docs/project/backtest_engine.md +115 -0
- monte_neo-0.15.1/docs/project/dynamic_indicators.md +101 -0
- monte_neo-0.15.1/docs/project/features.md +48 -0
- monte_neo-0.15.1/docs/project/mc_accel.md +28 -0
- monte_neo-0.15.1/docs/project/oms_engine.md +73 -0
- monte_neo-0.15.1/docs/project/project-idea.md +24 -0
- monte_neo-0.15.1/docs/project/project-structure.md +29 -0
- monte_neo-0.15.1/docs/project/tech-stack.md +132 -0
- monte_neo-0.15.1/docs/project/vision.md +51 -0
- monte_neo-0.15.1/docs/setup/auth.md +19 -0
- monte_neo-0.15.1/docs/setup/development-setup.md +51 -0
- monte_neo-0.15.1/docs/setup/installation.md +29 -0
- monte_neo-0.15.1/docs/setup/user-settings.md +69 -0
- monte_neo-0.15.1/examples/README.md +17 -0
- monte_neo-0.15.1/examples/export_sma_sweep_quickstart.py +29 -0
- monte_neo-0.15.1/profile_stats.txt +58 -0
- monte_neo-0.15.1/pyproject.toml +165 -0
- monte_neo-0.15.1/scripts/benchmark_3d_engine.py +112 -0
- monte_neo-0.15.1/scripts/benchmark_drivers.py +79 -0
- monte_neo-0.15.1/scripts/benchmark_dynamic.py +77 -0
- monte_neo-0.15.1/scripts/benchmark_gpu.py +48 -0
- monte_neo-0.15.1/scripts/benchmark_mc.py +93 -0
- monte_neo-0.15.1/scripts/benchmark_suite.py +134 -0
- monte_neo-0.15.1/scripts/build_native.sh +43 -0
- monte_neo-0.15.1/scripts/check_system.py +111 -0
- monte_neo-0.15.1/scripts/production_pipeline.py +83 -0
- monte_neo-0.15.1/scripts/run_full_test_suite.sh +100 -0
- monte_neo-0.15.1/scripts/test_advanced_metal.py +67 -0
- monte_neo-0.15.1/scripts/test_bb_metal.py +42 -0
- monte_neo-0.15.1/scripts/test_dlpack.py +25 -0
- monte_neo-0.15.1/scripts/test_metal_pipeline.py +72 -0
- monte_neo-0.15.1/scripts/test_mlx_overhead.py +27 -0
- monte_neo-0.15.1/scripts/test_mlx_ptr.py +35 -0
- monte_neo-0.15.1/scripts/verify_metrics.py +83 -0
- monte_neo-0.15.1/scripts/verify_metrics_accuracy.py +121 -0
- monte_neo-0.15.1/scripts/visualize_stress_tests.py +65 -0
- monte_neo-0.15.1/setup_native.py +15 -0
- monte_neo-0.15.1/src/monte_neo/__init__.py +13 -0
- monte_neo-0.15.1/src/monte_neo/_version.py +4 -0
- monte_neo-0.15.1/src/monte_neo/backtest/__init__.py +74 -0
- monte_neo-0.15.1/src/monte_neo/backtest/bar_engine.py +121 -0
- monte_neo-0.15.1/src/monte_neo/backtest/batch.py +211 -0
- monte_neo-0.15.1/src/monte_neo/backtest/core_numba.py +295 -0
- monte_neo-0.15.1/src/monte_neo/backtest/data.py +111 -0
- monte_neo-0.15.1/src/monte_neo/backtest/export.py +265 -0
- monte_neo-0.15.1/src/monte_neo/backtest/golden.py +191 -0
- monte_neo-0.15.1/src/monte_neo/backtest/memory_plan.py +190 -0
- monte_neo-0.15.1/src/monte_neo/backtest/metal_economics.py +365 -0
- monte_neo-0.15.1/src/monte_neo/backtest/metrics.py +61 -0
- monte_neo-0.15.1/src/monte_neo/backtest/model.py +83 -0
- monte_neo-0.15.1/src/monte_neo/backtest/portfolio_lite.py +60 -0
- monte_neo-0.15.1/src/monte_neo/backtest/portfolio_shared.py +264 -0
- monte_neo-0.15.1/src/monte_neo/backtest/signal_factory.py +171 -0
- monte_neo-0.15.1/src/monte_neo/backtest/strategy.py +72 -0
- monte_neo-0.15.1/src/monte_neo/backtest/sweep.py +132 -0
- monte_neo-0.15.1/src/monte_neo/backtest/trades.py +76 -0
- monte_neo-0.15.1/src/monte_neo/cli/__init__.py +7 -0
- monte_neo-0.15.1/src/monte_neo/cli/app.py +207 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/__init__.py +7 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/custom_test.py +197 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/data.py +151 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/generator.py +132 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/hardware.py +181 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/leadership.py +344 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/leadership_optimizer.py +160 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/main.py +160 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/mc_config.py +43 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/metrics.py +63 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/portfolio.py +172 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/results.py +244 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/settings.py +113 -0
- monte_neo-0.15.1/src/monte_neo/cli/menu/symbol_selector.py +239 -0
- monte_neo-0.15.1/src/monte_neo/cli/progress.py +143 -0
- monte_neo-0.15.1/src/monte_neo/cli/styles.py +131 -0
- monte_neo-0.15.1/src/monte_neo/core/__init__.py +7 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/MetalBridgeSwift.swift +97 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/bindings.mm +101 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/compile.sh +40 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/include/metal_bridge.hpp +68 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/metal_bridge.mm +95 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/metal_bridge_internal.hpp +28 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/metal_metrics.mm +73 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/shaders/backtest_kernels.metal +173 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/shaders/common.metal +24 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/shaders/indicators.metal +151 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/cpp_metal/shaders/metrics_kernel.metal +140 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/engine.py +220 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/float8.py +176 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/indicators.py +145 -0
- monte_neo-0.15.1/src/monte_neo/core/acceleration/tensor_ops.py +119 -0
- monte_neo-0.15.1/src/monte_neo/core/config.py +63 -0
- monte_neo-0.15.1/src/monte_neo/core/evolution.py +182 -0
- monte_neo-0.15.1/src/monte_neo/core/evolution_ai.py +295 -0
- monte_neo-0.15.1/src/monte_neo/core/generator.py +172 -0
- monte_neo-0.15.1/src/monte_neo/core/generator_search.py +280 -0
- monte_neo-0.15.1/src/monte_neo/core/generator_utils.py +66 -0
- monte_neo-0.15.1/src/monte_neo/core/generator_worker.py +69 -0
- monte_neo-0.15.1/src/monte_neo/core/gpu_engine.py +3 -0
- monte_neo-0.15.1/src/monte_neo/core/gpu_lazy.py +183 -0
- monte_neo-0.15.1/src/monte_neo/core/gpu_scenarios.py +216 -0
- monte_neo-0.15.1/src/monte_neo/core/mlx_3d_engine.py +213 -0
- monte_neo-0.15.1/src/monte_neo/core/mlx_driver_utils.py +73 -0
- monte_neo-0.15.1/src/monte_neo/core/mlx_engine.py +102 -0
- monte_neo-0.15.1/src/monte_neo/core/mlx_sim_engine.py +164 -0
- monte_neo-0.15.1/src/monte_neo/core/native/bindings.cpp +21 -0
- monte_neo-0.15.1/src/monte_neo/core/native/metal_engine.py +294 -0
- monte_neo-0.15.1/src/monte_neo/core/native/metal_kernels.metal +311 -0
- monte_neo-0.15.1/src/monte_neo/core/native/metrics.cpp +54 -0
- monte_neo-0.15.1/src/monte_neo/core/optimization/certification.py +71 -0
- monte_neo-0.15.1/src/monte_neo/core/optimization/gpu_optimizer.py +151 -0
- monte_neo-0.15.1/src/monte_neo/core/optimization/production_exporter.py +197 -0
- monte_neo-0.15.1/src/monte_neo/core/optimization/production_gate.py +92 -0
- monte_neo-0.15.1/src/monte_neo/core/optimization/stress_tester.py +183 -0
- monte_neo-0.15.1/src/monte_neo/core/optimizer.py +308 -0
- monte_neo-0.15.1/src/monte_neo/core/portfolio/__init__.py +6 -0
- monte_neo-0.15.1/src/monte_neo/core/portfolio/manager.py +199 -0
- monte_neo-0.15.1/src/monte_neo/core/portfolio/risk.py +48 -0
- monte_neo-0.15.1/src/monte_neo/core/validator.py +287 -0
- monte_neo-0.15.1/src/monte_neo/data/__init__.py +13 -0
- monte_neo-0.15.1/src/monte_neo/data/downloader.py +254 -0
- monte_neo-0.15.1/src/monte_neo/data/sampler.py +276 -0
- monte_neo-0.15.1/src/monte_neo/data/storage.py +258 -0
- monte_neo-0.15.1/src/monte_neo/data/websocket.py +260 -0
- monte_neo-0.15.1/src/monte_neo/indicators/__init__.py +7 -0
- monte_neo-0.15.1/src/monte_neo/indicators/base.py +196 -0
- monte_neo-0.15.1/src/monte_neo/indicators/code_gen.py +78 -0
- monte_neo-0.15.1/src/monte_neo/indicators/custom.py +168 -0
- monte_neo-0.15.1/src/monte_neo/indicators/dynamic.py +217 -0
- monte_neo-0.15.1/src/monte_neo/indicators/evaluator.py +131 -0
- monte_neo-0.15.1/src/monte_neo/indicators/macd.py +89 -0
- monte_neo-0.15.1/src/monte_neo/indicators/metal_parser.py +94 -0
- monte_neo-0.15.1/src/monte_neo/indicators/numba_funcs.py +176 -0
- monte_neo-0.15.1/src/monte_neo/indicators/rsi.py +77 -0
- monte_neo-0.15.1/src/monte_neo/indicators/sma.py +95 -0
- monte_neo-0.15.1/src/monte_neo/indicators/technical.py +29 -0
- monte_neo-0.15.1/src/monte_neo/indicators/technical_lib.py +86 -0
- monte_neo-0.15.1/src/monte_neo/metrics/__init__.py +16 -0
- monte_neo-0.15.1/src/monte_neo/metrics/calculator.py +336 -0
- monte_neo-0.15.1/src/monte_neo/metrics/drawdown.py +194 -0
- monte_neo-0.15.1/src/monte_neo/metrics/numba_funcs.py +314 -0
- monte_neo-0.15.1/src/monte_neo/metrics/profit_factor.py +85 -0
- monte_neo-0.15.1/src/monte_neo/metrics/sharpe.py +169 -0
- monte_neo-0.15.1/src/monte_neo/metrics/types.py +16 -0
- monte_neo-0.15.1/src/monte_neo/metrics/utils.py +87 -0
- monte_neo-0.15.1/src/monte_neo/metrics/winrate.py +205 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/__init__.py +32 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/cscv.py +66 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/dispatch.py +152 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/engine.py +425 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/memory_budget.py +72 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/noise.py +256 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/scenarios.py +114 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/sensitivity.py +216 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/sequential.py +305 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/shuffler.py +227 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/types.py +75 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/utils.py +62 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/walk_forward.py +298 -0
- monte_neo-0.15.1/src/monte_neo/monte_carlo/workers.py +205 -0
- monte_neo-0.15.1/src/monte_neo/oms/__init__.py +69 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/__init__.py +31 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/buffer_pool.py +38 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/compute_pref.py +25 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/device.py +68 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/match_l2_numba.py +63 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/match_numba.py +63 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/metal_dispatch.py +228 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/metal_l2.py +276 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/shader_catalog.py +38 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/shaders/oms_bar_match.metal +75 -0
- monte_neo-0.15.1/src/monte_neo/oms/accel/shaders/oms_l2_walk.metal +44 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/__init__.py +38 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/base.py +62 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/binance.py +101 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/bybit.py +101 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/paper_exchange.py +153 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/reconcile.py +33 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/replay.py +41 -0
- monte_neo-0.15.1/src/monte_neo/oms/adapters/safety.py +23 -0
- monte_neo-0.15.1/src/monte_neo/oms/blotter.py +31 -0
- monte_neo-0.15.1/src/monte_neo/oms/book.py +74 -0
- monte_neo-0.15.1/src/monte_neo/oms/bracket.py +67 -0
- monte_neo-0.15.1/src/monte_neo/oms/clock.py +29 -0
- monte_neo-0.15.1/src/monte_neo/oms/engine.py +299 -0
- monte_neo-0.15.1/src/monte_neo/oms/l2_match.py +89 -0
- monte_neo-0.15.1/src/monte_neo/oms/matching.py +106 -0
- monte_neo-0.15.1/src/monte_neo/oms/paper.py +62 -0
- monte_neo-0.15.1/src/monte_neo/oms/portfolio.py +46 -0
- monte_neo-0.15.1/src/monte_neo/oms/strategy.py +91 -0
- monte_neo-0.15.1/src/monte_neo/oms/tick.py +63 -0
- monte_neo-0.15.1/src/monte_neo/oms/tick_engine.py +208 -0
- monte_neo-0.15.1/src/monte_neo/oms/types.py +111 -0
- monte_neo-0.15.1/src/monte_neo/utils/__init__.py +13 -0
- monte_neo-0.15.1/src/monte_neo/utils/ast_utils.py +119 -0
- monte_neo-0.15.1/src/monte_neo/utils/cache.py +87 -0
- monte_neo-0.15.1/src/monte_neo/utils/config.py +152 -0
- monte_neo-0.15.1/src/monte_neo/utils/console.py +5 -0
- monte_neo-0.15.1/src/monte_neo/utils/logger.py +76 -0
- monte_neo-0.15.1/src/monte_neo/utils/parallel.py +212 -0
- monte_neo-0.15.1/src/monte_neo/utils/visualization.py +121 -0
- monte_neo-0.15.1/src/monte_neo/visualization/__init__.py +7 -0
- monte_neo-0.15.1/src/monte_neo/visualization/charts.py +153 -0
- monte_neo-0.15.1/src/monte_neo/visualization/metrics.py +129 -0
- monte_neo-0.15.1/src/monte_neo/visualization/trades.py +88 -0
- monte_neo-0.15.1/tests/conftest.py +35 -0
- monte_neo-0.15.1/tests/integration/test_backtest_engine_integration.py +92 -0
- monte_neo-0.15.1/tests/integration/test_oms_adapters_integration.py +38 -0
- monte_neo-0.15.1/tests/integration/test_oms_integration.py +28 -0
- monte_neo-0.15.1/tests/integration/test_oms_tick_l2_integration.py +36 -0
- monte_neo-0.15.1/tests/integration/test_workflow.py +78 -0
- monte_neo-0.15.1/tests/performance/benchmark_ops.py +115 -0
- monte_neo-0.15.1/tests/performance/benchmark_serial.py +36 -0
- monte_neo-0.15.1/tests/performance/test_backtest_engine_perf.py +57 -0
- monte_neo-0.15.1/tests/performance/test_backtest_metal_perf.py +61 -0
- monte_neo-0.15.1/tests/performance/test_mc_memory_budget_perf.py +13 -0
- monte_neo-0.15.1/tests/performance/test_oms_l2_perf.py +24 -0
- monte_neo-0.15.1/tests/performance/test_oms_metal_l2_perf.py +32 -0
- monte_neo-0.15.1/tests/performance/test_oms_metal_perf.py +28 -0
- monte_neo-0.15.1/tests/performance/test_oms_perf.py +43 -0
- monte_neo-0.15.1/tests/stress/test_backtest_engine_stress.py +79 -0
- monte_neo-0.15.1/tests/stress/test_oms_stress.py +30 -0
- monte_neo-0.15.1/tests/stress/test_performance.py +69 -0
- monte_neo-0.15.1/tests/unit/test_ast_utils.py +38 -0
- monte_neo-0.15.1/tests/unit/test_backtest_correctness.py +99 -0
- monte_neo-0.15.1/tests/unit/test_backtest_engine.py +115 -0
- monte_neo-0.15.1/tests/unit/test_backtest_export_golden.py +135 -0
- monte_neo-0.15.1/tests/unit/test_backtest_fill_timing.py +35 -0
- monte_neo-0.15.1/tests/unit/test_backtest_gp_features.py +105 -0
- monte_neo-0.15.1/tests/unit/test_backtest_metal_parity.py +108 -0
- monte_neo-0.15.1/tests/unit/test_backtest_sl_batch.py +102 -0
- monte_neo-0.15.1/tests/unit/test_backtest_v02_features.py +137 -0
- monte_neo-0.15.1/tests/unit/test_binance_websocket.py +138 -0
- monte_neo-0.15.1/tests/unit/test_cache_util.py +56 -0
- monte_neo-0.15.1/tests/unit/test_capital_calc.py +79 -0
- monte_neo-0.15.1/tests/unit/test_code_gen.py +87 -0
- monte_neo-0.15.1/tests/unit/test_config.py +44 -0
- monte_neo-0.15.1/tests/unit/test_core_advanced.py +37 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost.py +204 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost10.py +663 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost11.py +576 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost12.py +672 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost13.py +546 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost14.py +182 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost15.py +69 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost16.py +12 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost2.py +282 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost3.py +102 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost4.py +693 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost5.py +724 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost6.py +498 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost7.py +439 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost8.py +398 -0
- monte_neo-0.15.1/tests/unit/test_coverage_boost9.py +575 -0
- monte_neo-0.15.1/tests/unit/test_coverage_cli.py +97 -0
- monte_neo-0.15.1/tests/unit/test_coverage_metal_mlx.py +48 -0
- monte_neo-0.15.1/tests/unit/test_coverage_numba.py +85 -0
- monte_neo-0.15.1/tests/unit/test_coverage_rest.py +116 -0
- monte_neo-0.15.1/tests/unit/test_cscv.py +39 -0
- monte_neo-0.15.1/tests/unit/test_data.py +46 -0
- monte_neo-0.15.1/tests/unit/test_downloader.py +124 -0
- monte_neo-0.15.1/tests/unit/test_drawdown.py +39 -0
- monte_neo-0.15.1/tests/unit/test_dynamic_indicator.py +178 -0
- monte_neo-0.15.1/tests/unit/test_evolution_ai.py +105 -0
- monte_neo-0.15.1/tests/unit/test_generator.py +118 -0
- monte_neo-0.15.1/tests/unit/test_generator_parts.py +90 -0
- monte_neo-0.15.1/tests/unit/test_generator_search.py +142 -0
- monte_neo-0.15.1/tests/unit/test_gpu_acceleration_engine.py +195 -0
- monte_neo-0.15.1/tests/unit/test_gpu_core.py +111 -0
- monte_neo-0.15.1/tests/unit/test_gpu_engine_parallel.py +53 -0
- monte_neo-0.15.1/tests/unit/test_gpu_lazy.py +73 -0
- monte_neo-0.15.1/tests/unit/test_gpu_scenarios.py +82 -0
- monte_neo-0.15.1/tests/unit/test_indicators.py +66 -0
- monte_neo-0.15.1/tests/unit/test_indicators_modular.py +91 -0
- monte_neo-0.15.1/tests/unit/test_indicators_numba.py +67 -0
- monte_neo-0.15.1/tests/unit/test_maintenance.py +103 -0
- monte_neo-0.15.1/tests/unit/test_mc_dispatch_budget.py +123 -0
- monte_neo-0.15.1/tests/unit/test_mc_engine.py +132 -0
- monte_neo-0.15.1/tests/unit/test_mc_workers.py +135 -0
- monte_neo-0.15.1/tests/unit/test_memory_plan_export_depth.py +49 -0
- monte_neo-0.15.1/tests/unit/test_metal_parser.py +41 -0
- monte_neo-0.15.1/tests/unit/test_metrics.py +124 -0
- monte_neo-0.15.1/tests/unit/test_metrics_calculator.py +134 -0
- monte_neo-0.15.1/tests/unit/test_metrics_modular.py +85 -0
- monte_neo-0.15.1/tests/unit/test_metrics_numba.py +93 -0
- monte_neo-0.15.1/tests/unit/test_mlx_engine.py +174 -0
- monte_neo-0.15.1/tests/unit/test_mlx_engine_extra.py +119 -0
- monte_neo-0.15.1/tests/unit/test_monte_carlo.py +56 -0
- monte_neo-0.15.1/tests/unit/test_monte_carlo_engine.py +260 -0
- monte_neo-0.15.1/tests/unit/test_monte_carlo_methods.py +89 -0
- monte_neo-0.15.1/tests/unit/test_monte_carlo_workers.py +191 -0
- monte_neo-0.15.1/tests/unit/test_no_hang_accelerator_fallback.py +177 -0
- monte_neo-0.15.1/tests/unit/test_numba_indicators.py +37 -0
- monte_neo-0.15.1/tests/unit/test_numba_metrics.py +82 -0
- monte_neo-0.15.1/tests/unit/test_oms_adapters.py +114 -0
- monte_neo-0.15.1/tests/unit/test_oms_engine.py +142 -0
- monte_neo-0.15.1/tests/unit/test_oms_gap_close.py +122 -0
- monte_neo-0.15.1/tests/unit/test_oms_metal_l2_parity.py +68 -0
- monte_neo-0.15.1/tests/unit/test_oms_metal_parity.py +64 -0
- monte_neo-0.15.1/tests/unit/test_oms_tick_l2.py +80 -0
- monte_neo-0.15.1/tests/unit/test_parallel.py +37 -0
- monte_neo-0.15.1/tests/unit/test_portfolio.py +118 -0
- monte_neo-0.15.1/tests/unit/test_production_exporter.py +59 -0
- monte_neo-0.15.1/tests/unit/test_sequential_mc.py +97 -0
- monte_neo-0.15.1/tests/unit/test_signal_factory.py +48 -0
- monte_neo-0.15.1/tests/unit/test_smart_optimizer.py +107 -0
- monte_neo-0.15.1/tests/unit/test_storage.py +63 -0
- monte_neo-0.15.1/tests/unit/test_technical_lib.py +45 -0
- monte_neo-0.15.1/tests/unit/test_ui.py +67 -0
- monte_neo-0.15.1/tests/unit/test_utils.py +34 -0
- monte_neo-0.15.1/tests/unit/test_utils_visualization.py +62 -0
- monte_neo-0.15.1/tests/unit/test_validator.py +52 -0
- monte_neo-0.15.1/tests/unit/test_visualization.py +48 -0
- monte_neo-0.15.1/tests/unit/test_websocket.py +43 -0
- monte_neo-0.15.1/tests/verify_metal_complex.py +75 -0
- monte_neo-0.15.1/user_indicators/template.py +84 -0
- monte_neo-0.15.1/uv.lock +2781 -0
- monte_neo-0.15.1/verify_gpu_optimizer.py +75 -0
- monte_neo-0.15.1/verify_hardware.py +76 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
[run]
|
|
2
|
+
source = monte_neo
|
|
3
|
+
omit =
|
|
4
|
+
*/monte_neo/cli/menu/*
|
|
5
|
+
*/monte_neo/core/native/metal_engine.py
|
|
6
|
+
*/monte_neo/core/mlx_*.py
|
|
7
|
+
*/monte_neo/core/gpu_lazy.py
|
|
8
|
+
*/monte_neo/core/gpu_scenarios.py
|
|
9
|
+
*/monte_neo/core/acceleration/*
|
|
10
|
+
|
|
11
|
+
*/monte_neo/metrics/numba_funcs.py
|
|
12
|
+
*/monte_neo/indicators/numba_funcs.py
|
|
13
|
+
*/monte_neo/backtest/core_numba.py
|
|
14
|
+
*/monte_neo/oms/accel/match_numba.py
|
|
15
|
+
*/monte_neo/oms/accel/match_l2_numba.py
|
|
16
|
+
|
|
17
|
+
[report]
|
|
18
|
+
fail_under = 100
|
|
19
|
+
show_missing = true
|
|
20
|
+
exclude_lines =
|
|
21
|
+
pragma: no cover
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Docker ignore
|
|
2
|
+
.git
|
|
3
|
+
.pytest_cache
|
|
4
|
+
.coverage
|
|
5
|
+
htmlcov
|
|
6
|
+
coverage_html
|
|
7
|
+
.mypy_cache
|
|
8
|
+
.ruff_cache
|
|
9
|
+
__pycache__
|
|
10
|
+
*.pyc
|
|
11
|
+
*.pyo
|
|
12
|
+
*.pyd
|
|
13
|
+
.env
|
|
14
|
+
.venv
|
|
15
|
+
env
|
|
16
|
+
venv
|
|
17
|
+
profile_stats.txt
|
|
18
|
+
*.png
|
|
19
|
+
data/*.parquet
|
|
20
|
+
data/*.csv
|
|
21
|
+
!data/sample.parquet
|
|
22
|
+
|
|
23
|
+
# Certs
|
|
24
|
+
exports/
|
|
25
|
+
*.crt
|
|
26
|
+
*.key
|
|
27
|
+
*.pem
|
|
28
|
+
*.p12
|
|
29
|
+
*.pfx
|
|
30
|
+
cert.pem
|
|
31
|
+
key.pem
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Monte-Neo Environment Configuration
|
|
2
|
+
|
|
3
|
+
# Binance API (optional for public data / live OMS)
|
|
4
|
+
BINANCE_API_KEY=
|
|
5
|
+
BINANCE_API_SECRET=
|
|
6
|
+
|
|
7
|
+
# Bybit API (optional live OMS)
|
|
8
|
+
BYBIT_API_KEY=
|
|
9
|
+
BYBIT_API_SECRET=
|
|
10
|
+
|
|
11
|
+
# Live OMS safety (default: live disabled; dry-run on when live enabled)
|
|
12
|
+
# MONTE_NEO_LIVE_TRADING=1
|
|
13
|
+
# MONTE_NEO_LIVE_DRY_RUN=1
|
|
14
|
+
|
|
15
|
+
# Data directory
|
|
16
|
+
MONTE_NEO_DATA_DIR=./data
|
|
17
|
+
|
|
18
|
+
# Logging
|
|
19
|
+
MONTE_NEO_LOG_LEVEL=INFO
|
|
20
|
+
|
|
21
|
+
# Parallel processing
|
|
22
|
+
MONTE_NEO_WORKERS=auto
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
open-pull-requests-limit: 5
|
|
8
|
+
|
|
9
|
+
- package-ecosystem: docker
|
|
10
|
+
directory: /docker
|
|
11
|
+
schedule:
|
|
12
|
+
interval: weekly
|
|
13
|
+
|
|
14
|
+
- package-ecosystem: github-actions
|
|
15
|
+
directory: /
|
|
16
|
+
schedule:
|
|
17
|
+
interval: weekly
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: macos-14
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v7
|
|
17
|
+
|
|
18
|
+
- uses: actions/setup-python@v7
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.11"
|
|
21
|
+
|
|
22
|
+
- uses: astral-sh/setup-uv@v7
|
|
23
|
+
with:
|
|
24
|
+
enable-cache: true
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: uv sync --extra apple --group dev
|
|
28
|
+
|
|
29
|
+
- name: Lint
|
|
30
|
+
run: uv run ruff check .
|
|
31
|
+
|
|
32
|
+
- name: Run unit tests
|
|
33
|
+
run: uv run pytest tests/unit -W ignore
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
*.o
|
|
9
|
+
|
|
10
|
+
# Distribution / packaging
|
|
11
|
+
.Python
|
|
12
|
+
build/
|
|
13
|
+
develop-eggs/
|
|
14
|
+
dist/
|
|
15
|
+
downloads/
|
|
16
|
+
eggs/
|
|
17
|
+
.eggs/
|
|
18
|
+
lib/
|
|
19
|
+
lib64/
|
|
20
|
+
parts/
|
|
21
|
+
sdist/
|
|
22
|
+
var/
|
|
23
|
+
wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
|
|
28
|
+
# PyInstaller
|
|
29
|
+
*.manifest
|
|
30
|
+
*.spec
|
|
31
|
+
|
|
32
|
+
# Installer logs
|
|
33
|
+
pip-log.txt
|
|
34
|
+
pip-delete-this-directory.txt
|
|
35
|
+
|
|
36
|
+
# Unit test / coverage reports
|
|
37
|
+
htmlcov/
|
|
38
|
+
.tox/
|
|
39
|
+
.nox/
|
|
40
|
+
.coverage
|
|
41
|
+
.coverage.*
|
|
42
|
+
.cache
|
|
43
|
+
nosetests.xml
|
|
44
|
+
coverage.xml
|
|
45
|
+
*.cover
|
|
46
|
+
*.py,cover
|
|
47
|
+
.hypothesis/
|
|
48
|
+
.pytest_cache/
|
|
49
|
+
|
|
50
|
+
# Translations
|
|
51
|
+
*.mo
|
|
52
|
+
*.pot
|
|
53
|
+
|
|
54
|
+
# Django stuff:
|
|
55
|
+
*.log
|
|
56
|
+
local_settings.py
|
|
57
|
+
|
|
58
|
+
# Flask stuff:
|
|
59
|
+
instance/
|
|
60
|
+
.webassets-cache
|
|
61
|
+
|
|
62
|
+
# Scrapy stuff:
|
|
63
|
+
.scrapy
|
|
64
|
+
|
|
65
|
+
# Sphinx documentation
|
|
66
|
+
docs/_build/
|
|
67
|
+
|
|
68
|
+
# PyBuilder
|
|
69
|
+
target/
|
|
70
|
+
|
|
71
|
+
# Jupyter Notebook
|
|
72
|
+
.ipynb_checkpoints
|
|
73
|
+
|
|
74
|
+
# IPython
|
|
75
|
+
profile_default/
|
|
76
|
+
ipython_config.py
|
|
77
|
+
|
|
78
|
+
# pyenv
|
|
79
|
+
.python-version
|
|
80
|
+
|
|
81
|
+
# celery beat schedule file
|
|
82
|
+
celerybeat-schedule
|
|
83
|
+
|
|
84
|
+
# SageMath parsed files
|
|
85
|
+
*.sage.py
|
|
86
|
+
|
|
87
|
+
# Environments
|
|
88
|
+
.env
|
|
89
|
+
.venv
|
|
90
|
+
env/
|
|
91
|
+
venv/
|
|
92
|
+
ENV/
|
|
93
|
+
env.bak/
|
|
94
|
+
venv.bak/
|
|
95
|
+
|
|
96
|
+
# Results and Images
|
|
97
|
+
# Project data dirs (not the monte_neo.data package)
|
|
98
|
+
/data/
|
|
99
|
+
results/
|
|
100
|
+
exports/
|
|
101
|
+
*.png
|
|
102
|
+
*.jpg
|
|
103
|
+
*.jpeg
|
|
104
|
+
!docs/assets/
|
|
105
|
+
!docs/assets/**
|
|
106
|
+
|
|
107
|
+
# Certs
|
|
108
|
+
*.crt
|
|
109
|
+
*.key
|
|
110
|
+
*.pem
|
|
111
|
+
*.p12
|
|
112
|
+
*.pfx
|
|
113
|
+
cert.pem
|
|
114
|
+
key.pem
|
|
115
|
+
*.gif
|
|
116
|
+
|
|
117
|
+
# Profile stats
|
|
118
|
+
profile_stats.txt
|
|
119
|
+
|
|
120
|
+
# Spyder project settings
|
|
121
|
+
.spyderproject
|
|
122
|
+
.spyproject
|
|
123
|
+
|
|
124
|
+
# Rope project settings
|
|
125
|
+
.ropeproject
|
|
126
|
+
|
|
127
|
+
# mkdocs documentation
|
|
128
|
+
/site
|
|
129
|
+
|
|
130
|
+
# mypy
|
|
131
|
+
.mypy_cache/
|
|
132
|
+
.dmypy.json
|
|
133
|
+
dmypy.json
|
|
134
|
+
|
|
135
|
+
# Pyre type checker
|
|
136
|
+
.pyre/
|
|
137
|
+
|
|
138
|
+
# Project specific
|
|
139
|
+
data/raw/
|
|
140
|
+
data/processed/
|
|
141
|
+
data/results/
|
|
142
|
+
*.parquet
|
|
143
|
+
*.pkl
|
|
144
|
+
*.h5
|
|
145
|
+
.DS_Store
|
|
146
|
+
|
|
147
|
+
# LLM Integration (local wrapper)
|
|
148
|
+
local_ai_wrapper.py
|
|
149
|
+
__pycache__/
|
monte_neo-0.15.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026 NeoZorK / Monte-Neo contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: monte-neo
|
|
3
|
+
Version: 0.15.1
|
|
4
|
+
Summary: Fast local research for trading strategies on Apple Silicon: fee-aware bar backtests, Monte Carlo, paper OMS (Metal/MLX/Numba)
|
|
5
|
+
Project-URL: Homepage, https://github.com/NeoZorK/Monte-Neo
|
|
6
|
+
Project-URL: Repository, https://github.com/NeoZorK/Monte-Neo
|
|
7
|
+
Project-URL: Issues, https://github.com/NeoZorK/Monte-Neo/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/NeoZorK/Monte-Neo/blob/main/docs/project/CHANGELOG.md
|
|
9
|
+
Project-URL: Documentation, https://github.com/NeoZorK/Monte-Neo/blob/main/docs/INDEX.md
|
|
10
|
+
Author: Monte-Neo Team
|
|
11
|
+
License: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: apple-silicon,backtesting,metal,monte-carlo,oms,research,trading
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering
|
|
26
|
+
Requires-Python: >=3.11
|
|
27
|
+
Requires-Dist: binance-connector>=3.12.0
|
|
28
|
+
Requires-Dist: fastapi>=0.138.2
|
|
29
|
+
Requires-Dist: lightgbm>=4.6.0
|
|
30
|
+
Requires-Dist: matplotlib>=3.10.8
|
|
31
|
+
Requires-Dist: mplfinance
|
|
32
|
+
Requires-Dist: numba>=0.58
|
|
33
|
+
Requires-Dist: numpy>=1.24
|
|
34
|
+
Requires-Dist: pandas>=2.0
|
|
35
|
+
Requires-Dist: pillow>=12.3.0
|
|
36
|
+
Requires-Dist: plotext>=5.2
|
|
37
|
+
Requires-Dist: prompt-toolkit>=3.0
|
|
38
|
+
Requires-Dist: psycopg2-binary>=2.9.12
|
|
39
|
+
Requires-Dist: pyarrow>=23.0.1
|
|
40
|
+
Requires-Dist: pybind11>=2.10.0
|
|
41
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
42
|
+
Requires-Dist: pyyaml>=6.0
|
|
43
|
+
Requires-Dist: questionary>=2.0
|
|
44
|
+
Requires-Dist: redis>=8.0.1
|
|
45
|
+
Requires-Dist: rich>=13.0
|
|
46
|
+
Requires-Dist: scikit-learn>=1.9.0
|
|
47
|
+
Requires-Dist: seaborn>=0.13.2
|
|
48
|
+
Requires-Dist: statsmodels>=0.14.6
|
|
49
|
+
Requires-Dist: ta>=0.10
|
|
50
|
+
Requires-Dist: uvicorn>=0.49.0
|
|
51
|
+
Provides-Extra: apple
|
|
52
|
+
Requires-Dist: mlx>=0.11.0; extra == 'apple'
|
|
53
|
+
Requires-Dist: pyobjc-framework-cocoa>=12.2.2; extra == 'apple'
|
|
54
|
+
Requires-Dist: pyobjc-framework-metal>=12.2.2; extra == 'apple'
|
|
55
|
+
Provides-Extra: dev
|
|
56
|
+
Requires-Dist: black>=26.3.1; extra == 'dev'
|
|
57
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
58
|
+
Requires-Dist: mypy>=1.5; extra == 'dev'
|
|
59
|
+
Requires-Dist: pandas-stubs; extra == 'dev'
|
|
60
|
+
Requires-Dist: pre-commit>=3.4; extra == 'dev'
|
|
61
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == 'dev'
|
|
62
|
+
Requires-Dist: pytest-cov>=4.1; extra == 'dev'
|
|
63
|
+
Requires-Dist: pytest-xdist>=3.3; extra == 'dev'
|
|
64
|
+
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
65
|
+
Requires-Dist: ruff>=0.1; extra == 'dev'
|
|
66
|
+
Requires-Dist: setuptools>=75.0; extra == 'dev'
|
|
67
|
+
Requires-Dist: twine>=5.0; extra == 'dev'
|
|
68
|
+
Requires-Dist: types-pyyaml; extra == 'dev'
|
|
69
|
+
Description-Content-Type: text/markdown
|
|
70
|
+
|
|
71
|
+
# Monte-Neo
|
|
72
|
+
|
|
73
|
+
<p align="center">
|
|
74
|
+
<img src="docs/assets/monteneo-logo.png" alt="Monte-Neo logo" width="220"/>
|
|
75
|
+
</p>
|
|
76
|
+
|
|
77
|
+
<p align="center">
|
|
78
|
+
<strong>Fast local research</strong> for trading strategies on Apple Silicon<br/>
|
|
79
|
+
Fee-aware next-bar economics · Monte Carlo · paper OMS<br/>
|
|
80
|
+
MIT · Python 3.11+ · Metal / MLX / Numba
|
|
81
|
+
</p>
|
|
82
|
+
|
|
83
|
+
<p align="center">
|
|
84
|
+
<a href="https://github.com/NeoZorK/Monte-Neo/actions/workflows/ci.yml"><img src="https://github.com/NeoZorK/Monte-Neo/actions/workflows/ci.yml/badge.svg" alt="CI"/></a>
|
|
85
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT license"/></a>
|
|
86
|
+
<a href="https://github.com/NeoZorK/Monte-Neo/releases/latest"><img src="https://img.shields.io/github/v/release/NeoZorK/Monte-Neo?label=release" alt="Latest release"/></a>
|
|
87
|
+
<img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+"/>
|
|
88
|
+
<img src="https://img.shields.io/badge/macOS-Apple%20Silicon-black.svg" alt="macOS Apple Silicon"/>
|
|
89
|
+
</p>
|
|
90
|
+
|
|
91
|
+
> Current: **v0.15.1** · [Changelog](docs/project/CHANGELOG.md) · [Docs index](docs/INDEX.md) · [FAQ](docs/guides/FAQ.md)
|
|
92
|
+
|
|
93
|
+
## What this is (and is not)
|
|
94
|
+
|
|
95
|
+
**Job:** on Apple Silicon macOS, build and verify trading-domain strategies **very quickly**
|
|
96
|
+
with fee-aware next-bar economics you can re-check (export API + golden vectors).
|
|
97
|
+
|
|
98
|
+
**Lanes:** research bar (primary speed path) · Monte Carlo research · paper OMS (validation).
|
|
99
|
+
|
|
100
|
+
**Not a goal:** replace full event-driven production / live-bot platforms. Research sweep
|
|
101
|
+
throughput is not an OMS event-loop claim.
|
|
102
|
+
|
|
103
|
+
## Why Monte-Neo
|
|
104
|
+
|
|
105
|
+
| Advantage | What you get |
|
|
106
|
+
|-----------|----------------|
|
|
107
|
+
| Local Apple Silicon speed | Metal economics + Numba (MLX optional for signals) |
|
|
108
|
+
| Fee-aware research bar | Next-bar fills, costs (bps), SL/TP/trail, funding, sessions |
|
|
109
|
+
| Honest export API | `export_single` / `export_batch` / `export_sma_sweep` + golden vectors |
|
|
110
|
+
| 16GB-class memory planner | `plan_research_bytes` + **no-hang** Metal size gate → `cpu_numba` fallback |
|
|
111
|
+
| Clear non-goals | macOS research tool first; paper OMS is a separate lane |
|
|
112
|
+
| MIT | Use, fork, and ship without drama |
|
|
113
|
+
|
|
114
|
+
## Install
|
|
115
|
+
|
|
116
|
+
**From git (today — free):**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
pip install "git+https://github.com/NeoZorK/Monte-Neo.git"
|
|
120
|
+
# Apple Silicon Metal / MLX:
|
|
121
|
+
pip install "monte-neo[apple] @ git+https://github.com/NeoZorK/Monte-Neo.git"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**In-repo (recommended for contributors):**
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
git clone https://github.com/NeoZorK/Monte-Neo.git
|
|
128
|
+
cd Monte-Neo
|
|
129
|
+
uv sync --extra apple # on Apple Silicon; omit --extra apple on Linux/CI
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**PyPI:** packaging is prepared (`[apple]` extras, PEP 440 wheel version). First upload
|
|
133
|
+
waits on TestPyPI + maintainer OK — see [PACKAGING.md](docs/project/PACKAGING.md).
|
|
134
|
+
|
|
135
|
+
**Requirements:** Python **3.11+**. Best experience on **Apple Silicon** macOS. Numba CPU
|
|
136
|
+
paths work more broadly; Metal/MLX are the `[apple]` extra.
|
|
137
|
+
|
|
138
|
+
## Quick start
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
uv sync
|
|
142
|
+
uv run monte-neo
|
|
143
|
+
uv run pytest tests -n auto
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Research export (recommended)
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from monte_neo.backtest import (
|
|
150
|
+
ExecutionModel,
|
|
151
|
+
export_sma_sweep,
|
|
152
|
+
synthetic_ohlcv,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
ohlc = synthetic_ohlcv(100_000, seed=42)
|
|
156
|
+
model = ExecutionModel(commission_bps=5.0, slippage_bps=5.0, warmup_bars=50)
|
|
157
|
+
out = export_sma_sweep(
|
|
158
|
+
ohlc["open"], ohlc["high"], ohlc["low"], ohlc["close"],
|
|
159
|
+
combos=16,
|
|
160
|
+
model=model,
|
|
161
|
+
device="auto", # Metal when safe; else cpu_numba (see fallback_reason)
|
|
162
|
+
)
|
|
163
|
+
print(out["device"], out.get("fallback_reason"), out["combos"])
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Single bar backtest
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
from monte_neo.backtest import (
|
|
170
|
+
ExecutionModel,
|
|
171
|
+
frame_to_ohlc,
|
|
172
|
+
run_bar_backtest,
|
|
173
|
+
sma_signal,
|
|
174
|
+
synthetic_ohlcv,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
ohlc = frame_to_ohlc(synthetic_ohlcv(5_000, seed=42))
|
|
178
|
+
model = ExecutionModel(
|
|
179
|
+
commission_bps=5.0,
|
|
180
|
+
slippage_bps=5.0,
|
|
181
|
+
size_fraction=0.25,
|
|
182
|
+
sl_pct=1.0,
|
|
183
|
+
tp_pct=2.0,
|
|
184
|
+
)
|
|
185
|
+
sig = sma_signal(ohlc["close"], fast=10, slow=40)
|
|
186
|
+
out = run_bar_backtest(
|
|
187
|
+
ohlc["open"], ohlc["high"], ohlc["low"], ohlc["close"], sig, model=model
|
|
188
|
+
)
|
|
189
|
+
print(out["total_return"], out["metrics"]["max_drawdown"], len(out["trades"]))
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
More: [docs/guides/quick-start.md](docs/guides/quick-start.md) · [backtest engine](docs/project/backtest_engine.md) · [FAQ](docs/guides/FAQ.md)
|
|
193
|
+
|
|
194
|
+
## How to use (research workflow)
|
|
195
|
+
|
|
196
|
+
1. Load or synthesize OHLCV (`synthetic_ohlcv` / your frame → `frame_to_ohlc`).
|
|
197
|
+
2. Set an `ExecutionModel` (fees, SL/TP, sessions, side mode).
|
|
198
|
+
3. Sweep with `export_sma_sweep` / `export_batch`, or a single `export_single`.
|
|
199
|
+
4. Check `device`, `signal_device`, and `fallback_reason` when using `auto`.
|
|
200
|
+
5. Optional depth: `equity_stride`, journal, `plan_research_bytes` / `memory` on exports.
|
|
201
|
+
6. Paper OMS (`monte_neo.oms`) only when you need event-lane validation — not for sweep cps claims.
|
|
202
|
+
|
|
203
|
+
**Devices:** `auto` · `metal` · `cpu_numba` (and MLX where signal paths allow). Oversized Metal
|
|
204
|
+
jobs demote to Numba instead of hanging (v0.14.1+).
|
|
205
|
+
|
|
206
|
+
## Features (honest)
|
|
207
|
+
|
|
208
|
+
| Area | Status |
|
|
209
|
+
|------|--------|
|
|
210
|
+
| MC indicator / robustness workflows | Available via CLI and library |
|
|
211
|
+
| Fee-aware research bar engine | `monte_neo.backtest` |
|
|
212
|
+
| Research export + golden vectors | `export_*` / `verify_golden_vectors` |
|
|
213
|
+
| Memory / no-hang accelerator gate | `plan_research_bytes` / `decide_research_accelerator` |
|
|
214
|
+
| Paper OMS + venue adapters | `monte_neo.oms` |
|
|
215
|
+
| Metal / MLX / Numba device select | Best-effort on Apple Silicon; CPU fallbacks |
|
|
216
|
+
| Docker | Supported for headless/CI-style runs |
|
|
217
|
+
|
|
218
|
+
## Project structure
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
Monte-Neo/
|
|
222
|
+
├── src/monte_neo/
|
|
223
|
+
│ ├── backtest/ # Research bar engine + export
|
|
224
|
+
│ ├── oms/ # Paper OMS + accel
|
|
225
|
+
│ ├── core/ # Generator / Metal bridges
|
|
226
|
+
│ ├── data/ # Market data downloaders
|
|
227
|
+
│ ├── monte_carlo/ # MC methods
|
|
228
|
+
│ ├── metrics/ # Trading metrics
|
|
229
|
+
│ ├── cli/ # Interactive CLI
|
|
230
|
+
│ └── visualization/
|
|
231
|
+
├── tests/
|
|
232
|
+
├── docs/
|
|
233
|
+
└── docker/
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Screenshots / demos
|
|
237
|
+
|
|
238
|
+
<p align="center">
|
|
239
|
+
<img src="docs/assets/demo_sma_sweep.png" alt="SMA sweep demo" width="720"/>
|
|
240
|
+
</p>
|
|
241
|
+
<p align="center">
|
|
242
|
+
<img src="docs/assets/demo_memory_plan.png" alt="Memory plan demo" width="720"/>
|
|
243
|
+
</p>
|
|
244
|
+
|
|
245
|
+
More under `docs/assets/`. Runnable script: [`examples/export_sma_sweep_quickstart.py`](examples/export_sma_sweep_quickstart.py).
|
|
246
|
+
|
|
247
|
+
## License
|
|
248
|
+
|
|
249
|
+
MIT — see [LICENSE](LICENSE).
|
|
250
|
+
|
|
251
|
+
Public repository: https://github.com/NeoZorK/Monte-Neo
|