jesse 2.3.3__tar.gz → 2.3.4__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.
- {jesse-2.3.3/jesse.egg-info → jesse-2.3.4}/PKG-INFO +1 -1
- {jesse-2.3.3 → jesse-2.3.4}/jesse/candle_pipelines/moving_block_bootstrap.py +7 -2
- {jesse-2.3.3 → jesse-2.3.4}/jesse/config.py +13 -5
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/candles_controller.py +21 -2
- jesse-2.3.4/jesse/mcp/USAGE_LIMITS.md +147 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/backtest_management.md +1 -1
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/monte_carlo.md +1 -1
- jesse-2.3.4/jesse/mcp/resources/optimization.md +222 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/__init__.py +4 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/backtest.py +5 -2
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/monte_carlo.py +11 -2
- jesse-2.3.4/jesse/mcp/tools/optimization.py +285 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/__init__.py +13 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/backtest.py +2 -2
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/candles.py +19 -1
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/monte_carlo.py +6 -2
- jesse-2.3.4/jesse/mcp/tools/services/optimization.py +756 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/significance_test.py +2 -0
- jesse-2.3.4/jesse/mcp/usage_limits.py +462 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/backtest_mode.py +53 -15
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/data_provider.py +47 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/__init__.py +40 -2
- jesse-2.3.4/jesse/modes/optimize_mode/__init__.py +165 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/significance_test_mode/__init__.py +39 -14
- jesse-2.3.4/jesse/version.py +1 -0
- {jesse-2.3.3 → jesse-2.3.4/jesse.egg-info}/PKG-INFO +1 -1
- {jesse-2.3.3 → jesse-2.3.4}/jesse.egg-info/SOURCES.txt +8 -0
- {jesse-2.3.3 → jesse-2.3.4}/setup.py +1 -1
- jesse-2.3.4/tests/test_config_safety.py +92 -0
- jesse-2.3.4/tests/test_mcp_usage_limits.py +325 -0
- jesse-2.3.4/tests/test_simulator_parity.py +79 -0
- jesse-2.3.3/jesse/modes/optimize_mode/__init__.py +0 -131
- jesse-2.3.3/jesse/version.py +0 -1
- {jesse-2.3.3 → jesse-2.3.4}/LICENSE +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/MANIFEST.in +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/README.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/candle_pipelines/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/candle_pipelines/base_candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/candle_pipelines/gaussian_noise.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/candle_pipelines/gaussian_resampler.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/cli.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/constants.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/ai_model_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/auth_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/backtest_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/closed_trade_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/config_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/exchange_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/file_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/live_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/lsp_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/monte_carlo_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/notification_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/optimization_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/order_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/significance_test_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/strategy_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/system_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/tabs_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/controllers/websocket_controller.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/enums/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/exceptions/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/exchanges/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/exchanges/exchange.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/exchanges/sandbox/Sandbox.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/exchanges/sandbox/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/factories/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/factories/candle_factory.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/factories/order_factory.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/helpers.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/acosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ad.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/adosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/adx.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/adxr.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/alligator.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/alma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ao.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/apo.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/aroon.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/aroonosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/atr.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/avgprice.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/bandpass.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/beta.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/bollinger_bands.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/bollinger_bands_width.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/bop.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cci.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cfo.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cg.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/chande.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/chop.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cksp.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cmo.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/correl.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/correlation_cycle.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cvi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/cwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/damiani_volatmeter.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/dec_osc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/decycler.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/dema.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/devstop.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/di.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/dm.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/donchian.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/dpo.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/dti.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/dx.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/edcf.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/efi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ema.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/emd.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/emv.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/epma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/er.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/eri.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/fisher.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/fosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/frama.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/fwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/gatorosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/gauss.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/heikin_ashi_candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/high_pass.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/high_pass_2_pole.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/hma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/hull_suit.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/hurst_exponent.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/hwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ichimoku_cloud.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ichimoku_cloud_seq.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ift_rsi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/itrend.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/jma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/jsa.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/kama.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/kaufmanstop.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/kdj.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/keltner.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/kst.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/kurtosis.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/kvo.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/linearreg.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/linearreg_angle.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/linearreg_intercept.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/linearreg_slope.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/lrsi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/maaq.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mab.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/macd.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mama.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/marketfi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mass.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mcginley_dynamic.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mean_ad.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/median_ad.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/medprice.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mfi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/midpoint.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/midprice.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/minmax.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mom.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/mwdx.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/natr.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/nma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/nvi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/obv.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/pfe.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/pivot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/pma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ppo.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/pvi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/pwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/qstick.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/reflex.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/roc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rocp.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rocr.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rocr100.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/roofing.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rsi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rsmk.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rsx.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/rvi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/safezonestop.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/sar.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/sinwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/skew.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/sma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/smma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/squeeze_momentum.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/sqwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/srsi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/srwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/stc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/stddev.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/stiffness.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/stochastic.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/stochf.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/supersmoother.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/supersmoother_3_pole.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/supertrend.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/support_resistance_with_break.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/swma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/t3.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/tema.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/trange.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/trendflex.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/trima.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/trix.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/tsf.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/tsi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ttm_squeeze.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ttm_trend.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/typprice.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ui.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/ultosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/var.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vi.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vidya.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vlma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/volume.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vosc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/voss.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vpci.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vpt.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vpwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vwap.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vwma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/vwmacd.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/wad.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/waddah_attr_explosion.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/wclprice.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/wilders.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/willr.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/wma.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/wt.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/zlema.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/indicators/zscore.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/info.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/libs/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/libs/custom_json/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/libs/dynamic_numpy_array/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/agent_rules.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/agent_rules.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/manager.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/mcp_config.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/backtest_metrics.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/candle.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/configuration.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/indicator.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/position_risk.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/significance_test.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/strategy.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/strategy_examples.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/resources/utilities.md +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/server.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/test.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/config.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/general.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/indicator.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/auth.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/config.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/general.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/indicator.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/significance_test.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/services/strategy.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/mcp/tools/strategy.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/AiModel.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/BacktestSession.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Candle.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/ClosedTrade.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Exchange.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/ExchangeApiKeys.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/FuturesExchange.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/LiveEquitySnapshot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/LiveSession.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Log.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/MonteCarloSession.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/NotificationApiKeys.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/OpenTab.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/OptimizationSession.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Option.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Order.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Orderbook.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Position.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Route.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/SignificanceTestSession.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/SpotExchange.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Ticker.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/Trade.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/models/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/exchange_api_keys.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetualTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/ApexProMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/ApexProPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/ApexProPerpetualTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/apex_pro_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk-arm.dylib +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk-x86.dylib +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk.dylib +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk.so +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-arm.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-pc.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-x86.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk.dll +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/BinanceMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/BinancePerpetualFutures.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/BinancePerpetualFuturesTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/BinanceSpot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/BinanceUSSpot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Binance/binance_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bitfinex/BitfinexSpot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bitfinex/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bitfinex/bitfinex_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitSpot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitSpotTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDCPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDCPerpetualTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDTPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDTPerpetualTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Bybit/bybit_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Coinbase/CoinbaseSpot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Coinbase/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Coinbase/coinbase_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Gate/GateSpot.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Gate/GateSpotMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Gate/GateUSDTMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Gate/GateUSDTPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Gate/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Gate/gate_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetualMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetualTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Hyperliquid/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Hyperliquid/hyperliquid_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/LighterMain.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/LighterPerpetual.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/LighterPerpetualTestnet.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/lighter_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-darwin-arm64.dylib +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-linux-amd64.so +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-linux-arm64.so +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-windows-amd64.dll +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/import_candles_mode/drivers/interface.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/monte_carlo_mode/MonteCarloRunner.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/monte_carlo_mode/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/notification_api_keys.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/optimize_mode/Optimize.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/optimize_mode/fitness.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/significance_test_mode/SignificanceTestRunner.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/modes/utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/candle_repository.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/closed_trade_repository.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/live_equity_repository.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/live_session_repository.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/open_tab_repository.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/repositories/order_repository.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/backtest.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/import_candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/ml.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/monte_carlo/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/monte_carlo/common.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/monte_carlo/monte_carlo_candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/monte_carlo/monte_carlo_trades.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/optimize/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/rule_significance_testing/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/rule_significance_testing/bootstrap.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/rule_significance_testing/common.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/rule_significance_testing/plots.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/rule_significance_testing/rule_significance.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/research/rule_significance_testing/simulator.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/routes/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/api.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/auth.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/broker.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/cache.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/candle_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/charts.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/closed_trade_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/color.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/db.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/env.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/exchange_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/failure.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/file.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/general_info.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/installer.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/jesse_trade.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/logger.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/lsp.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/metrics.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/migrator.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/multiprocessing.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/notifier.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/order_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/position_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/progressbar.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/redis.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/report.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/strategy_handler/ExampleStrategy/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/strategy_handler/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/strategy_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/table.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/tradingview.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/transformers.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/validators.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/web.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/services/ws_manager.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/200.html +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/404.html +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/-30QC5Em.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/-GAgPltI.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/2Hw4931b.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/2oJWbEOo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/3TATJI7h.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/3e1v2bzS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/3kbuJQcV.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/3xVqZejG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/4Mf7C0D3.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/4OucEjoo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/5LuOXUq_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/5zVuxQ1w.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/727ZlQH0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/7A4Fjokl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/7O62HKoU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/9C6ErRqt.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B-DoSBHF.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B-LnxVnd.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B-k3dvlD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B-lZjTdr.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B0XVJmRM.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B0m2ddpp.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B0qRVHPH.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B14Poo8t.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B1SYOhNW.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B1bQXN8T.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B2Cf9XSq.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B2vK47Ag.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B39W0dQi.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B3S91Nkh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B3ZDOciz.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B430Bg39.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B48N-Iqd.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B4VqtPa2.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B5HUNpoA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B5auBHZD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B5lbUyaz.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B5uW3Zvf.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B6W0miNI.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B7alP455.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B7mTdjB0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B82gslCI.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B8ssZoUh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B9wLZaAG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BAng5TT0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BC5c_5Pe.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BCrXIZq8.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BE9QQhgF.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BEBZ7ncR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BEhvmC7f.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BFLt1xDp.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BFOHcciG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BGBMSbrS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BGLI1Hdo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BHOwM8T6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BHcFqGYU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BHzLHzA5.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BIEUsx6d.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BILxekzW.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BJ4Li9vH.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BJGe-b2p.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BK9xJ97g.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BKlvTuyj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BLhTXw86.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BLuZWbUW.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BMR_PYu6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BMYPR7BL.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BMj5Y0dO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BMl42z94.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BNHBcdi1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BNVpGyOn.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BNioltXt.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BPT9niGB.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BPhBrDlE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BQoSv7ci.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BQwtg7Y-.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BRk-K-rg.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BSxZ-RaX.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BTpWsGps.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BTwvJv7r.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BUEGK8hf.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BVUVsWT6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BVr_1_27.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BVz_zdnA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BWBTHuhh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BWpeeIxA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BX77sIaO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BXSQBIz8.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BXW1EomU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BXYnMxBe.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BXkSAIEj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BY-TUvya.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BY6pwuIY.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BYtUz8ZP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B_i9asfM.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/B_m7g4N7.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BacktestTabs.XpCeWK_e.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BbSNqyBO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bc5xkKR1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BdxkyMLR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Be6lgOlo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BeQkCIfX.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BfCpw3nA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BfHTSMKl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BfLuTCmN.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BfivnA6A.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BfjtVDDH.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bg-kzb6g.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BgDCqdQA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BgYniUM_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BiFfXF7O.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bid6LQhH.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BjABl1g7.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BjQB5zDj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BknIz3MU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bkuqu6BP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bl1h29GH.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BlxRB_8X.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bo1m3BsC.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bo2ofWIv.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bo8A1zQE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BoXegm-a.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bp6g37R7.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BpWG_bgh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BrpqY1Pj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BsOYHjMa.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BthQWCQV.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bu5BbsvL.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bu73EIfS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BuapDI9Y.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BupSXVCO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bvotw-X0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bw0wYZmb.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bw305WKR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BwXTMy5W.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BygKL3ZF.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BypH-vXm.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BzJJZx-M.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Bzb7OGdO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/BzdBqhZe.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C-_shW-Y.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C-nORZOA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C-wny61x.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C0YDwLjR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C0nbwVuJ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C1XDQQGZ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C1tVc3UG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C1w2a3ep.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C30yJ1fx.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C39BiMTA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C3FkfJm5.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C3khCPGq.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C3mMm8J8.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C3t2pwGQ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C5Y8tDhP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C5wWYbrZ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C6j12Q_x.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C75U4IDy.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C7L56vO4.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C7gG9l05.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C8M2exoo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C8lEn-DE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C9L3yaDO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CA8MQk29.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CAQ2eGtk.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CB0Krxn9.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CB2ApiWb.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CC7BBK9k.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CCBS_C5_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CDRgh1sM.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CD_QflpE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CE8ZsA6f.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CEOY7oL4.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CG6Dc4jp.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CGVVOGHx.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CJaU5se_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CKg9tqCS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CM8KxXT1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CMpz2oZS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CMt9yHYq.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CN_Ckpq4.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/COJ4H7py.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/COK4E0Yg.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/COcR7UxN.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/COyJrUc7.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CPZi1zLr.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CQ0soPOq.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CQjiPCtT.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CS3Unz2-.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CSHBycmS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CSp6iqVD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CTNlIIiR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CTRr51gU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CTaRgM6i.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CUnW07Te.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CV9EbfTh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CVO1_9PV.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CVw76BM1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CXKOl_mN.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CYFUjXW1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CYLhhvKT.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CYQontPO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CYgUR4L5.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CZe0XNBd.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/C_scCXcs.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CafNBF8u.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CbfX1IO0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cc5clBb7.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CdO5JTpU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cf8iN4DR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CfQXZHmo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CfnpWUYo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cgp1Zq-T.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Ci6OQyBP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CircleProgressbar.Bqs-YaMH.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CjDtw9vr.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CkVqlDFX.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CkXjmgJE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Ckkbw-AO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ClGRhx96.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ClVF0v4p.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ClgVdteV.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CmCqftbK.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cnd3e8T2.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CpDEUYCj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CrrKwR0a.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CsSk9TLD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Csfq5Kiy.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CuFlys0T.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cuk6v7N8.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cv9koXgw.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CwjWoCRV.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CyIGOvEh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CyVeKkvQ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CyktbL80.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CyyQideA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cz8P-rqG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CzF1MCbP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Cza_XSSt.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/CzouJOBO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D-2ljcwZ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D0UiDa5C.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D0r3Knsf.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D1J39qoi.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D2PfwrvU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D2U3PnZ6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D2Z7JJdl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D4Tzg5kh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D4h5O-jR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D57wlKjU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D5KoaKCx.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D5ZsypWT.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D5pd2Owo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D7lU1fdU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D7oLnXFd.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D8mZ0lfy.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D9-PGadD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D9R-vmeu.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D9yiNO04.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DAi9KRSo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DB0RB20n.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DBObHOpQ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DBQeEorK.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DB_GagMm.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DCE3LsBG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DDpSJMW6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DDrv2Hr-.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DDtJtuOZ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DEIpsLCJ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DH5Ifo-i.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DHJKELXO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DHo0CJ0O.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DIovg4uR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DJlmqQ1C.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DKOGybHv.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DKXYxT9g.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DKykz6zU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DLPipH_Q.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DLbgOhZU.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DLs3tTet.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DNquZEk8.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DOAuugfS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DOk3G3cc.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DPvbFsQx.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DQ1-QYvQ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DQPrWpt6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DQVVAn-B.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DQsh_Aaj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DRC6TkPh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DREVFZK8.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DRNBmV_Q.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DRW-0cLl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DRhBOlRY.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DRwtwsxC.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DUszq2jm.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DVG02705.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DVYH6Lj_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DWGz5Zuj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DWJ3fJO_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DWXrMU9S.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DWedfzmr.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DXbdFlpD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DYoNaHQp.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DYvnoCeB.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D_FR0PS1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D_OY6ada.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/D_z4Izcz.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dayu4EKP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DbXoA79R.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dbxjm_CC.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Ddv68eIx.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DeDIxzqb.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DeYg-96x.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Deuh7S70.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DfxzS6Rs.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dgyr3wWZ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DhMKtDLN.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DhUJRlN_.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dhn9LcZ4.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dj6nwHGl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DjGSmABO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DjHMNizO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DkBy-JyN.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DkLiglaE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DmdQbaLT.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dmy2k9nq.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dn00JSTd.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DnULxvSX.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DoFvH58O.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DqwNpetd.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DrRCxMg5.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Drsz93k2.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Ds-gbosJ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DsBKuouk.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DsWjAdsX.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dsg_Bt_b.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DtFQj3wx.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Du268qiB.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Du5NY7AG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DvSxYeG4.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DwbJ8ElN.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DxSadP1t.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DxhURWN0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DyIIwZ3D.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DyKutqhl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/DyNMweEb.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dzg5qoeG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Dzo8RikT.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/E3gJ1_iC.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/FNqbgIOG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/GBQ2dnAY.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/HNqc6WRo.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/HnGAYVZD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/HzYwdGDm.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/IWz_2f1F.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/IconCSS.RN4HczVp.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Inter-VariableFont_slnt_wght.Cl4AQHp9.ttf +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/IuBKFhSY.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/J9zdX7GW.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/JqZropPD.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/L9t79GZl.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/LGGdnPYs.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/LKU2TuZ1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/LiveTabs.15UVtLVQ.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/MLM7CkNY.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/O1ng9rnZ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/P4WzXJd0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/PhLBBhN4.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Pj9gCBS1.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/PoHY5YXO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Progress.CWZn3LuJ.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/QhoSD0DR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/R900dpIa.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/SKMF96pI.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/SPD3sf1n.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/SZ2Mqkml.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/SmOacPCp.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/StrategiesSidebar.-h7ix9-v.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/T-Tgc4AT.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/TFAtbQgt.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/TU54ms6u.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/Tz6hzZYG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/U3_6pjzv.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/UIAJJxZW.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/UL5zprDm.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/UMmp-gVE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/VuadG5SK.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/XBlWyCtg.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/YJb9dmdj.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ZlaFEk-P.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ZvxA6pKh.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/_id_.BY-NJHml.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/_id_.DM7QJcru.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/_id_.J2oYSFWN.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ahYVQIuB.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ajMbGru0.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/atvbtKCR.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/bCA53EVm.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/bN70gL4F.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/beI9wp2w.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/cPjAOO0u.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/codicon.DCmgc-ay.ttf +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/din0uRiO.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/e4jU7D2d.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/eg146-Ew.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/entry.DZ1VJD8l.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/error-404.DZraUJun.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/error-500.XmAVHPl_.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/f0gtjltP.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/fje9CFhw.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/gFIMeB_R.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/gRuQeaLk.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ifBTmRxC.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/index.BCxjJPBI.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/index.BujPmbc0.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/index.DGzxCzt4.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/index.K8JdO5jA.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/index.lQPmb1y9.css +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/kKgrVRIu.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/logo-dark.tKoQPl1k.svg +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/logo-light.CS4l4ePq.png +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/m09vb5r-.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/m2LEI-9-.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/m4gc_qpA.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/m4uW47V2.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/mebxcVVE.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/nyqBNV6O.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/proSkrIW.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/pstGuDtS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/qmhIZ77x.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/qpfuy3xp.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/sBY-W3BS.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/sacFqUAJ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/sdHcTMYB.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/shcSOmrb.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/tRgbYopJ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ul-Lp4lw.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/viurUhPG.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/w-ucz2PV.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/w4xAWTHa.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/w8dY5SsB.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/wI6OXr6j.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/xHi2X3m6.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/xI-RfyKK.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/xW4inM5L.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/xgbdnDAz.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/ySlJ1b_l.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/yf5bffbF.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/_nuxt/zocC4JxJ.js +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/favicon.ico +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/favicons/android-chrome-192x192.png +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/favicons/android-chrome-512x512.png +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/favicons/apple-touch-icon.png +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/favicons/favicon-16x16.png +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/favicons/favicon-32x32.png +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/index.html +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/static/robots.txt +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_app.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_closed_trades.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_exchanges.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_logs.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_orderbook.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_orders.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_positions.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_tickers.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/store/state_trades.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/CanAddClosedTradeToStore/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Strategy.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test01/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test02/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test04/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test05/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test06/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test07/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test08/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test09/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test10/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test11/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test12/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test13/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test14/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test15/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test16/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test17/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test18/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test19/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test20/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test21/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test22/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test23/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test24/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test25/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test26/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test27/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test28/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test29/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test30/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test31/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test32/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test33/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test34/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test35/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test36/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test37/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test38/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test39/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test40/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test41/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test44/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test45/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test46/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test47/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/Test48/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestAddHorizontalLineToCandleChart/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestAddHorizontalLineToExtraChart/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestAddLineToCandleChart/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestAddLineToExtraChart/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestAfterMethod/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestAverageEntryPriceProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestBalanceAndFeeReductionWorksCorrectlyInSpotModeInBothBuyAndSellOrders/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestBalancesAreHandledCorrectlyForCancellingOrdersInSpot/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestBaseAndQuoteAssetProperties/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestBeforeMethod/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestBeforeTerminate/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionShort1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionShort2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanOpenANewPositionImmediatelyAfterClosingViaUpdatePosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanRunWithoutShorting/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanSubmitStopLossOrderWithSizeEqualToCurrentPositionQty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanSubmitStopLossOrderWithSizeLessThanCurrentPositionQty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanSubmitTakeProfitAndStopLossAtSameTimeInSpot/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanSubmitTakeProfitOrderWithSizeEqualToCurrentPositionQty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCanSubmitTakeProfitOrderWithSizeLessThanCurrentPositionQty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCannotSetStopLossOrderInGoLong/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCannotSetTakeProfitOrderInGoLong/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCannotSpendMoreThanAvailableBalance/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCannotSubmitStopLossOrderWithSizeMoreThanCurrentPositionQty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCannotSubmitTakeProfitOrderWithSizeMoreThanCurrentPositionQty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCapitalPropertyRaisesNotImplementedError/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestClosedTradeAfterExitingTrade/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCurrentRouteIndex1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestCurrentRouteIndex2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestDailyBalanceStoresPortfolioValue/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestDailyBalancesProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestDataRoutes1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestDataRoutes2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestDefaultHyperparameters/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestDnaMethod/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestEmptyStrategy/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestEntryOrdersAndExitOrdersProperties/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestExchangeTypeProperty1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestExchangeTypeProperty2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestFuturesExchangeAvailableMargin/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestHasLongAndShortEntryOrdersPropertiesInFilters/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestHasLongEntryOrdersProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestHasShortEntryOrdersProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestIncreasedAndReducedCount/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestIncreasingShortPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestInsufficientMargin1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestInsufficientMargin2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestInsufficientMargin3/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestLeverageProperty1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestLeverageProperty2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestLiquidationInCrossModeForShortTrade/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestLiquidationInIsolatedModeForLongTrade/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestLiquidationInIsolatedModeForShortTrade/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestLogMethodInStrategyClass/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestMarkPrice/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestMarketOrderForLowPriceDifference/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestMetrics1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestMultipleEntryOrdersUpdateEntryLongPositions/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestMultipleEntryOrdersUpdateEntryShortPositions/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOnCancelMethod/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOnClosePosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOnRouteOpenPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOnRouteOpenPosition2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOrderIsStopLossProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOrderPriceCannotBeGreaterThanZero/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOrderValueProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOrdersAreSortedBeforeExecution/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestOversizedReduceOnlyExitAccounting/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPortfolioValue/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPortfolioValueIncludesPositionValueAndOpenOrdersValue/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositionExchangeTypeProperty1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositionExchangeTypeProperty2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositionOpenIncreaseReduceCloseEventsInSpot/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositionTotalCostProperty/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositionWithLeverage1/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositionWithLeverage2/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestPositions/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestProperBalanceHanldingInSpotAfterOrderCancellation/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestReduceOnlyMarketOrders/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestShortInSpot/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceLongPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceShortPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestStopOrderShouldConsiderExecutedTakeProfitOrdersInSpot/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestStrategyVariablesAreResetBeforeOpeningNewPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientLongPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientShortPosition/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestTerminate/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestUsageOfShouldCancelRaisesNotImplementedError/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestVanillaStrategy/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestWalletBalance/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/TestWithoutCancelMethod/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/strategies/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/testing_utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse/utils.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse.egg-info/dependency_links.txt +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse.egg-info/entry_points.txt +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse.egg-info/requires.txt +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/jesse.egg-info/top_level.txt +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/requirements.txt +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/setup.cfg +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/data/__init__.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/data/test_candles_0.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/data/test_candles_1.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/data/test_candles_indicators.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_backtest.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_broker.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_candle_service.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_chart_data_serialization.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_completed_trade.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_conflicting_orders.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_dynamic_numpy_array.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_exchange.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_helpers.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_import_candles.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_indicators.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_isolated_backtest.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_lsp.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_metrics.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_order.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_parent_strategy.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_position.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_research.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_router.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_spot_mode.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_candle.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_exchanges.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_logs.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_orderbook.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_orders.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_ticker.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_state_trades.py +0 -0
- {jesse-2.3.3 → jesse-2.3.4}/tests/test_utils.py +0 -0
|
@@ -3,7 +3,7 @@ from .base_candles import BaseCandlesPipeline
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
class MovingBlockBootstrapCandlesPipeline(BaseCandlesPipeline):
|
|
6
|
-
def __init__(self, batch_size: int, **_ignored) -> None:
|
|
6
|
+
def __init__(self, batch_size: int, seed: int = None, **_ignored) -> None:
|
|
7
7
|
"""
|
|
8
8
|
Generate synthetic candles by moving-block bootstrap on multivariate
|
|
9
9
|
tuples of (delta_close, delta_high, delta_low).
|
|
@@ -14,6 +14,10 @@ class MovingBlockBootstrapCandlesPipeline(BaseCandlesPipeline):
|
|
|
14
14
|
Size of the internal regeneration buffer in minutes. The pipeline
|
|
15
15
|
derives a reasonable bootstrap block length from this, so there is
|
|
16
16
|
no separate block-size argument.
|
|
17
|
+
seed : int, optional
|
|
18
|
+
Seed for the internal RNG. Leave None for independent random
|
|
19
|
+
scenarios (the normal case); pass an int for reproducible output
|
|
20
|
+
(used by tests asserting the fast and full simulators are identical).
|
|
17
21
|
"""
|
|
18
22
|
super().__init__(batch_size)
|
|
19
23
|
|
|
@@ -25,7 +29,8 @@ class MovingBlockBootstrapCandlesPipeline(BaseCandlesPipeline):
|
|
|
25
29
|
self._block_size = derived_block_size
|
|
26
30
|
|
|
27
31
|
# Independent RNG per pipeline instance to avoid identical scenarios
|
|
28
|
-
|
|
32
|
+
# (seedable for reproducible tests).
|
|
33
|
+
self._rng = np.random.default_rng(seed)
|
|
29
34
|
|
|
30
35
|
def _bootstrap_blocks(self, arr: np.ndarray, n: int) -> np.ndarray:
|
|
31
36
|
"""
|
|
@@ -137,20 +137,28 @@ def set_config(conf: dict) -> None:
|
|
|
137
137
|
config['env']['logging'] = conf['logging']
|
|
138
138
|
# exchanges
|
|
139
139
|
for key, e in conf['exchanges'].items():
|
|
140
|
+
# The dashboard sends each exchange entry carrying its own 'name', but the
|
|
141
|
+
# exchanges map is keyed by exchange name and scripted/MCP callers pass the
|
|
142
|
+
# entries without a redundant 'name'. Fall back to the dict key so both the
|
|
143
|
+
# dashboard payload and the natural dict-keyed config (what /config returns)
|
|
144
|
+
# work. Without this, a missing 'name' raised KeyError deep inside a spawned
|
|
145
|
+
# backtest/RST worker, which then exited silently (the traceback was lost on
|
|
146
|
+
# the os._exit() that follows), leaving the MCP/dashboard session stuck.
|
|
147
|
+
name = e.get('name') or key
|
|
140
148
|
if not jh.is_live() and e['type']:
|
|
141
149
|
exchange_type = e['type']
|
|
142
150
|
else:
|
|
143
|
-
exchange_type = get_exchange_type(
|
|
144
|
-
config['env']['exchanges'][
|
|
151
|
+
exchange_type = get_exchange_type(name)
|
|
152
|
+
config['env']['exchanges'][name] = {
|
|
145
153
|
'fee': float(e['fee']),
|
|
146
154
|
'type': exchange_type,
|
|
147
155
|
'balance': float(e['balance'])
|
|
148
156
|
}
|
|
149
|
-
if config['env']['exchanges'][
|
|
157
|
+
if config['env']['exchanges'][name]['type'] == 'futures':
|
|
150
158
|
# 1x, 2x, 10x, 50x, etc. Enter as integers
|
|
151
|
-
config['env']['exchanges'][
|
|
159
|
+
config['env']['exchanges'][name]['futures_leverage'] = int(e.get('futures_leverage', 1))
|
|
152
160
|
# accepted values are: 'cross' and 'isolated'
|
|
153
|
-
config['env']['exchanges'][
|
|
161
|
+
config['env']['exchanges'][name]['futures_leverage_mode'] = e.get('futures_leverage_mode', 'cross')
|
|
154
162
|
|
|
155
163
|
# live mode only
|
|
156
164
|
if jh.is_live():
|
|
@@ -96,10 +96,29 @@ def get_candle_import_status(request_json: CancelRequestJson, authorization: Opt
|
|
|
96
96
|
return authenticator.unauthorized_response()
|
|
97
97
|
|
|
98
98
|
running = bool(is_process_active(request_json.id))
|
|
99
|
-
|
|
99
|
+
response = {
|
|
100
100
|
'import_id': request_json.id,
|
|
101
101
|
'status': 'running' if running else 'finished',
|
|
102
|
-
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# Attach live progress (percent complete, ETA, date reached so far) when the import
|
|
105
|
+
# is still running so callers can see real movement instead of a blind "running".
|
|
106
|
+
# When finished, clean up any lingering progress key.
|
|
107
|
+
import json
|
|
108
|
+
from jesse.services.redis import sync_redis
|
|
109
|
+
from jesse.modes.import_candles_mode import candle_import_progress_key
|
|
110
|
+
progress_key = candle_import_progress_key(request_json.id)
|
|
111
|
+
try:
|
|
112
|
+
if running:
|
|
113
|
+
raw = sync_redis.get(progress_key)
|
|
114
|
+
if raw:
|
|
115
|
+
response['progress'] = json.loads(raw)
|
|
116
|
+
else:
|
|
117
|
+
sync_redis.delete(progress_key)
|
|
118
|
+
except Exception:
|
|
119
|
+
pass
|
|
120
|
+
|
|
121
|
+
return JSONResponse(response, status_code=200)
|
|
103
122
|
|
|
104
123
|
|
|
105
124
|
@router.post("/existing")
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# MCP Usage Limits
|
|
2
|
+
|
|
3
|
+
The Jesse MCP server meters the *expensive* research-run tools so free-plan
|
|
4
|
+
users get a generous DAILY credit budget while premium users are unlimited.
|
|
5
|
+
|
|
6
|
+
## What is metered
|
|
7
|
+
|
|
8
|
+
Each of these four "run" tools costs **1 credit** — no weighting:
|
|
9
|
+
|
|
10
|
+
| Tool | Credits |
|
|
11
|
+
|--------------------------|---------|
|
|
12
|
+
| `run_backtest` | 1 |
|
|
13
|
+
| `run_significance_test` | 1 |
|
|
14
|
+
| `run_monte_carlo` | 1 |
|
|
15
|
+
| `run_optimization` | 1 |
|
|
16
|
+
|
|
17
|
+
Everything else (config/candle/strategy/indicator reads, *draft*
|
|
18
|
+
creation/updates, status polls, `get_*_session`, logs, cancel/terminate,
|
|
19
|
+
purge, …) is FREE and unmetered.
|
|
20
|
+
|
|
21
|
+
Daily budgets (UTC day): **guests = 0** (no research runs without an account),
|
|
22
|
+
**free (logged-in) = 100**; any paid plan is **unlimited**.
|
|
23
|
+
|
|
24
|
+
All of the above are config constants in `jesse/mcp/usage_limits.py` and are
|
|
25
|
+
overridable via environment variables:
|
|
26
|
+
|
|
27
|
+
| Env var | Default | Meaning |
|
|
28
|
+
|--------------------------------------|---------|----------------------------------|
|
|
29
|
+
| `MCP_GUEST_DAILY_CREDITS` | 0 | Daily budget for guests (no token); 0 = needs an account|
|
|
30
|
+
| `MCP_FREE_DAILY_CREDITS` | 100 | Daily budget for free (logged-in)|
|
|
31
|
+
| `MCP_CREDIT_WEIGHT_BACKTEST` | 1 | Credit cost of `run_backtest` |
|
|
32
|
+
| `MCP_CREDIT_WEIGHT_SIGNIFICANCE_TEST`| 1 | Credit cost of `run_significance_test`|
|
|
33
|
+
| `MCP_CREDIT_WEIGHT_MONTE_CARLO` | 1 | Credit cost of `run_monte_carlo` |
|
|
34
|
+
| `MCP_CREDIT_WEIGHT_OPTIMIZATION` | 1 | Credit cost of `run_optimization`|
|
|
35
|
+
| `MCP_USAGE_METER` | local | Meter backend: `local` or `remote` |
|
|
36
|
+
|
|
37
|
+
## How a user's plan is determined
|
|
38
|
+
|
|
39
|
+
Reuses Jesse's existing license system — a **read of an existing endpoint; nothing
|
|
40
|
+
is added on the backend**. `get_user_plan()` calls
|
|
41
|
+
`POST {JESSE_API_URL}/v2/user-info` with `Authorization: Bearer <LICENSE_API_TOKEN>`
|
|
42
|
+
(the same endpoint `jesse.services.general_info.get_general_info` already uses) and
|
|
43
|
+
reads the `plan` field (`free` / `guest` / `basic` / `pro` / `enterprise` /
|
|
44
|
+
`lifetime` / `premium` / …).
|
|
45
|
+
|
|
46
|
+
- Any PAID plan (anything that isn't `free`/`guest`) → always allowed (unlimited).
|
|
47
|
+
- **`free`** (logged in, not paid) → metered at the free budget (100/day); the
|
|
48
|
+
over-limit message notes that premium has no daily limit.
|
|
49
|
+
- **`guest`** — i.e. NO license token at all → guest budget is **0** by default, so
|
|
50
|
+
guests get **no research runs**; the message states that a free account is required.
|
|
51
|
+
A missing token means *guest*, NOT *error*, so this is deliberately not fail-open.
|
|
52
|
+
- **Plan undetermined** — a real backend error (token present but `/v2/user-info`
|
|
53
|
+
is unreachable / non-200 / malformed) → **FAIL OPEN** (allow the run, log a
|
|
54
|
+
warning). We never block a legit user because our own metering plumbing is down —
|
|
55
|
+
a soft limit, not a hard wall.
|
|
56
|
+
|
|
57
|
+
> The whole feature is **client-side**: the counter lives in the user's own Redis
|
|
58
|
+
> (see below) and the plan comes from the existing license read above. No new
|
|
59
|
+
> backend endpoint is required. A determined user can bypass a client-side limit;
|
|
60
|
+
> that's an accepted trade-off for a lenient, client-side limit.
|
|
61
|
+
|
|
62
|
+
## Limit-reached response
|
|
63
|
+
|
|
64
|
+
When a user is over budget, the gated tool returns this structured dict (it does
|
|
65
|
+
NOT raise — that would break the MCP client). The `message` and `is_guest` differ
|
|
66
|
+
for guests (a free account is required) vs free users (premium has no daily limit):
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"status": "limit_reached",
|
|
71
|
+
"message": "Daily free-plan limit reached (X of 100 research runs used today). Upgrade to premium for unlimited runs. Resets at 00:00 UTC.",
|
|
72
|
+
"used": 100,
|
|
73
|
+
"limit": 100,
|
|
74
|
+
"is_guest": false,
|
|
75
|
+
"reset_at": "2026-06-06T00:00:00+00:00"
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Meter backends
|
|
80
|
+
|
|
81
|
+
The counter lives behind a small `UsageMeter` interface with two
|
|
82
|
+
implementations, selected via `MCP_USAGE_METER`:
|
|
83
|
+
|
|
84
|
+
### `local` (default) — `LocalUsageMeter`
|
|
85
|
+
|
|
86
|
+
Redis-backed daily counter (reuses `jesse.services.redis.sync_redis`).
|
|
87
|
+
One key per user/day: `jesse:mcp:usage:<user_id>:<YYYY-MM-DD>`, where
|
|
88
|
+
`<user_id>` is the `LICENSE_API_TOKEN` (or `anonymous`). The key is `INCRBY`'d
|
|
89
|
+
by the run's cost (1 credit) and given a TTL that expires at the next 00:00 UTC,
|
|
90
|
+
so the counter self-resets daily.
|
|
91
|
+
|
|
92
|
+
> **Security note:** the local meter is *bypassable* — the MCP server runs on
|
|
93
|
+
> the user's own machine and they control Redis. It is a soft/honest limit
|
|
94
|
+
> only. For a real, enforced limit use the remote meter below.
|
|
95
|
+
|
|
96
|
+
### `remote` — `RemoteUsageMeter`
|
|
97
|
+
|
|
98
|
+
Delegates check+consume to the license backend, which owns the counter and is
|
|
99
|
+
authoritative (tamper-proof). **This backend endpoint does not exist yet** —
|
|
100
|
+
the client is written against the contract below for the backend team to
|
|
101
|
+
implement. Switch on with `export MCP_USAGE_METER=remote`.
|
|
102
|
+
|
|
103
|
+
#### Backend contract (to be implemented)
|
|
104
|
+
|
|
105
|
+
**Request**
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
POST {JESSE_API_URL}/mcp-usage/consume
|
|
109
|
+
Authorization: Bearer <LICENSE_API_TOKEN>
|
|
110
|
+
Content-Type: application/json
|
|
111
|
+
|
|
112
|
+
{ "credits": 1 }
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
- The license token identifies the user. The backend looks up the user's plan.
|
|
116
|
+
- `credits` is the cost of the run the user is about to do (always 1 today).
|
|
117
|
+
|
|
118
|
+
**Behaviour**
|
|
119
|
+
|
|
120
|
+
- `premium` users: always `allowed: true` (the backend may skip counting).
|
|
121
|
+
- `free`/`guest` users: atomically check the user's daily budget and, if there
|
|
122
|
+
is room, consume `credits`. If consuming would exceed the limit, do NOT
|
|
123
|
+
consume and return `allowed: false`.
|
|
124
|
+
- The counter resets at 00:00 UTC each day.
|
|
125
|
+
|
|
126
|
+
**Response** (HTTP 200)
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"allowed": true,
|
|
131
|
+
"used": 15,
|
|
132
|
+
"limit": 100,
|
|
133
|
+
"reset_at": "2026-06-06T00:00:00+00:00"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
| Field | Type | Meaning |
|
|
138
|
+
|------------|---------|------------------------------------------------------------|
|
|
139
|
+
| `allowed` | bool | Whether the run may proceed. |
|
|
140
|
+
| `used` | int | Credits used today (after this consume if allowed). |
|
|
141
|
+
| `limit` | int | The user's daily limit (omit/null for unlimited/premium). |
|
|
142
|
+
| `reset_at` | string | ISO8601 timestamp of the next reset (next 00:00 UTC). |
|
|
143
|
+
|
|
144
|
+
**Fail-open:** if the backend returns a non-200, non-JSON, or is unreachable,
|
|
145
|
+
the MCP client ALLOWS the run (and logs a warning) so transient backend issues
|
|
146
|
+
never block legit users.
|
|
147
|
+
```
|
|
@@ -125,7 +125,7 @@ Stages a draft you can then run.
|
|
|
125
125
|
- `num_scenarios` — int (default **200**, recommend 200–1000)
|
|
126
126
|
- `run_trades` — bool (default **False**)
|
|
127
127
|
- `run_candles` — bool (default **True**)
|
|
128
|
-
- `fast_mode` — bool (default
|
|
128
|
+
- `fast_mode` — bool (default **True**; fast resampling-and-replay path, robust on synthetic candles — recommended)
|
|
129
129
|
- `cpu_cores` — int (default: `cpu_count - 1`, capped at 4)
|
|
130
130
|
- `pipeline_type` — str (default `"moving_block_bootstrap"`)
|
|
131
131
|
- `pipeline_params` — optional JSON object string
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Hyperparameter Optimization via MCP
|
|
2
|
+
|
|
3
|
+
Optimization tunes a strategy's `hyperparameters()` to maximize an objective
|
|
4
|
+
(Sharpe by default) on a **training** window, and reports each candidate's
|
|
5
|
+
**out-of-sample** performance on a separate **testing** window. The train/test
|
|
6
|
+
split is the whole point: it lets you tell a genuinely good parameter set apart
|
|
7
|
+
from one that's overfit to the training data.
|
|
8
|
+
|
|
9
|
+
It answers: "what parameter values work best for this strategy, and do they hold
|
|
10
|
+
up on data they weren't tuned on?"
|
|
11
|
+
|
|
12
|
+
## Preconditions (read before creating a draft)
|
|
13
|
+
|
|
14
|
+
1. **The strategy must declare a non-empty `hyperparameters()`** list — that list
|
|
15
|
+
is what gets optimized. A strategy with no hyperparameters cannot be optimized
|
|
16
|
+
and the run stops with an `InvalidStrategy` error. Each entry looks like:
|
|
17
|
+
```python
|
|
18
|
+
def hyperparameters(self):
|
|
19
|
+
return [
|
|
20
|
+
{'name': 'fast_period', 'type': int, 'min': 5, 'max': 25, 'default': 10},
|
|
21
|
+
{'name': 'slow_period', 'type': int, 'min': 26, 'max': 60, 'default': 30},
|
|
22
|
+
]
|
|
23
|
+
```
|
|
24
|
+
Types: `int`, `float`, or `categorical` (with an `options` list). The strategy
|
|
25
|
+
reads the chosen values via `self.hp['name']`.
|
|
26
|
+
2. **Candles must exist for BOTH windows** (training and testing), plus ~warm-up
|
|
27
|
+
candles before each start. Don't pre-check — run it; on a candle shortage the
|
|
28
|
+
session stops with a clear message telling you exactly what to import, then
|
|
29
|
+
`import_candles()` and `rerun_optimization()`.
|
|
30
|
+
|
|
31
|
+
## Key concepts
|
|
32
|
+
|
|
33
|
+
| Concept | What it means |
|
|
34
|
+
|---|---|
|
|
35
|
+
| **Training window** | `training_start_date` → `training_finish_date`. The in-sample period the optimizer tunes on. |
|
|
36
|
+
| **Testing window** | `testing_start_date` → `testing_finish_date`. The out-of-sample period each candidate is re-evaluated on (not used for tuning). Conventionally `testing_start_date == training_finish_date` (contiguous), but any non-overlapping ranges are fine. |
|
|
37
|
+
| **objective_function** | What to maximize. One of `sharpe` (default), `calmar`, `sortino`, `omega`, `serenity`, `smart sharpe`, `smart sortino`. |
|
|
38
|
+
| **trials** | Trials **per hyperparameter**. Total trials = `n_hyperparameters × trials`. With 2 hyperparameters and `trials=200`, the optimizer runs 400 trials. Lower it (e.g. 20–50) for a quick exploratory run. |
|
|
39
|
+
| **best_candidates** | The ranked top parameter sets, each with training AND testing metrics. |
|
|
40
|
+
|
|
41
|
+
## Interpreting best_candidates (overfit detection)
|
|
42
|
+
|
|
43
|
+
Each finished session exposes `best_candidates`, ranked best-first by the
|
|
44
|
+
objective on the training window. The critical read is **training vs testing**:
|
|
45
|
+
|
|
46
|
+
| Pattern | Verdict |
|
|
47
|
+
|---|---|
|
|
48
|
+
| Strong on training **and** testing holds up close to training | **Trustworthy.** The parameters generalize — this is what you want. |
|
|
49
|
+
| Strong on training, **much weaker / negative on testing** | **Overfit.** Tuned to noise in the training window; don't deploy. |
|
|
50
|
+
| Mediocre on both | No edge from these parameters — the strategy/idea may not work. |
|
|
51
|
+
| Weak on training but strong on testing | Usually luck on the test window; treat with suspicion, prefer consistency. |
|
|
52
|
+
|
|
53
|
+
Each candidate carries:
|
|
54
|
+
- `rank` (`#1` is best by the training objective), `trial`, `params` (the tuned
|
|
55
|
+
values), `fitness` (the objective score), `dna` (a compact encoding),
|
|
56
|
+
- `training_metrics` and `testing_metrics` (full metric dicts each),
|
|
57
|
+
- `objective_metric` — a convenient `"<train> / <test>"` summary on the chosen
|
|
58
|
+
objective.
|
|
59
|
+
|
|
60
|
+
**Don't just pick rank #1.** Rank is by *training* fitness; the right choice is
|
|
61
|
+
the candidate whose **testing** metrics hold up best relative to its training
|
|
62
|
+
metrics (smallest train→test degradation), among the strong performers.
|
|
63
|
+
|
|
64
|
+
## Tool reference
|
|
65
|
+
|
|
66
|
+
### create_optimization_draft()
|
|
67
|
+
Stages a draft you can then run.
|
|
68
|
+
- `exchange` (default `"Binance Perpetual Futures"`)
|
|
69
|
+
- `routes` — JSON string array of route objects
|
|
70
|
+
- `data_routes` — JSON string array (default `"[]"`)
|
|
71
|
+
- `training_start_date`, `training_finish_date` — `YYYY-MM-DD`
|
|
72
|
+
- `testing_start_date`, `testing_finish_date` — `YYYY-MM-DD`
|
|
73
|
+
- `optimal_total` — int, target number of best candidates to surface (default 50)
|
|
74
|
+
- `objective_function` — str (default `"sharpe"`; see list above)
|
|
75
|
+
- `trials` — int, per hyperparameter (default 200)
|
|
76
|
+
- `best_candidates_count` — int (default 20)
|
|
77
|
+
- `warm_up_candles` — int (default 210)
|
|
78
|
+
- `fast_mode` — bool (default True)
|
|
79
|
+
- `cpu_cores` — int (default `cpu_count - 1`, capped at 4)
|
|
80
|
+
- `title`, `description`, `strategy_summary`, `hypothesis`, `rationale` — optional
|
|
81
|
+
notes metadata; auto-generated if omitted
|
|
82
|
+
|
|
83
|
+
Returns: `{ "status": "success", "session_id": "<uuid>", ... }`
|
|
84
|
+
|
|
85
|
+
### update_optimization_draft(session_id, state)
|
|
86
|
+
Replace the whole `state` on an existing draft (read-modify-write).
|
|
87
|
+
|
|
88
|
+
### update_optimization_notes(session_id, title?, description?, strategy_codes?)
|
|
89
|
+
Update notes — typically to record the chosen parameters and conclusion.
|
|
90
|
+
|
|
91
|
+
### get_optimization_session(session_id)
|
|
92
|
+
Fetch full details — the primary polling tool.
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"data": { "session": {
|
|
96
|
+
"id": "<uuid>",
|
|
97
|
+
"status": "running",
|
|
98
|
+
"completed_trials": 120,
|
|
99
|
+
"total_trials": 400,
|
|
100
|
+
"best_candidates": [
|
|
101
|
+
{ "rank": "#1", "trial": "Trial 18",
|
|
102
|
+
"params": {"fast_period": 12, "slow_period": 35},
|
|
103
|
+
"fitness": 0.48, "dna": "...",
|
|
104
|
+
"training_metrics": {"sharpe_ratio": 2.13, "total": 38, ...},
|
|
105
|
+
"testing_metrics": {"sharpe_ratio": 1.72, "total": 17, ...},
|
|
106
|
+
"objective_metric": "2.13 / 1.72" }
|
|
107
|
+
],
|
|
108
|
+
"objective_curve": [...],
|
|
109
|
+
"exception": null, "traceback": null
|
|
110
|
+
} },
|
|
111
|
+
"error": null, "message": "Optimization session retrieved successfully"
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### get_optimization_sessions(limit?, offset?, title_search?, status_filter?, date_filter?)
|
|
116
|
+
List sessions (most recent first). `status_filter`: `draft`, `running`, `paused`,
|
|
117
|
+
`finished`, `stopped`, `terminated`.
|
|
118
|
+
|
|
119
|
+
### get_optimization_logs(session_id)
|
|
120
|
+
Fetch the log file content. Useful when `status == "stopped"` to find the
|
|
121
|
+
underlying error, or to watch trial-by-trial progress on a long run.
|
|
122
|
+
|
|
123
|
+
### run_optimization(session_id)
|
|
124
|
+
Fire-and-poll. Returns `{ "status": "started", ... }` when the server accepts.
|
|
125
|
+
Then keep checking `get_optimization_session` until a terminal status. See
|
|
126
|
+
"Checking for results" below.
|
|
127
|
+
|
|
128
|
+
### rerun_optimization(session_id)
|
|
129
|
+
Reset (clears prior trials/best_candidates) and restart an existing session. Use
|
|
130
|
+
this to run a finished/stopped session again — e.g. after importing missing
|
|
131
|
+
candles or editing the strategy. Cancel a running session first.
|
|
132
|
+
|
|
133
|
+
### cancel_optimization(session_id)
|
|
134
|
+
Cooperative cancel — stops at the next trial checkpoint; completed trials are kept.
|
|
135
|
+
|
|
136
|
+
### terminate_optimization(session_id)
|
|
137
|
+
Hard stop — marks the session `terminated` and force-kills the worker. Prefer
|
|
138
|
+
`cancel_optimization` unless the worker is stuck.
|
|
139
|
+
|
|
140
|
+
### purge_optimization_sessions(days_old?)
|
|
141
|
+
Delete old sessions. If `days_old` is omitted, deletes **all** sessions.
|
|
142
|
+
|
|
143
|
+
## Checking for results
|
|
144
|
+
|
|
145
|
+
Optimization is the **slowest** of the modes — it runs `n_hyperparameters ×
|
|
146
|
+
trials` backtests, each on both the training and testing windows. Keep checking
|
|
147
|
+
until a terminal status (`finished`, `stopped`, `terminated`); never ask the user
|
|
148
|
+
to drive the loop. Watch `completed_trials / total_trials` for progress and ETA.
|
|
149
|
+
|
|
150
|
+
Adaptive check schedule (when `status == "running"`):
|
|
151
|
+
|
|
152
|
+
| Elapsed since fire | Check every |
|
|
153
|
+
|---|---|
|
|
154
|
+
| 0 – 1 min | 5 s |
|
|
155
|
+
| 1 – 5 min | 20 s |
|
|
156
|
+
| 5 – 30 min | 60 s |
|
|
157
|
+
| 30 – 120 min | 2 – 3 min |
|
|
158
|
+
| > 2 h | 5 min |
|
|
159
|
+
|
|
160
|
+
If `completed_trials > 0`, estimate ETA as
|
|
161
|
+
`elapsed × (total_trials / completed_trials)` and set the next check to roughly
|
|
162
|
+
`min(remaining_eta / 5, max_interval)`.
|
|
163
|
+
|
|
164
|
+
Status semantics:
|
|
165
|
+
- `running` / `paused` → keep checking
|
|
166
|
+
- `finished` → read `best_candidates`; report the train-vs-test verdict
|
|
167
|
+
- `stopped` → run failed; read `exception` (e.g. missing candles, or the strategy
|
|
168
|
+
has no hyperparameters) and `get_optimization_logs(sid)`, then report it
|
|
169
|
+
- `terminated` → user-initiated stop; report the partial state, don't retry
|
|
170
|
+
without the user's say-so
|
|
171
|
+
|
|
172
|
+
User-facing language: say **"checking for results"** in chat, not "polling".
|
|
173
|
+
|
|
174
|
+
## Standard workflow
|
|
175
|
+
|
|
176
|
+
```python
|
|
177
|
+
# 1. Stage the optimization (train then test, contiguous windows)
|
|
178
|
+
draft = create_optimization_draft(
|
|
179
|
+
exchange="Binance Perpetual Futures",
|
|
180
|
+
routes='[{"exchange":"Binance Perpetual Futures","strategy":"MyStrategy","symbol":"BTC-USDT","timeframe":"4h"}]',
|
|
181
|
+
training_start_date="2023-01-01", training_finish_date="2024-06-01",
|
|
182
|
+
testing_start_date="2024-06-01", testing_finish_date="2024-12-01",
|
|
183
|
+
objective_function="sharpe", trials=100,
|
|
184
|
+
hypothesis="MyStrategy's EMA periods generalize out-of-sample.",
|
|
185
|
+
)
|
|
186
|
+
sid = draft["session_id"]
|
|
187
|
+
|
|
188
|
+
# 2. Fire it
|
|
189
|
+
run_optimization(sid)
|
|
190
|
+
|
|
191
|
+
# 3. Keep checking until terminal (optimization is slow — widen the interval)
|
|
192
|
+
while True:
|
|
193
|
+
s = get_optimization_session(sid)
|
|
194
|
+
status = s["data"]["session"]["status"]
|
|
195
|
+
if status in ("finished", "stopped", "terminated"):
|
|
196
|
+
break
|
|
197
|
+
time.sleep(20)
|
|
198
|
+
|
|
199
|
+
# 4. Pick the candidate that generalizes best (smallest train->test drop)
|
|
200
|
+
session = s["data"]["session"]
|
|
201
|
+
if status == "finished":
|
|
202
|
+
cands = session["best_candidates"]
|
|
203
|
+
# report rank #1 plus train-vs-test for the top few; flag overfit candidates
|
|
204
|
+
elif status == "stopped":
|
|
205
|
+
# read session["exception"] / get_optimization_logs(sid); if missing candles,
|
|
206
|
+
# import_candles() for both windows (~2 months before each start) then rerun_optimization(sid)
|
|
207
|
+
...
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Constraints / common errors
|
|
211
|
+
|
|
212
|
+
- **Strategy needs `hyperparameters()`** — empty list → `InvalidStrategy`, nothing
|
|
213
|
+
to optimize.
|
|
214
|
+
- **Candles for BOTH windows** — a shortage stops the session with a message
|
|
215
|
+
naming both windows; `import_candles()` then `rerun_optimization()`.
|
|
216
|
+
- **`trials` is per-hyperparameter** — total = `n_hyperparameters × trials`. Don't
|
|
217
|
+
set it huge on a multi-hyperparameter strategy unless you want a very long run.
|
|
218
|
+
- **At least one route is required.**
|
|
219
|
+
- **409 on the main endpoint** — the draft row already exists, which is why
|
|
220
|
+
`run_optimization` fires via the resume endpoint; you don't normally hit this.
|
|
221
|
+
- **CPU- and time-bound** — far heavier than a single backtest. Use a smaller
|
|
222
|
+
`trials` and short windows for a quick exploratory pass, then scale up.
|
|
@@ -39,6 +39,7 @@ from jesse.mcp.tools.candles import register_candles_tools
|
|
|
39
39
|
from jesse.mcp.tools.indicator import register_indicator_tools
|
|
40
40
|
from jesse.mcp.tools.significance_test import register_significance_test_tools
|
|
41
41
|
from jesse.mcp.tools.monte_carlo import register_monte_carlo_tools
|
|
42
|
+
from jesse.mcp.tools.optimization import register_optimization_tools
|
|
42
43
|
|
|
43
44
|
def register_tools(mcp):
|
|
44
45
|
"""
|
|
@@ -73,3 +74,6 @@ def register_tools(mcp):
|
|
|
73
74
|
|
|
74
75
|
# Monte Carlo simulation tools (robustness analysis of finished strategies)
|
|
75
76
|
register_monte_carlo_tools(mcp)
|
|
77
|
+
|
|
78
|
+
# Optimization tools (hyperparameter tuning with train/test split)
|
|
79
|
+
register_optimization_tools(mcp)
|
|
@@ -24,6 +24,7 @@ from .services import (
|
|
|
24
24
|
cancel_backtest_service,
|
|
25
25
|
purge_backtest_sessions_service
|
|
26
26
|
)
|
|
27
|
+
from jesse.mcp.usage_limits import gated, CREDIT_WEIGHTS
|
|
27
28
|
|
|
28
29
|
def register_backtest_tools(mcp):
|
|
29
30
|
"""
|
|
@@ -49,7 +50,7 @@ def register_backtest_tools(mcp):
|
|
|
49
50
|
export_json: bool = False,
|
|
50
51
|
export_chart: bool = True,
|
|
51
52
|
export_tradingview: bool = False,
|
|
52
|
-
fast_mode: bool =
|
|
53
|
+
fast_mode: bool = True,
|
|
53
54
|
benchmark: bool = True,
|
|
54
55
|
title: str = None,
|
|
55
56
|
description: str = None,
|
|
@@ -90,7 +91,8 @@ def register_backtest_tools(mcp):
|
|
|
90
91
|
export_json (bool): Export backtest results as JSON file
|
|
91
92
|
export_chart (bool): Export chart data for visualization
|
|
92
93
|
export_tradingview (bool): Export TradingView Pine Script for chart analysis
|
|
93
|
-
fast_mode (bool): Enable fast mode for quicker execution (reduced precision)
|
|
94
|
+
fast_mode (bool): Enable fast mode for quicker execution (reduced precision).
|
|
95
|
+
Defaults to True. The agent may set it False for a full-precision run.
|
|
94
96
|
benchmark (bool): Run benchmark comparison against buy-and-hold strategy
|
|
95
97
|
title (str, optional): Human-readable note title for this MCP-created session.
|
|
96
98
|
If omitted, Jesse MCP generates one from the first route.
|
|
@@ -431,6 +433,7 @@ def register_backtest_tools(mcp):
|
|
|
431
433
|
)
|
|
432
434
|
|
|
433
435
|
@mcp.tool()
|
|
436
|
+
@gated(weight=CREDIT_WEIGHTS["run_backtest"])
|
|
434
437
|
def run_backtest(session_id: str) -> dict:
|
|
435
438
|
"""
|
|
436
439
|
Trigger a backtest and return immediately (fire-and-poll pattern).
|
|
@@ -33,6 +33,7 @@ from .services import (
|
|
|
33
33
|
terminate_monte_carlo_service,
|
|
34
34
|
purge_monte_carlo_sessions_service,
|
|
35
35
|
)
|
|
36
|
+
from jesse.mcp.usage_limits import gated, CREDIT_WEIGHTS
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
def register_monte_carlo_tools(mcp):
|
|
@@ -48,7 +49,7 @@ def register_monte_carlo_tools(mcp):
|
|
|
48
49
|
num_scenarios: int = 200,
|
|
49
50
|
run_trades: bool = False,
|
|
50
51
|
run_candles: bool = True,
|
|
51
|
-
fast_mode: bool =
|
|
52
|
+
fast_mode: bool = True,
|
|
52
53
|
cpu_cores: int = None,
|
|
53
54
|
pipeline_type: str = 'moving_block_bootstrap',
|
|
54
55
|
pipeline_params: str = None,
|
|
@@ -81,7 +82,14 @@ def register_monte_carlo_tools(mcp):
|
|
|
81
82
|
run_candles: Whether to run the candles resampler (default True).
|
|
82
83
|
Candles MC is the main mode — it resamples the underlying
|
|
83
84
|
price series and re-runs the strategy on each variant.
|
|
84
|
-
fast_mode:
|
|
85
|
+
fast_mode: Use the fast resampling-and-replay path (default True).
|
|
86
|
+
Strongly recommended for candle Monte Carlo: the full
|
|
87
|
+
step-simulator can blow up on synthetic bootstrapped candles
|
|
88
|
+
(risk-sized strategies size positions off a momentarily tiny
|
|
89
|
+
ATR, the balance compounds to overflow, and scenarios die with
|
|
90
|
+
InsufficientMargin / Infinity). The fast path is robust and is
|
|
91
|
+
what the dashboard's healthy runs use. Only set False if you
|
|
92
|
+
specifically need the step simulator and accept those caveats.
|
|
85
93
|
cpu_cores: Worker count. Defaults to (cpu_count - 1, capped at 4).
|
|
86
94
|
pipeline_type: Candle resampling pipeline. Default
|
|
87
95
|
"moving_block_bootstrap". Other options depend on the
|
|
@@ -306,6 +314,7 @@ def register_monte_carlo_tools(mcp):
|
|
|
306
314
|
return get_monte_carlo_logs_service(session_id)
|
|
307
315
|
|
|
308
316
|
@mcp.tool()
|
|
317
|
+
@gated(weight=CREDIT_WEIGHTS["run_monte_carlo"])
|
|
309
318
|
def run_monte_carlo(session_id: str) -> dict:
|
|
310
319
|
"""
|
|
311
320
|
Fire a Monte Carlo simulation for a previously created draft and return immediately.
|