opencode-pyneruntime 6.6.4__tar.gz → 6.8.7__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.
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/PKG-INFO +35 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/README.md +34 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/build/opencode_pyneruntime.egg-info/SOURCES.txt +10 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/pyproject.toml +1 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/__init__.py +52 -25
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/benchmark.py +3 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/data.py +5 -9
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/optimize.py +4 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/run.py +113 -77
- opencode_pyneruntime-6.8.7/src/pynecore/core/_file_io.py +296 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/aggregator.py +37 -32
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/bar_magnifier.py +7 -6
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/intent_builder.py +6 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/models.py +271 -4
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/one_way_emulator.py +103 -9
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/position.py +15 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/store_helpers.py +115 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/sync_engine.py +1628 -79
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/csv_file.py +231 -92
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/currency.py +82 -30
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/data_converter.py +177 -141
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/datetime.py +62 -8
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/download_runner.py +36 -12
- opencode_pyneruntime-6.8.7/src/pynecore/core/drawing_snapshot.py +58 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/htf_aggregator.py +3 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/import_hook.py +127 -31
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/instance_state.py +276 -23
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/live_ltf_collector.py +4 -4
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/live_runner.py +487 -124
- opencode_pyneruntime-6.8.7/src/pynecore/core/ohlcv.py +2868 -0
- opencode_pyneruntime-6.8.7/src/pynecore/core/ohlcv_importers.py +960 -0
- opencode_pyneruntime-6.8.7/src/pynecore/core/ohlcv_legacy.py +387 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/overload.py +186 -65
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/pine_cast.py +14 -4
- opencode_pyneruntime-6.8.7/src/pynecore/core/pine_compare.py +96 -0
- opencode_pyneruntime-6.8.7/src/pynecore/core/pine_udt.py +148 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/plugin/live_provider.py +49 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/plugin/provider.py +35 -11
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/resampler.py +168 -26
- opencode_pyneruntime-6.8.7/src/pynecore/core/rolling_sum.py +54 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/safe_convert.py +1 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/script_runner.py +594 -162
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/security.py +168 -80
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/security_process.py +87 -54
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/series.py +117 -23
- opencode_pyneruntime-6.8.7/src/pynecore/core/session.py +100 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/syminfo.py +47 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/__init__.py +710 -183
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/_fixnan.py +3 -4
- opencode_pyneruntime-6.8.7/src/pynecore/lib/_math_stateful.py +255 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/_timeframe_change.py +6 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/array.py +463 -196
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/box.py +2 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/chart.py +3 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/color.py +15 -10
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/color.pyi +2 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/dayofweek.py +12 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/label.py +26 -15
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/line.py +2 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/linefill.py +12 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/map.py +3 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/math.py +106 -56
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/matrix.py +60 -19
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/plot.py +12 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/polyline.py +2 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/request.py +33 -9
- opencode_pyneruntime-6.8.7/src/pynecore/lib/session.py +181 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/__init__.py +1451 -470
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/opentrades.py +33 -19
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/opentrades.pyi +6 -7
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/string.py +319 -123
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/ta.py +829 -432
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/table.py +1 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/ticker.py +2 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/timeframe.py +2 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/providers/ccxt.py +27 -23
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/providers/replay.py +2 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/standalone.py +3 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/closure_arguments_transformer.py +9 -7
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/display_rewrite.py +3 -3
- opencode_pyneruntime-6.8.7/src/pynecore/transformers/float_tolerance.py +246 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/function_isolation.py +190 -43
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/module_properties.json +45 -18
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/persistent.py +8 -65
- opencode_pyneruntime-6.8.7/src/pynecore/transformers/pine_truthiness.py +159 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/slot_layout.py +27 -20
- opencode_pyneruntime-6.8.7/src/pynecore/types/base.py +67 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/box.py +2 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/color.py +33 -7
- opencode_pyneruntime-6.8.7/src/pynecore/types/ib_persistent.pyi +26 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/label.py +3 -4
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/line.py +2 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/linefill.py +2 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/matrix.py +26 -16
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/na.py +2 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/na.pyi +5 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/ohlcv.py +1 -1
- opencode_pyneruntime-6.8.7/src/pynecore/types/persistent.pyi +24 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/polyline.py +2 -1
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/series.py +6 -2
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/series.pyi +19 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/session.py +4 -3
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/strategy.py +15 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/table.py +2 -1
- opencode_pyneruntime-6.8.7/src/pynecore/types/type_checker.pyi +86 -0
- opencode_pyneruntime-6.8.7/src/pynecore/utils/sequence_view.py +138 -0
- opencode_pyneruntime-6.6.4/src/pynecore/core/ohlcv_file.py +0 -1888
- opencode_pyneruntime-6.6.4/src/pynecore/core/pine_udt.py +0 -69
- opencode_pyneruntime-6.6.4/src/pynecore/lib/_math_stateful.py +0 -202
- opencode_pyneruntime-6.6.4/src/pynecore/lib/session.py +0 -267
- opencode_pyneruntime-6.6.4/src/pynecore/transformers/ne_guard.py +0 -70
- opencode_pyneruntime-6.6.4/src/pynecore/types/base.py +0 -39
- opencode_pyneruntime-6.6.4/src/pynecore/types/ib_persistent.pyi +0 -10
- opencode_pyneruntime-6.6.4/src/pynecore/types/persistent.pyi +0 -13
- opencode_pyneruntime-6.6.4/src/pynecore/types/type_checker.pyi +0 -48
- opencode_pyneruntime-6.6.4/src/pynecore/utils/sequence_view.py +0 -92
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/LICENSE +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/MANIFEST.in +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/NOTICE +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/setup.cfg +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/app.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/compile.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/debug.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/plugin.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/pluggable.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/api_error_handler.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/broker_picker.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/error_hook.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/keyreader.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/provider_picker.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/utils/symbol_browser.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/defaults.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/disappearance.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/emulator.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/exceptions.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/idempotency.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/journal.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/native_failsafe_manager.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/run_identity.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/software_entry_stop_engine.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/software_partial_bracket_engine.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/spot_inventory.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/storage.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/broker/validation.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/class_property.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/config.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/download_info.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/live_ltf_window.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/module_property.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/pine_export.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/pine_method.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/pine_range.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/plugin/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/plugin/broker.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/plugin/cli.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/provider_string.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/random.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/script.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/security_shm.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/strategy_stats.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/symbol_map.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/core/viz.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/adjustment.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/alert.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/alert.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/barmerge.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/barstate.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/currency.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/dayofweek.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/display.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/dividends.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/earnings.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/extend.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/font.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/footprint.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/format.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/hline.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/hline.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/location.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/log.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/order.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/pivotpointtype.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/plot.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/position.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/runtime.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/scale.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/session.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/shape.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/size.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/splits.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/closedtrades.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/closedtrades.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/commission.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/direction.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/oca.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/strategy/risk.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/syminfo.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/text.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/volume_row.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/xloc.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/lib/yloc.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/providers/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/pynesys/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/pynesys/api.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/pynesys/compiler.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/__main__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/cli.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/generate.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/model.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/reference.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/runner.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/scheduler.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/testing/broker_lab/subprocess.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/builtin_shadow.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/dynamic_default.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/import_lifter.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/import_normalizer.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/inline_series_hoist.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/input_transformer.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/lib_series.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/locations.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/module_property.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/persistent_series.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/safe_convert_transformer.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/safe_division_transformer.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/script_requirements.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/security.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/security_instantiation.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/series.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/type_checking_stripper.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/transformers/unused_series_detector.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/alert.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/barmerge.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/chart.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/currency.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/datetime.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/display.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/dividends.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/earnings.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/extend.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/font.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/footprint.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/format.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/hline.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/ib_persistent.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/location.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/order.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/persistent.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/pine_types.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/pine_types.pyi +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/pivotpointtype.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/plot.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/plot_meta.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/position.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/scale.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/script_type.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/shape.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/size.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/source.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/splits.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/text.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/type_checker.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/volume_row.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/weekdays.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/xloc.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/types/yloc.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/utils/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/utils/file_utils.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/utils/rich/__init__.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/utils/rich/date_column.py +0 -0
- {opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/utils/stdlib_checker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencode-pyneruntime
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.8.7
|
|
4
4
|
Summary: PyneCore runtime (rubycell fork of PyneSys/pynecore) — Pine Script-like runtime and API
|
|
5
5
|
Author-email: PYNESYS LLC <hello@pynesys.com>
|
|
6
6
|
Maintainer: rubycell
|
|
@@ -214,6 +214,40 @@ pyne run my_indicator.py ccxt_BYBIT_BTC_USDT_USDT_1D.ohlcv
|
|
|
214
214
|
|
|
215
215
|
> **Note**: Pine Script compilation requires a PyneSys API key. Get yours at [pynesys.io](https://pynesys.io).
|
|
216
216
|
|
|
217
|
+
## Broker Plugins (this fork)
|
|
218
|
+
|
|
219
|
+
This fork adds venue plugins under [`plugins/`](plugins/), editable-installed and
|
|
220
|
+
auto-discovered through the `pyne.plugin` entry-point group:
|
|
221
|
+
|
|
222
|
+
| Plugin | Entry points | What it does |
|
|
223
|
+
|---|---|---|
|
|
224
|
+
| **DNSE** — [`plugins/dnse`](plugins/dnse) | `dnse` (data) · `dnse_broker` (broker) | Vietnamese derivatives & stocks: OHLCV history + **native STOP/OCO conditional orders** on DNSE's OpenAPI, built on the vendored `openapi-sdk` 2.0.0. REST-only. |
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# historical / live data feed (no --from: it truncates the shared .ohlcv cache;
|
|
228
|
+
# the built-in -500-real-bars default is both safe and deep enough)
|
|
229
|
+
pyne run my_strategy.py dnse:VN30F1M@5
|
|
230
|
+
|
|
231
|
+
# live broker — places REAL orders (implies --live)
|
|
232
|
+
pyne run my_strategy.py dnse_broker:VN30F1M@5 --broker
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Testing: `pytest plugins/dnse/tests/` (unit + offline e2e against a fake venue that
|
|
236
|
+
reproduces DNSE's measured quirks), plus a live-test suite — a session-independent
|
|
237
|
+
venue-semantics gate and two staged live probes (no-fill place/amend/cancel/OCA cases
|
|
238
|
+
and a fill matrix whose backtest mode doubles as the oracle). Procedures, safety rules
|
|
239
|
+
and the measured venue facts: [`plugins/dnse/testing/live_test/README.md`](plugins/dnse/testing/live_test/README.md).
|
|
240
|
+
|
|
241
|
+
The vendored SDK, a mirror of DNSE's OpenAPI docs
|
|
242
|
+
(`docs/dnse-openapi-documentation/`) with a sync/verify tool, and the
|
|
243
|
+
error-handling plan (`docs/plan/`) live alongside the plugin.
|
|
244
|
+
|
|
245
|
+
**Reference plugins** — the DNSE plugin follows PyneSys's official broker-plugin
|
|
246
|
+
examples, kept as workspace siblings for pattern reference:
|
|
247
|
+
[`pynecore-plugin-bybit`](https://github.com/PyneSys/pynecore-plugin-bybit),
|
|
248
|
+
[`pynecore-plugin-capitalcom`](https://github.com/PyneSys/pynecore-plugin-capitalcom),
|
|
249
|
+
[`pynecore-plugin-ctrader`](https://github.com/PyneSys/pynecore-plugin-ctrader).
|
|
250
|
+
|
|
217
251
|
## Why Choose PyneCore?
|
|
218
252
|
|
|
219
253
|
- **Beyond TradingView Limitations**: No more platform restrictions, code size limits, or subscription fees
|
|
@@ -169,6 +169,40 @@ pyne run my_indicator.py ccxt_BYBIT_BTC_USDT_USDT_1D.ohlcv
|
|
|
169
169
|
|
|
170
170
|
> **Note**: Pine Script compilation requires a PyneSys API key. Get yours at [pynesys.io](https://pynesys.io).
|
|
171
171
|
|
|
172
|
+
## Broker Plugins (this fork)
|
|
173
|
+
|
|
174
|
+
This fork adds venue plugins under [`plugins/`](plugins/), editable-installed and
|
|
175
|
+
auto-discovered through the `pyne.plugin` entry-point group:
|
|
176
|
+
|
|
177
|
+
| Plugin | Entry points | What it does |
|
|
178
|
+
|---|---|---|
|
|
179
|
+
| **DNSE** — [`plugins/dnse`](plugins/dnse) | `dnse` (data) · `dnse_broker` (broker) | Vietnamese derivatives & stocks: OHLCV history + **native STOP/OCO conditional orders** on DNSE's OpenAPI, built on the vendored `openapi-sdk` 2.0.0. REST-only. |
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# historical / live data feed (no --from: it truncates the shared .ohlcv cache;
|
|
183
|
+
# the built-in -500-real-bars default is both safe and deep enough)
|
|
184
|
+
pyne run my_strategy.py dnse:VN30F1M@5
|
|
185
|
+
|
|
186
|
+
# live broker — places REAL orders (implies --live)
|
|
187
|
+
pyne run my_strategy.py dnse_broker:VN30F1M@5 --broker
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Testing: `pytest plugins/dnse/tests/` (unit + offline e2e against a fake venue that
|
|
191
|
+
reproduces DNSE's measured quirks), plus a live-test suite — a session-independent
|
|
192
|
+
venue-semantics gate and two staged live probes (no-fill place/amend/cancel/OCA cases
|
|
193
|
+
and a fill matrix whose backtest mode doubles as the oracle). Procedures, safety rules
|
|
194
|
+
and the measured venue facts: [`plugins/dnse/testing/live_test/README.md`](plugins/dnse/testing/live_test/README.md).
|
|
195
|
+
|
|
196
|
+
The vendored SDK, a mirror of DNSE's OpenAPI docs
|
|
197
|
+
(`docs/dnse-openapi-documentation/`) with a sync/verify tool, and the
|
|
198
|
+
error-handling plan (`docs/plan/`) live alongside the plugin.
|
|
199
|
+
|
|
200
|
+
**Reference plugins** — the DNSE plugin follows PyneSys's official broker-plugin
|
|
201
|
+
examples, kept as workspace siblings for pattern reference:
|
|
202
|
+
[`pynecore-plugin-bybit`](https://github.com/PyneSys/pynecore-plugin-bybit),
|
|
203
|
+
[`pynecore-plugin-capitalcom`](https://github.com/PyneSys/pynecore-plugin-capitalcom),
|
|
204
|
+
[`pynecore-plugin-ctrader`](https://github.com/PyneSys/pynecore-plugin-ctrader).
|
|
205
|
+
|
|
172
206
|
## Why Choose PyneCore?
|
|
173
207
|
|
|
174
208
|
- **Beyond TradingView Limitations**: No more platform restrictions, code size limits, or subscription fees
|
|
@@ -24,6 +24,7 @@ src/pynecore/cli/utils/keyreader.py
|
|
|
24
24
|
src/pynecore/cli/utils/provider_picker.py
|
|
25
25
|
src/pynecore/cli/utils/symbol_browser.py
|
|
26
26
|
src/pynecore/core/__init__.py
|
|
27
|
+
src/pynecore/core/_file_io.py
|
|
27
28
|
src/pynecore/core/aggregator.py
|
|
28
29
|
src/pynecore/core/bar_magnifier.py
|
|
29
30
|
src/pynecore/core/class_property.py
|
|
@@ -34,6 +35,7 @@ src/pynecore/core/data_converter.py
|
|
|
34
35
|
src/pynecore/core/datetime.py
|
|
35
36
|
src/pynecore/core/download_info.py
|
|
36
37
|
src/pynecore/core/download_runner.py
|
|
38
|
+
src/pynecore/core/drawing_snapshot.py
|
|
37
39
|
src/pynecore/core/htf_aggregator.py
|
|
38
40
|
src/pynecore/core/import_hook.py
|
|
39
41
|
src/pynecore/core/instance_state.py
|
|
@@ -41,9 +43,12 @@ src/pynecore/core/live_ltf_collector.py
|
|
|
41
43
|
src/pynecore/core/live_ltf_window.py
|
|
42
44
|
src/pynecore/core/live_runner.py
|
|
43
45
|
src/pynecore/core/module_property.py
|
|
44
|
-
src/pynecore/core/
|
|
46
|
+
src/pynecore/core/ohlcv.py
|
|
47
|
+
src/pynecore/core/ohlcv_importers.py
|
|
48
|
+
src/pynecore/core/ohlcv_legacy.py
|
|
45
49
|
src/pynecore/core/overload.py
|
|
46
50
|
src/pynecore/core/pine_cast.py
|
|
51
|
+
src/pynecore/core/pine_compare.py
|
|
47
52
|
src/pynecore/core/pine_export.py
|
|
48
53
|
src/pynecore/core/pine_method.py
|
|
49
54
|
src/pynecore/core/pine_range.py
|
|
@@ -51,6 +56,7 @@ src/pynecore/core/pine_udt.py
|
|
|
51
56
|
src/pynecore/core/provider_string.py
|
|
52
57
|
src/pynecore/core/random.py
|
|
53
58
|
src/pynecore/core/resampler.py
|
|
59
|
+
src/pynecore/core/rolling_sum.py
|
|
54
60
|
src/pynecore/core/safe_convert.py
|
|
55
61
|
src/pynecore/core/script.py
|
|
56
62
|
src/pynecore/core/script_runner.py
|
|
@@ -58,6 +64,7 @@ src/pynecore/core/security.py
|
|
|
58
64
|
src/pynecore/core/security_process.py
|
|
59
65
|
src/pynecore/core/security_shm.py
|
|
60
66
|
src/pynecore/core/series.py
|
|
67
|
+
src/pynecore/core/session.py
|
|
61
68
|
src/pynecore/core/strategy_stats.py
|
|
62
69
|
src/pynecore/core/symbol_map.py
|
|
63
70
|
src/pynecore/core/syminfo.py
|
|
@@ -175,6 +182,7 @@ src/pynecore/transformers/builtin_shadow.py
|
|
|
175
182
|
src/pynecore/transformers/closure_arguments_transformer.py
|
|
176
183
|
src/pynecore/transformers/display_rewrite.py
|
|
177
184
|
src/pynecore/transformers/dynamic_default.py
|
|
185
|
+
src/pynecore/transformers/float_tolerance.py
|
|
178
186
|
src/pynecore/transformers/function_isolation.py
|
|
179
187
|
src/pynecore/transformers/import_lifter.py
|
|
180
188
|
src/pynecore/transformers/import_normalizer.py
|
|
@@ -184,9 +192,9 @@ src/pynecore/transformers/lib_series.py
|
|
|
184
192
|
src/pynecore/transformers/locations.py
|
|
185
193
|
src/pynecore/transformers/module_properties.json
|
|
186
194
|
src/pynecore/transformers/module_property.py
|
|
187
|
-
src/pynecore/transformers/ne_guard.py
|
|
188
195
|
src/pynecore/transformers/persistent.py
|
|
189
196
|
src/pynecore/transformers/persistent_series.py
|
|
197
|
+
src/pynecore/transformers/pine_truthiness.py
|
|
190
198
|
src/pynecore/transformers/safe_convert_transformer.py
|
|
191
199
|
src/pynecore/transformers/safe_division_transformer.py
|
|
192
200
|
src/pynecore/transformers/script_requirements.py
|
|
@@ -20,7 +20,7 @@ egg_info.egg_base = "build"
|
|
|
20
20
|
# `pynecore` so transpiler-generated code runs unchanged. Upstream authorship and
|
|
21
21
|
# the Apache-2.0 NOTICE ("Powered by PyneSys") are retained per Section 4(d).
|
|
22
22
|
name = "opencode-pyneruntime"
|
|
23
|
-
version = "6.
|
|
23
|
+
version = "6.8.7" # PineVersion.Major.Minor — tracks upstream
|
|
24
24
|
description = "PyneCore runtime (rubycell fork of PyneSys/pynecore) — Pine Script-like runtime and API"
|
|
25
25
|
authors = [{ name = "PYNESYS LLC", email = "hello@pynesys.com" }]
|
|
26
26
|
maintainers = [{ name = "rubycell" }]
|
{opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/__init__.py
RENAMED
|
@@ -123,8 +123,8 @@ def main(
|
|
|
123
123
|
|
|
124
124
|
# Create demo.ohlcv file only if we created the workdir in this run or recreate_demo is True
|
|
125
125
|
if not workdir_existed or recreate_demo:
|
|
126
|
-
from datetime import datetime, timedelta, time as dt_time
|
|
127
|
-
from ...core.
|
|
126
|
+
from datetime import datetime, timedelta, time as dt_time, UTC
|
|
127
|
+
from ...core.ohlcv import OHLCVWriter
|
|
128
128
|
from ...core.syminfo import SymInfo, SymInfoInterval, SymInfoSession
|
|
129
129
|
from ...types.ohlcv import OHLCV
|
|
130
130
|
import random
|
|
@@ -185,36 +185,63 @@ def main(
|
|
|
185
185
|
toml_path = demo_file.with_suffix(".toml")
|
|
186
186
|
syminfo.save_toml(toml_path)
|
|
187
187
|
|
|
188
|
-
# Generate synthetic OHLCV data (2000 candles) with random walk
|
|
189
|
-
|
|
188
|
+
# Generate synthetic OHLCV data (2000 candles) with random walk.
|
|
189
|
+
# The anchor is UTC so the daily grid is an exact 86400000 ms step
|
|
190
|
+
# on every machine, matching the "1D" period declared below.
|
|
191
|
+
start_time = datetime(2020, 1, 1, 0, 0, 0, tzinfo=UTC)
|
|
190
192
|
base_price = 100.0
|
|
193
|
+
base_volatility = 0.015 # Long-run standard deviation of the daily return
|
|
191
194
|
|
|
192
195
|
# Use fixed seed for reproducibility
|
|
193
196
|
random.seed(42)
|
|
194
197
|
|
|
195
|
-
with OHLCVWriter(demo_file
|
|
196
|
-
|
|
198
|
+
with OHLCVWriter(demo_file, syminfo.period,
|
|
199
|
+
minmove=syminfo.minmove, pricescale=syminfo.pricescale) as writer:
|
|
200
|
+
close_price = base_price
|
|
201
|
+
volatility = base_volatility
|
|
202
|
+
bar_return = 0.0
|
|
203
|
+
trend = 0.0
|
|
197
204
|
|
|
198
205
|
for i in range(2000):
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
#
|
|
217
|
-
|
|
206
|
+
bar_time = start_time + timedelta(days=i)
|
|
207
|
+
# OHLCV timestamps are Unix milliseconds.
|
|
208
|
+
timestamp = int(bar_time.timestamp() * 1000)
|
|
209
|
+
|
|
210
|
+
# Volatility clusters: it decays back towards the base level but is
|
|
211
|
+
# pushed up by the previous move, so calm and turbulent stretches alternate
|
|
212
|
+
volatility = min(0.85 * volatility + 0.07 * base_volatility
|
|
213
|
+
+ 0.10 * abs(bar_return), 4 * base_volatility)
|
|
214
|
+
# Slowly drifting trend component, giving multi-month up and down legs
|
|
215
|
+
trend = 0.98 * trend + random.gauss(0.0, 0.0006)
|
|
216
|
+
|
|
217
|
+
# A 24/7 asset normally opens where the previous bar closed,
|
|
218
|
+
# a gap is a rare event
|
|
219
|
+
open_price = close_price
|
|
220
|
+
if random.random() < 0.02:
|
|
221
|
+
open_price *= 1 + random.gauss(0.0, 0.012)
|
|
222
|
+
|
|
223
|
+
# The move happens inside the bar, between its open and close
|
|
224
|
+
bar_return = random.gauss(0.0012 + trend, volatility)
|
|
225
|
+
close_price = open_price * (1 + bar_return)
|
|
226
|
+
|
|
227
|
+
# Wicks extend beyond the body, so the range always contains it
|
|
228
|
+
body_high = max(open_price, close_price)
|
|
229
|
+
body_low = min(open_price, close_price)
|
|
230
|
+
high_price = body_high * (1 + abs(random.gauss(0.0, 0.5)) * volatility)
|
|
231
|
+
low_price = body_low * (1 - abs(random.gauss(0.0, 0.5)) * volatility)
|
|
232
|
+
|
|
233
|
+
# Prices sit on the mintick grid declared in the .toml. Rounding is
|
|
234
|
+
# monotonic, so it cannot invalidate the OHLC ordering.
|
|
235
|
+
open_price = round(open_price / syminfo.mintick) * syminfo.mintick
|
|
236
|
+
high_price = round(high_price / syminfo.mintick) * syminfo.mintick
|
|
237
|
+
low_price = round(low_price / syminfo.mintick) * syminfo.mintick
|
|
238
|
+
close_price = round(close_price / syminfo.mintick) * syminfo.mintick
|
|
239
|
+
|
|
240
|
+
# Wide-range bars trade more, weekends are quieter even on a 24/7 market
|
|
241
|
+
bar_range = (high_price - low_price) / open_price
|
|
242
|
+
volume = 1_000_000 * (0.5 + 35 * bar_range) * random.uniform(0.75, 1.25)
|
|
243
|
+
if bar_time.weekday() >= 5:
|
|
244
|
+
volume *= 0.7
|
|
218
245
|
|
|
219
246
|
ohlcv = OHLCV(
|
|
220
247
|
timestamp=timestamp,
|
{opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/benchmark.py
RENAMED
|
@@ -9,7 +9,7 @@ from rich.console import Console
|
|
|
9
9
|
from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn
|
|
10
10
|
|
|
11
11
|
from ..app import app, app_state
|
|
12
|
-
from ...core.
|
|
12
|
+
from ...core.ohlcv import OHLCVReader
|
|
13
13
|
from ...core.syminfo import SymInfo
|
|
14
14
|
from ...core.script_runner import ScriptRunner
|
|
15
15
|
|
|
@@ -126,7 +126,8 @@ def benchmark(
|
|
|
126
126
|
iter(ohlcv_list),
|
|
127
127
|
syminfo,
|
|
128
128
|
last_bar_index=len(ohlcv_list) - 1,
|
|
129
|
-
plot_path=None if no_output else app_state.output_dir / f"benchmark_{i}.csv"
|
|
129
|
+
plot_path=None if no_output else app_state.output_dir / f"benchmark_{i}.csv",
|
|
130
|
+
lossless_volume=reader.lossless_volume
|
|
130
131
|
)
|
|
131
132
|
|
|
132
133
|
import_time = time.perf_counter() - import_start
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import sys
|
|
2
|
-
from typing import TYPE_CHECKING, TypeAlias
|
|
2
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from enum import Enum
|
|
5
5
|
from datetime import datetime, timedelta, UTC
|
|
@@ -19,7 +19,7 @@ from ...lib.timeframe import in_seconds
|
|
|
19
19
|
from ...core.data_converter import DataConverter, SupportedFormats as InputFormats
|
|
20
20
|
from ...core.download_runner import (download_to_file, ConflictAction, DownloadConflict,
|
|
21
21
|
DownloadPlan, DownloadProgress, DownloadError)
|
|
22
|
-
from ...core.
|
|
22
|
+
from ...core.ohlcv import OHLCVReader
|
|
23
23
|
from ...core.aggregator import validate_aggregation, aggregate_ohlcv
|
|
24
24
|
from ...core.syminfo import SymInfo
|
|
25
25
|
|
|
@@ -84,7 +84,7 @@ def _resolve_provider_class(provider_name: str) -> type[ProviderPlugin]:
|
|
|
84
84
|
raise ValueError(f"Unknown provider '{provider_name}'. Available providers: {names}")
|
|
85
85
|
if not (isinstance(cls, type) and issubclass(cls, ProviderPlugin)):
|
|
86
86
|
raise ValueError(f"Plugin '{provider_name}' is not a data provider.")
|
|
87
|
-
return
|
|
87
|
+
return cls
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
# Available output formats
|
|
@@ -312,8 +312,8 @@ def download(
|
|
|
312
312
|
slist: list[str] = []
|
|
313
313
|
tdir: Path | None = None
|
|
314
314
|
with Progress(SpinnerColumn(), TextColumn("{task.description}"),
|
|
315
|
-
transient=True) as
|
|
316
|
-
|
|
315
|
+
transient=True) as fetch_progress:
|
|
316
|
+
fetch_progress.add_task(description="Fetching market data...", total=None)
|
|
317
317
|
if sym is None:
|
|
318
318
|
inst: ProviderPlugin = provider_class(symbol=None, timeframe=timeframe,
|
|
319
319
|
config=config)
|
|
@@ -355,10 +355,6 @@ def download(
|
|
|
355
355
|
browser.run()
|
|
356
356
|
return browser.go_back
|
|
357
357
|
|
|
358
|
-
provider_instance: ProviderPlugin | None = None
|
|
359
|
-
symbols_list: list[str] = []
|
|
360
|
-
tui_ohlcv_dir: Path | None = None
|
|
361
|
-
|
|
362
358
|
# Multi-broker providers (CCXT, cTrader) need a broker chosen before a
|
|
363
359
|
# symbol can be browsed. When none was given and we're interactive, drop
|
|
364
360
|
# into a broker picker first, then the symbol browser. The two form a
|
{opencode_pyneruntime-6.6.4 → opencode_pyneruntime-6.8.7}/src/pynecore/cli/commands/optimize.py
RENAMED
|
@@ -26,7 +26,7 @@ from rich.text import Text
|
|
|
26
26
|
from rich.console import Console
|
|
27
27
|
|
|
28
28
|
from ..app import app, app_state
|
|
29
|
-
from ...core.
|
|
29
|
+
from ...core.ohlcv import OHLCVReader
|
|
30
30
|
from ...core.syminfo import SymInfo
|
|
31
31
|
from ...core.script_runner import ScriptRunner
|
|
32
32
|
from ...core.strategy_stats import StrategyStatistics
|
|
@@ -667,10 +667,11 @@ def optimize(
|
|
|
667
667
|
|
|
668
668
|
# --- Pre-compute data parameters ---
|
|
669
669
|
with OHLCVReader(data) as reader:
|
|
670
|
+
# Timestamps are int64 milliseconds since the v2 OHLCV format.
|
|
670
671
|
start_ts = (reader.start_timestamp if not time_from
|
|
671
|
-
else int(time_from.replace(tzinfo=None).timestamp()))
|
|
672
|
+
else int(time_from.replace(tzinfo=None).timestamp() * 1000))
|
|
672
673
|
end_ts = (reader.end_timestamp if not time_to
|
|
673
|
-
else int(time_to.replace(tzinfo=None).timestamp()))
|
|
674
|
+
else int(time_to.replace(tzinfo=None).timestamp() * 1000))
|
|
674
675
|
size = reader.get_size(start_ts, end_ts)
|
|
675
676
|
|
|
676
677
|
# --- Print summary ---
|