Copy disabled (too large)
Download .txt
Showing preview only (31,131K chars total). Download the full file to get everything.
Repository: jesse-ai/jesse
Branch: master
Commit: b64c867d53e5
Files: 2201
Total size: 39.9 MB
Directory structure:
gitextract_flm9a1yh/
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── stale.yml
│ └── workflows/
│ ├── codeql-analysis.yml
│ └── python-package.yml
├── .gitignore
├── AGENTS.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── README.md
├── codecov.yml
├── conftest.py
├── jesse/
│ ├── __init__.py
│ ├── candle_pipelines/
│ │ ├── __init__.py
│ │ ├── base_candles.py
│ │ ├── gaussian_noise.py
│ │ ├── gaussian_resampler.py
│ │ └── moving_block_bootstrap.py
│ ├── cli.py
│ ├── config.py
│ ├── constants.py
│ ├── controllers/
│ │ ├── __init__.py
│ │ ├── auth_controller.py
│ │ ├── backtest_controller.py
│ │ ├── candles_controller.py
│ │ ├── closed_trade_controller.py
│ │ ├── config_controller.py
│ │ ├── exchange_controller.py
│ │ ├── file_controller.py
│ │ ├── live_controller.py
│ │ ├── lsp_controller.py
│ │ ├── monte_carlo_controller.py
│ │ ├── notification_controller.py
│ │ ├── optimization_controller.py
│ │ ├── order_controller.py
│ │ ├── strategy_controller.py
│ │ ├── system_controller.py
│ │ ├── tabs_controller.py
│ │ └── websocket_controller.py
│ ├── enums/
│ │ └── __init__.py
│ ├── exceptions/
│ │ └── __init__.py
│ ├── exchanges/
│ │ ├── __init__.py
│ │ ├── exchange.py
│ │ └── sandbox/
│ │ ├── Sandbox.py
│ │ └── __init__.py
│ ├── factories/
│ │ ├── __init__.py
│ │ ├── candle_factory.py
│ │ └── order_factory.py
│ ├── helpers.py
│ ├── indicators/
│ │ ├── __init__.py
│ │ ├── acosc.py
│ │ ├── ad.py
│ │ ├── adosc.py
│ │ ├── adx.py
│ │ ├── adxr.py
│ │ ├── alligator.py
│ │ ├── alma.py
│ │ ├── ao.py
│ │ ├── apo.py
│ │ ├── aroon.py
│ │ ├── aroonosc.py
│ │ ├── atr.py
│ │ ├── avgprice.py
│ │ ├── bandpass.py
│ │ ├── beta.py
│ │ ├── bollinger_bands.py
│ │ ├── bollinger_bands_width.py
│ │ ├── bop.py
│ │ ├── cc.py
│ │ ├── cci.py
│ │ ├── cfo.py
│ │ ├── cg.py
│ │ ├── chande.py
│ │ ├── chop.py
│ │ ├── cksp.py
│ │ ├── cmo.py
│ │ ├── correl.py
│ │ ├── correlation_cycle.py
│ │ ├── cvi.py
│ │ ├── cwma.py
│ │ ├── damiani_volatmeter.py
│ │ ├── dec_osc.py
│ │ ├── decycler.py
│ │ ├── dema.py
│ │ ├── devstop.py
│ │ ├── di.py
│ │ ├── dm.py
│ │ ├── donchian.py
│ │ ├── dpo.py
│ │ ├── dti.py
│ │ ├── dx.py
│ │ ├── edcf.py
│ │ ├── efi.py
│ │ ├── ema.py
│ │ ├── emd.py
│ │ ├── emv.py
│ │ ├── epma.py
│ │ ├── er.py
│ │ ├── eri.py
│ │ ├── fisher.py
│ │ ├── fosc.py
│ │ ├── frama.py
│ │ ├── fwma.py
│ │ ├── gatorosc.py
│ │ ├── gauss.py
│ │ ├── heikin_ashi_candles.py
│ │ ├── high_pass.py
│ │ ├── high_pass_2_pole.py
│ │ ├── hma.py
│ │ ├── hull_suit.py
│ │ ├── hurst_exponent.py
│ │ ├── hwma.py
│ │ ├── ichimoku_cloud.py
│ │ ├── ichimoku_cloud_seq.py
│ │ ├── ift_rsi.py
│ │ ├── itrend.py
│ │ ├── jma.py
│ │ ├── jsa.py
│ │ ├── kama.py
│ │ ├── kaufmanstop.py
│ │ ├── kdj.py
│ │ ├── keltner.py
│ │ ├── kst.py
│ │ ├── kurtosis.py
│ │ ├── kvo.py
│ │ ├── linearreg.py
│ │ ├── linearreg_angle.py
│ │ ├── linearreg_intercept.py
│ │ ├── linearreg_slope.py
│ │ ├── lrsi.py
│ │ ├── ma.py
│ │ ├── maaq.py
│ │ ├── mab.py
│ │ ├── macd.py
│ │ ├── mama.py
│ │ ├── marketfi.py
│ │ ├── mass.py
│ │ ├── mcginley_dynamic.py
│ │ ├── mean_ad.py
│ │ ├── median_ad.py
│ │ ├── medprice.py
│ │ ├── mfi.py
│ │ ├── midpoint.py
│ │ ├── midprice.py
│ │ ├── minmax.py
│ │ ├── mom.py
│ │ ├── mwdx.py
│ │ ├── natr.py
│ │ ├── nma.py
│ │ ├── nvi.py
│ │ ├── obv.py
│ │ ├── pfe.py
│ │ ├── pivot.py
│ │ ├── pma.py
│ │ ├── ppo.py
│ │ ├── pvi.py
│ │ ├── pwma.py
│ │ ├── qstick.py
│ │ ├── reflex.py
│ │ ├── rma.py
│ │ ├── roc.py
│ │ ├── rocp.py
│ │ ├── rocr.py
│ │ ├── rocr100.py
│ │ ├── roofing.py
│ │ ├── rsi.py
│ │ ├── rsmk.py
│ │ ├── rsx.py
│ │ ├── rvi.py
│ │ ├── safezonestop.py
│ │ ├── sar.py
│ │ ├── settings.jsonc
│ │ ├── sinwma.py
│ │ ├── skew.py
│ │ ├── sma.py
│ │ ├── smma.py
│ │ ├── squeeze_momentum.py
│ │ ├── sqwma.py
│ │ ├── srsi.py
│ │ ├── srwma.py
│ │ ├── stc.py
│ │ ├── stddev.py
│ │ ├── stiffness.py
│ │ ├── stochastic.py
│ │ ├── stochf.py
│ │ ├── supersmoother.py
│ │ ├── supersmoother_3_pole.py
│ │ ├── supertrend.py
│ │ ├── support_resistance_with_break.py
│ │ ├── swma.py
│ │ ├── t3.py
│ │ ├── tema.py
│ │ ├── trange.py
│ │ ├── trendflex.py
│ │ ├── trima.py
│ │ ├── trix.py
│ │ ├── tsf.py
│ │ ├── tsi.py
│ │ ├── ttm_squeeze.py
│ │ ├── ttm_trend.py
│ │ ├── typprice.py
│ │ ├── ui.py
│ │ ├── ultosc.py
│ │ ├── var.py
│ │ ├── vi.py
│ │ ├── vidya.py
│ │ ├── vlma.py
│ │ ├── volume.py
│ │ ├── vosc.py
│ │ ├── voss.py
│ │ ├── vpci.py
│ │ ├── vpt.py
│ │ ├── vpwma.py
│ │ ├── vwap.py
│ │ ├── vwma.py
│ │ ├── vwmacd.py
│ │ ├── wad.py
│ │ ├── waddah_attr_explosion.py
│ │ ├── wclprice.py
│ │ ├── wilders.py
│ │ ├── willr.py
│ │ ├── wma.py
│ │ ├── wt.py
│ │ ├── zlema.py
│ │ └── zscore.py
│ ├── info.py
│ ├── libs/
│ │ ├── __init__.py
│ │ ├── custom_json/
│ │ │ └── __init__.py
│ │ └── dynamic_numpy_array/
│ │ └── __init__.py
│ ├── models/
│ │ ├── BacktestSession.py
│ │ ├── Candle.py
│ │ ├── ClosedTrade.py
│ │ ├── Exchange.py
│ │ ├── ExchangeApiKeys.py
│ │ ├── FuturesExchange.py
│ │ ├── LiveEquitySnapshot.py
│ │ ├── LiveSession.py
│ │ ├── Log.py
│ │ ├── MonteCarloSession.py
│ │ ├── NotificationApiKeys.py
│ │ ├── OpenTab.py
│ │ ├── OptimizationSession.py
│ │ ├── Option.py
│ │ ├── Order.py
│ │ ├── Orderbook.py
│ │ ├── Position.py
│ │ ├── Route.py
│ │ ├── SpotExchange.py
│ │ ├── Ticker.py
│ │ ├── Trade.py
│ │ └── __init__.py
│ ├── modes/
│ │ ├── __init__.py
│ │ ├── backtest_mode.py
│ │ ├── data_provider.py
│ │ ├── exchange_api_keys.py
│ │ ├── import_candles_mode/
│ │ │ ├── __init__.py
│ │ │ └── drivers/
│ │ │ ├── Apex/
│ │ │ │ ├── ApexOmniPerpetual.py
│ │ │ │ ├── ApexOmniPerpetualTestnet.py
│ │ │ │ ├── ApexProMain.py
│ │ │ │ ├── ApexProPerpetual.py
│ │ │ │ ├── ApexProPerpetualTestnet.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── apex_pro_utils.py
│ │ │ │ └── omni_files/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── zklink_sdk-arm.py
│ │ │ │ ├── zklink_sdk-pc.py
│ │ │ │ ├── zklink_sdk-x86.py
│ │ │ │ └── zklink_sdk.py
│ │ │ ├── Binance/
│ │ │ │ ├── BinanceMain.py
│ │ │ │ ├── BinancePerpetualFutures.py
│ │ │ │ ├── BinancePerpetualFuturesTestnet.py
│ │ │ │ ├── BinanceSpot.py
│ │ │ │ ├── BinanceUSSpot.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── binance_utils.py
│ │ │ ├── Bitfinex/
│ │ │ │ ├── BitfinexSpot.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── bitfinex_utils.py
│ │ │ ├── Bybit/
│ │ │ │ ├── BybitMain.py
│ │ │ │ ├── BybitSpot.py
│ │ │ │ ├── BybitSpotTestnet.py
│ │ │ │ ├── BybitUSDCPerpetual.py
│ │ │ │ ├── BybitUSDCPerpetualTestnet.py
│ │ │ │ ├── BybitUSDTPerpetual.py
│ │ │ │ ├── BybitUSDTPerpetualTestnet.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── bybit_utils.py
│ │ │ ├── Coinbase/
│ │ │ │ ├── CoinbaseSpot.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── coinbase_utils.py
│ │ │ ├── Gate/
│ │ │ │ ├── GateSpot.py
│ │ │ │ ├── GateSpotMain.py
│ │ │ │ ├── GateUSDTMain.py
│ │ │ │ ├── GateUSDTPerpetual.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── gate_utils.py
│ │ │ ├── Hyperliquid/
│ │ │ │ ├── HyperliquidPerpetual.py
│ │ │ │ ├── HyperliquidPerpetualMain.py
│ │ │ │ ├── HyperliquidPerpetualTestnet.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── hyperliquid_utils.py
│ │ │ ├── __init__.py
│ │ │ └── interface.py
│ │ ├── monte_carlo_mode/
│ │ │ ├── MonteCarloRunner.py
│ │ │ └── __init__.py
│ │ ├── notification_api_keys.py
│ │ ├── optimize_mode/
│ │ │ ├── Optimize.py
│ │ │ ├── __init__.py
│ │ │ └── fitness.py
│ │ └── utils.py
│ ├── repositories/
│ │ ├── __init__.py
│ │ ├── candle_repository.py
│ │ ├── closed_trade_repository.py
│ │ ├── live_equity_repository.py
│ │ ├── live_session_repository.py
│ │ ├── open_tab_repository.py
│ │ └── order_repository.py
│ ├── research/
│ │ ├── __init__.py
│ │ ├── backtest.py
│ │ ├── candles.py
│ │ ├── import_candles.py
│ │ ├── ml.py
│ │ └── monte_carlo/
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── monte_carlo_candles.py
│ │ └── monte_carlo_trades.py
│ ├── routes/
│ │ └── __init__.py
│ ├── services/
│ │ ├── __init__.py
│ │ ├── api.py
│ │ ├── auth.py
│ │ ├── broker.py
│ │ ├── cache.py
│ │ ├── candle_service.py
│ │ ├── charts.py
│ │ ├── closed_trade_service.py
│ │ ├── color.py
│ │ ├── db.py
│ │ ├── env.py
│ │ ├── exchange_service.py
│ │ ├── failure.py
│ │ ├── file.py
│ │ ├── general_info.py
│ │ ├── installer.py
│ │ ├── jesse_trade.py
│ │ ├── logger.py
│ │ ├── lsp.py
│ │ ├── metrics.py
│ │ ├── migrator.py
│ │ ├── multiprocessing.py
│ │ ├── notifier.py
│ │ ├── order_service.py
│ │ ├── position_service.py
│ │ ├── progressbar.py
│ │ ├── redis.py
│ │ ├── report.py
│ │ ├── strategy_handler/
│ │ │ ├── ExampleStrategy/
│ │ │ │ └── __init__.py
│ │ │ └── __init__.py
│ │ ├── strategy_service.py
│ │ ├── table.py
│ │ ├── tradingview.py
│ │ ├── transformers.py
│ │ ├── validators.py
│ │ ├── web.py
│ │ └── ws_manager.py
│ ├── static/
│ │ ├── 200.html
│ │ ├── 404.html
│ │ ├── _nuxt/
│ │ │ ├── -30QC5Em.js
│ │ │ ├── 2oJWbEOo.js
│ │ │ ├── 3TATJI7h.js
│ │ │ ├── 3cNudfSz.js
│ │ │ ├── 3e1v2bzS.js
│ │ │ ├── 3kbuJQcV.js
│ │ │ ├── 3xVqZejG.js
│ │ │ ├── 5LuOXUq_.js
│ │ │ ├── 727ZlQH0.js
│ │ │ ├── 7A4Fjokl.js
│ │ │ ├── 7O62HKoU.js
│ │ │ ├── 9C6ErRqt.js
│ │ │ ├── 9VOnL4Iz.js
│ │ │ ├── B-DoSBHF.js
│ │ │ ├── B-k3dvlD.js
│ │ │ ├── B-k8r3hf.js
│ │ │ ├── B-lZjTdr.js
│ │ │ ├── B0XVJmRM.js
│ │ │ ├── B0m2ddpp.js
│ │ │ ├── B0qRVHPH.js
│ │ │ ├── B14Poo8t.js
│ │ │ ├── B1SYOhNW.js
│ │ │ ├── B1bQXN8T.js
│ │ │ ├── B1vp6HhI.js
│ │ │ ├── B2Cf9XSq.js
│ │ │ ├── B2nSH5Xk.js
│ │ │ ├── B2vK47Ag.js
│ │ │ ├── B3ZDOciz.js
│ │ │ ├── B430Bg39.js
│ │ │ ├── B48N-Iqd.js
│ │ │ ├── B4VqtPa2.js
│ │ │ ├── B5auBHZD.js
│ │ │ ├── B5lbUyaz.js
│ │ │ ├── B5uW3Zvf.js
│ │ │ ├── B6W0miNI.js
│ │ │ ├── B7alP455.js
│ │ │ ├── B7mTdjB0.js
│ │ │ ├── B8ssZoUh.js
│ │ │ ├── B9wLZaAG.js
│ │ │ ├── BAng5TT0.js
│ │ │ ├── BC5c_5Pe.js
│ │ │ ├── BE9QQhgF.js
│ │ │ ├── BEBZ7ncR.js
│ │ │ ├── BEhvmC7f.js
│ │ │ ├── BFLt1xDp.js
│ │ │ ├── BFOHcciG.js
│ │ │ ├── BFk92hFI.js
│ │ │ ├── BGLI1Hdo.js
│ │ │ ├── BHOwM8T6.js
│ │ │ ├── BIEUsx6d.js
│ │ │ ├── BILxekzW.js
│ │ │ ├── BJ4Li9vH.js
│ │ │ ├── BJ5jdafP.js
│ │ │ ├── BJGe-b2p.js
│ │ │ ├── BK9xJ97g.js
│ │ │ ├── BKENxkRn.js
│ │ │ ├── BLhTXw86.js
│ │ │ ├── BLuZWbUW.js
│ │ │ ├── BMR_PYu6.js
│ │ │ ├── BMYPR7BL.js
│ │ │ ├── BMj5Y0dO.js
│ │ │ ├── BMl_rFTw.js
│ │ │ ├── BNHBcdi1.js
│ │ │ ├── BNioltXt.js
│ │ │ ├── BPT9niGB.js
│ │ │ ├── BPUjjr-i.js
│ │ │ ├── BPhBrDlE.js
│ │ │ ├── BQoSv7ci.js
│ │ │ ├── BQwtg7Y-.js
│ │ │ ├── BRk-K-rg.js
│ │ │ ├── BS9OwPT8.js
│ │ │ ├── BSxZ-RaX.js
│ │ │ ├── BTpWsGps.js
│ │ │ ├── BUEGK8hf.js
│ │ │ ├── BVUVsWT6.js
│ │ │ ├── BVr_1_27.js
│ │ │ ├── BVz_zdnA.js
│ │ │ ├── BW0IIeyO.js
│ │ │ ├── BWBTHuhh.js
│ │ │ ├── BX77sIaO.js
│ │ │ ├── BXW1EomU.js
│ │ │ ├── BXYnMxBe.js
│ │ │ ├── BXkSAIEj.js
│ │ │ ├── BY-TUvya.js
│ │ │ ├── BY6pwuIY.js
│ │ │ ├── BYtUz8ZP.js
│ │ │ ├── B_i9asfM.js
│ │ │ ├── B_m7g4N7.js
│ │ │ ├── BaOuBgqt.js
│ │ │ ├── BacktestTabs.CTcEQ1jl.css
│ │ │ ├── Bad53t6V.js
│ │ │ ├── BbSNqyBO.js
│ │ │ ├── Bc5xkKR1.js
│ │ │ ├── BdxkyMLR.js
│ │ │ ├── Be6lgOlo.js
│ │ │ ├── BeQkCIfX.js
│ │ │ ├── BfCpw3nA.js
│ │ │ ├── BfHTSMKl.js
│ │ │ ├── BfLuTCmN.js
│ │ │ ├── BfYIQCg8.js
│ │ │ ├── BfivnA6A.js
│ │ │ ├── BfjtVDDH.js
│ │ │ ├── Bg-kzb6g.js
│ │ │ ├── BgDCqdQA.js
│ │ │ ├── BgYniUM_.js
│ │ │ ├── BiFfXF7O.js
│ │ │ ├── Bid6LQhH.js
│ │ │ ├── BjABl1g7.js
│ │ │ ├── BjQB5zDj.js
│ │ │ ├── BjtZpFsH.js
│ │ │ ├── Bk9BmIv8.js
│ │ │ ├── BknIz3MU.js
│ │ │ ├── Bkuqu6BP.js
│ │ │ ├── Bl1h29GH.js
│ │ │ ├── BlxRB_8X.js
│ │ │ ├── BoXegm-a.js
│ │ │ ├── Bp6g37R7.js
│ │ │ ├── BpWG_bgh.js
│ │ │ ├── BsOYHjMa.js
│ │ │ ├── Bt5ljtES.js
│ │ │ ├── BthQWCQV.js
│ │ │ ├── Bu5BbsvL.js
│ │ │ ├── Bu73EIfS.js
│ │ │ ├── BuapDI9Y.js
│ │ │ ├── BuljS_lV.js
│ │ │ ├── BupSXVCO.js
│ │ │ ├── Bvotw-X0.js
│ │ │ ├── Bw0wYZmb.js
│ │ │ ├── Bw305WKR.js
│ │ │ ├── BwHcMc3Y.js
│ │ │ ├── BwXTMy5W.js
│ │ │ ├── BygKL3ZF.js
│ │ │ ├── BypH-vXm.js
│ │ │ ├── BzJJZx-M.js
│ │ │ ├── Bzb7OGdO.js
│ │ │ ├── C-_shW-Y.js
│ │ │ ├── C-nORZOA.js
│ │ │ ├── C-wny61x.js
│ │ │ ├── C0nbwVuJ.js
│ │ │ ├── C1XDQQGZ.js
│ │ │ ├── C1tVc3UG.js
│ │ │ ├── C1w2a3ep.js
│ │ │ ├── C30yJ1fx.js
│ │ │ ├── C39BiMTA.js
│ │ │ ├── C3FkfJm5.js
│ │ │ ├── C3khCPGq.js
│ │ │ ├── C3mMm8J8.js
│ │ │ ├── C3t2pwGQ.js
│ │ │ ├── C4bX54si.js
│ │ │ ├── C5Y8tDhP.js
│ │ │ ├── C5wWYbrZ.js
│ │ │ ├── C6794tGI.js
│ │ │ ├── C6j12Q_x.js
│ │ │ ├── C75U4IDy.js
│ │ │ ├── C7L56vO4.js
│ │ │ ├── C7gG9l05.js
│ │ │ ├── C8M2exoo.js
│ │ │ ├── C8lEn-DE.js
│ │ │ ├── C9L3yaDO.js
│ │ │ ├── CAQ2eGtk.js
│ │ │ ├── CB0Krxn9.js
│ │ │ ├── CB2ApiWb.js
│ │ │ ├── CCBS_C5_.js
│ │ │ ├── CD20-hSi.js
│ │ │ ├── CD_QflpE.js
│ │ │ ├── CG6Dc4jp.js
│ │ │ ├── CGVVOGHx.js
│ │ │ ├── CJaU5se_.js
│ │ │ ├── CKg9tqCS.js
│ │ │ ├── CM8KxXT1.js
│ │ │ ├── CMt9yHYq.js
│ │ │ ├── COJ4H7py.js
│ │ │ ├── COK4E0Yg.js
│ │ │ ├── COcR7UxN.js
│ │ │ ├── COyJrUc7.js
│ │ │ ├── CP8nbYEq.js
│ │ │ ├── CQ0soPOq.js
│ │ │ ├── CQjiPCtT.js
│ │ │ ├── CRzUWN8h.js
│ │ │ ├── CS3Unz2-.js
│ │ │ ├── CSHBycmS.js
│ │ │ ├── CSp6iqVD.js
│ │ │ ├── CTNlIIiR.js
│ │ │ ├── CTRr51gU.js
│ │ │ ├── CUKaiP0K.js
│ │ │ ├── CU_MfyYc.js
│ │ │ ├── CUnW07Te.js
│ │ │ ├── CV9EbfTh.js
│ │ │ ├── CVO1_9PV.js
│ │ │ ├── CViTd9PT.js
│ │ │ ├── CVw76BM1.js
│ │ │ ├── CXKOl_mN.js
│ │ │ ├── CYFUjXW1.js
│ │ │ ├── CYcD1Eih.js
│ │ │ ├── CYgUR4L5.js
│ │ │ ├── CZe0XNBd.js
│ │ │ ├── CZogWebk.js
│ │ │ ├── C_scCXcs.js
│ │ │ ├── CafNBF8u.js
│ │ │ ├── CbfX1IO0.js
│ │ │ ├── Cc5clBb7.js
│ │ │ ├── Cc6zh8Uk.js
│ │ │ ├── CdO5JTpU.js
│ │ │ ├── Cf8iN4DR.js
│ │ │ ├── CfBo882q.js
│ │ │ ├── CfQXZHmo.js
│ │ │ ├── CfnpWUYo.js
│ │ │ ├── Ci6OQyBP.js
│ │ │ ├── CircleProgressbar.Bqs-YaMH.css
│ │ │ ├── CjDtw9vr.js
│ │ │ ├── CkXjmgJE.js
│ │ │ ├── Ckkbw-AO.js
│ │ │ ├── ClGRhx96.js
│ │ │ ├── CmCqftbK.js
│ │ │ ├── CoJj_PRq.js
│ │ │ ├── Cq2jzwMq.js
│ │ │ ├── CqvT4tPC.js
│ │ │ ├── CrrKwR0a.js
│ │ │ ├── CsSk9TLD.js
│ │ │ ├── Csfq5Kiy.js
│ │ │ ├── CuFlys0T.js
│ │ │ ├── Cuk6v7N8.js
│ │ │ ├── Cv9koXgw.js
│ │ │ ├── CvhZxjKo.js
│ │ │ ├── CvkRSmvA.js
│ │ │ ├── CvlXmOiu.js
│ │ │ ├── Cw4FHd9N.js
│ │ │ ├── CwDv50qJ.js
│ │ │ ├── Cwg39VG_.js
│ │ │ ├── CwjWoCRV.js
│ │ │ ├── CyIGOvEh.js
│ │ │ ├── CyVeKkvQ.js
│ │ │ ├── CyktbL80.js
│ │ │ ├── Cz8P-rqG.js
│ │ │ ├── CzF1MCbP.js
│ │ │ ├── Cza_XSSt.js
│ │ │ ├── CzouJOBO.js
│ │ │ ├── D-1_drer.js
│ │ │ ├── D-2ljcwZ.js
│ │ │ ├── D0UiDa5C.js
│ │ │ ├── D0r3Knsf.js
│ │ │ ├── D2PfwrvU.js
│ │ │ ├── D2Z7JJdl.js
│ │ │ ├── D35nYK_C.js
│ │ │ ├── D4Tzg5kh.js
│ │ │ ├── D4aGjE-s.js
│ │ │ ├── D4h5O-jR.js
│ │ │ ├── D5KoaKCx.js
│ │ │ ├── D5pd2Owo.js
│ │ │ ├── D7lU1fdU.js
│ │ │ ├── D7oLnXFd.js
│ │ │ ├── D8mZ0lfy.js
│ │ │ ├── D9-PGadD.js
│ │ │ ├── D94h4QjT.js
│ │ │ ├── D9R-vmeu.js
│ │ │ ├── D9yiNO04.js
│ │ │ ├── DAi9KRSo.js
│ │ │ ├── DB0RB20n.js
│ │ │ ├── DBQeEorK.js
│ │ │ ├── DB_GagMm.js
│ │ │ ├── DCE3LsBG.js
│ │ │ ├── DDpSJMW6.js
│ │ │ ├── DDrv2Hr-.js
│ │ │ ├── DDtJtuOZ.js
│ │ │ ├── DEIpsLCJ.js
│ │ │ ├── DGRk4fvy.js
│ │ │ ├── DH5Ifo-i.js
│ │ │ ├── DHJKELXO.js
│ │ │ ├── DHo0CJ0O.js
│ │ │ ├── DIovg4uR.js
│ │ │ ├── DJlmqQ1C.js
│ │ │ ├── DK27pemE.js
│ │ │ ├── DKOGybHv.js
│ │ │ ├── DKXYxT9g.js
│ │ │ ├── DKykz6zU.js
│ │ │ ├── DLPipH_Q.js
│ │ │ ├── DLbgOhZU.js
│ │ │ ├── DLs3tTet.js
│ │ │ ├── DMFWKIsW.js
│ │ │ ├── DMpbkAFi.js
│ │ │ ├── DNquZEk8.js
│ │ │ ├── DOAuugfS.js
│ │ │ ├── DOk3G3cc.js
│ │ │ ├── DP9I38t9.js
│ │ │ ├── DPg46dy1.js
│ │ │ ├── DPvbFsQx.js
│ │ │ ├── DQ1-QYvQ.js
│ │ │ ├── DQ5Sj-RJ.js
│ │ │ ├── DQVVAn-B.js
│ │ │ ├── DRC6TkPh.js
│ │ │ ├── DREVFZK8.js
│ │ │ ├── DRNBmV_Q.js
│ │ │ ├── DRW-0cLl.js
│ │ │ ├── DRhBOlRY.js
│ │ │ ├── DUszq2jm.js
│ │ │ ├── DVG02705.js
│ │ │ ├── DVYH6Lj_.js
│ │ │ ├── DWGz5Zuj.js
│ │ │ ├── DWJ3fJO_.js
│ │ │ ├── DWedfzmr.js
│ │ │ ├── DXXGBMMv.js
│ │ │ ├── DXbdFlpD.js
│ │ │ ├── DYoNaHQp.js
│ │ │ ├── DYvnoCeB.js
│ │ │ ├── DZb6Dd70.js
│ │ │ ├── D_OY6ada.js
│ │ │ ├── D_z4Izcz.js
│ │ │ ├── DaasEFj5.js
│ │ │ ├── Dayu4EKP.js
│ │ │ ├── DbXoA79R.js
│ │ │ ├── Dbxjm_CC.js
│ │ │ ├── DcXBrGfk.js
│ │ │ ├── Ddv68eIx.js
│ │ │ ├── DeYg-96x.js
│ │ │ ├── Deuh7S70.js
│ │ │ ├── DfxzS6Rs.js
│ │ │ ├── Dgyr3wWZ.js
│ │ │ ├── DhMKtDLN.js
│ │ │ ├── DhUJRlN_.js
│ │ │ ├── Dhn9LcZ4.js
│ │ │ ├── Dj6nwHGl.js
│ │ │ ├── DjHMNizO.js
│ │ │ ├── DkBy-JyN.js
│ │ │ ├── DkLiglaE.js
│ │ │ ├── DmDlXweU.js
│ │ │ ├── DmdQbaLT.js
│ │ │ ├── DmtRXgke.js
│ │ │ ├── Dmy2k9nq.js
│ │ │ ├── Dn00JSTd.js
│ │ │ ├── DnULxvSX.js
│ │ │ ├── DnWQm4Tq.js
│ │ │ ├── DoFvH58O.js
│ │ │ ├── DqwNpetd.js
│ │ │ ├── DrRCxMg5.js
│ │ │ ├── Dr_JbmT0.js
│ │ │ ├── DrqOgyji.js
│ │ │ ├── Drsz93k2.js
│ │ │ ├── Ds-gbosJ.js
│ │ │ ├── DsBKuouk.js
│ │ │ ├── DsWjAdsX.js
│ │ │ ├── Dsg_Bt_b.js
│ │ │ ├── DtFQj3wx.js
│ │ │ ├── Du268qiB.js
│ │ │ ├── Du3IqvzK.js
│ │ │ ├── Du5NY7AG.js
│ │ │ ├── DvSxYeG4.js
│ │ │ ├── DxSadP1t.js
│ │ │ ├── DyKutqhl.js
│ │ │ ├── DyLYGjHh.js
│ │ │ ├── E1yjnBiT.js
│ │ │ ├── E3gJ1_iC.js
│ │ │ ├── FNqbgIOG.js
│ │ │ ├── GBQ2dnAY.js
│ │ │ ├── HNqc6WRo.js
│ │ │ ├── HeqvyViL.js
│ │ │ ├── HnGAYVZD.js
│ │ │ ├── HzYwdGDm.js
│ │ │ ├── IconCSS.RN4HczVp.css
│ │ │ ├── IuBKFhSY.js
│ │ │ ├── JqZropPD.js
│ │ │ ├── L9t79GZl.js
│ │ │ ├── LGGdnPYs.js
│ │ │ ├── LKU2TuZ1.js
│ │ │ ├── LiveTabs.15UVtLVQ.css
│ │ │ ├── O-0jUIAi.js
│ │ │ ├── P4WzXJd0.js
│ │ │ ├── PoHY5YXO.js
│ │ │ ├── Progress.CWZn3LuJ.css
│ │ │ ├── QhoSD0DR.js
│ │ │ ├── R900dpIa.js
│ │ │ ├── RFJ54-KY.js
│ │ │ ├── SKMF96pI.js
│ │ │ ├── SPD3sf1n.js
│ │ │ ├── StrategiesSidebar.BLGw1dq7.css
│ │ │ ├── T-Tgc4AT.js
│ │ │ ├── TU54ms6u.js
│ │ │ ├── Tz6hzZYG.js
│ │ │ ├── UIAJJxZW.js
│ │ │ ├── UL5zprDm.js
│ │ │ ├── UMmp-gVE.js
│ │ │ ├── VuadG5SK.js
│ │ │ ├── X3S5orim.js
│ │ │ ├── XBlWyCtg.js
│ │ │ ├── YJb9dmdj.js
│ │ │ ├── ZlaFEk-P.js
│ │ │ ├── _FEXNRsZ.js
│ │ │ ├── _id_.CZ9YoXDN.css
│ │ │ ├── _id_.PO5SUJPO.css
│ │ │ ├── ahYVQIuB.js
│ │ │ ├── ajMbGru0.js
│ │ │ ├── atvbtKCR.js
│ │ │ ├── bCA53EVm.js
│ │ │ ├── bN70gL4F.js
│ │ │ ├── cPjAOO0u.js
│ │ │ ├── dUAF8qyF.js
│ │ │ ├── din0uRiO.js
│ │ │ ├── e4jU7D2d.js
│ │ │ ├── eg146-Ew.js
│ │ │ ├── entry.Co9uk6v2.css
│ │ │ ├── error-404.DZraUJun.css
│ │ │ ├── error-500.XmAVHPl_.css
│ │ │ ├── fje9CFhw.js
│ │ │ ├── gRuQeaLk.js
│ │ │ ├── ifBTmRxC.js
│ │ │ ├── index.dzGxyoTu.css
│ │ │ ├── index.lQPmb1y9.css
│ │ │ ├── m09vb5r-.js
│ │ │ ├── m2LEI-9-.js
│ │ │ ├── m4gc_qpA.js
│ │ │ ├── m4uW47V2.js
│ │ │ ├── mebxcVVE.js
│ │ │ ├── nuxt-monaco-editor/
│ │ │ │ ├── metadata.d.ts
│ │ │ │ ├── metadata.js
│ │ │ │ └── vs/
│ │ │ │ ├── base/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── browser.js
│ │ │ │ │ │ ├── canIUse.js
│ │ │ │ │ │ ├── contextmenu.js
│ │ │ │ │ │ ├── defaultWorkerFactory.js
│ │ │ │ │ │ ├── dnd.js
│ │ │ │ │ │ ├── dom.js
│ │ │ │ │ │ ├── dompurify/
│ │ │ │ │ │ │ └── dompurify.js
│ │ │ │ │ │ ├── event.js
│ │ │ │ │ │ ├── fastDomNode.js
│ │ │ │ │ │ ├── fonts.js
│ │ │ │ │ │ ├── formattedTextRenderer.js
│ │ │ │ │ │ ├── globalPointerMoveMonitor.js
│ │ │ │ │ │ ├── history.js
│ │ │ │ │ │ ├── iframe.js
│ │ │ │ │ │ ├── keyboardEvent.js
│ │ │ │ │ │ ├── markdownRenderer.js
│ │ │ │ │ │ ├── mouseEvent.js
│ │ │ │ │ │ ├── performance.js
│ │ │ │ │ │ ├── pixelRatio.js
│ │ │ │ │ │ ├── touch.js
│ │ │ │ │ │ ├── trustedTypes.js
│ │ │ │ │ │ ├── ui/
│ │ │ │ │ │ │ ├── actionbar/
│ │ │ │ │ │ │ │ ├── actionViewItems.js
│ │ │ │ │ │ │ │ ├── actionbar.css
│ │ │ │ │ │ │ │ └── actionbar.js
│ │ │ │ │ │ │ ├── aria/
│ │ │ │ │ │ │ │ ├── aria.css
│ │ │ │ │ │ │ │ └── aria.js
│ │ │ │ │ │ │ ├── breadcrumbs/
│ │ │ │ │ │ │ │ ├── breadcrumbsWidget.css
│ │ │ │ │ │ │ │ └── breadcrumbsWidget.js
│ │ │ │ │ │ │ ├── button/
│ │ │ │ │ │ │ │ ├── button.css
│ │ │ │ │ │ │ │ └── button.js
│ │ │ │ │ │ │ ├── codicons/
│ │ │ │ │ │ │ │ ├── codicon/
│ │ │ │ │ │ │ │ │ ├── codicon-modifiers.css
│ │ │ │ │ │ │ │ │ └── codicon.css
│ │ │ │ │ │ │ │ └── codiconStyles.js
│ │ │ │ │ │ │ ├── contextview/
│ │ │ │ │ │ │ │ ├── contextview.css
│ │ │ │ │ │ │ │ └── contextview.js
│ │ │ │ │ │ │ ├── countBadge/
│ │ │ │ │ │ │ │ ├── countBadge.css
│ │ │ │ │ │ │ │ └── countBadge.js
│ │ │ │ │ │ │ ├── dialog/
│ │ │ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ │ │ └── dialog.js
│ │ │ │ │ │ │ ├── dropdown/
│ │ │ │ │ │ │ │ ├── dropdown.css
│ │ │ │ │ │ │ │ ├── dropdown.js
│ │ │ │ │ │ │ │ └── dropdownActionViewItem.js
│ │ │ │ │ │ │ ├── findinput/
│ │ │ │ │ │ │ │ ├── findInput.css
│ │ │ │ │ │ │ │ ├── findInput.js
│ │ │ │ │ │ │ │ ├── findInputToggles.js
│ │ │ │ │ │ │ │ └── replaceInput.js
│ │ │ │ │ │ │ ├── highlightedlabel/
│ │ │ │ │ │ │ │ └── highlightedLabel.js
│ │ │ │ │ │ │ ├── hover/
│ │ │ │ │ │ │ │ ├── hover.js
│ │ │ │ │ │ │ │ ├── hoverDelegate.js
│ │ │ │ │ │ │ │ ├── hoverDelegate2.js
│ │ │ │ │ │ │ │ ├── hoverDelegateFactory.js
│ │ │ │ │ │ │ │ ├── hoverWidget.css
│ │ │ │ │ │ │ │ └── hoverWidget.js
│ │ │ │ │ │ │ ├── iconLabel/
│ │ │ │ │ │ │ │ ├── iconLabel.js
│ │ │ │ │ │ │ │ ├── iconLabels.js
│ │ │ │ │ │ │ │ └── iconlabel.css
│ │ │ │ │ │ │ ├── inputbox/
│ │ │ │ │ │ │ │ ├── inputBox.css
│ │ │ │ │ │ │ │ └── inputBox.js
│ │ │ │ │ │ │ ├── keybindingLabel/
│ │ │ │ │ │ │ │ ├── keybindingLabel.css
│ │ │ │ │ │ │ │ └── keybindingLabel.js
│ │ │ │ │ │ │ ├── list/
│ │ │ │ │ │ │ │ ├── list.css
│ │ │ │ │ │ │ │ ├── list.js
│ │ │ │ │ │ │ │ ├── listPaging.js
│ │ │ │ │ │ │ │ ├── listView.js
│ │ │ │ │ │ │ │ ├── listWidget.js
│ │ │ │ │ │ │ │ ├── rangeMap.js
│ │ │ │ │ │ │ │ ├── rowCache.js
│ │ │ │ │ │ │ │ └── splice.js
│ │ │ │ │ │ │ ├── menu/
│ │ │ │ │ │ │ │ └── menu.js
│ │ │ │ │ │ │ ├── mouseCursor/
│ │ │ │ │ │ │ │ ├── mouseCursor.css
│ │ │ │ │ │ │ │ └── mouseCursor.js
│ │ │ │ │ │ │ ├── progressbar/
│ │ │ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ │ │ └── progressbar.js
│ │ │ │ │ │ │ ├── resizable/
│ │ │ │ │ │ │ │ └── resizable.js
│ │ │ │ │ │ │ ├── sash/
│ │ │ │ │ │ │ │ ├── sash.css
│ │ │ │ │ │ │ │ └── sash.js
│ │ │ │ │ │ │ ├── scrollbar/
│ │ │ │ │ │ │ │ ├── abstractScrollbar.js
│ │ │ │ │ │ │ │ ├── horizontalScrollbar.js
│ │ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ │ └── scrollbars.css
│ │ │ │ │ │ │ │ ├── scrollableElement.js
│ │ │ │ │ │ │ │ ├── scrollableElementOptions.js
│ │ │ │ │ │ │ │ ├── scrollbarArrow.js
│ │ │ │ │ │ │ │ ├── scrollbarState.js
│ │ │ │ │ │ │ │ ├── scrollbarVisibilityController.js
│ │ │ │ │ │ │ │ └── verticalScrollbar.js
│ │ │ │ │ │ │ ├── selectBox/
│ │ │ │ │ │ │ │ ├── selectBox.css
│ │ │ │ │ │ │ │ ├── selectBox.js
│ │ │ │ │ │ │ │ ├── selectBoxCustom.css
│ │ │ │ │ │ │ │ ├── selectBoxCustom.js
│ │ │ │ │ │ │ │ └── selectBoxNative.js
│ │ │ │ │ │ │ ├── splitview/
│ │ │ │ │ │ │ │ ├── splitview.css
│ │ │ │ │ │ │ │ └── splitview.js
│ │ │ │ │ │ │ ├── table/
│ │ │ │ │ │ │ │ ├── table.css
│ │ │ │ │ │ │ │ ├── table.js
│ │ │ │ │ │ │ │ └── tableWidget.js
│ │ │ │ │ │ │ ├── toggle/
│ │ │ │ │ │ │ │ ├── toggle.css
│ │ │ │ │ │ │ │ └── toggle.js
│ │ │ │ │ │ │ ├── toolbar/
│ │ │ │ │ │ │ │ ├── toolbar.css
│ │ │ │ │ │ │ │ └── toolbar.js
│ │ │ │ │ │ │ ├── tree/
│ │ │ │ │ │ │ │ ├── abstractTree.js
│ │ │ │ │ │ │ │ ├── asyncDataTree.js
│ │ │ │ │ │ │ │ ├── compressedObjectTreeModel.js
│ │ │ │ │ │ │ │ ├── dataTree.js
│ │ │ │ │ │ │ │ ├── indexTreeModel.js
│ │ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ │ └── tree.css
│ │ │ │ │ │ │ │ ├── objectTree.js
│ │ │ │ │ │ │ │ ├── objectTreeModel.js
│ │ │ │ │ │ │ │ └── tree.js
│ │ │ │ │ │ │ └── widget.js
│ │ │ │ │ │ └── window.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── arrays.js
│ │ │ │ │ ├── arraysFind.js
│ │ │ │ │ ├── assert.js
│ │ │ │ │ ├── async.js
│ │ │ │ │ ├── buffer.js
│ │ │ │ │ ├── cache.js
│ │ │ │ │ ├── cancellation.js
│ │ │ │ │ ├── charCode.js
│ │ │ │ │ ├── codicons.js
│ │ │ │ │ ├── codiconsLibrary.js
│ │ │ │ │ ├── codiconsUtil.js
│ │ │ │ │ ├── collections.js
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── comparers.js
│ │ │ │ │ ├── dataTransfer.js
│ │ │ │ │ ├── decorators.js
│ │ │ │ │ ├── diff/
│ │ │ │ │ │ ├── diff.js
│ │ │ │ │ │ └── diffChange.js
│ │ │ │ │ ├── equals.js
│ │ │ │ │ ├── errorMessage.js
│ │ │ │ │ ├── errors.js
│ │ │ │ │ ├── event.js
│ │ │ │ │ ├── extpath.js
│ │ │ │ │ ├── filters.js
│ │ │ │ │ ├── functional.js
│ │ │ │ │ ├── fuzzyScorer.js
│ │ │ │ │ ├── glob.js
│ │ │ │ │ ├── hash.js
│ │ │ │ │ ├── hierarchicalKind.js
│ │ │ │ │ ├── history.js
│ │ │ │ │ ├── hotReload.js
│ │ │ │ │ ├── htmlContent.js
│ │ │ │ │ ├── iconLabels.js
│ │ │ │ │ ├── idGenerator.js
│ │ │ │ │ ├── ime.js
│ │ │ │ │ ├── iterator.js
│ │ │ │ │ ├── jsonSchema.js
│ │ │ │ │ ├── keyCodes.js
│ │ │ │ │ ├── keybindingLabels.js
│ │ │ │ │ ├── keybindings.js
│ │ │ │ │ ├── labels.js
│ │ │ │ │ ├── lazy.js
│ │ │ │ │ ├── lifecycle.js
│ │ │ │ │ ├── linkedList.js
│ │ │ │ │ ├── linkedText.js
│ │ │ │ │ ├── map.js
│ │ │ │ │ ├── marked/
│ │ │ │ │ │ └── marked.js
│ │ │ │ │ ├── marshalling.js
│ │ │ │ │ ├── marshallingIds.js
│ │ │ │ │ ├── mime.js
│ │ │ │ │ ├── naturalLanguage/
│ │ │ │ │ │ └── korean.js
│ │ │ │ │ ├── navigator.js
│ │ │ │ │ ├── network.js
│ │ │ │ │ ├── numbers.js
│ │ │ │ │ ├── objects.js
│ │ │ │ │ ├── observable.js
│ │ │ │ │ ├── observableInternal/
│ │ │ │ │ │ ├── autorun.js
│ │ │ │ │ │ ├── base.js
│ │ │ │ │ │ ├── debugName.js
│ │ │ │ │ │ ├── derived.js
│ │ │ │ │ │ ├── logging.js
│ │ │ │ │ │ ├── promise.js
│ │ │ │ │ │ └── utils.js
│ │ │ │ │ ├── paging.js
│ │ │ │ │ ├── path.js
│ │ │ │ │ ├── platform.js
│ │ │ │ │ ├── process.js
│ │ │ │ │ ├── range.js
│ │ │ │ │ ├── resources.js
│ │ │ │ │ ├── scrollable.js
│ │ │ │ │ ├── search.js
│ │ │ │ │ ├── sequence.js
│ │ │ │ │ ├── severity.js
│ │ │ │ │ ├── stopwatch.js
│ │ │ │ │ ├── strings.js
│ │ │ │ │ ├── symbols.js
│ │ │ │ │ ├── ternarySearchTree.js
│ │ │ │ │ ├── tfIdf.js
│ │ │ │ │ ├── themables.js
│ │ │ │ │ ├── types.js
│ │ │ │ │ ├── uint.js
│ │ │ │ │ ├── uri.js
│ │ │ │ │ ├── uuid.js
│ │ │ │ │ └── worker/
│ │ │ │ │ └── simpleWorker.js
│ │ │ │ ├── basic-languages/
│ │ │ │ │ ├── _.contribution.js
│ │ │ │ │ ├── abap/
│ │ │ │ │ │ ├── abap.contribution.d.ts
│ │ │ │ │ │ ├── abap.contribution.js
│ │ │ │ │ │ └── abap.js
│ │ │ │ │ ├── apex/
│ │ │ │ │ │ ├── apex.contribution.d.ts
│ │ │ │ │ │ ├── apex.contribution.js
│ │ │ │ │ │ └── apex.js
│ │ │ │ │ ├── azcli/
│ │ │ │ │ │ ├── azcli.contribution.d.ts
│ │ │ │ │ │ ├── azcli.contribution.js
│ │ │ │ │ │ └── azcli.js
│ │ │ │ │ ├── bat/
│ │ │ │ │ │ ├── bat.contribution.d.ts
│ │ │ │ │ │ ├── bat.contribution.js
│ │ │ │ │ │ └── bat.js
│ │ │ │ │ ├── bicep/
│ │ │ │ │ │ ├── bicep.contribution.d.ts
│ │ │ │ │ │ ├── bicep.contribution.js
│ │ │ │ │ │ └── bicep.js
│ │ │ │ │ ├── cameligo/
│ │ │ │ │ │ ├── cameligo.contribution.d.ts
│ │ │ │ │ │ ├── cameligo.contribution.js
│ │ │ │ │ │ └── cameligo.js
│ │ │ │ │ ├── clojure/
│ │ │ │ │ │ ├── clojure.contribution.d.ts
│ │ │ │ │ │ ├── clojure.contribution.js
│ │ │ │ │ │ └── clojure.js
│ │ │ │ │ ├── coffee/
│ │ │ │ │ │ ├── coffee.contribution.d.ts
│ │ │ │ │ │ ├── coffee.contribution.js
│ │ │ │ │ │ └── coffee.js
│ │ │ │ │ ├── cpp/
│ │ │ │ │ │ ├── cpp.contribution.d.ts
│ │ │ │ │ │ ├── cpp.contribution.js
│ │ │ │ │ │ └── cpp.js
│ │ │ │ │ ├── csharp/
│ │ │ │ │ │ ├── csharp.contribution.d.ts
│ │ │ │ │ │ ├── csharp.contribution.js
│ │ │ │ │ │ └── csharp.js
│ │ │ │ │ ├── csp/
│ │ │ │ │ │ ├── csp.contribution.d.ts
│ │ │ │ │ │ ├── csp.contribution.js
│ │ │ │ │ │ └── csp.js
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── css.contribution.d.ts
│ │ │ │ │ │ ├── css.contribution.js
│ │ │ │ │ │ └── css.js
│ │ │ │ │ ├── cypher/
│ │ │ │ │ │ ├── cypher.contribution.d.ts
│ │ │ │ │ │ ├── cypher.contribution.js
│ │ │ │ │ │ └── cypher.js
│ │ │ │ │ ├── dart/
│ │ │ │ │ │ ├── dart.contribution.d.ts
│ │ │ │ │ │ ├── dart.contribution.js
│ │ │ │ │ │ └── dart.js
│ │ │ │ │ ├── dockerfile/
│ │ │ │ │ │ ├── dockerfile.contribution.d.ts
│ │ │ │ │ │ ├── dockerfile.contribution.js
│ │ │ │ │ │ └── dockerfile.js
│ │ │ │ │ ├── ecl/
│ │ │ │ │ │ ├── ecl.contribution.d.ts
│ │ │ │ │ │ ├── ecl.contribution.js
│ │ │ │ │ │ └── ecl.js
│ │ │ │ │ ├── elixir/
│ │ │ │ │ │ ├── elixir.contribution.d.ts
│ │ │ │ │ │ ├── elixir.contribution.js
│ │ │ │ │ │ └── elixir.js
│ │ │ │ │ ├── flow9/
│ │ │ │ │ │ ├── flow9.contribution.d.ts
│ │ │ │ │ │ ├── flow9.contribution.js
│ │ │ │ │ │ └── flow9.js
│ │ │ │ │ ├── freemarker2/
│ │ │ │ │ │ ├── freemarker2.contribution.d.ts
│ │ │ │ │ │ ├── freemarker2.contribution.js
│ │ │ │ │ │ └── freemarker2.js
│ │ │ │ │ ├── fsharp/
│ │ │ │ │ │ ├── fsharp.contribution.d.ts
│ │ │ │ │ │ ├── fsharp.contribution.js
│ │ │ │ │ │ └── fsharp.js
│ │ │ │ │ ├── go/
│ │ │ │ │ │ ├── go.contribution.d.ts
│ │ │ │ │ │ ├── go.contribution.js
│ │ │ │ │ │ └── go.js
│ │ │ │ │ ├── graphql/
│ │ │ │ │ │ ├── graphql.contribution.d.ts
│ │ │ │ │ │ ├── graphql.contribution.js
│ │ │ │ │ │ └── graphql.js
│ │ │ │ │ ├── handlebars/
│ │ │ │ │ │ ├── handlebars.contribution.d.ts
│ │ │ │ │ │ ├── handlebars.contribution.js
│ │ │ │ │ │ └── handlebars.js
│ │ │ │ │ ├── hcl/
│ │ │ │ │ │ ├── hcl.contribution.d.ts
│ │ │ │ │ │ ├── hcl.contribution.js
│ │ │ │ │ │ └── hcl.js
│ │ │ │ │ ├── html/
│ │ │ │ │ │ ├── html.contribution.d.ts
│ │ │ │ │ │ ├── html.contribution.js
│ │ │ │ │ │ └── html.js
│ │ │ │ │ ├── ini/
│ │ │ │ │ │ ├── ini.contribution.d.ts
│ │ │ │ │ │ ├── ini.contribution.js
│ │ │ │ │ │ └── ini.js
│ │ │ │ │ ├── java/
│ │ │ │ │ │ ├── java.contribution.d.ts
│ │ │ │ │ │ ├── java.contribution.js
│ │ │ │ │ │ └── java.js
│ │ │ │ │ ├── javascript/
│ │ │ │ │ │ ├── javascript.contribution.d.ts
│ │ │ │ │ │ ├── javascript.contribution.js
│ │ │ │ │ │ └── javascript.js
│ │ │ │ │ ├── julia/
│ │ │ │ │ │ ├── julia.contribution.d.ts
│ │ │ │ │ │ ├── julia.contribution.js
│ │ │ │ │ │ └── julia.js
│ │ │ │ │ ├── kotlin/
│ │ │ │ │ │ ├── kotlin.contribution.d.ts
│ │ │ │ │ │ ├── kotlin.contribution.js
│ │ │ │ │ │ └── kotlin.js
│ │ │ │ │ ├── less/
│ │ │ │ │ │ ├── less.contribution.d.ts
│ │ │ │ │ │ ├── less.contribution.js
│ │ │ │ │ │ └── less.js
│ │ │ │ │ ├── lexon/
│ │ │ │ │ │ ├── lexon.contribution.d.ts
│ │ │ │ │ │ ├── lexon.contribution.js
│ │ │ │ │ │ └── lexon.js
│ │ │ │ │ ├── liquid/
│ │ │ │ │ │ ├── liquid.contribution.d.ts
│ │ │ │ │ │ ├── liquid.contribution.js
│ │ │ │ │ │ └── liquid.js
│ │ │ │ │ ├── lua/
│ │ │ │ │ │ ├── lua.contribution.d.ts
│ │ │ │ │ │ ├── lua.contribution.js
│ │ │ │ │ │ └── lua.js
│ │ │ │ │ ├── m3/
│ │ │ │ │ │ ├── m3.contribution.d.ts
│ │ │ │ │ │ ├── m3.contribution.js
│ │ │ │ │ │ └── m3.js
│ │ │ │ │ ├── markdown/
│ │ │ │ │ │ ├── markdown.contribution.d.ts
│ │ │ │ │ │ ├── markdown.contribution.js
│ │ │ │ │ │ └── markdown.js
│ │ │ │ │ ├── mdx/
│ │ │ │ │ │ ├── mdx.contribution.d.ts
│ │ │ │ │ │ ├── mdx.contribution.js
│ │ │ │ │ │ └── mdx.js
│ │ │ │ │ ├── mips/
│ │ │ │ │ │ ├── mips.contribution.d.ts
│ │ │ │ │ │ ├── mips.contribution.js
│ │ │ │ │ │ └── mips.js
│ │ │ │ │ ├── monaco.contribution.js
│ │ │ │ │ ├── msdax/
│ │ │ │ │ │ ├── msdax.contribution.d.ts
│ │ │ │ │ │ ├── msdax.contribution.js
│ │ │ │ │ │ └── msdax.js
│ │ │ │ │ ├── mysql/
│ │ │ │ │ │ ├── mysql.contribution.d.ts
│ │ │ │ │ │ ├── mysql.contribution.js
│ │ │ │ │ │ └── mysql.js
│ │ │ │ │ ├── objective-c/
│ │ │ │ │ │ ├── objective-c.contribution.d.ts
│ │ │ │ │ │ ├── objective-c.contribution.js
│ │ │ │ │ │ └── objective-c.js
│ │ │ │ │ ├── pascal/
│ │ │ │ │ │ ├── pascal.contribution.d.ts
│ │ │ │ │ │ ├── pascal.contribution.js
│ │ │ │ │ │ └── pascal.js
│ │ │ │ │ ├── pascaligo/
│ │ │ │ │ │ ├── pascaligo.contribution.d.ts
│ │ │ │ │ │ ├── pascaligo.contribution.js
│ │ │ │ │ │ └── pascaligo.js
│ │ │ │ │ ├── perl/
│ │ │ │ │ │ ├── perl.contribution.d.ts
│ │ │ │ │ │ ├── perl.contribution.js
│ │ │ │ │ │ └── perl.js
│ │ │ │ │ ├── pgsql/
│ │ │ │ │ │ ├── pgsql.contribution.d.ts
│ │ │ │ │ │ ├── pgsql.contribution.js
│ │ │ │ │ │ └── pgsql.js
│ │ │ │ │ ├── php/
│ │ │ │ │ │ ├── php.contribution.d.ts
│ │ │ │ │ │ ├── php.contribution.js
│ │ │ │ │ │ └── php.js
│ │ │ │ │ ├── pla/
│ │ │ │ │ │ ├── pla.contribution.d.ts
│ │ │ │ │ │ ├── pla.contribution.js
│ │ │ │ │ │ └── pla.js
│ │ │ │ │ ├── postiats/
│ │ │ │ │ │ ├── postiats.contribution.d.ts
│ │ │ │ │ │ ├── postiats.contribution.js
│ │ │ │ │ │ └── postiats.js
│ │ │ │ │ ├── powerquery/
│ │ │ │ │ │ ├── powerquery.contribution.d.ts
│ │ │ │ │ │ ├── powerquery.contribution.js
│ │ │ │ │ │ └── powerquery.js
│ │ │ │ │ ├── powershell/
│ │ │ │ │ │ ├── powershell.contribution.d.ts
│ │ │ │ │ │ ├── powershell.contribution.js
│ │ │ │ │ │ └── powershell.js
│ │ │ │ │ ├── protobuf/
│ │ │ │ │ │ ├── protobuf.contribution.d.ts
│ │ │ │ │ │ ├── protobuf.contribution.js
│ │ │ │ │ │ └── protobuf.js
│ │ │ │ │ ├── pug/
│ │ │ │ │ │ ├── pug.contribution.d.ts
│ │ │ │ │ │ ├── pug.contribution.js
│ │ │ │ │ │ └── pug.js
│ │ │ │ │ ├── python/
│ │ │ │ │ │ ├── python.contribution.d.ts
│ │ │ │ │ │ ├── python.contribution.js
│ │ │ │ │ │ └── python.js
│ │ │ │ │ ├── qsharp/
│ │ │ │ │ │ ├── qsharp.contribution.d.ts
│ │ │ │ │ │ ├── qsharp.contribution.js
│ │ │ │ │ │ └── qsharp.js
│ │ │ │ │ ├── r/
│ │ │ │ │ │ ├── r.contribution.d.ts
│ │ │ │ │ │ ├── r.contribution.js
│ │ │ │ │ │ └── r.js
│ │ │ │ │ ├── razor/
│ │ │ │ │ │ ├── razor.contribution.d.ts
│ │ │ │ │ │ ├── razor.contribution.js
│ │ │ │ │ │ └── razor.js
│ │ │ │ │ ├── redis/
│ │ │ │ │ │ ├── redis.contribution.d.ts
│ │ │ │ │ │ ├── redis.contribution.js
│ │ │ │ │ │ └── redis.js
│ │ │ │ │ ├── redshift/
│ │ │ │ │ │ ├── redshift.contribution.d.ts
│ │ │ │ │ │ ├── redshift.contribution.js
│ │ │ │ │ │ └── redshift.js
│ │ │ │ │ ├── restructuredtext/
│ │ │ │ │ │ ├── restructuredtext.contribution.d.ts
│ │ │ │ │ │ ├── restructuredtext.contribution.js
│ │ │ │ │ │ └── restructuredtext.js
│ │ │ │ │ ├── ruby/
│ │ │ │ │ │ ├── ruby.contribution.d.ts
│ │ │ │ │ │ ├── ruby.contribution.js
│ │ │ │ │ │ └── ruby.js
│ │ │ │ │ ├── rust/
│ │ │ │ │ │ ├── rust.contribution.d.ts
│ │ │ │ │ │ ├── rust.contribution.js
│ │ │ │ │ │ └── rust.js
│ │ │ │ │ ├── sb/
│ │ │ │ │ │ ├── sb.contribution.d.ts
│ │ │ │ │ │ ├── sb.contribution.js
│ │ │ │ │ │ └── sb.js
│ │ │ │ │ ├── scala/
│ │ │ │ │ │ ├── scala.contribution.d.ts
│ │ │ │ │ │ ├── scala.contribution.js
│ │ │ │ │ │ └── scala.js
│ │ │ │ │ ├── scheme/
│ │ │ │ │ │ ├── scheme.contribution.d.ts
│ │ │ │ │ │ ├── scheme.contribution.js
│ │ │ │ │ │ └── scheme.js
│ │ │ │ │ ├── scss/
│ │ │ │ │ │ ├── scss.contribution.d.ts
│ │ │ │ │ │ ├── scss.contribution.js
│ │ │ │ │ │ └── scss.js
│ │ │ │ │ ├── shell/
│ │ │ │ │ │ ├── shell.contribution.d.ts
│ │ │ │ │ │ ├── shell.contribution.js
│ │ │ │ │ │ └── shell.js
│ │ │ │ │ ├── solidity/
│ │ │ │ │ │ ├── solidity.contribution.d.ts
│ │ │ │ │ │ ├── solidity.contribution.js
│ │ │ │ │ │ └── solidity.js
│ │ │ │ │ ├── sophia/
│ │ │ │ │ │ ├── sophia.contribution.d.ts
│ │ │ │ │ │ ├── sophia.contribution.js
│ │ │ │ │ │ └── sophia.js
│ │ │ │ │ ├── sparql/
│ │ │ │ │ │ ├── sparql.contribution.d.ts
│ │ │ │ │ │ ├── sparql.contribution.js
│ │ │ │ │ │ └── sparql.js
│ │ │ │ │ ├── sql/
│ │ │ │ │ │ ├── sql.contribution.d.ts
│ │ │ │ │ │ ├── sql.contribution.js
│ │ │ │ │ │ └── sql.js
│ │ │ │ │ ├── st/
│ │ │ │ │ │ ├── st.contribution.d.ts
│ │ │ │ │ │ ├── st.contribution.js
│ │ │ │ │ │ └── st.js
│ │ │ │ │ ├── swift/
│ │ │ │ │ │ ├── swift.contribution.d.ts
│ │ │ │ │ │ ├── swift.contribution.js
│ │ │ │ │ │ └── swift.js
│ │ │ │ │ ├── systemverilog/
│ │ │ │ │ │ ├── systemverilog.contribution.d.ts
│ │ │ │ │ │ ├── systemverilog.contribution.js
│ │ │ │ │ │ └── systemverilog.js
│ │ │ │ │ ├── tcl/
│ │ │ │ │ │ ├── tcl.contribution.d.ts
│ │ │ │ │ │ ├── tcl.contribution.js
│ │ │ │ │ │ └── tcl.js
│ │ │ │ │ ├── twig/
│ │ │ │ │ │ ├── twig.contribution.d.ts
│ │ │ │ │ │ ├── twig.contribution.js
│ │ │ │ │ │ └── twig.js
│ │ │ │ │ ├── typescript/
│ │ │ │ │ │ ├── typescript.contribution.d.ts
│ │ │ │ │ │ ├── typescript.contribution.js
│ │ │ │ │ │ └── typescript.js
│ │ │ │ │ ├── typespec/
│ │ │ │ │ │ ├── typespec.contribution.d.ts
│ │ │ │ │ │ ├── typespec.contribution.js
│ │ │ │ │ │ └── typespec.js
│ │ │ │ │ ├── vb/
│ │ │ │ │ │ ├── vb.contribution.d.ts
│ │ │ │ │ │ ├── vb.contribution.js
│ │ │ │ │ │ └── vb.js
│ │ │ │ │ ├── wgsl/
│ │ │ │ │ │ ├── wgsl.contribution.d.ts
│ │ │ │ │ │ ├── wgsl.contribution.js
│ │ │ │ │ │ └── wgsl.js
│ │ │ │ │ ├── xml/
│ │ │ │ │ │ ├── xml.contribution.d.ts
│ │ │ │ │ │ ├── xml.contribution.js
│ │ │ │ │ │ └── xml.js
│ │ │ │ │ └── yaml/
│ │ │ │ │ ├── yaml.contribution.d.ts
│ │ │ │ │ ├── yaml.contribution.js
│ │ │ │ │ └── yaml.js
│ │ │ │ ├── editor/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── charWidthReader.js
│ │ │ │ │ │ │ ├── domFontInfo.js
│ │ │ │ │ │ │ ├── editorConfiguration.js
│ │ │ │ │ │ │ ├── elementSizeObserver.js
│ │ │ │ │ │ │ ├── fontMeasurements.js
│ │ │ │ │ │ │ ├── migrateOptions.js
│ │ │ │ │ │ │ └── tabFocus.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── mouseHandler.js
│ │ │ │ │ │ │ ├── mouseTarget.js
│ │ │ │ │ │ │ ├── pointerHandler.js
│ │ │ │ │ │ │ ├── textAreaHandler.css
│ │ │ │ │ │ │ ├── textAreaHandler.js
│ │ │ │ │ │ │ ├── textAreaInput.js
│ │ │ │ │ │ │ └── textAreaState.js
│ │ │ │ │ │ ├── coreCommands.d.ts
│ │ │ │ │ │ ├── coreCommands.js
│ │ │ │ │ │ ├── dnd.js
│ │ │ │ │ │ ├── editorBrowser.js
│ │ │ │ │ │ ├── editorDom.js
│ │ │ │ │ │ ├── editorExtensions.js
│ │ │ │ │ │ ├── observableUtilities.js
│ │ │ │ │ │ ├── services/
│ │ │ │ │ │ │ ├── abstractCodeEditorService.js
│ │ │ │ │ │ │ ├── bulkEditService.js
│ │ │ │ │ │ │ ├── codeEditorService.js
│ │ │ │ │ │ │ ├── editorWorkerService.js
│ │ │ │ │ │ │ ├── hoverService/
│ │ │ │ │ │ │ │ ├── hover.css
│ │ │ │ │ │ │ │ ├── hoverService.js
│ │ │ │ │ │ │ │ ├── hoverWidget.js
│ │ │ │ │ │ │ │ └── updatableHoverWidget.js
│ │ │ │ │ │ │ ├── markerDecorations.js
│ │ │ │ │ │ │ ├── openerService.js
│ │ │ │ │ │ │ └── webWorker.js
│ │ │ │ │ │ ├── stableEditorScroll.js
│ │ │ │ │ │ ├── view/
│ │ │ │ │ │ │ ├── domLineBreaksComputer.js
│ │ │ │ │ │ │ ├── dynamicViewOverlay.js
│ │ │ │ │ │ │ ├── renderingContext.js
│ │ │ │ │ │ │ ├── viewController.js
│ │ │ │ │ │ │ ├── viewLayer.js
│ │ │ │ │ │ │ ├── viewOverlays.js
│ │ │ │ │ │ │ ├── viewPart.js
│ │ │ │ │ │ │ └── viewUserInputEvents.js
│ │ │ │ │ │ ├── view.js
│ │ │ │ │ │ ├── viewParts/
│ │ │ │ │ │ │ ├── blockDecorations/
│ │ │ │ │ │ │ │ ├── blockDecorations.css
│ │ │ │ │ │ │ │ └── blockDecorations.js
│ │ │ │ │ │ │ ├── contentWidgets/
│ │ │ │ │ │ │ │ └── contentWidgets.js
│ │ │ │ │ │ │ ├── currentLineHighlight/
│ │ │ │ │ │ │ │ ├── currentLineHighlight.css
│ │ │ │ │ │ │ │ └── currentLineHighlight.js
│ │ │ │ │ │ │ ├── decorations/
│ │ │ │ │ │ │ │ ├── decorations.css
│ │ │ │ │ │ │ │ └── decorations.js
│ │ │ │ │ │ │ ├── editorScrollbar/
│ │ │ │ │ │ │ │ └── editorScrollbar.js
│ │ │ │ │ │ │ ├── glyphMargin/
│ │ │ │ │ │ │ │ ├── glyphMargin.css
│ │ │ │ │ │ │ │ └── glyphMargin.js
│ │ │ │ │ │ │ ├── indentGuides/
│ │ │ │ │ │ │ │ ├── indentGuides.css
│ │ │ │ │ │ │ │ └── indentGuides.js
│ │ │ │ │ │ │ ├── lineNumbers/
│ │ │ │ │ │ │ │ ├── lineNumbers.css
│ │ │ │ │ │ │ │ └── lineNumbers.js
│ │ │ │ │ │ │ ├── lines/
│ │ │ │ │ │ │ │ ├── domReadingContext.js
│ │ │ │ │ │ │ │ ├── rangeUtil.js
│ │ │ │ │ │ │ │ ├── viewLine.js
│ │ │ │ │ │ │ │ ├── viewLines.css
│ │ │ │ │ │ │ │ └── viewLines.js
│ │ │ │ │ │ │ ├── linesDecorations/
│ │ │ │ │ │ │ │ ├── linesDecorations.css
│ │ │ │ │ │ │ │ └── linesDecorations.js
│ │ │ │ │ │ │ ├── margin/
│ │ │ │ │ │ │ │ ├── margin.css
│ │ │ │ │ │ │ │ └── margin.js
│ │ │ │ │ │ │ ├── marginDecorations/
│ │ │ │ │ │ │ │ ├── marginDecorations.css
│ │ │ │ │ │ │ │ └── marginDecorations.js
│ │ │ │ │ │ │ ├── minimap/
│ │ │ │ │ │ │ │ ├── minimap.css
│ │ │ │ │ │ │ │ ├── minimap.js
│ │ │ │ │ │ │ │ ├── minimapCharRenderer.js
│ │ │ │ │ │ │ │ ├── minimapCharRendererFactory.js
│ │ │ │ │ │ │ │ ├── minimapCharSheet.js
│ │ │ │ │ │ │ │ └── minimapPreBaked.js
│ │ │ │ │ │ │ ├── overlayWidgets/
│ │ │ │ │ │ │ │ ├── overlayWidgets.css
│ │ │ │ │ │ │ │ └── overlayWidgets.js
│ │ │ │ │ │ │ ├── overviewRuler/
│ │ │ │ │ │ │ │ ├── decorationsOverviewRuler.js
│ │ │ │ │ │ │ │ └── overviewRuler.js
│ │ │ │ │ │ │ ├── rulers/
│ │ │ │ │ │ │ │ ├── rulers.css
│ │ │ │ │ │ │ │ └── rulers.js
│ │ │ │ │ │ │ ├── scrollDecoration/
│ │ │ │ │ │ │ │ ├── scrollDecoration.css
│ │ │ │ │ │ │ │ └── scrollDecoration.js
│ │ │ │ │ │ │ ├── selections/
│ │ │ │ │ │ │ │ ├── selections.css
│ │ │ │ │ │ │ │ └── selections.js
│ │ │ │ │ │ │ ├── viewCursors/
│ │ │ │ │ │ │ │ ├── viewCursor.js
│ │ │ │ │ │ │ │ ├── viewCursors.css
│ │ │ │ │ │ │ │ └── viewCursors.js
│ │ │ │ │ │ │ ├── viewZones/
│ │ │ │ │ │ │ │ └── viewZones.js
│ │ │ │ │ │ │ └── whitespace/
│ │ │ │ │ │ │ ├── whitespace.css
│ │ │ │ │ │ │ └── whitespace.js
│ │ │ │ │ │ └── widget/
│ │ │ │ │ │ ├── codeEditor/
│ │ │ │ │ │ │ ├── codeEditorContributions.js
│ │ │ │ │ │ │ ├── codeEditorWidget.d.ts
│ │ │ │ │ │ │ ├── codeEditorWidget.js
│ │ │ │ │ │ │ ├── editor.css
│ │ │ │ │ │ │ └── embeddedCodeEditorWidget.js
│ │ │ │ │ │ ├── diffEditor/
│ │ │ │ │ │ │ ├── commands.js
│ │ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ │ ├── accessibleDiffViewer.css
│ │ │ │ │ │ │ │ ├── accessibleDiffViewer.js
│ │ │ │ │ │ │ │ ├── diffEditorDecorations.js
│ │ │ │ │ │ │ │ ├── diffEditorEditors.js
│ │ │ │ │ │ │ │ ├── diffEditorSash.js
│ │ │ │ │ │ │ │ └── diffEditorViewZones/
│ │ │ │ │ │ │ │ ├── diffEditorViewZones.js
│ │ │ │ │ │ │ │ ├── inlineDiffDeletedCodeMargin.js
│ │ │ │ │ │ │ │ └── renderLines.js
│ │ │ │ │ │ │ ├── delegatingEditorImpl.js
│ │ │ │ │ │ │ ├── diffEditor.contribution.d.ts
│ │ │ │ │ │ │ ├── diffEditor.contribution.js
│ │ │ │ │ │ │ ├── diffEditorOptions.js
│ │ │ │ │ │ │ ├── diffEditorViewModel.js
│ │ │ │ │ │ │ ├── diffEditorWidget.js
│ │ │ │ │ │ │ ├── diffProviderFactoryService.js
│ │ │ │ │ │ │ ├── features/
│ │ │ │ │ │ │ │ ├── gutterFeature.js
│ │ │ │ │ │ │ │ ├── hideUnchangedRegionsFeature.js
│ │ │ │ │ │ │ │ ├── movedBlocksLinesFeature.js
│ │ │ │ │ │ │ │ ├── overviewRulerFeature.js
│ │ │ │ │ │ │ │ └── revertButtonsFeature.js
│ │ │ │ │ │ │ ├── registrations.contribution.js
│ │ │ │ │ │ │ ├── style.css
│ │ │ │ │ │ │ ├── utils/
│ │ │ │ │ │ │ │ └── editorGutter.js
│ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ ├── markdownRenderer/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── markdownRenderer.js
│ │ │ │ │ │ │ └── renderedMarkdown.css
│ │ │ │ │ │ └── multiDiffEditor/
│ │ │ │ │ │ ├── colors.js
│ │ │ │ │ │ ├── diffEditorItemTemplate.js
│ │ │ │ │ │ ├── model.js
│ │ │ │ │ │ ├── multiDiffEditorViewModel.js
│ │ │ │ │ │ ├── multiDiffEditorWidget.js
│ │ │ │ │ │ ├── multiDiffEditorWidgetImpl.js
│ │ │ │ │ │ ├── objectPool.js
│ │ │ │ │ │ ├── style.css
│ │ │ │ │ │ ├── utils.js
│ │ │ │ │ │ └── workbenchUIElementFactory.js
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── commands/
│ │ │ │ │ │ │ ├── replaceCommand.js
│ │ │ │ │ │ │ ├── shiftCommand.js
│ │ │ │ │ │ │ ├── surroundSelectionCommand.js
│ │ │ │ │ │ │ └── trimTrailingWhitespaceCommand.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── diffEditor.js
│ │ │ │ │ │ │ ├── editorConfiguration.js
│ │ │ │ │ │ │ ├── editorConfigurationSchema.js
│ │ │ │ │ │ │ ├── editorOptions.js
│ │ │ │ │ │ │ ├── editorZoom.js
│ │ │ │ │ │ │ └── fontInfo.js
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── characterClassifier.js
│ │ │ │ │ │ │ ├── cursorColumns.js
│ │ │ │ │ │ │ ├── dimension.js
│ │ │ │ │ │ │ ├── editOperation.js
│ │ │ │ │ │ │ ├── editorColorRegistry.js
│ │ │ │ │ │ │ ├── eolCounter.js
│ │ │ │ │ │ │ ├── indentation.js
│ │ │ │ │ │ │ ├── lineRange.js
│ │ │ │ │ │ │ ├── offsetRange.js
│ │ │ │ │ │ │ ├── position.js
│ │ │ │ │ │ │ ├── positionToOffset.js
│ │ │ │ │ │ │ ├── range.js
│ │ │ │ │ │ │ ├── rgba.js
│ │ │ │ │ │ │ ├── selection.js
│ │ │ │ │ │ │ ├── stringBuilder.js
│ │ │ │ │ │ │ ├── textChange.js
│ │ │ │ │ │ │ ├── textEdit.js
│ │ │ │ │ │ │ ├── textLength.js
│ │ │ │ │ │ │ ├── textModelDefaults.js
│ │ │ │ │ │ │ ├── wordCharacterClassifier.js
│ │ │ │ │ │ │ └── wordHelper.js
│ │ │ │ │ │ ├── cursor/
│ │ │ │ │ │ │ ├── cursor.js
│ │ │ │ │ │ │ ├── cursorAtomicMoveOperations.js
│ │ │ │ │ │ │ ├── cursorCollection.js
│ │ │ │ │ │ │ ├── cursorColumnSelection.js
│ │ │ │ │ │ │ ├── cursorContext.js
│ │ │ │ │ │ │ ├── cursorDeleteOperations.js
│ │ │ │ │ │ │ ├── cursorMoveCommands.js
│ │ │ │ │ │ │ ├── cursorMoveOperations.js
│ │ │ │ │ │ │ ├── cursorTypeOperations.js
│ │ │ │ │ │ │ ├── cursorWordOperations.js
│ │ │ │ │ │ │ └── oneCursor.js
│ │ │ │ │ │ ├── cursorCommon.js
│ │ │ │ │ │ ├── cursorEvents.js
│ │ │ │ │ │ ├── diff/
│ │ │ │ │ │ │ ├── defaultLinesDiffComputer/
│ │ │ │ │ │ │ │ ├── algorithms/
│ │ │ │ │ │ │ │ │ ├── diffAlgorithm.js
│ │ │ │ │ │ │ │ │ ├── dynamicProgrammingDiffing.js
│ │ │ │ │ │ │ │ │ └── myersDiffAlgorithm.js
│ │ │ │ │ │ │ │ ├── computeMovedLines.js
│ │ │ │ │ │ │ │ ├── defaultLinesDiffComputer.js
│ │ │ │ │ │ │ │ ├── heuristicSequenceOptimizations.js
│ │ │ │ │ │ │ │ ├── lineSequence.js
│ │ │ │ │ │ │ │ ├── linesSliceCharSequence.js
│ │ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ │ ├── documentDiffProvider.js
│ │ │ │ │ │ │ ├── legacyLinesDiffComputer.js
│ │ │ │ │ │ │ ├── linesDiffComputer.js
│ │ │ │ │ │ │ ├── linesDiffComputers.js
│ │ │ │ │ │ │ └── rangeMapping.js
│ │ │ │ │ │ ├── editorAction.js
│ │ │ │ │ │ ├── editorCommon.js
│ │ │ │ │ │ ├── editorContextKeys.js
│ │ │ │ │ │ ├── editorFeatures.js
│ │ │ │ │ │ ├── editorTheme.js
│ │ │ │ │ │ ├── encodedTokenAttributes.js
│ │ │ │ │ │ ├── languageFeatureRegistry.js
│ │ │ │ │ │ ├── languageSelector.js
│ │ │ │ │ │ ├── languages/
│ │ │ │ │ │ │ ├── autoIndent.js
│ │ │ │ │ │ │ ├── defaultDocumentColorsComputer.js
│ │ │ │ │ │ │ ├── enterAction.js
│ │ │ │ │ │ │ ├── language.js
│ │ │ │ │ │ │ ├── languageConfiguration.js
│ │ │ │ │ │ │ ├── languageConfigurationRegistry.js
│ │ │ │ │ │ │ ├── linkComputer.js
│ │ │ │ │ │ │ ├── modesRegistry.js
│ │ │ │ │ │ │ ├── nullTokenize.js
│ │ │ │ │ │ │ ├── supports/
│ │ │ │ │ │ │ │ ├── characterPair.js
│ │ │ │ │ │ │ │ ├── electricCharacter.js
│ │ │ │ │ │ │ │ ├── indentRules.js
│ │ │ │ │ │ │ │ ├── indentationLineProcessor.js
│ │ │ │ │ │ │ │ ├── inplaceReplaceSupport.js
│ │ │ │ │ │ │ │ ├── languageBracketsConfiguration.js
│ │ │ │ │ │ │ │ ├── onEnter.js
│ │ │ │ │ │ │ │ ├── richEditBrackets.js
│ │ │ │ │ │ │ │ └── tokenization.js
│ │ │ │ │ │ │ ├── supports.js
│ │ │ │ │ │ │ └── textToHtmlTokenizer.js
│ │ │ │ │ │ ├── languages.js
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── bracketPairsTextModelPart/
│ │ │ │ │ │ │ │ ├── bracketPairsImpl.js
│ │ │ │ │ │ │ │ ├── bracketPairsTree/
│ │ │ │ │ │ │ │ │ ├── ast.js
│ │ │ │ │ │ │ │ │ ├── beforeEditPositionMapper.js
│ │ │ │ │ │ │ │ │ ├── bracketPairsTree.js
│ │ │ │ │ │ │ │ │ ├── brackets.js
│ │ │ │ │ │ │ │ │ ├── combineTextEditInfos.js
│ │ │ │ │ │ │ │ │ ├── concat23Trees.js
│ │ │ │ │ │ │ │ │ ├── length.js
│ │ │ │ │ │ │ │ │ ├── nodeReader.js
│ │ │ │ │ │ │ │ │ ├── parser.js
│ │ │ │ │ │ │ │ │ ├── smallImmutableSet.js
│ │ │ │ │ │ │ │ │ └── tokenizer.js
│ │ │ │ │ │ │ │ ├── colorizedBracketPairsDecorationProvider.js
│ │ │ │ │ │ │ │ └── fixBrackets.js
│ │ │ │ │ │ │ ├── decorationProvider.js
│ │ │ │ │ │ │ ├── editStack.js
│ │ │ │ │ │ │ ├── fixedArray.js
│ │ │ │ │ │ │ ├── guidesTextModelPart.js
│ │ │ │ │ │ │ ├── indentationGuesser.js
│ │ │ │ │ │ │ ├── intervalTree.js
│ │ │ │ │ │ │ ├── mirrorTextModel.js
│ │ │ │ │ │ │ ├── pieceTreeTextBuffer/
│ │ │ │ │ │ │ │ ├── pieceTreeBase.js
│ │ │ │ │ │ │ │ ├── pieceTreeTextBuffer.js
│ │ │ │ │ │ │ │ ├── pieceTreeTextBufferBuilder.js
│ │ │ │ │ │ │ │ └── rbTreeBase.js
│ │ │ │ │ │ │ ├── prefixSumComputer.js
│ │ │ │ │ │ │ ├── textModel.js
│ │ │ │ │ │ │ ├── textModelPart.js
│ │ │ │ │ │ │ ├── textModelSearch.js
│ │ │ │ │ │ │ ├── textModelText.js
│ │ │ │ │ │ │ ├── textModelTokens.js
│ │ │ │ │ │ │ ├── tokenizationTextModelPart.js
│ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ ├── model.js
│ │ │ │ │ │ ├── modelLineProjectionData.js
│ │ │ │ │ │ ├── services/
│ │ │ │ │ │ │ ├── editorBaseApi.js
│ │ │ │ │ │ │ ├── editorSimpleWorker.js
│ │ │ │ │ │ │ ├── editorWorker.js
│ │ │ │ │ │ │ ├── editorWorkerHost.js
│ │ │ │ │ │ │ ├── findSectionHeaders.js
│ │ │ │ │ │ │ ├── getIconClasses.js
│ │ │ │ │ │ │ ├── languageFeatureDebounce.js
│ │ │ │ │ │ │ ├── languageFeatures.js
│ │ │ │ │ │ │ ├── languageFeaturesService.js
│ │ │ │ │ │ │ ├── languageService.js
│ │ │ │ │ │ │ ├── languagesAssociations.js
│ │ │ │ │ │ │ ├── languagesRegistry.js
│ │ │ │ │ │ │ ├── markerDecorations.js
│ │ │ │ │ │ │ ├── markerDecorationsService.js
│ │ │ │ │ │ │ ├── model.js
│ │ │ │ │ │ │ ├── modelService.js
│ │ │ │ │ │ │ ├── resolverService.js
│ │ │ │ │ │ │ ├── semanticTokensDto.js
│ │ │ │ │ │ │ ├── semanticTokensProviderStyling.js
│ │ │ │ │ │ │ ├── semanticTokensStyling.js
│ │ │ │ │ │ │ ├── semanticTokensStylingService.js
│ │ │ │ │ │ │ ├── textResourceConfiguration.js
│ │ │ │ │ │ │ ├── treeViewsDnd.js
│ │ │ │ │ │ │ ├── treeViewsDndService.js
│ │ │ │ │ │ │ └── unicodeTextModelHighlighter.js
│ │ │ │ │ │ ├── standalone/
│ │ │ │ │ │ │ └── standaloneEnums.js
│ │ │ │ │ │ ├── standaloneStrings.js
│ │ │ │ │ │ ├── textModelBracketPairs.js
│ │ │ │ │ │ ├── textModelEvents.js
│ │ │ │ │ │ ├── textModelGuides.js
│ │ │ │ │ │ ├── tokenizationRegistry.js
│ │ │ │ │ │ ├── tokenizationTextModelPart.js
│ │ │ │ │ │ ├── tokens/
│ │ │ │ │ │ │ ├── contiguousMultilineTokens.js
│ │ │ │ │ │ │ ├── contiguousMultilineTokensBuilder.js
│ │ │ │ │ │ │ ├── contiguousTokensEditing.js
│ │ │ │ │ │ │ ├── contiguousTokensStore.js
│ │ │ │ │ │ │ ├── lineTokens.js
│ │ │ │ │ │ │ ├── sparseMultilineTokens.js
│ │ │ │ │ │ │ └── sparseTokensStore.js
│ │ │ │ │ │ ├── viewEventHandler.js
│ │ │ │ │ │ ├── viewEvents.js
│ │ │ │ │ │ ├── viewLayout/
│ │ │ │ │ │ │ ├── lineDecorations.js
│ │ │ │ │ │ │ ├── linePart.js
│ │ │ │ │ │ │ ├── linesLayout.js
│ │ │ │ │ │ │ ├── viewLayout.js
│ │ │ │ │ │ │ ├── viewLineRenderer.js
│ │ │ │ │ │ │ └── viewLinesViewportData.js
│ │ │ │ │ │ ├── viewModel/
│ │ │ │ │ │ │ ├── glyphLanesModel.js
│ │ │ │ │ │ │ ├── minimapTokensColorTracker.js
│ │ │ │ │ │ │ ├── modelLineProjection.js
│ │ │ │ │ │ │ ├── monospaceLineBreaksComputer.js
│ │ │ │ │ │ │ ├── overviewZoneManager.js
│ │ │ │ │ │ │ ├── viewContext.js
│ │ │ │ │ │ │ ├── viewModelDecorations.js
│ │ │ │ │ │ │ ├── viewModelImpl.js
│ │ │ │ │ │ │ └── viewModelLines.js
│ │ │ │ │ │ ├── viewModel.js
│ │ │ │ │ │ └── viewModelEventDispatcher.js
│ │ │ │ │ ├── contrib/
│ │ │ │ │ │ ├── anchorSelect/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── anchorSelect.css
│ │ │ │ │ │ │ ├── anchorSelect.d.ts
│ │ │ │ │ │ │ └── anchorSelect.js
│ │ │ │ │ │ ├── bracketMatching/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── bracketMatching.css
│ │ │ │ │ │ │ ├── bracketMatching.d.ts
│ │ │ │ │ │ │ └── bracketMatching.js
│ │ │ │ │ │ ├── caretOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── caretOperations.d.ts
│ │ │ │ │ │ │ ├── caretOperations.js
│ │ │ │ │ │ │ ├── moveCaretCommand.js
│ │ │ │ │ │ │ ├── transpose.d.ts
│ │ │ │ │ │ │ └── transpose.js
│ │ │ │ │ │ ├── clipboard/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── clipboard.d.ts
│ │ │ │ │ │ │ └── clipboard.js
│ │ │ │ │ │ ├── codeAction/
│ │ │ │ │ │ │ ├── browser/
│ │ │ │ │ │ │ │ ├── codeAction.js
│ │ │ │ │ │ │ │ ├── codeActionCommands.js
│ │ │ │ │ │ │ │ ├── codeActionContributions.d.ts
│ │ │ │ │ │ │ │ ├── codeActionContributions.js
│ │ │ │ │ │ │ │ ├── codeActionController.js
│ │ │ │ │ │ │ │ ├── codeActionKeybindingResolver.js
│ │ │ │ │ │ │ │ ├── codeActionMenu.js
│ │ │ │ │ │ │ │ ├── codeActionModel.js
│ │ │ │ │ │ │ │ ├── lightBulbWidget.css
│ │ │ │ │ │ │ │ └── lightBulbWidget.js
│ │ │ │ │ │ │ └── common/
│ │ │ │ │ │ │ └── types.js
│ │ │ │ │ │ ├── codelens/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── codeLensCache.js
│ │ │ │ │ │ │ ├── codelens.js
│ │ │ │ │ │ │ ├── codelensController.d.ts
│ │ │ │ │ │ │ ├── codelensController.js
│ │ │ │ │ │ │ ├── codelensWidget.css
│ │ │ │ │ │ │ └── codelensWidget.js
│ │ │ │ │ │ ├── colorPicker/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── color.js
│ │ │ │ │ │ │ ├── colorContributions.d.ts
│ │ │ │ │ │ │ ├── colorContributions.js
│ │ │ │ │ │ │ ├── colorDetector.js
│ │ │ │ │ │ │ ├── colorHoverParticipant.js
│ │ │ │ │ │ │ ├── colorPicker.css
│ │ │ │ │ │ │ ├── colorPickerModel.js
│ │ │ │ │ │ │ ├── colorPickerWidget.js
│ │ │ │ │ │ │ ├── defaultDocumentColorProvider.js
│ │ │ │ │ │ │ ├── standaloneColorPickerActions.d.ts
│ │ │ │ │ │ │ ├── standaloneColorPickerActions.js
│ │ │ │ │ │ │ └── standaloneColorPickerWidget.js
│ │ │ │ │ │ ├── comment/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── blockCommentCommand.js
│ │ │ │ │ │ │ ├── comment.d.ts
│ │ │ │ │ │ │ ├── comment.js
│ │ │ │ │ │ │ └── lineCommentCommand.js
│ │ │ │ │ │ ├── contextmenu/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contextmenu.d.ts
│ │ │ │ │ │ │ └── contextmenu.js
│ │ │ │ │ │ ├── cursorUndo/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── cursorUndo.d.ts
│ │ │ │ │ │ │ └── cursorUndo.js
│ │ │ │ │ │ ├── diffEditorBreadcrumbs/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contribution.d.ts
│ │ │ │ │ │ │ └── contribution.js
│ │ │ │ │ │ ├── dnd/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── dnd.css
│ │ │ │ │ │ │ ├── dnd.d.ts
│ │ │ │ │ │ │ ├── dnd.js
│ │ │ │ │ │ │ └── dragAndDropCommand.js
│ │ │ │ │ │ ├── documentSymbols/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── documentSymbols.d.ts
│ │ │ │ │ │ │ ├── documentSymbols.js
│ │ │ │ │ │ │ └── outlineModel.js
│ │ │ │ │ │ ├── dropOrPasteInto/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── copyPasteContribution.d.ts
│ │ │ │ │ │ │ ├── copyPasteContribution.js
│ │ │ │ │ │ │ ├── copyPasteController.js
│ │ │ │ │ │ │ ├── defaultProviders.js
│ │ │ │ │ │ │ ├── dropIntoEditorContribution.d.ts
│ │ │ │ │ │ │ ├── dropIntoEditorContribution.js
│ │ │ │ │ │ │ ├── dropIntoEditorController.js
│ │ │ │ │ │ │ ├── edit.js
│ │ │ │ │ │ │ ├── postEditWidget.css
│ │ │ │ │ │ │ └── postEditWidget.js
│ │ │ │ │ │ ├── editorState/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── editorState.js
│ │ │ │ │ │ │ └── keybindingCancellation.js
│ │ │ │ │ │ ├── find/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── findController.d.ts
│ │ │ │ │ │ │ ├── findController.js
│ │ │ │ │ │ │ ├── findDecorations.js
│ │ │ │ │ │ │ ├── findModel.js
│ │ │ │ │ │ │ ├── findOptionsWidget.css
│ │ │ │ │ │ │ ├── findOptionsWidget.js
│ │ │ │ │ │ │ ├── findState.js
│ │ │ │ │ │ │ ├── findWidget.css
│ │ │ │ │ │ │ ├── findWidget.js
│ │ │ │ │ │ │ ├── replaceAllCommand.js
│ │ │ │ │ │ │ └── replacePattern.js
│ │ │ │ │ │ ├── folding/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── folding.css
│ │ │ │ │ │ │ ├── folding.d.ts
│ │ │ │ │ │ │ ├── folding.js
│ │ │ │ │ │ │ ├── foldingDecorations.js
│ │ │ │ │ │ │ ├── foldingModel.js
│ │ │ │ │ │ │ ├── foldingRanges.js
│ │ │ │ │ │ │ ├── hiddenRangeModel.js
│ │ │ │ │ │ │ ├── indentRangeProvider.js
│ │ │ │ │ │ │ └── syntaxRangeProvider.js
│ │ │ │ │ │ ├── fontZoom/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── fontZoom.d.ts
│ │ │ │ │ │ │ └── fontZoom.js
│ │ │ │ │ │ ├── format/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── format.js
│ │ │ │ │ │ │ ├── formatActions.d.ts
│ │ │ │ │ │ │ ├── formatActions.js
│ │ │ │ │ │ │ └── formattingEdit.js
│ │ │ │ │ │ ├── gotoError/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── gotoError.d.ts
│ │ │ │ │ │ │ ├── gotoError.js
│ │ │ │ │ │ │ ├── gotoErrorWidget.js
│ │ │ │ │ │ │ ├── markerNavigationService.js
│ │ │ │ │ │ │ └── media/
│ │ │ │ │ │ │ └── gotoErrorWidget.css
│ │ │ │ │ │ ├── gotoSymbol/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── goToCommands.d.ts
│ │ │ │ │ │ │ ├── goToCommands.js
│ │ │ │ │ │ │ ├── goToSymbol.js
│ │ │ │ │ │ │ ├── link/
│ │ │ │ │ │ │ │ ├── clickLinkGesture.js
│ │ │ │ │ │ │ │ ├── goToDefinitionAtPosition.css
│ │ │ │ │ │ │ │ ├── goToDefinitionAtPosition.d.ts
│ │ │ │ │ │ │ │ └── goToDefinitionAtPosition.js
│ │ │ │ │ │ │ ├── peek/
│ │ │ │ │ │ │ │ ├── referencesController.js
│ │ │ │ │ │ │ │ ├── referencesTree.js
│ │ │ │ │ │ │ │ ├── referencesWidget.css
│ │ │ │ │ │ │ │ └── referencesWidget.js
│ │ │ │ │ │ │ ├── referencesModel.js
│ │ │ │ │ │ │ └── symbolNavigation.js
│ │ │ │ │ │ ├── hover/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contentHoverComputer.js
│ │ │ │ │ │ │ ├── contentHoverController.js
│ │ │ │ │ │ │ ├── contentHoverStatusBar.js
│ │ │ │ │ │ │ ├── contentHoverTypes.js
│ │ │ │ │ │ │ ├── contentHoverWidget.js
│ │ │ │ │ │ │ ├── getHover.js
│ │ │ │ │ │ │ ├── hover.css
│ │ │ │ │ │ │ ├── hoverAccessibleViews.js
│ │ │ │ │ │ │ ├── hoverActionIds.js
│ │ │ │ │ │ │ ├── hoverActions.js
│ │ │ │ │ │ │ ├── hoverContribution.d.ts
│ │ │ │ │ │ │ ├── hoverContribution.js
│ │ │ │ │ │ │ ├── hoverController.js
│ │ │ │ │ │ │ ├── hoverOperation.js
│ │ │ │ │ │ │ ├── hoverTypes.js
│ │ │ │ │ │ │ ├── marginHoverComputer.js
│ │ │ │ │ │ │ ├── marginHoverWidget.js
│ │ │ │ │ │ │ ├── markdownHoverParticipant.js
│ │ │ │ │ │ │ ├── markerHoverParticipant.js
│ │ │ │ │ │ │ └── resizableContentWidget.js
│ │ │ │ │ │ ├── inPlaceReplace/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── inPlaceReplace.css
│ │ │ │ │ │ │ ├── inPlaceReplace.d.ts
│ │ │ │ │ │ │ ├── inPlaceReplace.js
│ │ │ │ │ │ │ └── inPlaceReplaceCommand.js
│ │ │ │ │ │ ├── indentation/
│ │ │ │ │ │ │ ├── browser/
│ │ │ │ │ │ │ │ ├── indentation.d.ts
│ │ │ │ │ │ │ │ └── indentation.js
│ │ │ │ │ │ │ └── common/
│ │ │ │ │ │ │ ├── indentUtils.js
│ │ │ │ │ │ │ └── indentation.js
│ │ │ │ │ │ ├── inlayHints/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── inlayHints.js
│ │ │ │ │ │ │ ├── inlayHintsContribution.d.ts
│ │ │ │ │ │ │ ├── inlayHintsContribution.js
│ │ │ │ │ │ │ ├── inlayHintsController.js
│ │ │ │ │ │ │ ├── inlayHintsHover.js
│ │ │ │ │ │ │ └── inlayHintsLocations.js
│ │ │ │ │ │ ├── inlineCompletions/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── commandIds.js
│ │ │ │ │ │ │ ├── commands.js
│ │ │ │ │ │ │ ├── ghostText.css
│ │ │ │ │ │ │ ├── ghostText.js
│ │ │ │ │ │ │ ├── ghostTextWidget.js
│ │ │ │ │ │ │ ├── hoverParticipant.js
│ │ │ │ │ │ │ ├── inlineCompletionContextKeys.js
│ │ │ │ │ │ │ ├── inlineCompletions.contribution.d.ts
│ │ │ │ │ │ │ ├── inlineCompletions.contribution.js
│ │ │ │ │ │ │ ├── inlineCompletionsAccessibleView.js
│ │ │ │ │ │ │ ├── inlineCompletionsController.js
│ │ │ │ │ │ │ ├── inlineCompletionsHintsWidget.css
│ │ │ │ │ │ │ ├── inlineCompletionsHintsWidget.js
│ │ │ │ │ │ │ ├── inlineCompletionsModel.js
│ │ │ │ │ │ │ ├── inlineCompletionsSource.js
│ │ │ │ │ │ │ ├── provideInlineCompletions.js
│ │ │ │ │ │ │ ├── singleTextEdit.js
│ │ │ │ │ │ │ ├── suggestWidgetInlineCompletionProvider.js
│ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ ├── inlineEdit/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── commandIds.js
│ │ │ │ │ │ │ ├── commands.js
│ │ │ │ │ │ │ ├── ghostTextWidget.js
│ │ │ │ │ │ │ ├── hoverParticipant.js
│ │ │ │ │ │ │ ├── inlineEdit.contribution.d.ts
│ │ │ │ │ │ │ ├── inlineEdit.contribution.js
│ │ │ │ │ │ │ ├── inlineEdit.css
│ │ │ │ │ │ │ ├── inlineEditController.js
│ │ │ │ │ │ │ ├── inlineEditHintsWidget.css
│ │ │ │ │ │ │ └── inlineEditHintsWidget.js
│ │ │ │ │ │ ├── inlineProgress/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── inlineProgress.d.ts
│ │ │ │ │ │ │ ├── inlineProgress.js
│ │ │ │ │ │ │ └── inlineProgressWidget.css
│ │ │ │ │ │ ├── lineSelection/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── lineSelection.d.ts
│ │ │ │ │ │ │ └── lineSelection.js
│ │ │ │ │ │ ├── linesOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── copyLinesCommand.js
│ │ │ │ │ │ │ ├── linesOperations.d.ts
│ │ │ │ │ │ │ ├── linesOperations.js
│ │ │ │ │ │ │ ├── moveLinesCommand.js
│ │ │ │ │ │ │ └── sortLinesCommand.js
│ │ │ │ │ │ ├── linkedEditing/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── linkedEditing.css
│ │ │ │ │ │ │ ├── linkedEditing.d.ts
│ │ │ │ │ │ │ └── linkedEditing.js
│ │ │ │ │ │ ├── links/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── getLinks.js
│ │ │ │ │ │ │ ├── links.css
│ │ │ │ │ │ │ ├── links.d.ts
│ │ │ │ │ │ │ └── links.js
│ │ │ │ │ │ ├── longLinesHelper/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── longLinesHelper.d.ts
│ │ │ │ │ │ │ └── longLinesHelper.js
│ │ │ │ │ │ ├── message/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── messageController.css
│ │ │ │ │ │ │ └── messageController.js
│ │ │ │ │ │ ├── multicursor/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── multicursor.d.ts
│ │ │ │ │ │ │ └── multicursor.js
│ │ │ │ │ │ ├── parameterHints/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── parameterHints.css
│ │ │ │ │ │ │ ├── parameterHints.d.ts
│ │ │ │ │ │ │ ├── parameterHints.js
│ │ │ │ │ │ │ ├── parameterHintsModel.js
│ │ │ │ │ │ │ ├── parameterHintsWidget.js
│ │ │ │ │ │ │ └── provideSignatureHelp.js
│ │ │ │ │ │ ├── peekView/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ └── peekViewWidget.css
│ │ │ │ │ │ │ └── peekView.js
│ │ │ │ │ │ ├── quickAccess/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── commandsQuickAccess.js
│ │ │ │ │ │ │ ├── editorNavigationQuickAccess.js
│ │ │ │ │ │ │ ├── gotoLineQuickAccess.js
│ │ │ │ │ │ │ └── gotoSymbolQuickAccess.js
│ │ │ │ │ │ ├── readOnlyMessage/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contribution.d.ts
│ │ │ │ │ │ │ └── contribution.js
│ │ │ │ │ │ ├── rename/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── rename.d.ts
│ │ │ │ │ │ │ ├── rename.js
│ │ │ │ │ │ │ ├── renameWidget.css
│ │ │ │ │ │ │ └── renameWidget.js
│ │ │ │ │ │ ├── sectionHeaders/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── sectionHeaders.d.ts
│ │ │ │ │ │ │ └── sectionHeaders.js
│ │ │ │ │ │ ├── semanticTokens/
│ │ │ │ │ │ │ ├── browser/
│ │ │ │ │ │ │ │ ├── documentSemanticTokens.d.ts
│ │ │ │ │ │ │ │ ├── documentSemanticTokens.js
│ │ │ │ │ │ │ │ ├── viewportSemanticTokens.d.ts
│ │ │ │ │ │ │ │ └── viewportSemanticTokens.js
│ │ │ │ │ │ │ └── common/
│ │ │ │ │ │ │ ├── getSemanticTokens.js
│ │ │ │ │ │ │ └── semanticTokensConfig.js
│ │ │ │ │ │ ├── smartSelect/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── bracketSelections.js
│ │ │ │ │ │ │ ├── smartSelect.d.ts
│ │ │ │ │ │ │ ├── smartSelect.js
│ │ │ │ │ │ │ └── wordSelections.js
│ │ │ │ │ │ ├── snippet/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── snippetController2.d.ts
│ │ │ │ │ │ │ ├── snippetController2.js
│ │ │ │ │ │ │ ├── snippetParser.js
│ │ │ │ │ │ │ ├── snippetSession.css
│ │ │ │ │ │ │ ├── snippetSession.js
│ │ │ │ │ │ │ └── snippetVariables.js
│ │ │ │ │ │ ├── stickyScroll/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── stickyScroll.css
│ │ │ │ │ │ │ ├── stickyScrollActions.js
│ │ │ │ │ │ │ ├── stickyScrollContribution.d.ts
│ │ │ │ │ │ │ ├── stickyScrollContribution.js
│ │ │ │ │ │ │ ├── stickyScrollController.js
│ │ │ │ │ │ │ ├── stickyScrollElement.js
│ │ │ │ │ │ │ ├── stickyScrollModelProvider.js
│ │ │ │ │ │ │ ├── stickyScrollProvider.js
│ │ │ │ │ │ │ └── stickyScrollWidget.js
│ │ │ │ │ │ ├── suggest/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── completionModel.js
│ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ └── suggest.css
│ │ │ │ │ │ │ ├── suggest.js
│ │ │ │ │ │ │ ├── suggestAlternatives.js
│ │ │ │ │ │ │ ├── suggestCommitCharacters.js
│ │ │ │ │ │ │ ├── suggestController.d.ts
│ │ │ │ │ │ │ ├── suggestController.js
│ │ │ │ │ │ │ ├── suggestInlineCompletions.d.ts
│ │ │ │ │ │ │ ├── suggestInlineCompletions.js
│ │ │ │ │ │ │ ├── suggestMemory.js
│ │ │ │ │ │ │ ├── suggestModel.js
│ │ │ │ │ │ │ ├── suggestOvertypingCapturer.js
│ │ │ │ │ │ │ ├── suggestWidget.js
│ │ │ │ │ │ │ ├── suggestWidgetDetails.js
│ │ │ │ │ │ │ ├── suggestWidgetRenderer.js
│ │ │ │ │ │ │ ├── suggestWidgetStatus.js
│ │ │ │ │ │ │ ├── wordContextKey.js
│ │ │ │ │ │ │ └── wordDistance.js
│ │ │ │ │ │ ├── symbolIcons/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── symbolIcons.css
│ │ │ │ │ │ │ └── symbolIcons.js
│ │ │ │ │ │ ├── toggleTabFocusMode/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── toggleTabFocusMode.d.ts
│ │ │ │ │ │ │ └── toggleTabFocusMode.js
│ │ │ │ │ │ ├── tokenization/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── tokenization.d.ts
│ │ │ │ │ │ │ └── tokenization.js
│ │ │ │ │ │ ├── unicodeHighlighter/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── bannerController.css
│ │ │ │ │ │ │ ├── bannerController.js
│ │ │ │ │ │ │ ├── unicodeHighlighter.css
│ │ │ │ │ │ │ ├── unicodeHighlighter.d.ts
│ │ │ │ │ │ │ └── unicodeHighlighter.js
│ │ │ │ │ │ ├── unusualLineTerminators/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── unusualLineTerminators.d.ts
│ │ │ │ │ │ │ └── unusualLineTerminators.js
│ │ │ │ │ │ ├── wordHighlighter/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── highlightDecorations.css
│ │ │ │ │ │ │ ├── highlightDecorations.js
│ │ │ │ │ │ │ ├── wordHighlighter.d.ts
│ │ │ │ │ │ │ └── wordHighlighter.js
│ │ │ │ │ │ ├── wordOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── wordOperations.d.ts
│ │ │ │ │ │ │ └── wordOperations.js
│ │ │ │ │ │ ├── wordPartOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── wordPartOperations.d.ts
│ │ │ │ │ │ │ └── wordPartOperations.js
│ │ │ │ │ │ └── zoneWidget/
│ │ │ │ │ │ └── browser/
│ │ │ │ │ │ ├── zoneWidget.css
│ │ │ │ │ │ └── zoneWidget.js
│ │ │ │ │ ├── edcore.main.js
│ │ │ │ │ ├── editor.all.js
│ │ │ │ │ ├── editor.api.d.ts
│ │ │ │ │ ├── editor.api.js
│ │ │ │ │ ├── editor.main.js
│ │ │ │ │ ├── editor.worker.js
│ │ │ │ │ └── standalone/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── colorizer.js
│ │ │ │ │ │ ├── iPadShowKeyboard/
│ │ │ │ │ │ │ ├── iPadShowKeyboard.css
│ │ │ │ │ │ │ ├── iPadShowKeyboard.d.ts
│ │ │ │ │ │ │ └── iPadShowKeyboard.js
│ │ │ │ │ │ ├── inspectTokens/
│ │ │ │ │ │ │ ├── inspectTokens.css
│ │ │ │ │ │ │ ├── inspectTokens.d.ts
│ │ │ │ │ │ │ └── inspectTokens.js
│ │ │ │ │ │ ├── quickAccess/
│ │ │ │ │ │ │ ├── standaloneCommandsQuickAccess.d.ts
│ │ │ │ │ │ │ ├── standaloneCommandsQuickAccess.js
│ │ │ │ │ │ │ ├── standaloneGotoLineQuickAccess.d.ts
│ │ │ │ │ │ │ ├── standaloneGotoLineQuickAccess.js
│ │ │ │ │ │ │ ├── standaloneGotoSymbolQuickAccess.d.ts
│ │ │ │ │ │ │ ├── standaloneGotoSymbolQuickAccess.js
│ │ │ │ │ │ │ ├── standaloneHelpQuickAccess.d.ts
│ │ │ │ │ │ │ └── standaloneHelpQuickAccess.js
│ │ │ │ │ │ ├── quickInput/
│ │ │ │ │ │ │ ├── standaloneQuickInput.css
│ │ │ │ │ │ │ └── standaloneQuickInputService.js
│ │ │ │ │ │ ├── referenceSearch/
│ │ │ │ │ │ │ ├── standaloneReferenceSearch.d.ts
│ │ │ │ │ │ │ └── standaloneReferenceSearch.js
│ │ │ │ │ │ ├── standalone-tokens.css
│ │ │ │ │ │ ├── standaloneCodeEditor.js
│ │ │ │ │ │ ├── standaloneCodeEditorService.js
│ │ │ │ │ │ ├── standaloneEditor.js
│ │ │ │ │ │ ├── standaloneLanguages.js
│ │ │ │ │ │ ├── standaloneLayoutService.js
│ │ │ │ │ │ ├── standaloneServices.js
│ │ │ │ │ │ ├── standaloneThemeService.js
│ │ │ │ │ │ └── toggleHighContrast/
│ │ │ │ │ │ ├── toggleHighContrast.d.ts
│ │ │ │ │ │ └── toggleHighContrast.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── monarch/
│ │ │ │ │ │ ├── monarchCommon.js
│ │ │ │ │ │ ├── monarchCompile.js
│ │ │ │ │ │ ├── monarchLexer.js
│ │ │ │ │ │ └── monarchTypes.js
│ │ │ │ │ ├── standaloneTheme.js
│ │ │ │ │ └── themes.js
│ │ │ │ ├── language/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── css.worker.js
│ │ │ │ │ │ ├── cssMode.js
│ │ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ │ └── monaco.contribution.js
│ │ │ │ │ ├── html/
│ │ │ │ │ │ ├── html.worker.js
│ │ │ │ │ │ ├── htmlMode.js
│ │ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ │ └── monaco.contribution.js
│ │ │ │ │ ├── json/
│ │ │ │ │ │ ├── json.worker.js
│ │ │ │ │ │ ├── jsonMode.js
│ │ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ │ └── monaco.contribution.js
│ │ │ │ │ └── typescript/
│ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ ├── monaco.contribution.js
│ │ │ │ │ ├── ts.worker.js
│ │ │ │ │ └── tsMode.js
│ │ │ │ ├── nls.js
│ │ │ │ └── platform/
│ │ │ │ ├── accessibility/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── accessibilityService.js
│ │ │ │ │ │ ├── accessibleView.js
│ │ │ │ │ │ └── accessibleViewRegistry.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── accessibility.js
│ │ │ │ ├── accessibilitySignal/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── accessibilitySignalService.js
│ │ │ │ ├── action/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── action.js
│ │ │ │ │ └── actionCommonCategories.js
│ │ │ │ ├── actionWidget/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── actionList.js
│ │ │ │ │ │ ├── actionWidget.css
│ │ │ │ │ │ └── actionWidget.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── actionWidget.js
│ │ │ │ ├── actions/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── menuEntryActionViewItem.css
│ │ │ │ │ │ ├── menuEntryActionViewItem.js
│ │ │ │ │ │ └── toolbar.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── menuService.js
│ │ │ │ ├── clipboard/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ └── clipboardService.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── clipboardService.js
│ │ │ │ ├── commands/
│ │ │ │ │ └── common/
│ │ │ │ │ └── commands.js
│ │ │ │ ├── configuration/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── configuration.js
│ │ │ │ │ ├── configurationModels.js
│ │ │ │ │ ├── configurationRegistry.js
│ │ │ │ │ └── configurations.js
│ │ │ │ ├── contextkey/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ └── contextKeyService.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── contextkey.js
│ │ │ │ │ ├── contextkeys.js
│ │ │ │ │ └── scanner.js
│ │ │ │ ├── contextview/
│ │ │ │ │ └── browser/
│ │ │ │ │ ├── contextMenuHandler.js
│ │ │ │ │ ├── contextMenuService.js
│ │ │ │ │ ├── contextView.js
│ │ │ │ │ └── contextViewService.js
│ │ │ │ ├── dialogs/
│ │ │ │ │ └── common/
│ │ │ │ │ └── dialogs.js
│ │ │ │ ├── dnd/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── dnd.js
│ │ │ │ ├── editor/
│ │ │ │ │ └── common/
│ │ │ │ │ └── editor.js
│ │ │ │ ├── environment/
│ │ │ │ │ └── common/
│ │ │ │ │ └── environment.js
│ │ │ │ ├── extensions/
│ │ │ │ │ └── common/
│ │ │ │ │ └── extensions.js
│ │ │ │ ├── files/
│ │ │ │ │ └── common/
│ │ │ │ │ └── files.js
│ │ │ │ ├── history/
│ │ │ │ │ └── browser/
│ │ │ │ │ ├── contextScopedHistoryWidget.js
│ │ │ │ │ └── historyWidgetKeybindingHint.js
│ │ │ │ ├── hover/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── hover.js
│ │ │ │ ├── instantiation/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── descriptors.js
│ │ │ │ │ ├── extensions.js
│ │ │ │ │ ├── graph.js
│ │ │ │ │ ├── instantiation.js
│ │ │ │ │ ├── instantiationService.js
│ │ │ │ │ └── serviceCollection.js
│ │ │ │ ├── jsonschemas/
│ │ │ │ │ └── common/
│ │ │ │ │ └── jsonContributionRegistry.js
│ │ │ │ ├── keybinding/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── abstractKeybindingService.js
│ │ │ │ │ ├── baseResolvedKeybinding.js
│ │ │ │ │ ├── keybinding.js
│ │ │ │ │ ├── keybindingResolver.js
│ │ │ │ │ ├── keybindingsRegistry.js
│ │ │ │ │ ├── resolvedKeybindingItem.js
│ │ │ │ │ └── usLayoutResolvedKeybinding.js
│ │ │ │ ├── label/
│ │ │ │ │ └── common/
│ │ │ │ │ └── label.js
│ │ │ │ ├── layout/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── layoutService.js
│ │ │ │ ├── list/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── listService.js
│ │ │ │ ├── log/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── log.js
│ │ │ │ │ └── logService.js
│ │ │ │ ├── markers/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── markerService.js
│ │ │ │ │ └── markers.js
│ │ │ │ ├── notification/
│ │ │ │ │ └── common/
│ │ │ │ │ └── notification.js
│ │ │ │ ├── observable/
│ │ │ │ │ └── common/
│ │ │ │ │ └── platformObservableUtils.js
│ │ │ │ ├── opener/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── link.css
│ │ │ │ │ │ └── link.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── opener.js
│ │ │ │ ├── policy/
│ │ │ │ │ └── common/
│ │ │ │ │ └── policy.js
│ │ │ │ ├── progress/
│ │ │ │ │ └── common/
│ │ │ │ │ └── progress.js
│ │ │ │ ├── quickinput/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── commandsQuickAccess.js
│ │ │ │ │ │ ├── helpQuickAccess.js
│ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ └── quickInput.css
│ │ │ │ │ │ ├── pickerQuickAccess.js
│ │ │ │ │ │ ├── quickAccess.js
│ │ │ │ │ │ ├── quickInput.js
│ │ │ │ │ │ ├── quickInputActions.js
│ │ │ │ │ │ ├── quickInputBox.js
│ │ │ │ │ │ ├── quickInputController.js
│ │ │ │ │ │ ├── quickInputService.js
│ │ │ │ │ │ ├── quickInputTree.js
│ │ │ │ │ │ └── quickInputUtils.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── quickAccess.js
│ │ │ │ │ └── quickInput.js
│ │ │ │ ├── registry/
│ │ │ │ │ └── common/
│ │ │ │ │ └── platform.js
│ │ │ │ ├── severityIcon/
│ │ │ │ │ └── browser/
│ │ │ │ │ ├── media/
│ │ │ │ │ │ └── severityIcon.css
│ │ │ │ │ └── severityIcon.js
│ │ │ │ ├── storage/
│ │ │ │ │ └── common/
│ │ │ │ │ └── storage.js
│ │ │ │ ├── telemetry/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── gdprTypings.js
│ │ │ │ │ └── telemetry.js
│ │ │ │ ├── theme/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── defaultStyles.js
│ │ │ │ │ │ └── iconsStyleSheet.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── colorRegistry.js
│ │ │ │ │ ├── colorUtils.js
│ │ │ │ │ ├── colors/
│ │ │ │ │ │ ├── baseColors.js
│ │ │ │ │ │ ├── chartsColors.js
│ │ │ │ │ │ ├── editorColors.js
│ │ │ │ │ │ ├── inputColors.js
│ │ │ │ │ │ ├── listColors.js
│ │ │ │ │ │ ├── menuColors.js
│ │ │ │ │ │ ├── minimapColors.js
│ │ │ │ │ │ ├── miscColors.js
│ │ │ │ │ │ ├── quickpickColors.js
│ │ │ │ │ │ └── searchColors.js
│ │ │ │ │ ├── iconRegistry.js
│ │ │ │ │ ├── theme.js
│ │ │ │ │ └── themeService.js
│ │ │ │ ├── undoRedo/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── undoRedo.js
│ │ │ │ │ └── undoRedoService.js
│ │ │ │ └── workspace/
│ │ │ │ └── common/
│ │ │ │ ├── workspace.js
│ │ │ │ └── workspaceTrust.js
│ │ │ ├── nyqBNV6O.js
│ │ │ ├── oQwgk5qA.js
│ │ │ ├── qXRMwz9A.js
│ │ │ ├── qmhIZ77x.js
│ │ │ ├── qpfuy3xp.js
│ │ │ ├── rKxcFsZi.js
│ │ │ ├── rUbGlJbN.js
│ │ │ ├── s0YP2YF7.js
│ │ │ ├── sacFqUAJ.js
│ │ │ ├── sdHcTMYB.js
│ │ │ ├── shcSOmrb.js
│ │ │ ├── ul-Lp4lw.js
│ │ │ ├── w-ucz2PV.js
│ │ │ ├── w8dY5SsB.js
│ │ │ ├── wI6OXr6j.js
│ │ │ ├── wLBHnxd4.js
│ │ │ ├── xI-RfyKK.js
│ │ │ ├── xW4inM5L.js
│ │ │ ├── ySlJ1b_l.js
│ │ │ ├── yf5bffbF.js
│ │ │ ├── zIqOaAtZ.js
│ │ │ └── zocC4JxJ.js
│ │ ├── index.html
│ │ └── robots.txt
│ ├── store/
│ │ ├── __init__.py
│ │ ├── state_app.py
│ │ ├── state_candles.py
│ │ ├── state_closed_trades.py
│ │ ├── state_exchanges.py
│ │ ├── state_logs.py
│ │ ├── state_orderbook.py
│ │ ├── state_orders.py
│ │ ├── state_positions.py
│ │ ├── state_tickers.py
│ │ └── state_trades.py
│ ├── strategies/
│ │ ├── CanAddClosedTradeToStore/
│ │ │ └── __init__.py
│ │ ├── Strategy.py
│ │ ├── Test01/
│ │ │ └── __init__.py
│ │ ├── Test02/
│ │ │ └── __init__.py
│ │ ├── Test04/
│ │ │ └── __init__.py
│ │ ├── Test05/
│ │ │ └── __init__.py
│ │ ├── Test06/
│ │ │ └── __init__.py
│ │ ├── Test07/
│ │ │ └── __init__.py
│ │ ├── Test08/
│ │ │ └── __init__.py
│ │ ├── Test09/
│ │ │ └── __init__.py
│ │ ├── Test10/
│ │ │ └── __init__.py
│ │ ├── Test11/
│ │ │ └── __init__.py
│ │ ├── Test12/
│ │ │ └── __init__.py
│ │ ├── Test13/
│ │ │ └── __init__.py
│ │ ├── Test14/
│ │ │ └── __init__.py
│ │ ├── Test15/
│ │ │ └── __init__.py
│ │ ├── Test16/
│ │ │ └── __init__.py
│ │ ├── Test17/
│ │ │ └── __init__.py
│ │ ├── Test18/
│ │ │ └── __init__.py
│ │ ├── Test19/
│ │ │ └── __init__.py
│ │ ├── Test20/
│ │ │ └── __init__.py
│ │ ├── Test21/
│ │ │ └── __init__.py
│ │ ├── Test22/
│ │ │ └── __init__.py
│ │ ├── Test23/
│ │ │ └── __init__.py
│ │ ├── Test24/
│ │ │ └── __init__.py
│ │ ├── Test25/
│ │ │ └── __init__.py
│ │ ├── Test26/
│ │ │ └── __init__.py
│ │ ├── Test27/
│ │ │ └── __init__.py
│ │ ├── Test28/
│ │ │ └── __init__.py
│ │ ├── Test29/
│ │ │ └── __init__.py
│ │ ├── Test30/
│ │ │ └── __init__.py
│ │ ├── Test31/
│ │ │ └── __init__.py
│ │ ├── Test32/
│ │ │ └── __init__.py
│ │ ├── Test33/
│ │ │ └── __init__.py
│ │ ├── Test34/
│ │ │ └── __init__.py
│ │ ├── Test35/
│ │ │ └── __init__.py
│ │ ├── Test36/
│ │ │ └── __init__.py
│ │ ├── Test37/
│ │ │ └── __init__.py
│ │ ├── Test38/
│ │ │ └── __init__.py
│ │ ├── Test39/
│ │ │ └── __init__.py
│ │ ├── Test40/
│ │ │ └── __init__.py
│ │ ├── Test41/
│ │ │ └── __init__.py
│ │ ├── Test44/
│ │ │ └── __init__.py
│ │ ├── Test45/
│ │ │ └── __init__.py
│ │ ├── Test46/
│ │ │ └── __init__.py
│ │ ├── Test47/
│ │ │ └── __init__.py
│ │ ├── Test48/
│ │ │ └── __init__.py
│ │ ├── TestAddHorizontalLineToCandleChart/
│ │ │ └── __init__.py
│ │ ├── TestAddHorizontalLineToExtraChart/
│ │ │ └── __init__.py
│ │ ├── TestAddLineToCandleChart/
│ │ │ └── __init__.py
│ │ ├── TestAddLineToExtraChart/
│ │ │ └── __init__.py
│ │ ├── TestAfterMethod/
│ │ │ └── __init__.py
│ │ ├── TestAverageEntryPriceProperty/
│ │ │ └── __init__.py
│ │ ├── TestBalanceAndFeeReductionWorksCorrectlyInSpotModeInBothBuyAndSellOrders/
│ │ │ └── __init__.py
│ │ ├── TestBalancesAreHandledCorrectlyForCancellingOrdersInSpot/
│ │ │ └── __init__.py
│ │ ├── TestBeforeMethod/
│ │ │ └── __init__.py
│ │ ├── TestBeforeTerminate/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionLong1/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionLong2/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionShort1/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionShort2/
│ │ │ └── __init__.py
│ │ ├── TestCanOpenANewPositionImmediatelyAfterClosingViaUpdatePosition/
│ │ │ └── __init__.py
│ │ ├── TestCanRunWithoutShorting/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitStopLossOrderWithSizeEqualToCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitStopLossOrderWithSizeLessThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitTakeProfitAndStopLossAtSameTimeInSpot/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitTakeProfitOrderWithSizeEqualToCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitTakeProfitOrderWithSizeLessThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCannotSetStopLossOrderInGoLong/
│ │ │ └── __init__.py
│ │ ├── TestCannotSetTakeProfitOrderInGoLong/
│ │ │ └── __init__.py
│ │ ├── TestCannotSpendMoreThanAvailableBalance/
│ │ │ └── __init__.py
│ │ ├── TestCannotSubmitStopLossOrderWithSizeMoreThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCannotSubmitTakeProfitOrderWithSizeMoreThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCapitalPropertyRaisesNotImplementedError/
│ │ │ └── __init__.py
│ │ ├── TestClosedTradeAfterExitingTrade/
│ │ │ └── __init__.py
│ │ ├── TestCurrentRouteIndex1/
│ │ │ └── __init__.py
│ │ ├── TestCurrentRouteIndex2/
│ │ │ └── __init__.py
│ │ ├── TestDailyBalanceStoresPortfolioValue/
│ │ │ └── __init__.py
│ │ ├── TestDailyBalancesProperty/
│ │ │ └── __init__.py
│ │ ├── TestDataRoutes1/
│ │ │ └── __init__.py
│ │ ├── TestDataRoutes2/
│ │ │ └── __init__.py
│ │ ├── TestDefaultHyperparameters/
│ │ │ └── __init__.py
│ │ ├── TestDnaMethod/
│ │ │ └── __init__.py
│ │ ├── TestEmptyStrategy/
│ │ │ └── __init__.py
│ │ ├── TestEntryOrdersAndExitOrdersProperties/
│ │ │ └── __init__.py
│ │ ├── TestExchangeTypeProperty1/
│ │ │ └── __init__.py
│ │ ├── TestExchangeTypeProperty2/
│ │ │ └── __init__.py
│ │ ├── TestFuturesExchangeAvailableMargin/
│ │ │ └── __init__.py
│ │ ├── TestHasLongAndShortEntryOrdersPropertiesInFilters/
│ │ │ └── __init__.py
│ │ ├── TestHasLongEntryOrdersProperty/
│ │ │ └── __init__.py
│ │ ├── TestHasShortEntryOrdersProperty/
│ │ │ └── __init__.py
│ │ ├── TestIncreasedAndReducedCount/
│ │ │ └── __init__.py
│ │ ├── TestIncreasingShortPosition/
│ │ │ └── __init__.py
│ │ ├── TestInsufficientMargin1/
│ │ │ └── __init__.py
│ │ ├── TestInsufficientMargin2/
│ │ │ └── __init__.py
│ │ ├── TestInsufficientMargin3/
│ │ │ └── __init__.py
│ │ ├── TestLeverageProperty1/
│ │ │ └── __init__.py
│ │ ├── TestLeverageProperty2/
│ │ │ └── __init__.py
│ │ ├── TestLiquidationInCrossModeForShortTrade/
│ │ │ └── __init__.py
│ │ ├── TestLiquidationInIsolatedModeForLongTrade/
│ │ │ └── __init__.py
│ │ ├── TestLiquidationInIsolatedModeForShortTrade/
│ │ │ └── __init__.py
│ │ ├── TestLogMethodInStrategyClass/
│ │ │ └── __init__.py
│ │ ├── TestMarkPrice/
│ │ │ └── __init__.py
│ │ ├── TestMarketOrderForLowPriceDifference/
│ │ │ └── __init__.py
│ │ ├── TestMetrics1/
│ │ │ └── __init__.py
│ │ ├── TestMultipleEntryOrdersUpdateEntryLongPositions/
│ │ │ └── __init__.py
│ │ ├── TestMultipleEntryOrdersUpdateEntryShortPositions/
│ │ │ └── __init__.py
│ │ ├── TestOnCancelMethod/
│ │ │ └── __init__.py
│ │ ├── TestOnClosePosition/
│ │ │ └── __init__.py
│ │ ├── TestOnRouteOpenPosition/
│ │ │ └── __init__.py
│ │ ├── TestOnRouteOpenPosition2/
│ │ │ └── __init__.py
│ │ ├── TestOrderIsStopLossProperty/
│ │ │ └── __init__.py
│ │ ├── TestOrderIsTakeProfitProperty/
│ │ │ └── __init__.py
│ │ ├── TestOrderPriceCannotBeGreaterThanZero/
│ │ │ └── __init__.py
│ │ ├── TestOrderValueProperty/
│ │ │ └── __init__.py
│ │ ├── TestOrdersAreSortedBeforeExecution/
│ │ │ └── __init__.py
│ │ ├── TestPortfolioValue/
│ │ │ └── __init__.py
│ │ ├── TestPortfolioValueIncludesPositionValueAndOpenOrdersValue/
│ │ │ └── __init__.py
│ │ ├── TestPositionExchangeTypeProperty1/
│ │ │ └── __init__.py
│ │ ├── TestPositionExchangeTypeProperty2/
│ │ │ └── __init__.py
│ │ ├── TestPositionOpenIncreaseReduceCloseEventsInSpot/
│ │ │ └── __init__.py
│ │ ├── TestPositionTotalCostProperty/
│ │ │ └── __init__.py
│ │ ├── TestPositionWithLeverage1/
│ │ │ └── __init__.py
│ │ ├── TestPositionWithLeverage2/
│ │ │ └── __init__.py
│ │ ├── TestPositions/
│ │ │ └── __init__.py
│ │ ├── TestProperBalanceHanldingInSpotAfterOrderCancellation/
│ │ │ └── __init__.py
│ │ ├── TestReduceOnlyMarketOrders/
│ │ │ └── __init__.py
│ │ ├── TestShortInSpot/
│ │ │ └── __init__.py
│ │ ├── TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceLongPosition/
│ │ │ └── __init__.py
│ │ ├── TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceShortPosition/
│ │ │ └── __init__.py
│ │ ├── TestStopOrderShouldConsiderExecutedTakeProfitOrdersInSpot/
│ │ │ └── __init__.py
│ │ ├── TestStrategyVariablesAreResetBeforeOpeningNewPosition/
│ │ │ └── __init__.py
│ │ ├── TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientLongPosition/
│ │ │ └── __init__.py
│ │ ├── TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientShortPosition/
│ │ │ └── __init__.py
│ │ ├── TestTerminate/
│ │ │ └── __init__.py
│ │ ├── TestUsageOfShouldCancelRaisesNotImplementedError/
│ │ │ └── __init__.py
│ │ ├── TestVanillaStrategy/
│ │ │ └── __init__.py
│ │ ├── TestWalletBalance/
│ │ │ └── __init__.py
│ │ ├── TestWithoutCancelMethod/
│ │ │ └── __init__.py
│ │ └── __init__.py
│ ├── testing_utils.py
│ ├── utils.py
│ └── version.py
├── requirements.txt
├── setup.py
├── tests/
│ ├── __init__.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── test_candles_0.py
│ │ ├── test_candles_1.py
│ │ └── test_candles_indicators.py
│ ├── storage/
│ │ └── logs/
│ │ └── backtest-mode/
│ │ └── .txt
│ ├── test_backtest.py
│ ├── test_broker.py
│ ├── test_candle_service.py
│ ├── test_completed_trade.py
│ ├── test_conflicting_orders.py
│ ├── test_dynamic_numpy_array.py
│ ├── test_exchange.py
│ ├── test_helpers.py
│ ├── test_import_candles.py
│ ├── test_indicators.py
│ ├── test_isolated_backtest.py
│ ├── test_lsp.py
│ ├── test_metrics.py
│ ├── test_order.py
│ ├── test_parent_strategy.py
│ ├── test_position.py
│ ├── test_research.py
│ ├── test_router.py
│ ├── test_spot_mode.py
│ ├── test_state_candle.py
│ ├── test_state_exchanges.py
│ ├── test_state_logs.py
│ ├── test_state_orderbook.py
│ ├── test_state_orders.py
│ ├── test_state_ticker.py
│ ├── test_state_trades.py
│ └── test_utils.py
└── utils/
├── candle_info.sh
└── candle_info.sql
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
*.log
.git
*.md
!README*.md
README-secret.md
.travis.yml
Dockerfile
docker-compose.yml
.idea
venv
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
<!--
IMPORTANT: Please open an issue ONLY if you find something wrong with the source code. For questions and feedback use Discord (https://jesse.trade/discord). Also make sure to give the documentation (https://docs.jesse.trade/) and FAQ (https://jesse.trade/help) a good read to eliminate the possibility of causing the problem due to wrong usage. Make sure you are using the most recent version `pip show jesse` and updated all requirements `pip install -r https://raw.githubusercontent.com/jesse-ai/jesse/master/requirements.txt`.
-->
**Describe the bug**
A clear and concise description of what the bug is. Include the whole error message / traceback.
**To Reproduce**
Steps to reproduce the behavior:
1. Include your routes, config (make sure to remove personal information) and if possible your strategy code (if you want to keep it private - contact us on Discord directly).
2. Explain the steps you do that lead to the error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Enviroment (please complete the following information):**
- OS: [e.g. iOS, Windows, Ubuntu, Docker]
- Version [use `pip show jesse`]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
<!---
Make sure to check the roadmap (https://docs.jesse.trade/docs/roadmap.html) and the Trello boards linked there whether your idea is already listed and give Jesse's documentation a good read to make sure you don't request something that's already possible. If possible use Discord (https://jesse.trade/discord) to discuss your ideas with the community.
-->
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '0 0 1 * *'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Cache pip
uses: actions/cache@v2
with:
path: ${{ matrix.path }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
pip install numba
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
================================================
FILE: .github/workflows/python-package.yml
================================================
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python application
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ${{matrix.os}}
strategy:
matrix:
# os: [ubuntu-latest, macos-latest, windows-latest]
os: [ubuntu-latest, macos-latest]
# os: [ubuntu-latest]
include:
- os: ubuntu-latest
path: ~/.cache/pip
#- os: macos-latest-xlarge
# path: ~/Library/Caches/pip
#- os: windows-latest
# path: ~\AppData\Local\pip\Cache
# python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
python-version: ['3.10', '3.11', '3.12', '3.13']
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip
uses: actions/cache@v3
id: cache
with:
path: ${{ matrix.path }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
shell: bash
run: |
python -m ensurepip --upgrade
python -m pip install --upgrade pip
python -m pip install setuptools wheel
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ ! ${{ matrix.python-version }} = "3.10" ]; then pip install numba; fi
pip install -e . -U
- name: Test with pytest
shell: bash
run: |
pip install pytest
pytest
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# IDE
/.vscode
/.idea
.DS_Store
/storage/*.key
/storage/*.sqlite
/storage/*.gz
/.vagrant
testing-*.py
/storage/full-reports/*.html
/storage/logs/*
# lsp
jesse/lsp/
pyrightconfig.json
================================================
FILE: AGENTS.md
================================================
# Jesse Repository Guide for AI Agents
## Overview
The jesse repository is the **core open-source framework** of the Jesse trading system. It contains the main Python codebase for backtesting trading strategies, importing historical data from crypto exchanges, running optimizations, and providing the API backend for the dashboard. It glues together the other repositories and makes them work together.
## Key Characteristics
### Central Framework
- **jesse-live depends on this** - Changes here affect live trading
- **jesse-rust integrates here** - Rust functions are called from this codebase
- **dashboard consumes this API** - Frontend uses the FastAPI routes and controller files.
### Technology Stack
- **Python** - Primary language
- **FastAPI** - API framework for all routes
- **NumPy** - Array operations and calculations
- **keewee** - ORM for the database
## Development Workflow
### Making Changes
When implementing features or fixing bugs:
1. **Understand the scope** - Determine if other repositories such as the dashboard need updates
2. **Implement the code** in the appropriate module
3. **Write/update tests** - Maintain test coverage
4. **Run tests** to verify changes:
```bash
cd-jesse && pytest
```
5. **Consider jesse-live** - Does this affect live trading?
6. **Update API routes** if needed - Follow FastAPI patterns
7. **Don't restart server** unless specifically asked
### Python Environment
Use the Jesse Python interpreter:
```
/Users/salehmir/miniconda3/envs/jesse3.12/bin/python
```
### Running Jesse Backend
The API server provides routes for the dashboard:
```bash
# Stop any running process
pkill -f "jesse run"
# Start Jesse from bot directory (not jesse/)
cd /Users/salehmir/codes/jesse/dev-jesse/bot
/Users/salehmir/miniconda3/envs/jesse3.12/bin/jesse run > /tmp/jesse-output.log 2>&1 &
# Server runs at http://localhost:9001
# Check logs
tail -f /tmp/jesse-output.log
```
**Important**: Don't restart Jesse after code changes unless explicitly requested.
### Running Tests
Run the test suite after changes if asked.
```bash
cd-jesse && pytest
```
If you've updated jesse-rust, run tests after building:
```bash
cd /Users/salehmir/Codes/jesse/dev-jesse/jesse-rust
./build-local.sh
cd /Users/salehmir/Codes/jesse/dev-jesse/jesse
pytest
```
## Important Notes
### Debugging
- **Use `jh.debug()` for all debugging output** - Never use plain `print()`
- **Log format**: `[2024-12-06 18:23:12] ==> Your message here`
- Logs include timestamps and `==>` prefix
- Essential for debugging backtests and live trading sessions
### API Routes
- **Default to POST endpoints** unless specifically asked for GET
- Use FastAPI decorators and patterns
- Follow the structure of existing routes in `jesse/routes/`
- Return proper HTTP status codes and JSON responses
- Handle errors gracefully
### Code Style
- Don't write comments for functions unless asked
- Never try to install new packages - assume they're already installed. if need to install new packages, ask me first.
- Follow existing patterns and conventions
- Maintain consistency with the current codebase
- Try to import only at the top of the file.
### Jesse-Rust Integration
- When using Rust functions, **assume they exist** - don't add existence checks
- Update Python code to call new Rust implementations
- Build jesse-rust locally and run tests to verify integration
- Performance-critical code should be delegated to jesse-rust when possible
## File Structure
- `jesse/` - Main source code
- `indicators/` - Technical indicators
- `modes/` - Backtest, optimize, import modes, monte carlo, etc
- `routes/` - FastAPI route handlers
- `services/` - data services, etc
- `strategies/` - Base strategy classes
- `store/` - State management
- `tests/` - Test suite
- `storage/` - Logs and temporary files
- `requirements.txt` - Python dependencies
- `setup.py` - Package configuration
## Testing Strategy
### Unit Tests
- Run `pytest` after every change if asked in the conversation.
- Maintain or improve test coverage
- Add tests for new features if asked in the conversation.
- Fix failing tests immediately
## Related Repositories
This repository is the foundation of the Jesse ecosystem:
- **jesse-live** - Depends heavily on jesse for live trading
- **jesse-rust** - Performance layer integrated into jesse
- **dashboard-v1** - Frontend that consumes jesse's API
- **bot** - Jesse project instance that runs the framework
- **laravel-jesse-trade** - Laravel project that contains the api1 backend of the jesse-trade website.
- **go-jesse-trade/backend** - Go project that contains the api2 backend of the jesse-trade website.
- **go-jesse-trade/frontend** - NuxtJS project that contains the frontend of the jesse-trade website.
- **strategy-executor** - Go project that contains the strategy executor microservice used to execute strategies submitted by the users of the website.
================================================
FILE: Dockerfile
================================================
ARG TEST_BUILD=0
FROM python:3.11-slim-bullseye AS jesse_basic_env
ENV PYTHONUNBUFFERED 1
RUN apt-get update \
&& apt-get -y install git build-essential libssl-dev \
&& apt-get clean \
&& pip install --upgrade pip
RUN pip3 install Cython numpy
# Prepare environment
RUN mkdir /jesse-docker
WORKDIR /jesse-docker
# Install dependencies
COPY requirements.txt /jesse-docker
RUN pip3 install -r requirements.txt
# Build
COPY . /jesse-docker
RUN pip3 install -e .
FROM jesse_basic_env AS jesse_with_test_0
WORKDIR /home
FROM jesse_basic_env AS jesse_with_test_1
RUN pip3 install codecov pytest-cov
ENTRYPOINT pytest --cov=./ # && codecov
FROM jesse_with_test_${TEST_BUILD} AS jesse_final
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2020 Jesse.Trade
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: MANIFEST.in
================================================
include jesse/static/*
include jesse/static/**/*
================================================
FILE: README.md
================================================
<div align="center">
<br>
<p align="center">
<img src="assets/jesse-logo.png" alt="Jesse" height="72" />
</p>
<p align="center">
Algo-trading was 😵💫, we made it 🤩
</p>
</div>
# Jesse
[](https://pypi.org/project/jesse)
[](https://pepy.tech/project/jesse)
[](https://hub.docker.com/r/salehmir/jesse)
[](https://github.com/jesse-ai/jesse)
[](https://codecov.io/gh/jesse-ai/jesse)
---
Jesse is an advanced crypto trading framework that aims to **simplify** **researching** and defining **YOUR OWN trading strategies** for backtesting, optimizing, and live trading.
## What is Jesse?
Watch this video to get a quick overview of Jesse:
[](https://www.youtube.com/watch?v=0EqN3OOqeJM)
## Why Jesse?
In short, Jesse is more **accurate** than other solutions, and way more **simple**.
In fact, it is so simple that in case you already know Python, you can get started today, in **matter of minutes**, instead of **weeks and months**.
## Key Features
- 📝 **Simple Syntax**: Define both simple and advanced trading strategies with the simplest syntax in the fastest time.
- 📊 **Comprehensive Indicator Library**: Access a complete library of technical indicators with easy-to-use syntax.
- 📈 **Smart Ordering**: Supports market, limit, and stop orders, automatically choosing the best one for you.
- ⏰ **Multiple Timeframes and Symbols**: Backtest and livetrade multiple timeframes and symbols simultaneously without look-ahead bias.
- 🔒 **Self-Hosted and Privacy-First**: Designed with your privacy in mind, fully self-hosted to ensure your trading strategies and data remain secure.
- 🛡️ **Risk Management**: Built-in helper functions for robust risk management.
- 📋 **Metrics System**: A comprehensive metrics system to evaluate your trading strategy's performance.
- 🔍 **Debug Mode**: Observe your strategy in action with a detailed debug mode.
- 🔧 **Optimize Mode**: Fine-tune your strategies using AI, without needing a technical background.
- 📈 **Leveraged and Short-Selling**: First-class support for leveraged trading and short-selling.
- 🔀 **Partial Fills**: Supports entering and exiting positions in multiple orders, allowing for greater flexibility.
- 🔔 **Advanced Alerts**: Create real-time alerts within your strategies for effective monitoring.
- 🤖 **JesseGPT**: Jesse has its own GPT, JesseGPT, that can help you write strategies, optimize them, debug them, and much more.
- 🔧 **Built-in Code Editor**: Write, edit, and debug your strategies with a built-in code editor.
- 📺 **Youtube Channel**: Jesse has a Youtube channel with screencast tutorials that go through example strategies step by step.
## Dive Deeper into Jesse's Capabilities
### Stupid Simple
Craft complex trading strategies with remarkably simple Python. Access 300+ indicators, multi-symbol/timeframe support, spot/futures trading, partial fills, and risk management tools. Focus on logic, not boilerplate.
```python
class GoldenCross(Strategy):
def should_long(self):
# go long when the EMA 8 is above the EMA 21
short_ema = ta.ema(self.candles, 8)
long_ema = ta.ema(self.candles, 21)
return short_ema > long_ema
def go_long(self):
entry_price = self.price - 10 # limit buy order at $10 below the current price
qty = utils.size_to_qty(self.balance*0.05, entry_price) # spend only 5% of my total capital
self.buy = qty, entry_price # submit entry order
self.take_profit = qty, entry_price*1.2 # take profit at 20% above the entry price
self.stop_loss = qty, entry_price*0.9 # stop loss at 10% below the entry price
```
### Backtest
Execute highly accurate and fast backtests without look-ahead bias. Utilize debugging logs, interactive charts with indicator support, and detailed performance metrics to validate your strategies thoroughly.

### Live/Paper Trading
Deploy strategies live with robust monitoring tools. Supports paper trading, multiple accounts, real-time logs & notifications (Telegram, Slack, Discord), interactive charts, spot/futures, DEX, and a built-in code editor.

### Benchmark
Accelerate research using the benchmark feature. Run batch backtests, compare across timeframes, symbols, and strategies. Filter and sort results by key performance metrics for efficient analysis.

### AI
Leverage our AI assistant even with limited Python knowledge. Get help writing and improving strategies, implementing ideas, debugging, optimizing, and understanding code. Your personal AI quant.

### Optimize Your Strategies
Unsure about optimal parameters? Let the optimization mode decide using simple syntax. Fine-tune any strategy parameter with the Optuna library and easy cross-validation.
```python
@property
def slow_sma(self):
return ta.sma(self.candles, self.hp['slow_sma_period'])
@property
def fast_sma(self):
return ta.sma(self.candles, self.hp['fast_sma_period'])
def hyperparameters(self):
return [
{'name': 'slow_sma_period', 'type': int, 'min': 150, 'max': 210, 'default': 200},
{'name': 'fast_sma_period', 'type': int, 'min': 20, 'max': 100, 'default': 50},
]
```
## Getting Started
Head over to the "getting started" section of the [documentation](https://docs.jesse.trade/docs/getting-started). The
documentation is **short yet very informative**.
## Resources
- [⚡️ Website](https://jesse.trade)
- [🎓 Documentation](https://docs.jesse.trade)
- [🎥 Youtube channel (screencast tutorials)](https://jesse.trade/youtube)
- [🛟 Help center](https://jesse.trade/help)
- [💬 Discord community](https://jesse.trade/discord)
- [🤖 JesseGPT](https://jesse.trade/gpt) (Requires a free account)
## What's next?
You can see the project's **[roadmap here](https://docs.jesse.trade/docs/roadmap.html)**. **Subscribe** to our mailing list at [jesse.trade](https://jesse.trade) to get the good stuff as soon they're released. Don't worry, We won't send you spam—Pinky promise.
## Disclaimer
This software is for educational purposes only. USE THE SOFTWARE AT **YOUR OWN RISK**. THE AUTHORS AND ALL AFFILIATES ASSUME **NO RESPONSIBILITY FOR YOUR TRADING RESULTS**. **Do not risk money that you are afraid to lose**. There might be **bugs** in the code - this software DOES NOT come with **ANY warranty**.
================================================
FILE: codecov.yml
================================================
ignore:
- "tests/**"
================================================
FILE: conftest.py
================================================
def pytest_configure(config):
config.addinivalue_line(
"filterwarnings",
"ignore:Please use `import python_multipart` instead.:PendingDeprecationWarning",
)
================================================
FILE: jesse/__init__.py
================================================
import os
import warnings
from contextlib import asynccontextmanager
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from jesse.services.web import fastapi_app
import jesse.helpers as jh
# import cli to register the routes. Do NOT remove this import.
from jesse.cli import cli
# to silent stupid pandas warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
# get the jesse directory
JESSE_DIR = os.path.dirname(os.path.abspath(__file__))
# define lifespan (replaces deprecated @on_event("shutdown"))
@asynccontextmanager
async def lifespan(app):
yield
from jesse.services.db import database
database.close_connection()
from jesse.services.lsp import terminate_lsp_server
terminate_lsp_server()
fastapi_app.router.lifespan_context = lifespan
# load homepage
@fastapi_app.get("/")
async def index():
return FileResponse(f"{JESSE_DIR}/static/index.html")
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Routes
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
from jesse.controllers.websocket_controller import router as websocket_router
from jesse.controllers.optimization_controller import router as optimization_router
from jesse.controllers.monte_carlo_controller import router as monte_carlo_router
from jesse.controllers.exchange_controller import router as exchange_router
from jesse.controllers.backtest_controller import router as backtest_router
from jesse.controllers.candles_controller import router as candles_router
from jesse.controllers.strategy_controller import router as strategy_router
from jesse.controllers.auth_controller import router as auth_router
from jesse.controllers.config_controller import router as config_router
from jesse.controllers.notification_controller import router as notification_router
from jesse.controllers.system_controller import router as system_router
from jesse.controllers.file_controller import router as file_router
from jesse.controllers.lsp_controller import router as lsp_router
from jesse.controllers.closed_trade_controller import router as closed_trade_router
from jesse.controllers.order_controller import router as order_router
from jesse.controllers.tabs_controller import router as tabs_router
# register routers
fastapi_app.include_router(websocket_router)
fastapi_app.include_router(optimization_router)
fastapi_app.include_router(monte_carlo_router)
fastapi_app.include_router(exchange_router)
fastapi_app.include_router(backtest_router)
fastapi_app.include_router(candles_router)
fastapi_app.include_router(strategy_router)
fastapi_app.include_router(auth_router)
fastapi_app.include_router(config_router)
fastapi_app.include_router(notification_router)
fastapi_app.include_router(system_router)
fastapi_app.include_router(file_router)
fastapi_app.include_router(lsp_router)
fastapi_app.include_router(closed_trade_router)
fastapi_app.include_router(order_router)
fastapi_app.include_router(tabs_router)
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Live Trade Plugin
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
if jh.has_live_trade_plugin():
from jesse.controllers.live_controller import router as live_router
fastapi_app.include_router(live_router)
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Static Files (Must be loaded at the end to prevent overlapping with API endpoints)
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
fastapi_app.mount("/", StaticFiles(directory=f"{JESSE_DIR}/static"), name="static")
================================================
FILE: jesse/candle_pipelines/__init__.py
================================================
from .base_candles import BaseCandlesPipeline
from .gaussian_noise import GaussianNoiseCandlesPipeline
from .gaussian_resampler import GaussianResamplerCandlesPipeline
from .moving_block_bootstrap import MovingBlockBootstrapCandlesPipeline
================================================
FILE: jesse/candle_pipelines/base_candles.py
================================================
import numpy as np
class BaseCandlesPipeline:
def __init__(self, batch_size: int) -> None:
self._batch_size = batch_size
self._output: np.ndarray = np.zeros((batch_size, 6))
self.last_price = 0.0
def get_candles(self, candles: np.ndarray, index: int, candles_step: int = -1) -> np.ndarray:
index = index % self._batch_size
if index == 0:
if self.last_price == 0.0:
self.last_price = candles[0, 1] # the first time use open price instead of last close
else:
self.last_price = self._output[-1, 2] # later use the last_price
inject_candle = self.process(candles, self._output[:len(candles)])
if not inject_candle:
self._output[:] = candles
if candles_step == -1:
return self._output[index]
if index + candles_step <= self._batch_size:
return self._output[index:index + candles_step]
raise ValueError("Batch size to candle pipeline supported only multiplication of the minimum timeframe in your"
" routes.")
def process(self, original_1m_candles: np.ndarray, out: np.ndarray) -> bool:
"""
:param original_1m_candles: get original 1m candles to modify it for research purposes to test various scenarios.
Get the next `batch_size` 1m candles.
:param out: The candles that will be injected to the simulation instead of the original 1m candles.
Contains the previous batch.
:return: True if out is modified, False otherwise
"""
return False
================================================
FILE: jesse/candle_pipelines/gaussian_noise.py
================================================
import numpy as np
import jesse.helpers as jh
from .base_candles import BaseCandlesPipeline
class GaussianNoiseCandlesPipeline(BaseCandlesPipeline):
def __init__(self, batch_size: int, *,
close_mu: float = 0.0,
close_sigma: float,
high_mu: float = 0.0,
high_sigma: float,
low_mu: float = 0.0,
low_sigma: float,
) -> None:
"""
Add gaussian noise to candles
"""
super().__init__(batch_size)
self._first_time = True
self.close_mu = close_mu
self.close_sigma = close_sigma
self.high_mu = high_mu
self.high_sigma = high_sigma
self.low_mu = low_mu
self.low_sigma = low_sigma
def process(self, original_1m_candles: np.ndarray, out: np.ndarray) -> bool:
eps = 1e-12
if not self._first_time:
last_price = out[-1, 2] # last_close_price
else:
self._first_time = False
# in case we don't have history set the price as the first price so the bias will be 0
last_price = original_1m_candles[0, 1]
out[:] = original_1m_candles[:]
n = len(out)
# close price
noise = np.random.normal(self.close_mu, self.close_sigma, size=n).cumsum()
out[:, 2] = np.maximum(out[:, 2] + noise, eps)
# open price
out[1:, 1] = out[:-1, 2]
out[0, 1] = max(last_price, eps)
# high
high_std = 0.0 if self.high_sigma == 0.0 else np.random.normal(0, self.high_sigma, size=n)
out[:, 3] = out[:, 3] + self.high_mu + high_std
# low
low_std = 0.0 if self.low_sigma == 0.0 else np.random.normal(0, self.low_sigma, size=n)
out[:, 4] = out[:, 4] + self.low_mu + low_std
# enforce bounds and positivity
out[:, 1] = np.maximum(out[:, 1], eps)
out[:, 2] = np.maximum(out[:, 2], eps)
out[:, 3] = np.maximum(np.maximum(out[:, 1], out[:, 2]), np.maximum(out[:, 3], out[:, 4]))
out[:, 4] = np.minimum(np.minimum(out[:, 1], out[:, 2]), np.minimum(out[:, 3], out[:, 4]))
out[:, 4] = np.maximum(out[:, 4], eps)
return True
================================================
FILE: jesse/candle_pipelines/gaussian_resampler.py
================================================
import numpy as np
from typing import Optional
from .base_candles import BaseCandlesPipeline
class GaussianResamplerCandlesPipeline(BaseCandlesPipeline):
def __init__(self, batch_size: int, *,
mu: float = 0.0, sigma: Optional[float] = None,
) -> None:
"""
Add gaussian noise to candles
"""
super().__init__(batch_size)
self.mu = mu
self.sigma = sigma
def process(self, original_1m_candles: np.ndarray, out: np.ndarray) -> bool:
eps = 1e-12
out[:] = original_1m_candles[:]
# close price
closes = original_1m_candles[:, 2]
n = len(out)
med_price = float(np.nan_to_num(np.median(closes), nan=0.0))
delta_close = np.diff(closes, prepend=self.last_price)
mu_delta = float(np.nan_to_num(np.mean(delta_close[1:]), nan=0.0))
sigma_delta_close = float(np.nan_to_num(np.std(delta_close[1:]), nan=0.0))
# derive scale factor from relative returns if sigma is not provided
if self.sigma is None:
if n >= 2:
rel_returns = np.diff(closes) / np.maximum(closes[:-1], eps)
ret_std = float(np.nan_to_num(np.std(rel_returns), nan=0.0))
else:
ret_std = 0.0
target_abs_close_std = max((ret_std * med_price) if ret_std > 0.0 else (med_price * 0.0005), eps)
scale_factor = target_abs_close_std / max(sigma_delta_close, eps)
else:
scale_factor = self.sigma
std_close = sigma_delta_close * scale_factor
# debug the effective parameters used for the close process
out[:, 2] = np.random.normal(mu_delta + self.mu, std_close, size=n).cumsum() + self.last_price
out[:, 2] = np.maximum(out[:, 2], eps)
# open price
out[1:, 1] = out[:-1, 2]
out[0, 1] = max(self.last_price, eps)
# high
delta_high_close = original_1m_candles[:, 3] - original_1m_candles[:, 2]
mu_delta = float(np.nan_to_num(np.mean(delta_high_close), nan=0.0))
sigma_delta_high = float(np.nan_to_num(np.std(delta_high_close), nan=0.0))
std_high = sigma_delta_high * scale_factor
out[:, 3] = out[:, 2] + np.random.normal(mu_delta + self.mu, std_high, size=n)
delta_close_low = original_1m_candles[:, 2] - original_1m_candles[:, 4]
mu_delta = float(np.nan_to_num(np.mean(delta_close_low), nan=0.0))
sigma_delta_low = float(np.nan_to_num(np.std(delta_close_low), nan=0.0))
std_low = sigma_delta_low * scale_factor
out[:, 4] = out[:, 2] - np.random.normal(mu_delta + self.mu, std_low, size=n)
# enforce bounds and positivity
out[:, 1] = np.maximum(out[:, 1], eps)
out[:, 2] = np.maximum(out[:, 2], eps)
out[:, 3] = np.maximum(np.maximum(out[:, 1], out[:, 2]), np.maximum(out[:, 3], out[:, 4]))
out[:, 4] = np.minimum(np.minimum(out[:, 1], out[:, 2]), np.minimum(out[:, 3], out[:, 4]))
out[:, 4] = np.maximum(out[:, 4], eps)
return True
================================================
FILE: jesse/candle_pipelines/moving_block_bootstrap.py
================================================
import numpy as np
from .base_candles import BaseCandlesPipeline
class MovingBlockBootstrapCandlesPipeline(BaseCandlesPipeline):
def __init__(self, batch_size: int, **_ignored) -> None:
"""
Generate synthetic candles by moving-block bootstrap on multivariate
tuples of (delta_close, delta_high, delta_low).
Parameters
----------
batch_size : int
Size of the internal regeneration buffer in minutes. The pipeline
derives a reasonable bootstrap block length from this, so there is
no separate block-size argument.
"""
super().__init__(batch_size)
# Derive block size from batch size. Heuristic: max(10, batch_size // 10),
# then clamp to [1, batch_size - 1]. This preserves short-horizon
# dependence while allowing variety.
derived_block_size = max(10, batch_size // 10)
derived_block_size = max(1, min(batch_size - 1, derived_block_size))
self._block_size = derived_block_size
# Independent RNG per pipeline instance to avoid identical scenarios
self._rng = np.random.default_rng()
def _bootstrap_blocks(self, arr: np.ndarray, n: int) -> np.ndarray:
"""
Sample overlapping blocks of rows from `arr` to build a length-n output.
`arr` is shape (T, 3) for the three deltas.
"""
T, D = arr.shape
if T == 0:
return np.zeros((n, 3), dtype=arr.dtype)
# Use the configured block_size, but not beyond available data
effective_block_size = max(1, min(self._block_size, T))
max_start = T - effective_block_size
# how many blocks needed to reach n rows
num_blocks = int(np.ceil(n / effective_block_size)) + 1
starts = self._rng.integers(0, max_start + 1, size=num_blocks)
blocks = [arr[s : s + effective_block_size] for s in starts]
boot = np.vstack(blocks)
return boot[:n]
def process(self, original_1m_candles: np.ndarray, out: np.ndarray) -> bool:
# copy everything first (timestamps, volumes, etc)
out[:] = original_1m_candles[:]
n = len(out)
# strictly positive floor to avoid invalid negative prices
eps = 1e-12
# compute the 3 deltas for each bar
delta_close = np.diff(original_1m_candles[:, 2], prepend=self.last_price)
delta_high = original_1m_candles[:, 3] - original_1m_candles[:, 2]
delta_low = original_1m_candles[:, 2] - original_1m_candles[:, 4]
# stack into shape (T, 3), skipping the first delta_close entry (prepend)
deltas = np.column_stack([delta_close[1:], delta_high[1:], delta_low[1:]])
# bootstrap blocks of the 3-tuples
boot_deltas = self._bootstrap_blocks(deltas, n)
# rebuild close prices (ensure strictly positive)
boot_close = np.cumsum(boot_deltas[:, 0]) + self.last_price
boot_close = np.maximum(boot_close, eps)
out[:, 2] = boot_close
# rebuild opens
out[1:, 1] = boot_close[:-1]
out[0, 1] = max(self.last_price, eps)
# rebuild high and low from the bootstrapped ranges
out[:, 3] = boot_close + boot_deltas[:, 1]
out[:, 4] = boot_close - boot_deltas[:, 2]
# enforce the true high/low bounds and positivity
out[:, 1] = np.maximum(out[:, 1], eps)
out[:, 2] = np.maximum(out[:, 2], eps)
out[:, 3] = np.maximum.reduce([out[:, 1], out[:, 2], out[:, 3], out[:, 4]])
out[:, 4] = np.minimum.reduce([out[:, 1], out[:, 2], out[:, 3], out[:, 4]])
out[:, 4] = np.maximum(out[:, 4], eps)
return True
================================================
FILE: jesse/cli.py
================================================
import time
import click
from importlib.metadata import version as get_version
import uvicorn
import jesse.helpers as jh
from jesse.services.multiprocessing import process_manager
from jesse.services.web import fastapi_app
@click.group()
@click.version_option(get_version("jesse"))
def cli() -> None:
"""CLI entrypoint for Jesse."""
pass
@cli.command()
@click.option(
"--strict/--no-strict",
default=True,
help="Default is the strict mode which will raise an exception if the values for license is not set.",
)
def install_live(strict: bool) -> None:
"""Install and configure the live trading plugin."""
from jesse.services.installer import install
install(is_live_plugin_already_installed=jh.has_live_trade_plugin(), strict=strict)
@cli.command()
def run() -> None:
"""Start the Jesse application server."""
# Display welcome message
welcome_message = """
██╗███████╗███████╗███████╗███████╗
██║██╔════╝██╔════╝██╔════╝██╔════╝
██║█████╗ ███████╗███████╗█████╗
██ ██║██╔══╝ ╚════██║╚════██║██╔══╝
╚█████╔╝███████╗███████║███████║███████╗
╚════╝ ╚══════╝╚══════╝╚══════╝╚══════╝
"""
version = get_version("jesse")
print(welcome_message)
print(f"Main Framework Version: {version}")
# Check if jesse-live is installed and display its version
if jh.has_live_trade_plugin():
try:
from jesse_live.version import __version__ as live_version
print(f"Live Plugin Version: {live_version}")
except ImportError:
pass
jh.validate_cwd()
print("")
# run all the db migrations
from jesse.services.migrator import run as run_migrations
import peewee
try:
run_migrations()
except peewee.OperationalError:
sleep_seconds = 10
print(f"Database wasn't ready. Sleep for {sleep_seconds} seconds and try again.")
time.sleep(sleep_seconds)
run_migrations()
# Install Python Language Server if needed
try:
from jesse.services.lsp import install_lsp_server
install_lsp_server()
except Exception as e:
print(jh.color(f"Error installing Python Language Server: {str(e)}", "red"))
pass
# read port from .env file, if not found, use default
from jesse.services.env import ENV_VALUES
if "APP_PORT" in ENV_VALUES:
port = int(ENV_VALUES["APP_PORT"])
else:
port = 9000
if "APP_HOST" in ENV_VALUES:
host = ENV_VALUES["APP_HOST"]
else:
host = "0.0.0.0"
# run the lsp server
try:
from jesse.services.lsp import run_lsp_server
run_lsp_server()
except Exception as e:
print(jh.color(f"Error running Python Language Server: {str(e)}", "red"))
pass
# run the main application
process_manager.flush()
uvicorn.run(fastapi_app, host=host, port=port, log_level="info")
================================================
FILE: jesse/config.py
================================================
import jesse.helpers as jh
from jesse.modes.utils import get_exchange_type
from jesse.enums import exchanges
from jesse.info import exchange_info
# Main configuration used by the Jesse framework. These values are modified
# at runtime based on the mode (backtest, live, or optimize) and user settings.
config = {
# these values are related to the user's environment
'env': {
'caching': {
'driver': 'pickle'
},
'logging': {
'strategy_execution': True,
'order_submission': True,
'order_cancellation': True,
'order_execution': True,
'position_opened': True,
'position_increased': True,
'position_reduced': True,
'position_closed': True,
'shorter_period_candles': False,
'trading_candles': True,
'balance_update': True,
'exchange_ws_reconnection': True
},
# fill it later in this file using data in info.py
'exchanges': {
exchanges.SANDBOX: {
'fee': 0,
'type': 'futures',
# accepted values are: 'cross' and 'isolated'
'futures_leverage_mode': 'cross',
# 1x, 2x, 10x, 50x, etc. Enter as integers
'futures_leverage': 1,
'balance': 10_000,
},
},
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Optimize mode (using Optuna)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# Below configurations are related to the optimize mode
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
'optimization': {
# available ratio options: sharpe, calmar, sortino, omega, serenity, smart sharpe, smart sortino
'objective_function': 'sharpe',
# number of trials per each hyperparameter
'trials': 200,
# number of best candidates to keep and display
'best_candidates_count': 20,
},
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Data
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# Below configurations are related to the data
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
'data': {
# The minimum number of warmup candles that is loaded before each session.
'warmup_candles_num': 240,
'generate_candles_from_1m': False,
'persistency': True,
},
},
# These values are just placeholders used by Jesse at runtime
'app': {
# list of currencies to consider
'considering_symbols': [],
# The symbol to trade.
'trading_symbols': [],
# list of time frames to consider
'considering_timeframes': [],
# Which candle type do you intend trade on
'trading_timeframes': [],
# list of exchanges to consider
'considering_exchanges': [],
# list of exchanges to consider
'trading_exchanges': [],
'considering_candles': [],
# dict of registered live trade drivers
'live_drivers': {},
# Accepted values are: 'backtest', 'livetrade', 'fitness'.
'trading_mode': '',
# this would enable many console.log()s in the code, which are helpful for debugging.
'debug_mode': False,
# this is only used for the live unit tests
'is_unit_testing': False,
},
}
# set exchange config values based on the info
for key in exchange_info:
config['env']['exchanges'][key] = {
'fee': exchange_info[key]['fee'],
'type': exchange_info[key]['type'],
'futures_leverage_mode': 'cross',
'futures_leverage': 1,
'balance': 10_000
}
def set_config(conf: dict) -> None:
global config
# optimization mode only
if jh.is_optimizing():
# objective function
if 'objective_function' in conf:
config['env']['optimization']['objective_function'] = conf['objective_function']
# warm_up_candles
config['env']['data']['warmup_candles_num'] = int(conf['warm_up_candles'])
# number of trials per each hyperparameter
config['env']['optimization']['trials'] = int(conf['trials'])
# best candidates count
if 'best_candidates_count' in conf:
config['env']['optimization']['best_candidates_count'] = int(conf['best_candidates_count'])
# backtest and live
if jh.is_backtesting() or jh.is_live():
# warm_up_candles
config['env']['data']['warmup_candles_num'] = int(conf['warm_up_candles'])
# logs
config['env']['logging'] = conf['logging']
# exchanges
for key, e in conf['exchanges'].items():
if not jh.is_live() and e['type']:
exchange_type = e['type']
else:
exchange_type = get_exchange_type(e['name'])
config['env']['exchanges'][e['name']] = {
'fee': float(e['fee']),
'type': exchange_type,
'balance': float(e['balance'])
}
if config['env']['exchanges'][e['name']]['type'] == 'futures':
# 1x, 2x, 10x, 50x, etc. Enter as integers
config['env']['exchanges'][e['name']]['futures_leverage'] = int(e.get('futures_leverage', 1))
# accepted values are: 'cross' and 'isolated'
config['env']['exchanges'][e['name']]['futures_leverage_mode'] = e.get('futures_leverage_mode', 'cross')
# live mode only
if jh.is_live():
config['env']['notifications'] = conf['notifications']
config['env']['data']['persistency'] = conf['persistency']
config['env']['data']['generate_candles_from_1m'] = conf['generate_candles_from_1m']
# TODO: must become a config value later when we go after multi account support?
config['env']['identifier'] = 'main'
def reset_config() -> None:
global config
config = backup_config.copy()
backup_config = config.copy()
================================================
FILE: jesse/constants.py
================================================
from jesse.enums import timeframes
CANDLE_SOURCE_MAPPING = {
"open": lambda c: c[:, 1],
"close": lambda c: c[:, 2],
"high": lambda c: c[:, 3],
"low": lambda c: c[:, 4],
"volume": lambda c: c[:, 5],
"hl2": lambda c: (c[:, 3] + c[:, 4]) / 2,
"hlc3": lambda c: (c[:, 3] + c[:, 4] + c[:, 2]) / 3,
"ohlc4": lambda c: (c[:, 1] + c[:, 3] + c[:, 4] + c[:, 2]) / 4,
}
TIMEFRAME_PRIORITY = [
timeframes.DAY_1,
timeframes.HOUR_12,
timeframes.HOUR_8,
timeframes.HOUR_6,
timeframes.HOUR_4,
timeframes.HOUR_3,
timeframes.HOUR_2,
timeframes.HOUR_1,
timeframes.MINUTE_45,
timeframes.MINUTE_30,
timeframes.MINUTE_15,
timeframes.MINUTE_5,
timeframes.MINUTE_3,
timeframes.MINUTE_1,
]
TIMEFRAME_TO_ONE_MINUTES = {
timeframes.MINUTE_1: 1,
timeframes.MINUTE_3: 3,
timeframes.MINUTE_5: 5,
timeframes.MINUTE_15: 15,
timeframes.MINUTE_30: 30,
timeframes.MINUTE_45: 45,
timeframes.HOUR_1: 60,
timeframes.HOUR_2: 60 * 2,
timeframes.HOUR_3: 60 * 3,
timeframes.HOUR_4: 60 * 4,
timeframes.HOUR_6: 60 * 6,
timeframes.HOUR_8: 60 * 8,
timeframes.HOUR_12: 60 * 12,
timeframes.DAY_1: 60 * 24,
timeframes.DAY_3: 60 * 24 * 3,
timeframes.WEEK_1: 60 * 24 * 7,
timeframes.MONTH_1: 60 * 24 * 30,
}
SUPPORTED_COLORS = {
'black',
'red',
'green',
'yellow',
'blue',
'magenta',
'cyan',
'white',
#'gray',
}
================================================
FILE: jesse/controllers/__init__.py
================================================
from .exchange_controller import get_exchange_supported_symbols
================================================
FILE: jesse/controllers/auth_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header, BackgroundTasks
from fastapi.responses import JSONResponse
import requests
from jesse.services.env import ENV_VALUES
from jesse.services import auth as authenticator
from jesse.services.multiprocessing import process_manager
from jesse.services.web import LoginRequestJson
import jesse.helpers as jh
from jesse.info import JESSE_API2_URL
router = APIRouter(prefix="/auth", tags=["Authentication"])
@router.post("/login")
def login(json_request: LoginRequestJson):
"""
Authenticate user with password and return a token
"""
return authenticator.password_to_token(json_request.password)
@router.post("/user-validation")
def login(json_request: LoginRequestJson):
"""
Authenticate user with password and return a token
"""
return authenticator.user_validation(json_request.password)
@router.post("")
def auth(json_request: LoginRequestJson):
"""
Authenticate user with password and return a token
"""
return authenticator.password_to_token(json_request.password)
@router.post("/shutdown")
async def shutdown(background_tasks: BackgroundTasks, authorization: Optional[str] = Header(None)):
"""
Shutdown the application
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
background_tasks.add_task(jh.terminate_app)
return JSONResponse({'message': 'Shutting down...'})
@router.post("/jesse-trade-token")
async def jesse_trade_token(authorization: Optional[str] = Header(None)):
"""
Exchange LICENSE_API_TOKEN for jesse.trade bearer token
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
if 'LICENSE_API_TOKEN' not in ENV_VALUES or not ENV_VALUES['LICENSE_API_TOKEN']:
return JSONResponse({
'status': 'error',
'message': 'LICENSE_API_TOKEN not found in .env file'
}, status_code=400)
license_token = ENV_VALUES['LICENSE_API_TOKEN']
try:
response = requests.post(
f'{JESSE_API2_URL}/auth/exchange-token',
json={'license_api_token': license_token},
timeout=10
)
if response.status_code == 200:
data = response.json()
return JSONResponse({
'status': 'success',
'access_token': data.get('access_token'),
'user': data.get('user')
})
else:
return JSONResponse({
'status': 'error',
'message': f'Failed to exchange token: {response.text}'
}, status_code=response.status_code)
except requests.exceptions.RequestException as e:
return JSONResponse({
'status': 'error',
'message': f'Error connecting to jesse.trade: {str(e)}'
}, status_code=500)
================================================
FILE: jesse/controllers/backtest_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header, Query, Body
from fastapi.responses import JSONResponse, FileResponse
import json
from jesse.services import auth as authenticator
from jesse.services.multiprocessing import process_manager
from jesse.services.web import BacktestRequestJson, CancelRequestJson, UpdateBacktestSessionStateRequestJson, GetBacktestSessionsRequestJson, UpdateBacktestSessionNotesRequestJson
import jesse.helpers as jh
from jesse.models.BacktestSession import (
get_backtest_sessions as get_sessions,
update_backtest_session_state,
update_backtest_session_notes,
delete_backtest_session,
get_backtest_session_by_id as get_backtest_session_by_id_from_db,
update_backtest_session_status,
purge_backtest_sessions
)
from jesse.services.transformers import get_backtest_session, get_backtest_session_for_load_more
from jesse.modes.backtest_mode import run as run_backtest
from jesse.modes.data_provider import get_backtest_logs, download_backtest_log
router = APIRouter(prefix="/backtest", tags=["Backtest"])
@router.post("")
def backtest(request_json: BacktestRequestJson, authorization: Optional[str] = Header(None)):
"""
Start a backtest process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
process_manager.add_task(
run_backtest,
request_json.id,
request_json.debug_mode,
request_json.config,
request_json.exchange,
request_json.routes,
request_json.data_routes,
request_json.start_date,
request_json.finish_date,
None,
request_json.export_chart,
request_json.export_tradingview,
request_json.export_csv,
request_json.export_json,
request_json.fast_mode,
request_json.benchmark
)
return JSONResponse({'message': 'Started backtesting...'}, status_code=202)
@router.post("/cancel")
def cancel_backtest(request_json: CancelRequestJson, authorization: Optional[str] = Header(None)):
"""
Cancel a backtest process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
process_manager.cancel_process(request_json.id)
update_backtest_session_status(request_json.id, 'cancelled')
return JSONResponse({'message': f'Backtest process with ID of {request_json.id} was requested for termination'},
status_code=202)
@router.get("/logs/{session_id}")
def get_logs(session_id: str, token: str = Query(...)):
"""
Get logs as text for a specific session. Similar to download but returns text content instead of file.
"""
if not authenticator.is_valid_token(token):
return authenticator.unauthorized_response()
try:
content = get_backtest_logs(session_id)
if content is None:
return JSONResponse({'error': 'Log file not found'}, status_code=404)
return JSONResponse({'content': content}, status_code=200)
except Exception as e:
return JSONResponse({'error': str(e)}, status_code=500)
@router.get("/download-log/{session_id}")
def download_backtest_log(session_id: str, token: str = Query(...)):
"""
Download log file for a specific backtest session
"""
if not authenticator.is_valid_token(token):
return authenticator.unauthorized_response()
try:
return download_backtest_log(session_id)
except Exception as e:
return JSONResponse({'error': str(e)}, status_code=500)
@router.post("/sessions")
def get_backtest_sessions(request_json: GetBacktestSessionsRequestJson = Body(default=GetBacktestSessionsRequestJson()), authorization: Optional[str] = Header(None)):
"""
Get a list of backtest sessions sorted by most recently updated with pagination
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get sessions from the database with pagination and filters
sessions = get_sessions(
limit=request_json.limit,
offset=request_json.offset,
title_search=request_json.title_search,
status_filter=request_json.status_filter,
date_filter=request_json.date_filter
)
# Transform the sessions using the transformer
transformed_sessions = [get_backtest_session(session) for session in sessions]
return JSONResponse({
'sessions': transformed_sessions,
'count': len(transformed_sessions)
})
@router.post("/sessions/{session_id}")
def get_backtest_session_by_id(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get a single backtest session by ID
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get the session from the database
session = get_backtest_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Transform the session using the transformer
transformed_session = get_backtest_session_for_load_more(session)
transformed_session = jh.clean_infinite_values(transformed_session)
return JSONResponse({
'session': transformed_session
})
@router.post("/update-state")
def update_session_state(request_json: UpdateBacktestSessionStateRequestJson, authorization: Optional[str] = Header(None)):
"""
Update the state of a backtest session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
update_backtest_session_state(request_json.id, request_json.state)
return JSONResponse({
'message': 'Backtest session state updated successfully'
})
@router.post("/sessions/{session_id}/remove")
def remove_backtest_session(session_id: str, authorization: Optional[str] = Header(None)):
"""
Remove a backtest session from the database
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_backtest_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Delete the session from the database
result = delete_backtest_session(session_id)
if not result:
return JSONResponse({
'error': f'Failed to delete session with ID {session_id}'
}, status_code=500)
return JSONResponse({
'message': 'Backtest session removed successfully'
})
@router.post("/sessions/{session_id}/notes")
def update_session_notes(session_id: str, request_json: UpdateBacktestSessionNotesRequestJson, authorization: Optional[str] = Header(None)):
"""
Update the notes (title, description, strategy_codes) of a backtest session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_backtest_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
update_backtest_session_notes(session_id, request_json.title, request_json.description, request_json.strategy_codes)
return JSONResponse({
'message': 'Backtest session notes updated successfully'
})
@router.post("/purge-sessions")
def purge_sessions(request_json: dict = Body(...), authorization: Optional[str] = Header(None)):
"""
Purge backtest sessions older than specified days
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
days_old = request_json.get('days_old', None)
deleted_count = purge_backtest_sessions(days_old)
return JSONResponse({
'message': f'Successfully purged {deleted_count} session(s)',
'deleted_count': deleted_count
}, status_code=200)
@router.post("/sessions/{session_id}/chart-data")
def get_backtest_session_chart_data(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get chart data for a specific backtest session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_backtest_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
chart_data = jh.clean_infinite_values(json.loads(session.chart_data)) if session.chart_data else None
return JSONResponse({
'chart_data': chart_data
})
@router.post("/sessions/{session_id}/strategy-code")
def get_backtest_session_strategy_codes(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get strategy codes for a specific backtest session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_backtest_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
return JSONResponse({
'strategy_code': json.loads(session.strategy_codes) if session.strategy_codes else {}
})
================================================
FILE: jesse/controllers/candles_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header
from starlette.responses import JSONResponse
from jesse.repositories import candle_repository
from jesse.services import auth as authenticator
from jesse.services.multiprocessing import process_manager
from jesse.services.web import ImportCandlesRequestJson, CancelRequestJson, GetCandlesRequestJson, DeleteCandlesRequestJson
import jesse.helpers as jh
router = APIRouter(prefix="/candles", tags=["Candles"])
@router.post("/import")
def import_candles(request_json: ImportCandlesRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Import candles for a specific exchange and symbol
"""
jh.validate_cwd()
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes import import_candles_mode
process_manager.add_task(
import_candles_mode.run,
request_json.id,
request_json.exchange,
request_json.symbol,
request_json.start_date
)
return JSONResponse({'message': 'Started importing candles...'}, status_code=202)
@router.post("/cancel-import")
def cancel_import_candles(request_json: CancelRequestJson, authorization: Optional[str] = Header(None)):
"""
Cancel an import candles process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
process_manager.cancel_process(request_json.id)
return JSONResponse({'message': f'Candles process with ID of {request_json.id} was requested for termination'},
status_code=202)
@router.post("/clear-cache")
def clear_candles_database_cache(authorization: Optional[str] = Header(None)):
"""
Clear the candles database cache
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services.cache import cache
cache.flush()
return JSONResponse({
'status': 'success',
'message': 'Candles database cache cleared successfully',
}, status_code=200)
@router.post("/get")
def get_candles(json_request: GetCandlesRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get candles for a specific exchange, symbol, and timeframe
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
from jesse.modes.data_provider import get_candles as gc
arr = gc(json_request.exchange, json_request.symbol, json_request.timeframe)
return JSONResponse({
'id': json_request.id,
'data': arr
}, status_code=200)
@router.post("/existing")
def get_existing_candles(authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get all existing candles in the database
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
data = candle_repository.get_existing_candles()
return JSONResponse({'data': data}, status_code=200)
except Exception as e:
return JSONResponse({'error': str(e)}, status_code=500)
@router.post("/delete")
def delete_candles(json_request: DeleteCandlesRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Delete candles for a specific exchange and symbol
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
candle_repository.delete_candles_from_db(json_request.exchange, json_request.symbol)
return JSONResponse({'message': 'Candles deleted successfully'}, status_code=200)
except Exception as e:
return JSONResponse({'error': str(e)}, status_code=500)
================================================
FILE: jesse/controllers/closed_trade_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header, Query, Body
from fastapi.responses import JSONResponse
from jesse.services import auth as authenticator
from jesse.repositories import closed_trade_repository
from jesse.services.transformers import get_closed_trade_for_list, get_closed_trade_details
from jesse.services.web import GetTradesHistoryRequestJson
router = APIRouter(prefix="/closed-trades", tags=["Closed Trades"])
@router.get("/list")
def get_closed_trades(
session_id: str = Query(...),
limit: int = Query(10, ge=1, le=1000),
authorization: Optional[str] = Header(None)
) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# Query trades for the session with limit
trades = closed_trade_repository.find_by_session_id(session_id, limit=limit)
# Transform trades for list view
trades_list = [get_closed_trade_for_list(trade) for trade in trades]
return JSONResponse({
'data': trades_list
}, status_code=200)
except Exception as e:
return JSONResponse({
'error': str(e)
}, status_code=500)
@router.get("/{trade_id}")
def get_closed_trade_by_id(trade_id: str, authorization: Optional[str] = Header(None)) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# Fetch trade by ID
trade = closed_trade_repository.find_by_id(trade_id)
if not trade:
return JSONResponse({
'error': 'Trade not found'
}, status_code=404)
# Transform trade with full details including orders
trade_details = get_closed_trade_details(trade)
return JSONResponse({
'data': trade_details
}, status_code=200)
except Exception as e:
return JSONResponse({
'error': str(e)
}, status_code=500)
@router.post("/live-history")
def get_trades_live_history(
request_json: GetTradesHistoryRequestJson = Body(...),
authorization: Optional[str] = Header(None)
) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# Fetch trades with filters
trades = closed_trade_repository.find_by_filters(
id_search=request_json.id_search,
status_filter=request_json.status_filter,
symbol_filter=request_json.symbol_filter,
date_filter=request_json.date_filter,
exchange_filter=request_json.exchange_filter,
type_filter=request_json.type_filter,
limit=request_json.limit,
offset=request_json.offset
)
# Transform trades for list view
trades_list = [get_closed_trade_for_list(trade) for trade in trades]
return JSONResponse({
'trades': trades_list
}, status_code=200)
except Exception as e:
import traceback
import jesse.helpers as jh
jh.debug(f"Error fetching trades history: {str(e)}")
jh.debug(traceback.format_exc())
return JSONResponse({
'error': str(e)
}, status_code=500)
================================================
FILE: jesse/controllers/config_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header
from fastapi.responses import JSONResponse
from jesse.services import auth as authenticator
from jesse.services.web import ConfigRequestJson
import jesse.helpers as jh
router = APIRouter(prefix="/config", tags=["Configuration"])
@router.post("/get")
def get_config(json_request: ConfigRequestJson, authorization: Optional[str] = Header(None)):
"""
Get the current configuration
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.data_provider import get_config as gc
return JSONResponse({
'data': gc(json_request.current_config, has_live=jh.has_live_trade_plugin())
}, status_code=200)
@router.post("/update")
def update_config(json_request: ConfigRequestJson, authorization: Optional[str] = Header(None)):
"""
Update the configuration
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.data_provider import update_config as uc
uc(json_request.current_config)
return JSONResponse({'message': 'Updated configurations successfully'}, status_code=200)
================================================
FILE: jesse/controllers/exchange_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header
from starlette.responses import JSONResponse
from jesse.modes.import_candles_mode import CandleExchange
from jesse.modes.import_candles_mode.drivers import drivers, driver_names
from jesse.services import auth as authenticator
from jesse.services.redis import sync_redis
from jesse.services.web import ExchangeSupportedSymbolsRequestJson, StoreExchangeApiKeyRequestJson, DeleteExchangeApiKeyRequestJson
from jesse.services.env import is_dev_env
router = APIRouter(prefix="/exchange", tags=["Exchange"])
@router.post('/supported-symbols')
def exchange_supported_symbols(request_json: ExchangeSupportedSymbolsRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# if is_dev_env():
# return JSONResponse({
# 'data': [
# 'BTC-USDT', 'ETH-USDT', 'SOL-USDT', 'DOGE-USDT'
# ]
# }, status_code=200)
return get_exchange_supported_symbols(request_json.exchange)
@router.get('/api-keys')
def get_exchange_api_keys_endpoint(authorization: Optional[str] = Header(None)) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.exchange_api_keys import get_exchange_api_keys
return get_exchange_api_keys()
@router.post('/api-keys/store')
def store_exchange_api_keys_endpoint(json_request: StoreExchangeApiKeyRequestJson,
authorization: Optional[str] = Header(None)) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.exchange_api_keys import store_exchange_api_keys
return store_exchange_api_keys(
json_request.exchange, json_request.name, json_request.api_key, json_request.api_secret,
json_request.additional_fields, json_request.general_notifications_id, json_request.error_notifications_id
)
@router.post('/api-keys/delete')
def delete_exchange_api_keys_endpoint(json_request: DeleteExchangeApiKeyRequestJson,
authorization: Optional[str] = Header(None)) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.exchange_api_keys import delete_exchange_api_keys
return delete_exchange_api_keys(json_request.id)
def get_exchange_supported_symbols(exchange: str) -> JSONResponse:
# first try to get from cache
cache_key = f'exchange-symbols:{exchange}'
cached_result = sync_redis.get(cache_key)
if cached_result is not None:
return JSONResponse({
'data': eval(cached_result)
}, status_code=200)
arr = []
try:
driver: CandleExchange = drivers[exchange]()
except KeyError:
raise ValueError(f'{exchange} is not a supported exchange. Supported exchanges are: {driver_names}')
try:
arr = driver.get_available_symbols()
# cache successful result for 5 minutes
sync_redis.setex(cache_key, 300, str(arr))
except Exception as e:
return JSONResponse({
'error': str(e)
}, status_code=500)
return JSONResponse({
'data': arr
}, status_code=200)
================================================
FILE: jesse/controllers/file_controller.py
================================================
from fastapi import APIRouter, Query, Header, UploadFile, Form, File
from typing import Optional
from jesse.services import auth as authenticator
from jesse.modes import data_provider
from jesse.services.web import ImportApiKeyRequestJson, LoginRequestJson
from jesse.services.env import ENV_VALUES
import jesse.helpers as jh
router = APIRouter(prefix="/download", tags=["Download"])
@router.get("/{mode}/{file_type}/{session_id}")
def download(mode: str, file_type: str, session_id: str, token: str = Query(...)):
"""
Download files such as logs or other generated files.
Log files require session_id because there is one log per each session. Except for the optimize mode.
"""
if not authenticator.is_valid_token(token):
return authenticator.unauthorized_response()
return data_provider.download_file(mode, file_type, session_id)
@router.post("/download-api-keys")
def download_api_keys(
request_json: LoginRequestJson,
authorization: Optional[str] = Header(None)
):
"""
Download exchange API Keys - requires password verification
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Verify password for this sensitive operation
if request_json.password != ENV_VALUES['PASSWORD']:
return authenticator.unauthorized_response()
jh.validate_cwd()
return data_provider.download_api_keys()
@router.post("/import-api-keys")
async def import_api_keys(
request_json: ImportApiKeyRequestJson,
authorization: Optional[str] = Header(None)
):
"""
Import exchange API keys from CSV text received in the request body.
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# remove leading/trailing whitespace
csv_content = request_json.content.strip()
# validate CSV content
if not data_provider.validate_csv_content(csv_content):
return {
'success': False,
'error': 'Invalid CSV content or potential security threat detected'
}
# import exchange API keys
result = data_provider.import_api_keys_from_csv(csv_content)
return result
except Exception as e:
return {
'success': False,
'error': str(e)
}
================================================
FILE: jesse/controllers/live_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header, Body
from fastapi.responses import JSONResponse
from jesse.services import auth as authenticator
from jesse.services.multiprocessing import process_manager
from jesse.services.web import (
LiveRequestJson,
LiveCancelRequestJson,
GetLogsRequestJson,
GetOrdersRequestJson,
GetLiveSessionsRequestJson,
UpdateLiveSessionNotesRequestJson,
UpdateLiveSessionStateRequestJson
)
import jesse.helpers as jh
from jesse.repositories import live_session_repository
from jesse.services import transformers
from jesse_live import live_mode
from jesse_live.services.data_provider import get_logs as gl, get_orders as go
from jesse.enums import live_session_statuses, live_session_modes
router = APIRouter(prefix="/live", tags=["Live Trading"])
@router.post("")
def live(request_json: LiveRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Start live trading
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
trading_mode = live_session_modes.LIVETRADE if request_json.paper_mode is False else live_session_modes.PAPERTRADE
live_session_repository.store_live_session(
id=request_json.id,
status=live_session_statuses.STARTING,
session_mode=trading_mode,
exchange=request_json.exchange,
state={
'form': {
'debug_mode': request_json.debug_mode,
'paper_mode': request_json.paper_mode,
'exchange': request_json.exchange,
'exchange_api_key_id': request_json.exchange_api_key_id,
'notification_api_key_id': request_json.notification_api_key_id,
'routes': request_json.routes,
'data_routes': request_json.data_routes,
}
},
)
# execute live session
process_manager.add_task(
live_mode.run,
request_json.id,
request_json.debug_mode,
request_json.exchange,
request_json.exchange_api_key_id,
request_json.notification_api_key_id,
request_json.config,
request_json.routes,
request_json.data_routes,
trading_mode,
)
mode = 'live' if request_json.paper_mode is False else 'paper'
return JSONResponse({'message': f"Started {mode} trading..."}, status_code=202)
@router.post("/cancel")
def cancel_live(request_json: LiveCancelRequestJson, authorization: Optional[str] = Header(None)):
"""
Cancel live trading
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
process_manager.cancel_process(request_json.id)
return JSONResponse({'message': f'Live process with ID of {request_json.id} terminated.'}, status_code=200)
@router.post('/logs')
def get_logs(json_request: GetLogsRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get logs for a live trading session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
arr = gl(json_request.id, json_request.type, json_request.start_time)
return JSONResponse({
'id': json_request.id,
'data': arr
}, status_code=200)
@router.post('/orders')
def get_orders(json_request: GetOrdersRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get orders for a live trading session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
arr = go(json_request.session_id)
return JSONResponse({
'id': json_request.id,
'data': arr
}, status_code=200)
@router.post("/sessions")
def get_live_sessions(
request_json: GetLiveSessionsRequestJson = Body(default=GetLiveSessionsRequestJson()),
authorization: Optional[str] = Header(None)
):
"""
Get a list of live sessions sorted by most recently updated with pagination
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get sessions from the database with pagination and filters
sessions = live_session_repository.get_live_sessions(
limit=request_json.limit,
offset=request_json.offset,
title_search=request_json.title_search,
status_filter=request_json.status_filter,
date_filter=request_json.date_filter,
mode_filter=request_json.mode_filter
)
# Transform the sessions using the transformer
transformed_sessions = [transformers.get_live_session(session) for session in sessions]
return JSONResponse({
'sessions': transformed_sessions,
'count': len(transformed_sessions)
})
@router.post("/sessions/{session_id}")
def get_live_session_by_id(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get a single live session by ID
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get the session from the database
session = live_session_repository.get_live_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Transform the session using the transformer
transformed_session = transformers.get_live_session(session)
return JSONResponse({
'session': transformed_session
})
@router.post("/sessions/{session_id}/remove")
def remove_live_session(session_id: str, authorization: Optional[str] = Header(None)):
"""
Remove a live session from the database
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = live_session_repository.get_live_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Delete the session from the database
result = live_session_repository.delete_live_session(session_id)
if not result:
return JSONResponse({
'error': f'Failed to delete session with ID {session_id}'
}, status_code=500)
return JSONResponse({
'message': 'Live session removed successfully'
})
@router.post("/sessions/{session_id}/notes")
def update_session_notes(
session_id: str,
request_json: UpdateLiveSessionNotesRequestJson,
authorization: Optional[str] = Header(None)
):
"""
Update the notes (title, description, strategy_codes) of a live session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = live_session_repository.get_live_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
live_session_repository.update_live_session_notes(
session_id,
request_json.title,
request_json.description,
request_json.strategy_codes
)
return JSONResponse({
'message': 'Live session notes updated successfully'
})
@router.post("/update-state")
def update_state(request_json: UpdateLiveSessionStateRequestJson, authorization: Optional[str] = Header(None)):
"""
Upsert live session state (creates draft if doesn't exist, updates if exists)
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
live_session_repository.upsert_live_session_state(request_json.id, request_json.state)
return JSONResponse({
'message': 'Live session state updated successfully'
}, status_code=200)
@router.post("/purge-sessions")
def purge_sessions(request_json: dict = Body(...), authorization: Optional[str] = Header(None)):
"""
Purge live sessions older than specified days
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
days_old = request_json.get('days_old', None)
deleted_count = live_session_repository.purge_live_sessions(days_old)
return JSONResponse({
'message': f'Successfully purged {deleted_count} session(s)',
'deleted_count': deleted_count
}, status_code=200)
@router.get("/equity-curve")
def get_equity_curve(
session_id: str,
from_ms: Optional[int] = None,
to_ms: Optional[int] = None,
timeframe: str = 'auto',
max_points: int = 1000,
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Get equity curve for a live session with downsampling
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.repositories import live_equity_repository
try:
if from_ms is None:
session = live_session_repository.get_live_session_by_id(session_id)
if session and getattr(session, 'created_at', None):
from_ms = session.created_at
else:
# fallback: last 24h
from_ms = jh.now(True) - (24 * 60 * 60 * 1000)
result = live_equity_repository.query_equity_curve(
session_id=session_id,
from_ms=from_ms,
to_ms=to_ms,
timeframe=timeframe,
max_points=max_points
)
return JSONResponse(result, status_code=200)
except Exception as e:
return JSONResponse({
'message': f'Error fetching equity curve: {str(e)}'
}, status_code=500)
================================================
FILE: jesse/controllers/lsp_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header
from fastapi.responses import JSONResponse
from jesse.helpers import get_os
from jesse.services import auth as authenticator
from jesse.services.lsp import LSP_DEFAULT_PORT
router = APIRouter(prefix='/lsp-config', tags=['LSP Configuration'])
@router.get("")
def get_lsp_config(authorization: Optional[str] = Header(None))->JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services.env import ENV_VALUES
# Check if formatting is available on the current platform
# Formatting is only available on non-windows platforms
isFormattingAvailable = get_os() != 'windows'
return JSONResponse(
{'ws_port': ENV_VALUES['LSP_PORT'] if 'LSP_PORT' in ENV_VALUES else LSP_DEFAULT_PORT,
'ws_path':'/lsp',
'is_formatting_available': isFormattingAvailable}, status_code=200)
================================================
FILE: jesse/controllers/monte_carlo_controller.py
================================================
from fastapi import APIRouter, Header, Request
from typing import Optional
from fastapi.responses import JSONResponse
import json
from jesse.services import auth as authenticator
from jesse.services.multiprocessing import process_manager
from jesse.services.web import (
MonteCarloRequestJson,
CancelMonteCarloRequestJson,
UpdateMonteCarloSessionStateRequestJson,
TerminateMonteCarloRequestJson,
UpdateMonteCarloSessionNotesRequestJson,
GetMonteCarloSessionsRequestJson
)
from jesse import helpers as jh
from jesse.models.MonteCarloSession import (
get_monte_carlo_sessions,
update_monte_carlo_session_state,
update_monte_carlo_session_status,
delete_monte_carlo_session,
get_monte_carlo_session_by_id,
update_monte_carlo_session_notes,
purge_monte_carlo_sessions,
get_running_monte_carlo_session_id
)
from jesse.services.transformers import get_monte_carlo_session, get_monte_carlo_session_for_load_more
from jesse.modes.monte_carlo_mode import run as run_monte_carlo
router = APIRouter(prefix="/monte-carlo", tags=["Monte Carlo"])
@router.post("")
async def monte_carlo(request: Request, request_json: MonteCarloRequestJson, authorization: Optional[str] = Header(None)):
"""
Start a Monte Carlo simulation
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
# Check Python version before imports
if jh.python_version() == (3, 13):
return JSONResponse({
'error': 'Monte Carlo mode is not supported on Python 3.13',
'message': 'The Ray library used for Monte Carlo does not support Python 3.13 yet. Please use Python 3.12 or lower.'
}, status_code=500)
# Validate at least one type is selected
if not request_json.run_trades and not request_json.run_candles:
return JSONResponse({
'error': 'At least one Monte Carlo type must be selected',
'message': 'Please select either Trades, Candles, or both.'
}, status_code=400)
# Validate routes
if not request_json.routes or len(request_json.routes) == 0:
return JSONResponse({
'error': 'At least one route is required',
'message': 'Please add at least one trading route.'
}, status_code=400)
# Generate unique session ID if not provided
session_id = request_json.id or jh.generate_unique_id()
# Check if session already exists
existing_session = get_monte_carlo_session_by_id(session_id)
if existing_session:
return JSONResponse({
'error': f'Monte Carlo session with ID {session_id} already exists',
'message': 'A session with this ID is already running or completed.'
}, status_code=409)
# Check session existence in monte carlo models
from jesse.models.MonteCarloSession import get_monte_carlo_session_by_id as db_get_mc_session_by_id
if db_get_mc_session_by_id(session_id):
return JSONResponse({
'error': f'Monte Carlo session with ID {session_id} already exists (in DB)',
'message': 'A session with this ID already exists in the database.'
}, status_code=409)
process_manager.add_task(
run_monte_carlo,
session_id,
request_json.config,
request_json.exchange,
request_json.routes,
request_json.data_routes,
request_json.start_date,
request_json.finish_date,
request_json.run_trades,
request_json.run_candles,
request_json.num_scenarios,
request_json.fast_mode,
request_json.cpu_cores,
request_json.pipeline_type,
request_json.pipeline_params,
request_json.state,
)
return JSONResponse({
'message': 'Started Monte Carlo simulation...',
'session_id': session_id
}, status_code=202)
@router.post("/cancel")
def cancel_monte_carlo(request_json: CancelMonteCarloRequestJson, authorization: Optional[str] = Header(None)):
"""
Cancel a Monte Carlo simulation
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
process_manager.cancel_process(request_json.id)
return JSONResponse(
{'message': f'Monte Carlo process with ID of {request_json.id} was requested for termination'},
status_code=202
)
@router.post("/terminate")
def terminate_monte_carlo(request_json: TerminateMonteCarloRequestJson, authorization: Optional[str] = Header(None)):
"""
Terminate a Monte Carlo simulation
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# First update the status to 'terminated'
update_monte_carlo_session_status(request_json.id, 'terminated')
# Then request cancellation of the current process
process_manager.cancel_process(request_json.id)
return JSONResponse(
{'message': f'Monte Carlo process with ID of {request_json.id} was terminated'},
status_code=202
)
@router.post("/resume")
async def resume_monte_carlo(request_json: MonteCarloRequestJson, authorization: Optional[str] = Header(None)):
"""
Resume a Monte Carlo simulation
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
# Check Python version
if jh.python_version() == (3, 13):
return JSONResponse({
'error': 'Monte Carlo mode is not supported on Python 3.13',
'message': 'The Ray library used for Monte Carlo does not support Python 3.13 yet. Please use Python 3.12 or lower.'
}, status_code=500)
# Get the session from the database
session = get_monte_carlo_session_by_id(request_json.id)
if not session:
return JSONResponse({
'error': f'Session with ID {request_json.id} not found'
}, status_code=404)
# Transform the session using the transformer
transformed_session = get_monte_carlo_session_for_load_more(session)
process_manager.add_task(
run_monte_carlo,
request_json.id,
request_json.config,
request_json.exchange,
request_json.routes,
request_json.data_routes,
request_json.start_date,
request_json.finish_date,
request_json.run_trades,
request_json.run_candles,
request_json.num_scenarios,
request_json.fast_mode,
request_json.cpu_cores,
request_json.pipeline_type,
request_json.pipeline_params,
request_json.state,
)
return JSONResponse({
'session': transformed_session
})
@router.post("/sessions")
def get_monte_carlo_sessions_endpoint(request_json: GetMonteCarloSessionsRequestJson = GetMonteCarloSessionsRequestJson(), authorization: Optional[str] = Header(None)):
"""
Get a list of Monte Carlo sessions sorted by most recently updated with pagination and filters
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get sessions from the database with pagination and filters
sessions = get_monte_carlo_sessions(
limit=request_json.limit,
offset=request_json.offset,
title_search=request_json.title_search,
status_filter=request_json.status_filter,
date_filter=request_json.date_filter
)
# Transform the sessions using the transformer
transformed_sessions = [get_monte_carlo_session(session) for session in sessions]
return JSONResponse({
'sessions': transformed_sessions,
'count': len(transformed_sessions)
})
@router.post("/sessions/{session_id}")
def get_monte_carlo_session_by_id_endpoint(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get a single Monte Carlo session by ID
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get the session from the database
session = get_monte_carlo_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Transform the session using the transformer
transformed_session = get_monte_carlo_session_for_load_more(session)
# Ensure JSON-safe values (replace NaN/Inf with None)
transformed_session = jh.clean_infinite_values(transformed_session)
return JSONResponse({
'session': transformed_session
})
@router.post("/sessions/{session_id}/equity-curves")
def get_monte_carlo_equity_curves(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get equity curve data for a Monte Carlo session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_monte_carlo_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
trades_equity_curves = None
candles_equity_curves = None
# Extract trades equity curves
if session.trades_session and session.trades_session.results:
results = jh.clean_infinite_values(json.loads(session.trades_session.results))
# Extract original equity curve
original_curve = None
if results.get('original') and results['original'].get('equity_curve'):
for curve in results['original']['equity_curve']:
if curve.get('name') == 'Portfolio':
original_curve = curve
break
# Extract all scenario equity curves
scenario_curves = []
if results.get('scenarios'):
for scenario in results['scenarios']:
if scenario.get('equity_curve'):
for curve in scenario['equity_curve']:
if curve.get('name') == 'Portfolio':
scenario_curves.append(curve)
break
trades_equity_curves = {
'original': original_curve,
'scenarios': scenario_curves
}
# Extract candles equity curves
if session.candles_session and session.candles_session.results:
results = jh.clean_infinite_values(json.loads(session.candles_session.results))
# Extract original equity curve
original_curve = None
if results.get('original') and results['original'].get('equity_curve'):
for curve in results['original']['equity_curve']:
if curve.get('name') == 'Portfolio':
original_curve = curve
break
# Extract all scenario equity curves
scenario_curves = []
if results.get('scenarios'):
for scenario in results['scenarios']:
if scenario.get('equity_curve'):
for curve in scenario['equity_curve']:
if curve.get('name') == 'Portfolio':
scenario_curves.append(curve)
break
candles_equity_curves = {
'original': original_curve,
'scenarios': scenario_curves
}
return JSONResponse({
'trades': trades_equity_curves,
'candles': candles_equity_curves
})
@router.post("/update-state")
def update_session_state(
request_json: UpdateMonteCarloSessionStateRequestJson,
authorization: Optional[str] = Header(None)
):
"""
Update the state of a Monte Carlo session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
update_monte_carlo_session_state(request_json.id, request_json.state)
return JSONResponse({
'message': 'Monte Carlo session state updated successfully'
})
@router.post("/sessions/{session_id}/remove")
def remove_monte_carlo_session(session_id: str, authorization: Optional[str] = Header(None)):
"""
Remove a Monte Carlo session from the database
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_monte_carlo_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Delete the session from the database
result = delete_monte_carlo_session(session_id)
if not result:
return JSONResponse({
'error': f'Failed to delete session with ID {session_id}'
}, status_code=500)
return JSONResponse({
'message': 'Monte Carlo session removed successfully'
})
@router.post("/sessions/{session_id}/notes")
def update_session_notes(session_id: str, request_json: UpdateMonteCarloSessionNotesRequestJson, authorization: Optional[str] = Header(None)):
"""
Update the notes (title, description, strategy_codes) of a Monte Carlo session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_monte_carlo_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
update_monte_carlo_session_notes(session_id, request_json.title, request_json.description, request_json.strategy_codes)
return JSONResponse({
'message': 'Monte Carlo session notes updated successfully'
})
@router.post("/sessions/{session_id}/strategy-code")
def get_session_strategy_code(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get the strategy code for a Monte Carlo session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_monte_carlo_session_by_id(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
return JSONResponse({
'strategy_code': json.loads(session.strategy_codes) if session.strategy_codes else {}
})
@router.post("/sessions/{session_id}/logs")
def get_session_logs(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get the logs for a Monte Carlo session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes import data_provider
content = data_provider.get_monte_carlo_logs(session_id)
if content is None:
return JSONResponse({
'error': 'Log file not found'
}, status_code=404)
return JSONResponse({
'logs': content
})
@router.post("/purge-sessions")
def purge_sessions(request_json: dict, authorization: Optional[str] = Header(None)):
"""
Purge Monte Carlo sessions older than specified days
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
days_old = request_json.get('days_old', None)
deleted_count = purge_monte_carlo_sessions(days_old)
return JSONResponse({
'message': f'Successfully purged {deleted_count} session(s)',
'deleted_count': deleted_count
}, status_code=200)
@router.get("/running-session")
def get_running_session(authorization: Optional[str] = Header(None)):
"""
Get the running session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
return JSONResponse({
'session_id': get_running_monte_carlo_session_id()
})
================================================
FILE: jesse/controllers/notification_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header
from fastapi.responses import JSONResponse
from jesse.services import auth as authenticator
from jesse.services.web import StoreNotificationApiKeyRequestJson, DeleteNotificationApiKeyRequestJson
router = APIRouter(prefix="/notification", tags=["Notification"])
@router.get("/api-keys")
def get_notification_api_keys(authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get all notification API keys
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.notification_api_keys import get_notification_api_keys
return get_notification_api_keys()
@router.post("/api-keys/store")
def store_notification_api_keys(
json_request: StoreNotificationApiKeyRequestJson,
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Store a new notification API key
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.notification_api_keys import store_notification_api_keys
return store_notification_api_keys(
json_request.name, json_request.driver, json_request.fields
)
@router.post("/api-keys/delete")
def delete_notification_api_keys(
json_request: DeleteNotificationApiKeyRequestJson,
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Delete a notification API key
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes.notification_api_keys import delete_notification_api_keys
return delete_notification_api_keys(json_request.id)
================================================
FILE: jesse/controllers/optimization_controller.py
================================================
from fastapi import APIRouter, Header, Query, Body
from typing import Optional, List
from fastapi.responses import JSONResponse, FileResponse
from pydantic import BaseModel
import json
from jesse.services import auth as authenticator
from jesse.services.multiprocessing import process_manager
from jesse.services.web import OptimizationRequestJson, CancelRequestJson, UpdateOptimizationSessionStateRequestJson, UpdateOptimizationSessionStatusRequestJson, TerminateOptimizationRequestJson, UpdateOptimizationSessionNotesRequestJson, GetOptimizationSessionsRequestJson
from jesse import helpers as jh
from jesse.models.OptimizationSession import get_optimization_sessions as get_sessions, update_optimization_session_state, update_optimization_session_status, delete_optimization_session, reset_optimization_session, update_optimization_session_notes, purge_optimization_sessions, get_running_optimization_session_id
from jesse.services.transformers import get_optimization_session, get_optimization_session_for_load_more
from jesse.models.OptimizationSession import get_optimization_session_by_id as get_optimization_session_by_id_from_db
from jesse.modes.optimize_mode import run as run_optimization
router = APIRouter(prefix="/optimization", tags=["Optimization"])
@router.post("")
async def optimization(request_json: OptimizationRequestJson, authorization: Optional[str] = Header(None)):
"""
Start an optimization process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
# Check Python version before imports
if jh.python_version() == (3, 13):
return JSONResponse({
'error': 'Optimization is not supported on Python 3.13',
'message': 'The Ray library used for optimization does not support Python 3.13 yet. Please use Python 3.12 or lower.'
}, status_code=500)
# Validate routes
if not request_json.routes or len(request_json.routes) == 0:
return JSONResponse({
'error': 'At least one route is required',
'message': 'Please add at least one trading route.'
}, status_code=400)
# Generate unique session ID if not provided
session_id = request_json.id or jh.generate_unique_id()
# Check if session already exists
existing_session = get_optimization_session_by_id_from_db(session_id)
if existing_session:
return JSONResponse({
'error': f'Optimization session with ID {session_id} already exists',
'message': 'A session with this ID is already running or completed.'
}, status_code=409)
process_manager.add_task(
run_optimization,
session_id,
request_json.config,
request_json.exchange,
request_json.routes,
request_json.data_routes,
request_json.training_start_date,
request_json.training_finish_date,
request_json.testing_start_date,
request_json.testing_finish_date,
request_json.optimal_total,
request_json.fast_mode,
request_json.cpu_cores,
request_json.state,
)
return JSONResponse({
'message': 'Started optimization...',
'session_id': session_id
}, status_code=202)
@router.post("/rerun")
async def rerun_optimization(request_json: OptimizationRequestJson, authorization: Optional[str] = Header(None)):
"""
Start an optimization process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
# Check Python version before imports
if jh.python_version() == (3, 13):
return JSONResponse({
'error': 'Optimization is not supported on Python 3.13',
'message': 'The Ray library used for optimization does not support Python 3.13 yet. Please use Python 3.12 or lower.'
}, status_code=500)
# Get the session from the database
session = get_optimization_session_by_id_from_db(request_json.id)
if not session:
return JSONResponse({
'error': f'Session with ID {request_json.id} not found'
}, status_code=404)
# reset the session
reset_optimization_session(request_json.id)
process_manager.add_task(
run_optimization,
request_json.id,
request_json.config,
request_json.exchange,
request_json.routes,
request_json.data_routes,
request_json.training_start_date,
request_json.training_finish_date,
request_json.testing_start_date,
request_json.testing_finish_date,
request_json.optimal_total,
request_json.fast_mode,
request_json.cpu_cores,
request_json.state,
)
return JSONResponse({'message': 'Started optimization...'}, status_code=202)
@router.post("/cancel")
def cancel_optimization(request_json: CancelRequestJson, authorization: Optional[str] = Header(None)):
"""
Cancel an optimization process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
process_manager.cancel_process(request_json.id)
return JSONResponse({'message': f'Optimization process with ID of {request_json.id} was requested for termination'},
status_code=202)
@router.get("/download-log")
def download_optimization_log(token: str = Query(...)):
"""
Download optimization log file
"""
if not authenticator.is_valid_token(token):
return authenticator.unauthorized_response()
from jesse.modes import data_provider
return data_provider.download_file('optimize', 'log')
@router.post("/sessions")
def get_optimization_sessions(request_json: GetOptimizationSessionsRequestJson = Body(default=GetOptimizationSessionsRequestJson()), authorization: Optional[str] = Header(None)):
"""
Get a list of optimization sessions sorted by most recently updated with pagination and filtering
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get sessions from the database with pagination and filters
sessions = get_sessions(
limit=request_json.limit,
offset=request_json.offset,
title_search=request_json.title_search,
status_filter=request_json.status_filter,
date_filter=request_json.date_filter
)
# Transform the sessions using the transformer
transformed_sessions = [get_optimization_session(session) for session in sessions]
return JSONResponse({
'sessions': transformed_sessions,
'count': len(transformed_sessions)
})
@router.post("/sessions/{session_id}")
def get_optimization_session_by_id(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get a single optimization session by ID
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# Get the session from the database
session = get_optimization_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Transform the session using the transformer
transformed_session = get_optimization_session_for_load_more(session)
return JSONResponse({
'session': transformed_session
})
@router.post("/update-state")
def update_session_state(request_json: UpdateOptimizationSessionStateRequestJson, authorization: Optional[str] = Header(None)):
"""
Update the state of an optimization session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
update_optimization_session_state(request_json.id, request_json.state)
return JSONResponse({
'message': 'Optimization session state updated successfully'
})
@router.post("/terminate")
def terminate_optimization(request_json: TerminateOptimizationRequestJson, authorization: Optional[str] = Header(None)):
"""
Terminate an optimization process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
# First update the status to 'terminated'
update_optimization_session_status(request_json.id, 'terminated')
# Then request cancellation of the current process
process_manager.cancel_process(request_json.id)
return JSONResponse({'message': f'Optimization process with ID of {request_json.id} was terminated'}, status_code=202)
@router.post("/resume")
async def resume_optimization(request_json: OptimizationRequestJson, authorization: Optional[str] = Header(None)):
"""
Resume an optimization process
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
jh.validate_cwd()
# Check Python version before imports
if jh.python_version() == (3, 13):
return JSONResponse({
'error': 'Optimization is not supported on Python 3.13',
'message': 'The Ray library used for optimization does not support Python 3.13 yet. Please use Python 3.12 or lower.'
}, status_code=500)
# Get the session from the database
session = get_optimization_session_by_id_from_db(request_json.id)
if not session:
return JSONResponse({
'error': f'Session with ID {request_json.id} not found'
}, status_code=404)
# Transform the session using the transformer
transformed_session = get_optimization_session_for_load_more(session)
process_manager.add_task(
run_optimization,
request_json.id,
request_json.config,
request_json.exchange,
request_json.routes,
request_json.data_routes,
request_json.training_start_date,
request_json.training_finish_date,
request_json.testing_start_date,
request_json.testing_finish_date,
request_json.optimal_total,
request_json.fast_mode,
request_json.cpu_cores,
request_json.state,
)
return JSONResponse({
'session': transformed_session
})
@router.post("/sessions/{session_id}/remove")
def remove_optimization_session(session_id: str, authorization: Optional[str] = Header(None)):
"""
Remove an optimization session from the database
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_optimization_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
# Delete the session from the database
result = delete_optimization_session(session_id)
if not result:
return JSONResponse({
'error': f'Failed to delete session with ID {session_id}'
}, status_code=500)
return JSONResponse({
'message': 'Optimization session removed successfully'
})
@router.post("/sessions/{session_id}/notes")
def update_session_notes(session_id: str, request_json: UpdateOptimizationSessionNotesRequestJson, authorization: Optional[str] = Header(None)):
"""
Update the notes (title, description, strategy_codes) of an optimization session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_optimization_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
update_optimization_session_notes(session_id, request_json.title, request_json.description, request_json.strategy_codes)
return JSONResponse({
'message': 'Optimization session notes updated successfully'
})
@router.post("/sessions/{session_id}/get-notes")
def get_session_notes(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get the notes of an optimization session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_optimization_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
return JSONResponse({
'title': session.title,
'description': session.description,
})
@router.post("/sessions/{session_id}/strategy-codes")
def get_session_strategy_codes(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get the strategy codes of an optimization session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session = get_optimization_session_by_id_from_db(session_id)
if not session:
return JSONResponse({
'error': f'Session with ID {session_id} not found'
}, status_code=404)
return JSONResponse({
'strategy_codes': json.loads(session.strategy_codes) if session.strategy_codes else {}
})
@router.post("/sessions/{session_id}/logs")
def get_session_logs(session_id: str, authorization: Optional[str] = Header(None)):
"""
Get the logs for an optimization session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.modes import data_provider
content = data_provider.get_optimization_logs(session_id)
if content is None:
return JSONResponse({
'error': 'Log file not found'
}, status_code=404)
return JSONResponse({
'logs': content
})
@router.post("/purge-sessions")
def purge_sessions(request_json: dict = Body(...), authorization: Optional[str] = Header(None)):
"""
Purge optimization sessions older than specified days
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
days_old = request_json.get('days_old', None)
deleted_count = purge_optimization_sessions(days_old)
return JSONResponse({
'message': f'Successfully purged {deleted_count} session(s)',
'deleted_count': deleted_count
}, status_code=200)
@router.get("/running-session")
def get_running_session(authorization: Optional[str] = Header(None)):
"""
Get the running session
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
return JSONResponse({
'session_id': get_running_optimization_session_id()
})
================================================
FILE: jesse/controllers/order_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header, Body
from fastapi.responses import JSONResponse
from jesse.services import auth as authenticator
from jesse.repositories import order_repository
from jesse.services.transformers import get_order_details
from jesse.models.Order import Order
from jesse.services.web import GetOrdersHistoryRequestJson
router = APIRouter(prefix="/orders", tags=["Orders"])
@router.get("/{order_id}")
def get_order_by_id(order_id: str, authorization: Optional[str] = Header(None)) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# Fetch order by ID
order: Order | None = order_repository.find_by_id(order_id)
if not order:
return JSONResponse({
'error': 'Order not found'
}, status_code=404)
# Transform order with details
order_details = get_order_details(order)
return JSONResponse({
'data': order_details
}, status_code=200)
except Exception as e:
import traceback
import jesse.helpers as jh
jh.debug(f"Error fetching order {order_id}: {str(e)}")
jh.debug(traceback.format_exc())
return JSONResponse({
'error': str(e)
}, status_code=500)
@router.post("/live-history")
def get_orders_live_history(
request_json: GetOrdersHistoryRequestJson = Body(...),
authorization: Optional[str] = Header(None)
) -> JSONResponse:
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# Fetch orders with filters
orders = order_repository.find_by_filters(
id_search=request_json.id_search,
status_filter=request_json.status_filter,
symbol_filter=request_json.symbol_filter,
date_filter=request_json.date_filter,
exchange_filter=request_json.exchange_filter,
type_filter=request_json.type_filter,
side_filter=request_json.side_filter,
limit=request_json.limit,
offset=request_json.offset
)
# Transform orders using transformer (handles UUID conversion)
orders_list = [get_order_details(order) for order in orders]
return JSONResponse({
'orders': orders_list
}, status_code=200)
except Exception as e:
import traceback
import jesse.helpers as jh
jh.debug(f"Error fetching orders history: {str(e)}")
jh.debug(traceback.format_exc())
return JSONResponse({
'error': str(e)
}, status_code=500)
================================================
FILE: jesse/controllers/strategy_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header, Query
from fastapi.responses import JSONResponse
import requests
import re
from jesse.services import auth as authenticator
from jesse.services.web import (
NewStrategyRequestJson,
GetStrategyRequestJson,
SaveStrategyRequestJson,
DeleteStrategyRequestJson,
ImportStrategyRequestJson
)
import jesse.helpers as jh
from jesse.info import JESSE_API2_URL
router = APIRouter(prefix="/strategy", tags=["Strategy"])
@router.post("/make")
def make_strategy(json_request: NewStrategyRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Create a new strategy
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import strategy_handler
return strategy_handler.generate(json_request.name)
@router.get("/all")
def get_strategies(authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get all strategies
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import strategy_handler
return strategy_handler.get_strategies()
@router.post("/get")
def get_strategy(
json_request: GetStrategyRequestJson,
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Get a specific strategy
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import strategy_handler
return strategy_handler.get_strategy(json_request.name)
@router.post("/save")
def save_strategy(
json_request: SaveStrategyRequestJson,
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Save a strategy
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import strategy_handler
return strategy_handler.save_strategy(json_request.name, json_request.content)
@router.post("/delete")
def delete_strategy(
json_request: DeleteStrategyRequestJson,
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Delete a strategy
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import strategy_handler
return strategy_handler.delete_strategy(json_request.name)
@router.get("/index")
async def index_jesse_trade_strategies(
period: str = Query(...),
sort_by: str = Query("Sharpe Ratio"),
submitted_after: Optional[str] = Query(None),
submitted_before: Optional[str] = Query(None),
authorization: Optional[str] = Header(None),
jesse_trade_token: Optional[str] = Header(None, alias="X-Jesse-Trade-Token")
) -> JSONResponse:
"""
Browse strategies from jesse.trade
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
headers = {}
if jesse_trade_token:
headers['Authorization'] = f'Bearer {jesse_trade_token}'
params = {'period': period, 'sort_by': sort_by}
if submitted_after:
params['submitted_after'] = submitted_after
if submitted_before:
params['submitted_before'] = submitted_before
response = requests.get(
f'{JESSE_API2_URL}/strategies',
params=params,
headers=headers,
timeout=10
)
if response.status_code == 200:
return JSONResponse(response.json())
else:
return JSONResponse({
'status': 'error',
'message': f'Failed to fetch strategies: {response.text}'
}, status_code=response.status_code)
except requests.exceptions.RequestException as e:
return JSONResponse({
'status': 'error',
'message': f'Error connecting to jesse.trade: {str(e)}'
}, status_code=500)
@router.get("/periods")
async def get_jesse_trade_periods(
authorization: Optional[str] = Header(None)
) -> JSONResponse:
"""
Get available trading periods from jesse.trade
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
response = requests.get(
f'{JESSE_API2_URL}/strategies/periods',
timeout=10
)
if response.status_code == 200:
return JSONResponse(response.json())
else:
return JSONResponse({
'status': 'error',
'message': f'Failed to fetch periods: {response.text}'
}, status_code=response.status_code)
except requests.exceptions.RequestException as e:
return JSONResponse({
'status': 'error',
'message': f'Error connecting to jesse.trade: {str(e)}'
}, status_code=500)
@router.get("/jesse-trade/{slug}")
async def get_jesse_trade_strategy(
slug: str,
authorization: Optional[str] = Header(None),
jesse_trade_token: Optional[str] = Header(None, alias="X-Jesse-Trade-Token")
) -> JSONResponse:
"""
Get a specific strategy from jesse.trade
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
headers = {}
if jesse_trade_token:
headers['Authorization'] = f'Bearer {jesse_trade_token}'
response = requests.get(
f'{JESSE_API2_URL}/strategies/{slug}',
headers=headers,
timeout=10
)
if response.status_code == 200:
return JSONResponse(response.json())
else:
return JSONResponse({
'status': 'error',
'message': f'Failed to fetch strategy: {response.text}'
}, status_code=response.status_code)
except requests.exceptions.RequestException as e:
return JSONResponse({
'status': 'error',
'message': f'Error connecting to jesse.trade: {str(e)}'
}, status_code=500)
@router.get("/jesse-trade/{slug}/metrics")
async def get_jesse_trade_strategy_metrics(
slug: str,
period: str = Query(...),
symbol: str = Query(...),
timeframe: str = Query(...),
authorization: Optional[str] = Header(None),
jesse_trade_token: Optional[str] = Header(None, alias="X-Jesse-Trade-Token")
) -> JSONResponse:
"""
Get metrics for a specific strategy from jesse.trade
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
headers = {}
if jesse_trade_token:
headers['Authorization'] = f'Bearer {jesse_trade_token}'
response = requests.get(
f'{JESSE_API2_URL}/strategies/{slug}/metrics',
params={'period': period, 'symbol': symbol, 'timeframe': timeframe},
headers=headers,
timeout=10
)
if response.status_code == 200:
return JSONResponse(response.json())
else:
return JSONResponse({
'status': 'error',
'message': f'Failed to fetch strategy metrics: {response.text}'
}, status_code=response.status_code)
except requests.exceptions.RequestException as e:
return JSONResponse({
'status': 'error',
'message': f'Error connecting to jesse.trade: {str(e)}'
}, status_code=500)
@router.post("/import")
async def import_strategy(
json_request: ImportStrategyRequestJson,
authorization: Optional[str] = Header(None),
jesse_trade_token: Optional[str] = Header(None, alias="X-Jesse-Trade-Token")
) -> JSONResponse:
"""
Import a strategy from jesse.trade
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
try:
# Fetch the strategy from jesse.trade
headers = {}
if jesse_trade_token:
headers['Authorization'] = f'Bearer {jesse_trade_token}'
response = requests.get(
f'{JESSE_API2_URL}/strategies/{json_request.slug}',
headers=headers,
timeout=10
)
if response.status_code != 200:
return JSONResponse({
'status': 'error',
'message': f'Failed to fetch strategy: {response.text}'
}, status_code=response.status_code)
strategy_data = response.json()
# Check if code is available
if not strategy_data.get('code'):
return JSONResponse({
'status': 'error',
'message': 'Strategy code not available. You may not have access to this strategy.'
}, status_code=403)
# Extract the Python class name from the code
code = strategy_data.get('code')
class_match = re.search(r'class\s+(\w+)', code)
if not class_match:
return JSONResponse({
'status': 'error',
'message': 'No Python class definition found in strategy code. Cannot import strategy.'
}, status_code=400)
class_name = class_match.group(1)
# Import the strategy
from jesse.services import strategy_handler
return strategy_handler.import_strategy(
name=class_name,
code=code
)
except requests.exceptions.RequestException as e:
return JSONResponse({
'status': 'error',
'message': f'Error connecting to jesse.trade: {str(e)}'
}, status_code=500)
================================================
FILE: jesse/controllers/system_controller.py
================================================
from typing import Optional
from fastapi import APIRouter, Header
from fastapi.responses import JSONResponse
from jesse.services import auth as authenticator
from jesse.services.web import FeedbackRequestJson, ReportExceptionRequestJson, HelpSearchRequestJson
from jesse.services.multiprocessing import process_manager
import jesse.helpers as jh
router = APIRouter(prefix="/system", tags=["System"])
@router.post("/feedback")
def feedback(json_request: FeedbackRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Send feedback to the Jesse team
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import jesse_trade
return jesse_trade.feedback(json_request.description, json_request.email)
@router.post("/report-exception")
def report_exception(json_request: ReportExceptionRequestJson,
authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Report an exception to the Jesse team
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services import jesse_trade
return jesse_trade.report_exception(
json_request.description,
json_request.traceback,
json_request.mode,
json_request.attach_logs,
json_request.session_id,
json_request.email,
has_live=jh.has_live_trade_plugin()
)
@router.post("/general-info")
def general_info(authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get general information about the system
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
from jesse.services.general_info import get_general_info
try:
data = get_general_info(has_live=jh.has_live_trade_plugin())
except Exception as e:
jh.error(str(e))
return JSONResponse({
'error': str(e)
}, status_code=500)
return JSONResponse(
data,
status_code=200
)
@router.post("/active-workers")
def active_workers(authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Get a list of active workers
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
return JSONResponse({
'data': list(process_manager.active_workers)
}, status_code=200)
@router.post("/help-search")
def help_search(json_request: HelpSearchRequestJson, authorization: Optional[str] = Header(None)) -> JSONResponse:
"""
Proxy endpoint for help center search to avoid CORS issues
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
import requests
from jesse.info import JESSE_API_URL
from jesse.services.auth import get_access_token
try:
url = f'{JESSE_API_URL}/help/search?item={json_request.query}'
access_token = get_access_token()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept': 'application/json, text/plain, */*'
}
if access_token:
headers['Authorization'] = f'Bearer {access_token}'
res = requests.get(url, headers=headers, timeout=10)
if res.status_code == 200:
return JSONResponse(res.json(), status_code=200)
else:
return JSONResponse({
'error': f'Search request failed with status {res.status_code}'
}, status_code=res.status_code)
except Exception as e:
return JSONResponse({
'error': str(e)
}, status_code=500)
================================================
FILE: jesse/controllers/tabs_controller.py
================================================
from fastapi import APIRouter, Header
from pydantic import BaseModel
from typing import List, Optional
from jesse.repositories import open_tab_repository
from jesse.services import auth as authenticator
router = APIRouter()
class TabsListRequest(BaseModel):
module: str
class TabsAddRequest(BaseModel):
module: str
id: str
class TabsRemoveRequest(BaseModel):
module: str
id: str
class TabsReorderRequest(BaseModel):
module: str
ids: List[str]
class TabsResponse(BaseModel):
ids: List[str]
@router.post('/tabs/list', response_model=TabsResponse)
async def list_tabs(req: TabsListRequest, authorization: Optional[str] = Header(None)):
"""
Get ordered list of open tab session IDs for a module
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session_ids = open_tab_repository.get_open_tab_session_ids(req.module)
return TabsResponse(ids=session_ids)
@router.post('/tabs/add', response_model=TabsResponse)
async def add_tab(req: TabsAddRequest, authorization: Optional[str] = Header(None)):
"""
Add a new tab (or update if exists). Returns ordered list.
For singleton modules, ensures only 1 tab exists.
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session_ids = open_tab_repository.add_open_tab(req.module, req.id)
return TabsResponse(ids=session_ids)
@router.post('/tabs/remove', response_model=TabsResponse)
async def remove_tab(req: TabsRemoveRequest, authorization: Optional[str] = Header(None)):
"""
Remove a tab and reorder remaining tabs. Returns ordered list.
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session_ids = open_tab_repository.remove_open_tab(req.module, req.id)
return TabsResponse(ids=session_ids)
@router.post('/tabs/reorder', response_model=TabsResponse)
async def reorder_tabs(req: TabsReorderRequest, authorization: Optional[str] = Header(None)):
"""
Reorder tabs to match the provided session_ids list.
For singleton modules, ensures only 1 tab exists.
"""
if not authenticator.is_valid_token(authorization):
return authenticator.unauthorized_response()
session_ids = open_tab_repository.reorder_open_tabs(req.module, req.ids)
return TabsResponse(ids=session_ids)
================================================
FILE: jesse/controllers/websocket_controller.py
================================================
from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query
from starlette.websockets import WebSocket, WebSocketDisconnect
from jesse.services import auth as authenticator
from jesse.services.ws_manager import ws_manager
import jesse.helpers as jh
router = APIRouter(tags=["WebSocket"])
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, token: str = Query(...)):
from jesse.services.env import ENV_VALUES
if not authenticator.is_valid_token(token):
return
# Use connection manager to handle this websocket
connection_id = str(id(websocket))
jh.terminal_debug(f"WebSocket {connection_id} connecting")
await ws_manager.connect(websocket)
channel_pattern = f"{ENV_VALUES['APP_PORT']}:channel:*"
# Start Redis listener if not already started
await ws_manager.start_redis_listener(channel_pattern)
try:
# Keep the connection alive and handle pong responses
while True:
message = await websocket.receive_text()
try:
data = jh.json_loads(message)
# Handle pong responses for heartbeat
if data.get('type') == 'pong':
pass
except:
pass
except WebSocketDisconnect:
jh.terminal_debug(f"WebSocket {connection_id} disconnected")
ws_manager.disconnect(websocket)
# Optionally stop Redis listener if no more clients
await ws_manager.stop_redis_listener()
except Exception as e:
jh.terminal_debug(f"WebSocket error: {str(e)}")
ws_manager.disconnect(websocket)
await ws_manager.stop_redis_listener()
================================================
FILE: jesse/enums/__init__.py
================================================
from dataclasses import dataclass
@dataclass
class sides:
BUY = 'buy'
SELL = 'sell'
@dataclass
class trade_types:
LONG = 'long'
SHORT = 'short'
@dataclass
class order_statuses:
ACTIVE = 'ACTIVE'
CANCELED = 'CANCELED'
EXECUTED = 'EXECUTED'
PARTIALLY_FILLED = 'PARTIALLY FILLED'
QUEUED = 'QUEUED'
LIQUIDATED = 'LIQUIDATED'
REJECTED = 'REJECTED'
@dataclass
class timeframes:
MINUTE_1 = '1m'
MINUTE_3 = '3m'
MINUTE_5 = '5m'
MINUTE_15 = '15m'
MINUTE_30 = '30m'
MINUTE_45 = '45m'
HOUR_1 = '1h'
HOUR_2 = '2h'
HOUR_3 = '3h'
HOUR_4 = '4h'
HOUR_6 = '6h'
HOUR_8 = '8h'
HOUR_12 = '12h'
DAY_1 = '1D'
DAY_3 = '3D'
WEEK_1 = '1W'
MONTH_1 = '1M'
@dataclass
class colors:
GREEN = 'green'
YELLOW = 'yellow'
RED = 'red'
MAGENTA = 'magenta'
BLACK = 'black'
@dataclass
class order_types:
MARKET = 'MARKET'
LIMIT = 'LIMIT'
STOP = 'STOP'
FOK = 'FOK'
STOP_LIMIT = 'STOP LIMIT'
@dataclass
class exchanges:
SANDBOX = 'Sandbox'
COINBASE_SPOT = 'Coinbase Spot'
BITFINEX_SPOT = 'Bitfinex Spot'
BINANCE_SPOT = 'Binance Spot'
BINANCE_US_SPOT = 'Binance US Spot'
BINANCE_PERPETUAL_FUTURES = 'Binance Perpetual Futures'
BINANCE_PERPETUAL_FUTURES_TESTNET = 'Binance Perpetual Futures Testnet'
BYBIT_USDT_PERPETUAL = 'Bybit USDT Perpetual'
BYBIT_USDC_PERPETUAL = 'Bybit USDC Perpetual'
BYBIT_USDT_PERPETUAL_TESTNET = 'Bybit USDT Perpetual Testnet'
BYBIT_USDC_PERPETUAL_TESTNET = 'Bybit USDC Perpetual Testnet'
BYBIT_SPOT = 'Bybit Spot'
BYBIT_SPOT_TESTNET = 'Bybit Spot Testnet'
FTX_PERPETUAL_FUTURES = 'FTX Perpetual Futures'
FTX_SPOT = 'FTX Spot'
FTX_US_SPOT = 'FTX US Spot'
BITGET_SPOT = 'Bitget Spot'
BITGET_USDT_PERPETUAL = 'Bitget USDT Perpetual'
BITGET_USDT_PERPETUAL_TESTNET = 'Bitget USDT Perpetual Testnet'
DYDX_PERPETUAL = "Dydx Perpetual"
DYDX_PERPETUAL_TESTNET = "Dydx Perpetual Testnet"
APEX_OMNI_PERPETUAL_TESTNET = 'Apex Omni Perpetual Testnet'
APEX_OMNI_PERPETUAL = 'Apex Omni Perpetual'
GATE_USDT_PERPETUAL = 'Gate USDT Perpetual'
GATE_SPOT = 'Gate Spot'
HYPERLIQUID_PERPETUAL = 'Hyperliquid Perpetual'
HYPERLIQUID_PERPETUAL_TESTNET = 'Hyperliquid Perpetual Testnet'
@dataclass
class migration_actions:
ADD = 'add'
DROP = 'drop'
RENAME = 'rename'
MODIFY_TYPE = 'modify_type'
ALLOW_NULL = 'allow_null'
DENY_NULL = 'deny_null'
ADD_INDEX = 'add_index'
DROP_INDEX = 'drop_index'
@dataclass
class order_submitted_via:
STOP_LOSS = 'stop-loss'
TAKE_PROFIT = 'take-profit'
@dataclass
class live_session_statuses:
DRAFT = 'draft'
STARTING = 'starting'
RUNNING = 'running'
STOPPED = 'stopped'
TERMINATED = 'terminated'
@dataclass
class live_session_modes:
LIVETRADE = 'livetrade'
PAPERTRADE = 'papertrade'
================================================
FILE: jesse/exceptions/__init__.py
================================================
class EmptyPosition(Exception):
pass
class OpenPositionError(Exception):
pass
class OrderNotAllowed(Exception):
pass
class ConflictingRules(Exception):
pass
class InvalidStrategy(Exception):
pass
class CandleNotFoundInDatabase(Exception):
pass
class CandleNotFoundInExchange(Exception):
pass
class SymbolNotFound(Exception):
pass
class RouteNotFound(Exception):
def __init__(self, symbol, timeframe):
message = f"Data route is required but missing: symbol='{symbol}', timeframe='{timeframe}'"
super().__init__(message)
class InvalidRoutes(Exception):
pass
class ExchangeInMaintenance(Exception):
pass
class ExchangeNotResponding(Exception):
pass
class ExchangeRejectedOrder(Exception):
pass
class ExchangeRejectedLeverageNumber(Exception):
pass
class ExchangeOrderNotFound(Exception):
pass
class InvalidShape(Exception):
pass
class InvalidConfig(Exception):
pass
class InvalidTimeframe(Exception):
pass
class InvalidSymbol(Exception):
pass
class NegativeBalance(Exception):
pass
class InsufficientMargin(Exception):
pass
class InsufficientBalance(Exception):
pass
class Termination(Exception):
pass
class InvalidExchangeApiKeys(Exception):
pass
class ExchangeError(Exception):
pass
class NotSupportedError(Exception):
pass
class CandlesNotFound(Exception):
pass
class InvalidDateRange(Exception):
pass
================================================
FILE: jesse/exchanges/__init__.py
================================================
from .sandbox.Sandbox import Sandbox
================================================
FILE: jesse/exchanges/exchange.py
================================================
from abc import ABC, abstractmethod
from typing import Union
from jesse.models.Order import Order
class Exchange(ABC):
"""
The interface that every Exchange driver has to implement
"""
@abstractmethod
def market_order(self, symbol: str, qty: float, current_price: float, side: str, reduce_only: bool) -> Order:
pass
@abstractmethod
def limit_order(self, symbol: str, qty: float, price: float, side: str, reduce_only: bool) -> Order:
pass
@abstractmethod
def stop_order(self, symbol: str, qty: float, price: float, side: str, reduce_only: bool) -> Order:
pass
@abstractmethod
def cancel_all_orders(self, symbol: str) -> None:
pass
@abstractmethod
def cancel_order(self, symbol: str, order_id: str) -> None:
pass
@abstractmethod
def _fetch_precisions(self) -> None:
pass
================================================
FILE: jesse/exchanges/sandbox/Sandbox.py
================================================
from jesse.models.Order import Order
import jesse.helpers as jh
from typing import List
from jesse.enums import order_types
from jesse.exchanges.exchange import Exchange
from jesse.store import store
from jesse.services import order_service
class Sandbox(Exchange):
def __init__(self, name='Sandbox'):
super().__init__()
self.name = name
def market_order(self, symbol: str, qty: float, current_price: float, side: str, reduce_only: bool) -> Order:
return order_service.create_order({
'id': jh.generate_unique_id(),
'symbol': symbol,
'exchange': self.name,
'side': side,
'type': order_types.MARKET,
'reduce_only': reduce_only,
'qty': jh.prepare_qty(qty, side),
'price': current_price,
})
def limit_order(self, symbol: str, qty: float, price: float, side: str, reduce_only: bool) -> Order:
return order_service.create_order({
'id': jh.generate_unique_id(),
'symbol': symbol,
'exchange': self.name,
'side': side,
'type': order_types.LIMIT,
'reduce_only': reduce_only,
'qty': jh.prepare_qty(qty, side),
'price': price,
})
def stop_order(self, symbol: str, qty: float, price: float, side: str, reduce_only: bool) -> Order:
return order_service.create_order({
'id': jh.generate_unique_id(),
'symbol': symbol,
'exchange': self.name,
'side': side,
'type': order_types.STOP,
'reduce_only': reduce_only,
'qty': jh.prepare_qty(qty, side),
'price': price,
})
def cancel_all_orders(self, symbol: str) -> List[Order]:
orders: list[Order] = store.orders.get_active_orders(self.name, symbol)
canceled_orders: List[Order] = []
for o in orders:
order_service.cancel_order(o)
canceled_orders.append(o)
if not jh.is_unit_testing():
store.orders.storage[f'{self.name}-{symbol}'].clear()
return canceled_orders
def cancel_order(self, symbol: str, order_id: str) -> None:
order = store.orders.get_order_by_id(self.name, symbol, order_id)
order_service.cancel_order(order)
def _fetch_precisions(self) -> None:
pass
================================================
FILE: jesse/exchanges/sandbox/__init__.py
================================================
from .Sandbox import Sandbox
================================================
FILE: jesse/factories/__init__.py
================================================
from .candle_factory import fake_candle
from .candle_factory import range_candles
from .candle_factory import candles_from_close_prices
from .order_factory import fake_order
================================================
FILE: jesse/factories/candle_factory.py
================================================
from random import randint
from typing import Union
import numpy as np
# 2021-01-01T00:00:00+00:00
first_timestamp = 1609459080000
open_price = randint(40, 100)
close_price = randint(open_price, 110) if randint(0, 1) else randint(
30, open_price)
max_price = max(open_price, close_price)
high_price = max_price if randint(0, 1) else randint(max_price, max_price + 10)
min_price = min(open_price, close_price)
low_price = min_price if randint(0, 1) else randint(min_price, min_price + 10)
def range_candles(count: int) -> np.ndarray:
"""
Generates a range of candles with random values.
"""
fake_candle(reset=True)
arr = np.zeros((count, 6))
for i in range(count):
arr[i] = fake_candle()
return arr
def candles_from_close_prices(prices: Union[list, range]) -> np.ndarray:
"""
Generates a range of candles from a list of close prices.
The first candle has the timestamp of "2021-01-01T00:00:00+00:00"
"""
fake_candle(reset=True)
global first_timestamp
arr = []
prev_p = np.nan
for p in prices:
# first prev_p
if np.isnan(prev_p):
prev_p = p - 0.5
first_timestamp += 60000
open_p = prev_p
close_p = p
high_p = max(open_p, close_p)
low_p = min(open_p, close_p)
vol = randint(0, 200)
arr.append([first_timestamp, open_p, close_p, high_p, low_p, vol])
# save prev_p for next candle
prev_p = p
return np.array(arr)
def fake_candle(attributes: dict = None, reset: bool = False) -> np.ndarray:
global first_timestamp
global open_price
global close_price
global max_price
global high_price
global min_price
global low_price
if reset:
first_timestamp = 1609459080000
open_price = randint(40, 100)
close_price = randint(open_price, 110)
high_price = max(open_price, close_price)
low_price = min(open_price, close_price)
if attributes is None:
attributes = {}
first_timestamp += 60000
open_price = close_price
close_price += randint(1, 8)
high_price = max(open_price, close_price)
low_price = min(open_price - 1, close_price)
volume = randint(1, 100)
timestamp = first_timestamp
return np.array([
attributes.get('timestamp', timestamp),
attributes.get('open', open_price),
attributes.get('close', close_price),
attributes.get('high', high_price),
attributes.get('low', low_price),
attributes.get('volume', volume)
], dtype=np.float64)
================================================
FILE: jesse/factories/order_factory.py
================================================
from random import randint
import jesse.helpers as jh
from jesse.enums import exchanges, sides, order_types, order_statuses
from jesse.models.Order import Order
from jesse.services import order_service
first_timestamp = 1552309186171
def fake_order(attributes: dict = None) -> Order:
"""
:param attributes:
:return:
"""
if attributes is None:
attributes = {}
global first_timestamp
first_timestamp += 60000
exchange = exchanges.SANDBOX
symbol = 'BTC-USD'
side = sides.BUY
order_type = order_types.LIMIT
price = randint(40, 100)
qty = randint(1, 10)
status = order_statuses.ACTIVE
created_at = first_timestamp
return Order({
"id": jh.generate_unique_id(),
'symbol': attributes.get('symbol', symbol),
'exchange': attributes.get('exchange', exchange),
'side': attributes.get('side', side),
'type': attributes.get('type', order_type),
'qty': attributes.get('qty', qty),
'price': attributes.get('price', price),
'status': attributes.get('status', status),
'created_at': attributes.get('created_at', created_at),
})
================================================
FILE: jesse/helpers.py
================================================
import hashlib
from datetime import datetime
import math
import os
import gzip
import json
from functools import lru_cache
import random
import string
import sys
import uuid
from typing import List, Tuple, Union, Any, Optional
from pprint import pprint
import arrow
import click
import numpy as np
import base64
from jesse.constants import CANDLE_SOURCE_MAPPING
from jesse.constants import TIMEFRAME_PRIORITY
from jesse.constants import SUPPORTED_COLORS
from jesse.enums import timeframes
CACHED_CONFIG = dict()
def app_currency() -> str:
from jesse.info import exchange_info
from jesse.routes import router
if router.routes[0].exchange in exchange_info and 'settlement_currency' in exchange_info[router.routes[0].exchange]:
return exchange_info[router.routes[0].exchange]['settlement_currency']
else:
return quote_asset(router.routes[0].symbol)
@lru_cache
def app_mode() -> str:
from jesse.config import config
return config['app']['trading_mode']
def arrow_to_timestamp(arrow_time: arrow.arrow.Arrow) -> int:
return arrow_time.int_timestamp * 1000
def base_asset(symbol: str) -> str:
return symbol.split('-')[0]
def binary_search(arr: list, item) -> int:
"""
performs a simple binary search on a sorted list
:param arr: list
:param item:
:return: int
"""
from bisect import bisect_left
i = bisect_left(arr, item)
if i != len(arr) and arr[i] == item:
return i
else:
return -1
def class_iter(Class):
return (value for variable, value in vars(Class).items() if
not callable(getattr(Class, variable)) and not variable.startswith("__"))
def clean_orderbook_list(arr) -> List[List[float]]:
return [[float(i[0]), float(i[1])] for i in arr]
def color(msg_text: str, msg_color: str) -> str:
if not msg_text:
return ''
if msg_color in SUPPORTED_COLORS:
return click.style(msg_text, fg=msg_color)
if msg_color == 'gray':
return click.style(msg_text, fg='white')
raise ValueError('unsupported color')
def convert_number(old_max: float, old_min: float, new_max: float, new_min: float, old_value: float) -> float:
"""
convert a number from one range (ex 40-119) to another
range (ex 0-30) while keeping the ratio.
"""
# validation
if old_value > old_max or old_value < old_min:
raise ValueError(f'old_value:{old_value} must be within the range. {old_min}-{old_max}')
old_range = (old_max - old_min)
new_range = (new_max - new_min)
return (((old_value - old_min) * new_range) / old_range) + new_min
def dashless_symbol(symbol: str) -> str:
return symbol.replace("-", "")
def dashy_symbol(symbol: str) -> str:
if '-' in symbol:
return symbol
from jesse.config import config
for s in config['app']['considering_symbols']:
if dashless_symbol(s) == symbol:
return s
suffixes = [
'UST', 'FDUSD', 'TUSD', 'EUT', 'EUR', 'GBP', 'JPY', 'MIM', 'TRY'
]
for suffix in suffixes:
if symbol.endswith(suffix):
return f"{symbol[:-len(suffix)]}-{suffix}"
if "USD" in symbol[-4:]: # Only look at the last 4 letters
idx = symbol.rfind("USD")
return f"{symbol[:idx]}-{symbol[idx:]}"
return f"{symbol[:3]}-{symbol[3:]}"
def underline_to_dashy_symbol(symbol: str) -> str:
return symbol.replace('_', '-')
def dashy_to_underline(symbol: str) -> str:
return symbol.replace('-', '_')
def get_base_asset(symbol: str) -> str:
return symbol.split('-')[0]
def get_quote_asset(symbol: str) -> str:
return symbol.split('-')[1]
def date_diff_in_days(date1: arrow.arrow.Arrow, date2: arrow.arrow.Arrow) -> int:
if type(date1) is not arrow.arrow.Arrow or type(
date2) is not arrow.arrow.Arrow:
raise TypeError('dates must be Arrow instances')
dif = date2 - date1
return abs(dif.days)
def date_to_timestamp(date: str) -> int:
"""
converts date string into timestamp. "2015-08-01" => 1438387200000
:param date: str
:return: int
"""
return arrow_to_timestamp(arrow.get(date, 'YYYY-MM-DD'))
def dna_to_hp(strategy_hp, dna: str):
# First, try to decode as Base64
try:
import base64
import json
# Try to decode the DNA as base64
decoded_bytes = base64.b64decode(dna)
# Try to parse as JSON
decoded_json = json.loads(decoded_bytes.decode('utf-8'))
# If successful, the decoded JSON should be the hyperparameters
return decoded_json
except (ValueError, base64.binascii.Error, json.JSONDecodeError):
# If decoding fails, use the legacy method
hp = {}
for gene, h in zip(dna, strategy_hp):
if h['type'] is int:
decoded_gene = int(
round(
convert_number(119, 40, h['max'], h['min'], ord(gene))
)
)
elif h['type'] is float:
decoded_gene = convert_number(119, 40, h['max'], h['min'], ord(gene))
else:
raise TypeError('Only int and float types are implemented')
hp[h['name']] = decoded_gene
return hp
def dump_exception() -> None:
"""
a useful debugging helper
"""
import traceback
print(traceback.format_exc())
terminate_app()
def estimate_average_price(order_qty: float, order_price: float, current_qty: float,
current_entry_price: float) -> float:
"""Estimates the new entry price for the position.
This is used after having a new order and updating the currently holding position.
Arguments:
order_qty {float} -- qty of the new order
order_price {float} -- price of the new order
current_qty {float} -- current(pre-calculation) qty
current_entry_price {float} -- current(pre-calculation) entry price
Returns:
float -- the new/averaged entry price
"""
return (abs(order_qty) * order_price + abs(current_qty) *
current_entry_price) / (abs(order_qty) + abs(current_qty))
def estimate_PNL(qty: float, entry_price: float, exit_price: float, trade_type: str, trading_fee: float = 0) -> float:
qty = abs(qty)
profit = qty * (exit_price - entry_price)
if trade_type == 'short':
profit *= -1
fee = trading_fee * qty * (entry_price + exit_price)
return profit - fee
def estimate_PNL_percentage(qty: float, entry_price: float, exit_price: float, trade_type: str) -> float:
qty = abs(qty)
profit = qty * (exit_price - entry_price)
if trade_type == 'short':
profit *= -1
return (profit / (qty * entry_price)) * 100
def file_exists(path: str) -> bool:
return os.path.isfile(path)
def clear_file(path: str) -> None:
with open(path, 'w') as f:
f.write('')
def make_directory(path: str) -> None:
if not os.path.exists(path):
os.makedirs(path)
def floor_with_precision(num: float, precision: int = 0) -> float:
temp = 10 ** precision
return math.floor(num * temp) / temp
def format_currency(num: float) -> str:
return f'{num:,}'
def format_price(price: float) -> str:
"""
Formats the price for logging.
- If abs(price) is >= 1, it will be truncated to 2 decimal places.
- If abs(price) is < 1, it will be truncated to 5 significant digits.
"""
if price is None:
return ""
if price == 0:
return "0.00"
# to handle scientific notation
price_str = f'{price:.20f}'
if abs(price) >= 1:
if '.' not in price_str:
return f"{price:.2f}"
integer_part, decimal_part = price_str.split('.')
return f"{integer_part}.{decimal_part[:2]}"
# For numbers between -1 and 1
# find sign
sign = ''
if price < 0:
sign = '-'
price_str = f'{abs(price):.20f}'
decimal_part = price_str.split('.')[1]
first_non_zero_index = -1
for i, digit in enumerate(decimal_part):
if digit != '0':
first_non_zero_index = i
break
# This case should ideally not be hit if price is not 0, but as a safeguard:
if first_non_zero_index == -1:
return "0.00"
# Use 5 significant digits for all values below 1
end_index = first_non_zero_index + 5
formatted_decimal = decimal_part[:end_index]
return f"{sign}0.{formatted_decimal}"
def generate_unique_id() -> str:
return str(uuid.uuid4())
def generate_short_unique_id() -> str:
return str(uuid.uuid4())[:22]
def get_arrow(timestamp: int) -> arrow.arrow.Arrow:
return timestamp_to_arrow(timestamp)
def get_candle_source(candles: np.ndarray, source_type: str = "close") -> np.ndarray:
"""
Returns the candles corresponding to the selected type.
"""
try:
return CANDLE_SOURCE_MAPPING[source_type](candles)
except KeyError:
raise ValueError(f"Source type '{source_type}' not recognised")
def get_config(keys: str, default: Any = None) -> Any:
"""
Gets keys as a single string separated with "." and returns value.
Also accepts a default value so that the app would work even if
the required config value is missing from config.py file.
Example: get_config('env.logging.order_submission', True)
:param keys: str
:param default: None
:return:
"""
if not str:
raise ValueError('keys string cannot be empty')
if is_unit_testing() or keys not in CACHED_CONFIG:
if os.environ.get(keys.upper().replace(".", "_").replace(" ", "_")) is not None:
CACHED_CONFIG[keys] = os.environ.get(keys.upper().replace(".", "_").replace(" ", "_"))
else:
from functools import reduce
from jesse.config import config
CACHED_CONFIG[keys] = reduce(lambda d, k: d.get(k, default) if isinstance(d, dict) else default,
keys.split("."), config)
return CACHED_CONFIG[keys]
def get_store():
from jesse.store import store
return store
def get_strategy_class(strategy_name: str):
from pydoc import locate
import os
import re
if not is_unit_testing():
strategy_class = locate(f'strategies.{strategy_name}.{strategy_name}')
if strategy_class is None:
# Try to find any class that inherits from Strategy in the module
module = locate(f'strategies.{strategy_name}')
if module:
strategy_file = os.path.join('strategies', strategy_name, '__init__.py')
if os.path.exists(strategy_file):
with open(strategy_file, 'r') as f:
content = f.read()
# Find the class definition
class_pattern = r'class\s+(\w+)'
match = re.search(class_pattern, content)
if match:
old_class_name = match.group(1)
if old_class_name != strategy_name:
# Replace the class name in the file
new_content = re.sub(f'class {old_class_name}', f'class {strategy_name}', content)
with open(strategy_file, 'w') as f:
f.write(new_content)
# Reload the module to get the updated class
import importlib
module_path = f'strategies.{strategy_name}'
if module_path in sys.modules:
del sys.modules[module_path]
strategy_class = locate(f'strategies.{strategy_name}.{strategy_name}')
return strategy_class
for attr_name in dir(module):
attr = getattr(module, attr_name)
if isinstance(attr, type) and attr.__module__ == f'strategies.{strategy_name}':
# Create a new class with the correct name as fallback
strategy_class = type(strategy_name, (attr,), {})
break
return strategy_class
path = sys.path[0]
# live plugin
if path.endswith('jesse-live'):
strategy_dir = f'tests.strategies.{strategy_name}.{strategy_name}'
# main framework
else:
strategy_dir = f'jesse.strategies.{strategy_name}.{strategy_name}'
return locate(strategy_dir)
def insecure_hash(msg: str) -> str:
return hashlib.md5(msg.encode()).hexdigest()
def insert_list(index: int, item, arr: list) -> list:
"""
helper to insert an item in a Python List without removing the item
"""
if index == -1:
return arr + [item]
return arr[:index] + [item] + arr[index:]
def is_backtesting() -> bool:
from jesse.config import config
return config['app']['trading_mode'] == 'backtest'
def is_debuggable(debug_item) -> bool:
from jesse.config import config
try:
return is_debugging() and config['env']['logging'][debug_item]
except KeyError:
return True
def is_debugging() -> bool:
from jesse.config import config
return config['app']['debug_mode']
def is_importing_candles() -> bool:
from jesse.config import config
return config['app']['trading_mode'] == 'candles'
@lru_cache
def is_live() -> bool:
return is_livetrading() or is_paper_trading()
@lru_cache
def is_livetrading() -> bool:
from jesse.config import config
return config['app']['trading_mode'] == 'livetrade'
@lru_cache
def is_optimizing() -> bool:
from jesse.config import config
return config['app']['trading_mode'] == 'optimize'
@lru_cache
def is_paper_trading() -> bool:
from jesse.config import config
return config['app']['trading_mode'] == 'papertrade'
def is_unit_testing() -> bool:
"""Returns True if the code is running by running pytest or PyCharm's test runner, False otherwise."""
# Check if the PYTEST_CURRENT_TEST environment variable is set.
if os.environ.get("PYTEST_CURRENT_TEST"):
return True
# Check if the code is being executed from the pytest command-line tool.
script_name = os.path.basename(sys.argv[0])
if script_name in ["pytest", "py.test"]:
return True
# Otherwise, the code is not running by running pytest or PyCharm's test runner.
return False
def is_valid_uuid(uuid_to_test: str, version: int = 4) -> bool:
try:
uuid_obj = uuid.UUID(uuid_to_test, version=version)
except ValueError:
return False
return str(uuid_obj) == uuid_to_test
def key(exchange: str, symbol: str, timeframe: str = None):
if timeframe is None:
return f'{exchange}-{symbol}'
return f'{exchange}-{symbol}-{timeframe}'
def max_timeframe(timeframes_list: list) -> str:
times = set(timeframes_list)
for tf in TIMEFRAME_PRIORITY:
if tf in times:
return tf
return timeframes.MINUTE_1
def normalize(x: float, x_min: float, x_max: float) -> float:
"""
Rescaling data to have values between 0 and 1
"""
return (x - x_min) / (x_max - x_min)
def now(force_fresh=False) -> int:
"""
Always returns the current time in milliseconds but rounds time in matter of seconds
"""
return int(now_to_timestamp(force_fresh))
def now_to_timestamp(force_fresh=False) -> int:
if not force_fresh and (not (is_live() or is_importing_candles())):
from jesse.store import store
return store.app.time
return arrow.utcnow().int_timestamp * 1000
# for use with peewee
def now_to_datetime():
return arrow.utcnow().datetime
def current_1m_candle_timestamp():
return arrow.utcnow().floor('minute').int_timestamp * 1000
def np_ffill(arr: np.ndarray, axis: int = 0) -> np.ndarray:
idx_shape = tuple([slice(None)] + [np.newaxis] * (len(arr.shape) - axis - 1))
idx = np.where(~np.isnan(arr), np.arange(arr.shape[axis])[idx_shape], 0)
np.maximum.accumulate(idx, axis=axis, out=idx)
slc = [
np.arange(k)[
tuple(
slice(None) if dim == i else np.newaxis
for dim in range(len(arr.shape))
)
]
for i, k in enumerate(arr.shape)
]
slc[axis] = idx
return arr[tuple(slc)]
def np_shift(arr: np.ndarray, num: int, fill_value=0) -> np.ndarray:
result = np.empty_like(arr)
if num > 0:
result[:num] = fill_value
result[num:] = arr[:-num]
elif num < 0:
result[num:] = fill_value
result[:num] = arr[-num:]
else:
result[:] = arr
return result
@lru_cache
def opposite_side(s: str) -> str:
from jesse.enums import sides
if s == sides.BUY:
return sides.SELL
elif s == sides.SELL:
return sides.BUY
else:
raise ValueError(f'{s} is not a valid input for side')
@lru_cache
def opposite_type(t: str) -> str:
from jesse.enums import trade_types
if t == trade_types.LONG:
return trade_types.SHORT
if t == trade_types.SHORT:
return trade_types.LONG
raise ValueError('unsupported type')
def orderbook_insertion_index_search(arr, target: int, ascending: bool = True) -> Tuple[bool, int]:
target = target[0]
lower = 0
upper = len(arr)
while lower < upper:
x = lower + (upper - lower) // 2
val = arr[x][0]
if ascending:
if target == val:
return True, x
elif target > val:
if lower == x:
return False, lower + 1
lower = x
elif target < val:
if lower == x:
return False, lower
upper = x
elif target == val:
return True, x
elif target < val:
if lower == x:
return False, lower + 1
lower = x
elif target > val:
if lower == x:
return False, lower
upper = x
def orderbook_trim_price(p: float, ascending: bool, unit: float) -> float:
if ascending:
trimmed = np.ceil(p / unit) * unit
if math.log10(unit) < 0:
trimmed = round(trimmed, abs(int(math.log10(unit))))
return p if trimmed == p + unit else trimmed
trimmed = np.ceil(p / unit) * unit - unit
if math.log10(unit) < 0:
trimmed = round(trimmed, abs(int(math.log10(unit))))
return p if trimmed == p - unit else trimmed
def prepare_qty(qty: float, side: str) -> float:
if side.lower() in ('sell', 'short'):
return -abs(qty)
elif side.lower() in ('buy', 'long'):
return abs(qty)
elif side.lower() == 'close':
return 0.0
else:
raise ValueError(f'{side} is not a valid input')
def python_version() -> tuple:
return sys.version_info[:2]
def quote_asset(symbol: str) -> str:
try:
return symbol.split('-')[1]
except IndexError:
from jesse.exceptions import InvalidRoutes
raise InvalidRoutes(f"The symbol format is incorrect. Correct example: 'BTC-USDT'. Yours is '{symbol}'")
def random_str(num_characters: int = 8) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(num_characters))
def readable_duration(seconds: int, granularity: int = 2) -> str:
intervals = (
('weeks', 604800), # 60 * 60 * 24 * 7
('days', 86400), # 60 * 60 * 24
('hours', 3600), # 60 * 60
('minutes', 60),
('seconds', 1),
)
result = []
seconds = int(seconds)
for name, count in intervals:
value = seconds // count
if value:
seconds -= value * count
if value == 1:
name = name.rstrip('s')
result.append(f"{value} {name}")
return ', '.join(result[:granularity])
def relative_to_absolute(path: str) -> str:
return os.path.abspath(path)
def round_or_none(x: Union[float, None], digits: int = 0) -> Optional[float]:
"""
Rounds a number to a certain number of digits or returns None if the number is None
"""
if x is None:
return None
return round(x, digits)
def round_price_for_live_mode(price, precision: int) -> Union[float, np.ndarray]:
"""
Rounds price(s) based on exchange requirements
:param price: float
:param precision: int
:return: float | nd.array
"""
return np.round(price, precision)
def round_qty_for_live_mode(roundable_qty: float, precision: int) -> Union[float, np.ndarray]:
"""
Rounds qty(s) based on exchange requirements
:param roundable_qty: float | nd.array
:param precision: int
:return: float | nd.array
"""
input_type = type(roundable_qty)
# if roundable_qty is a scalar, convert to nd.array
if not isinstance(roundable_qty, np.ndarray):
roundable_qty = np.array([roundable_qty])
# for qty rounding down is important to prevent InsufficenMargin
rounded = round_decimals_down(roundable_qty, precision)
for index, q in enumerate(rounded):
# if the rounded value is 0, make it the minimum possible value
if q == 0.0:
# if the precision is bigger or equal 0, (for numbers like 2, 0.2, 0.02)
if precision >= 0:
rounded[index] = 1 / 10 ** precision
else: # for numbers like 20, 200, 2000
raise ValueError('qty is too small')
if input_type in [float, np.float64]:
return float(rounded[0])
return rounded
def round_decimals_down(number: Union[np.ndarray, float], decimals: int = 2) -> float:
"""
Returns a value rounded down to a specific number of decimal places.
"""
if not isinstance(decimals, int):
raise TypeError("decimal places must be an integer")
elif decimals == 0:
return np.floor(number)
elif decimals > 0:
factor = 10 ** decimals
return np.floor(number * factor) / factor
elif decimals < 0:
# for example, for decimals = -2, we want to round down to the nearest 100 if the number is 1234, we want to return 1200:
factor = 10 ** (decimals * -1)
return np.floor(number / factor) * factor
def is_almost_equal(a: float, b: float, tolerance: float = 1e-8) -> bool:
"""
Compares two floating point values with a small tolerance to account for floating point precision issues.
:param a: First float value to compare
:param b: Second float value to compare
:param tolerance: The tolerance level for the comparison (default: 1e-8)
:return: bool - True if the difference between a and b is less than or equal to the tolerance
"""
# Check if both are None, which means they're equal
if a is None and b is None:
return True
# Check if only one is None, which means they're not equal
if a is None or b is None:
return False
# Check for exact equality first (optimizes for common case)
if a == b:
return True
# For values very close to zero, use absolute tolerance
if abs(a) < tolerance and abs(b) < tolerance:
return abs(a - b) <= tolerance
# For non-zero values, use relative tolerance
return abs((a - b) / max(abs(a), abs(b))) <= tolerance
def same_length(bigger: np.ndarray, shorter: np.ndarray) -> np.ndarray:
return np.concatenate((np.full((bigger.shape[0] - shorter.shape[0]), np.nan), shorter))
def secure_hash(msg: str) -> str:
return hashlib.sha256(msg.encode()).hexdigest()
def should_execute_silently() -> bool:
return is_optimizing() or is_unit_testing()
@lru_cache
def side_to_type(s: str) -> str:
from jesse.enums import trade_types, sides
# make sure string is lowercase
s = s.lower()
if s == sides.BUY:
return trade_types.LONG
if s == sides.SELL:
return trade_types.SHORT
raise ValueError
def string_after_character(s: str, character: str) -> str:
try:
return s.split(character, 1)[1]
except IndexError:
return None
def slice_candles(candles: np.ndarray, sequential: bool) -> np.ndarray:
warmup_candles_num = get_config('env.data.warmup_candles_num', 240)
if not sequential and candles.shape[0] > warmup_candles_num:
candles = candles[-warmup_candles_num:]
return candles
def style(msg_text: str, msg_style: str) -> str:
if msg_style is None:
return msg_text
if msg_style.lower() in ['bold', 'b']:
return click.style(msg_text, bold=True)
if msg_style.lower() in ['underline', 'u']:
return click.style(msg_text, underline=True)
raise ValueError('unsupported style')
def terminate_app() -> None:
# close the database
from jesse.services.db import database
database.close_connection()
# disconnect python from the OS
os._exit(1)
def error(msg: str, force_print: bool = False) -> None:
# send notifications if it's a live session
if is_live():
from jesse.services import logger
logger.error(msg)
if force_print:
_print_error(msg)
else:
_print_error(msg)
def _print_error(msg: str) -> None:
print('\n')
print(color('========== critical error =========='.upper(), 'red'))
print(color(msg, 'red'))
print(color('====================================', 'red'))
def timestamp_to_arrow(timestamp: int) -> arrow.arrow.Arrow:
return arrow.get(timestamp / 1000)
def timestamp_to_date(timestamp: int) -> str:
return str(arrow.get(timestamp / 1000))[:10]
def timestamp_to_time(timestamp: int) -> str:
return str(arrow.get(timestamp / 1000))
def timestamp_to_iso8601(timestamp: int) -> str:
# example: 1609804800000 => '2021-01-05T00:00:00.000Z'
return arrow.get(timestamp / 1000).isoformat()
def iso8601_to_timestamp(iso8601: str) -> int:
# example: '2021-01-05T00:00:00.000Z' -> 1609740800000
return int(arrow.get(iso8601, 'YYYY-MM-DDTHH:mm:ss.SSSZ').datetime.timestamp()) * 1000
def today_to_timestamp() -> int:
"""
returns today's (beginning) timestamp
:return: int
"""
return arrow.utcnow().floor('day').int_timestamp * 1000
@lru_cache
def type_to_side(t: str) -> str:
from jesse.enums import trade_types, sides
if t == trade_types.LONG:
return sides.BUY
if t == trade_types.SHORT:
return sides.SELL
raise ValueError(f'unsupported type: "{t}". Only "long" and "short" are supported.')
def unique_list(arr) -> list:
"""
returns a unique version of the list while keeping its order
:param arr: list | tuple
:return: list
"""
seen = set()
seen_add = seen.add
return [x for x in arr if not (x in seen or seen_add(x))]
def closing_side(position_type: str) -> str:
if position_type.lower() == 'long':
return 'sell'
elif position_type.lower() == 'short':
return 'buy'
else:
raise ValueError(f'Value entered for position_type ({position_type}) is not valid')
def merge_dicts(d1: dict, d2: dict) -> dict:
"""
Merges nested dictionaries
:param d1: dict
:param d2: dict
:return: dict
"""
def inner(dict1, dict2):
for k in set(dict1.keys()).union(dict2.keys()):
if k in dict1 and k in dict2:
if isinstance(dict1[k], dict) and isinstance(dict2[k], dict):
yield k, dict(merge_dicts(dict1[k], dict2[k]))
else:
yield k, dict2[k]
elif k in dict1:
yield k, dict1[k]
else:
yield k, dict2[k]
return dict(inner(d1, d2))
def computer_name():
import platform
return platform.node()
def validate_response(response):
if response.status_code != 200:
err_msg = f"[{response.status_code}]: {response.json()['message']}\nPlease contact us at support@jesse.trade if this is unexpected."
if response.status_code not in [401, 403]:
raise ConnectionError(err_msg)
error(err_msg, force_print=True)
terminate_app()
def get_session_id():
from jesse.store import store
if store.app.session_id == '':
store.app.session_id = generate_unique_id()
return store.app.session_id
def get_pid():
return os.getpid()
def is_jesse_project():
ls = os.listdir('.')
return 'strategies' in ls and 'storage' in ls
def dd(item):
"""
Dump and Die but pretty: used for debugging when developing Jesse
"""
dump(item)
terminate_app()
def dump(*item):
"""
Dump object in pretty format: used for debugging when developing Jesse
"""
if len(item) == 1:
item = item[0]
print(
color('\n========= Debugging Value =========='.upper(), 'yellow')
)
pprint(item)
print(
color('====================================\n', 'yellow')
)
def debug(*item):
"""
Used for debugging when developing Jesse. Prints the item in pretty format in both
the terminal and the log file.
"""
if len(item) == 1:
dump(f"==> {item[0]}")
else:
dump(f"==> {', '.join(str(x) for x in item)}")
from jesse.services import logger
if len(item) == 1:
logger.info(f"==> {item[0]}")
else:
logger.info(f"==> {', '.join(str(x) for x in item)}")
def terminal_debug(*item):
"""
Used for debugging when developing Jesse. Prints the item with timestamp in the
terminal only (not logged to file). Uses local timezone.
"""
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if len(item) == 1:
dump(f"[{timestamp}] ==> {item[0]}")
else:
dump(f"[{timestamp}] ==> {', '.join(str(x) for x in item)}")
def float_or_none(item):
"""
Return the float of the value if it's not None
"""
if item is None or item == '':
return None
else:
return float(item)
def str_or_none(item, encoding='utf-8'):
"""
Return the str of the value if it's not None
"""
if item is None:
return None
else:
# return item if it's str, if not, decode it using encoding
if isinstance(item, str):
return item
if isinstance(item, np.float64):
return str(item)
try:
return str(item, encoding)
except TypeError:
return str(item)
def cpu_cores_count():
from multiprocessing import cpu_count
return cpu_count()
# a function that converts name to env_name. Example: 'Testnet Binance Futures' into 'TESTNET_BINANCE_FUTURES'
def convert_to_env_name(name: str) -> str:
return name.replace(' ', '_').upper()
def is_notebook():
try:
shell = get_ipython().__class__.__name__
# Jupyter notebook or qtconsole
if shell == 'ZMQInteractiveShell':
return True
elif shell == 'TerminalInteractiveShell':
# Terminal running IPython
return False
else:
# Other type (?)
return False
except NameError:
# Probably standard Python interpreter
return False
def get_os() -> str:
import platform
if platform.system() == 'Darwin':
return 'mac'
elif platform.system() == 'Linux':
return 'linux'
elif platform.system() == 'Windows':
return 'windows'
else:
raise NotImplementedError(f'Unsupported OS: "{platform.system()}"')
# a function that returns boolean whether or not the code is being executed inside a docker container
def is_docker() -> bool:
import os
return os.path.exists('/.dockerenv')
def clear_output():
if is_notebook():
from IPython.display import clear_output
clear_output(wait=True)
else:
click.clear()
def clean_nan_values(obj):
"""
Recursively clean NaN values from data structures by replacing them with None.
:param obj: The object to clean (can be dict, list, or primitive)
:return: The cleaned object with NaN values replaced
"""
import math
import numpy as np
if isinstance(obj, dict):
return {k: clean_nan_values(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [clean_nan_values(item) for item in obj]
elif isinstance(obj, bool):
# bool is a subclass of int in Python; keep it as boolean
return obj
elif isinstance(obj, (float, np.floating)):
# Replace NaN with None
if math.isnan(float(obj)):
return None
return float(obj)
elif isinstance(obj, (int, np.integer)):
# Keep integers as-is (cast NumPy integers to native int)
return int(obj)
else:
return obj
def clean_infinite_values(obj):
"""
Recursively clean infinite values (inf, -inf) from data structures
by replacing them with None or 0
:param obj: The object to clean (can be dict, list, or primitive)
:return: The cleaned object with infinite values replaced
"""
import math
if isinstance(obj, dict):
return {k: clean_infinite_values(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [clean_infinite_values(item) for item in obj]
elif isinstance(obj, float):
if math.isinf(obj):
return None
return obj
else:
return obj
def get_class_name(cls):
# if it's a string, return it
if isinstance(cls, str):
return cls
# else, return the class name
return cls.__name__
def next_candle_timestamp(candle: np.ndarray, timeframe: str) -> int:
return candle[0] + timeframe_to_one_minutes(timeframe) * 60_000
def get_candle_start_timestamp_based_on_timeframe(timeframe: str, num_candles_to_fetch: int) -> int:
one_min_count = timeframe_to_one_minutes(timeframe)
finish_date = now(force_fresh=True)
return finish_date - (num_candles_to_fetch * one_min_count * 60_000)
def is_price_near(order_price, price_to_compare, percentage_threshold=0.00015):
"""
Check if the given order price is near the specified price.
Default percentage_threshold is 0.015% (0.00015)
We calculate percentage difference between the two prices rounded to 4 decimal places,
so low-priced orders can be properly compared within 0.015% range.
"""
return abs(1 - (order_price / price_to_compare)) <= percentage_threshold
def gzip_compress(data):
"""Compress data using gzip."""
json_data = json.dumps(data).encode('utf-8')
# Compress the JSON string
return gzip.compress(json_data)
def timeframe_to_one_minutes(timeframe: str) -> int:
from jesse.utils import timeframe_to_one_minutes
return timeframe_to_one_minutes(timeframe)
def compressed_response(content: str) -> dict:
"""
Helper function to handle compression for HTTP responses.
Returns a dict with compression info and content.
:param content: string content to potentially compress
:return: dict with is_compressed flag and content
"""
# check if content is large enough to warrant compression
compressed = gzip_compress(content)
# encode as base64 string for safe transmission
return {
'is_compressed': True,
'data': base64.b64encode(compressed).decode('utf-8')
}
def validate_cwd() -> None:
"""
make sure we're in a Jesse project
"""
if not is_jesse_project():
print(
color(
'Current directory is not a Jesse project. You must run commands from the root of a Jesse project. Read this page for more info: https://docs.jesse.trade/docs/getting-started/#create-a-new-jesse-project',
'red'
)
)
os._exit(1)
def has_live_trade_plugin() -> bool:
try:
import jesse_live
except ModuleNotFoundError:
return False
return True
def normalize_bool(v: Any) -> bool:
if isinstance(v, bool):
return v
if isinstance(v, int):
return v == 1
if isinstance(v, str):
s = v.strip().lower()
if s in ['1', 'true']:
return True
if s in ['0', 'false']:
return False
return bool(v)
================================================
FILE: jesse/indicators/__init__.py
================================================
from .acosc import acosc
from .ad import ad
from .adosc import adosc
from .adx import adx
from .adxr import adxr
from .alligator import alligator
from .alma import alma
from .ao import ao
from .apo import apo
from .aroon import aroon
from .aroonosc import aroonosc
from .atr import atr
from .avgprice import avgprice
from .bandpass import bandpass
from .beta import beta
from .bollinger_bands import bollinger_bands
from .bollinger_bands_width import bollinger_bands_width
from .bop import bop
from .cc import cc
from .cci import cci
from .cfo import cfo
from .cg import cg
from .chande import chande
from .chop import chop
from .cksp import cksp
from .cmo import cmo
from .correl import correl
from .correlation_cycle import correlation_cycle
from .cvi import cvi
from .cwma import cwma
from .damiani_volatmeter import damiani_volatmeter
from .dec_osc import dec_osc
from .decycler import decycler
from .dema import dema
from .devstop import devstop
from .di import di
from .dm import dm
from .donchian import donchian
from .dpo import dpo
from .dti import dti
from .dx import dx
from .edcf import edcf
from .efi import efi
from .ema import ema
from .emd import emd
from .emv import emv
from .epma import epma
from .er import er
from .eri import eri
from .fisher import fisher
from .fosc import fosc
from .frama import frama
from .fwma import fwma
from .gatorosc import gatorosc
from .gauss import gauss
from .heikin_ashi_candles import heikin_ashi_candles
from .high_pass import high_pass
from .high_pass_2_pole import high_pass_2_pole
from .hma import hma
from .hurst_exponent import hurst_exponent
from .hwma import hwma
from .ichimoku_cloud import ichimoku_cloud
from .ichimoku_cloud_seq import ichimoku_cloud_seq
from .ift_rsi import ift_rsi
from .itrend import itrend
from .jma import jma
from .jsa import jsa
from .kama import kama
from .kaufmanstop import kaufmanstop
from .kdj import kdj
from .keltner import keltner
from .kst import kst
from .kurtosis import kurtosis
from .kvo import kvo
from .linearreg import linearreg
from .linearreg_angle import linearreg_angle
from .linearreg_intercept import linearreg_intercept
from .linearreg_slope import linearreg_slope
from .lrsi import lrsi
from .ma import ma
from .maaq import maaq
from .mab import mab
from .macd import macd
from .mama import mama
from .marketfi import marketfi
from .mass import mass
from .mcginley_dynamic import mcginley_dynamic
from .mean_ad import mean_ad
from .median_ad import median_ad
from .medprice import medprice
from .mfi import mfi
from .midpoint import midpoint
from .midprice import midprice
from .minmax import minmax
from .mom import mom
from .mwdx import mwdx
from .natr import natr
from .nma import nma
from .nvi import nvi
from .obv import obv
from .pfe import pfe
from .pivot import pivot
from .pma import pma
from .ppo import ppo
from .pvi import pvi
from .pwma import pwma
from .qstick import qstick
from .reflex import reflex
from .rma import rma
from .roc import roc
from .rocp import rocp
from .rocr import rocr
from .rocr100 import rocr100
from .roofing import roofing
from .rsi import rsi
from .rsmk import rsmk
from .rsx import rsx
from .rvi import rvi
from .safezonestop import safezonestop
from .sar import sar
from .sinwma import sinwma
from .skew import skew
from .sma import sma
from .smma import smma
from .sqwma import sqwma
from .srsi import srsi
from .srwma import srwma
from .stc import stc
from .stddev import stddev
from .stochastic import stoch
from .stochf import stochf
from .supersmoother import supersmoother
from .supersmoother_3_pole import supersmoother_3_pole
from .supertrend import supertrend
from .swma import swma
from .t3 import t3
from .tema import tema
from .trange import trange
from .trendflex import trendflex
from .trima import trima
from .trix import trix
from .tsf import tsf
from .tsi import tsi
from .ttm_trend import ttm_trend
from .typprice import typprice
from .ui import ui
from .ultosc import ultosc
from .var import var
from .vi import vi
from .vidya import vidya
from .vlma import vlma
from .vosc import vosc
from .voss import voss
from .vpci import vpci
from .vpt import vpt
from .vpwma import vpwma
from .vwap import vwap
from .vwma import vwma
from .vwmacd import vwmacd
from .wad import wad
from .wclprice import wclprice
from .wilders import wilders
from .willr import willr
from .wma import wma
from .wt import wt
from .zlema import zlema
from .zscore import zscore
from .waddah_attr_explosion import waddah_attar_explosion
from .stiffness import stiffness
from .ttm_squeeze import ttm_squeeze
from .support_resistance_with_break import support_resistance_with_breaks
from .squeeze_momentum import squeeze_momentum
from .hull_suit import hull_suit
from .volume import volume
================================================
FILE: jesse/indicators/acosc.py
================================================
from collections import namedtuple
import numpy
gitextract_flm9a1yh/
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── stale.yml
│ └── workflows/
│ ├── codeql-analysis.yml
│ └── python-package.yml
├── .gitignore
├── AGENTS.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── README.md
├── codecov.yml
├── conftest.py
├── jesse/
│ ├── __init__.py
│ ├── candle_pipelines/
│ │ ├── __init__.py
│ │ ├── base_candles.py
│ │ ├── gaussian_noise.py
│ │ ├── gaussian_resampler.py
│ │ └── moving_block_bootstrap.py
│ ├── cli.py
│ ├── config.py
│ ├── constants.py
│ ├── controllers/
│ │ ├── __init__.py
│ │ ├── auth_controller.py
│ │ ├── backtest_controller.py
│ │ ├── candles_controller.py
│ │ ├── closed_trade_controller.py
│ │ ├── config_controller.py
│ │ ├── exchange_controller.py
│ │ ├── file_controller.py
│ │ ├── live_controller.py
│ │ ├── lsp_controller.py
│ │ ├── monte_carlo_controller.py
│ │ ├── notification_controller.py
│ │ ├── optimization_controller.py
│ │ ├── order_controller.py
│ │ ├── strategy_controller.py
│ │ ├── system_controller.py
│ │ ├── tabs_controller.py
│ │ └── websocket_controller.py
│ ├── enums/
│ │ └── __init__.py
│ ├── exceptions/
│ │ └── __init__.py
│ ├── exchanges/
│ │ ├── __init__.py
│ │ ├── exchange.py
│ │ └── sandbox/
│ │ ├── Sandbox.py
│ │ └── __init__.py
│ ├── factories/
│ │ ├── __init__.py
│ │ ├── candle_factory.py
│ │ └── order_factory.py
│ ├── helpers.py
│ ├── indicators/
│ │ ├── __init__.py
│ │ ├── acosc.py
│ │ ├── ad.py
│ │ ├── adosc.py
│ │ ├── adx.py
│ │ ├── adxr.py
│ │ ├── alligator.py
│ │ ├── alma.py
│ │ ├── ao.py
│ │ ├── apo.py
│ │ ├── aroon.py
│ │ ├── aroonosc.py
│ │ ├── atr.py
│ │ ├── avgprice.py
│ │ ├── bandpass.py
│ │ ├── beta.py
│ │ ├── bollinger_bands.py
│ │ ├── bollinger_bands_width.py
│ │ ├── bop.py
│ │ ├── cc.py
│ │ ├── cci.py
│ │ ├── cfo.py
│ │ ├── cg.py
│ │ ├── chande.py
│ │ ├── chop.py
│ │ ├── cksp.py
│ │ ├── cmo.py
│ │ ├── correl.py
│ │ ├── correlation_cycle.py
│ │ ├── cvi.py
│ │ ├── cwma.py
│ │ ├── damiani_volatmeter.py
│ │ ├── dec_osc.py
│ │ ├── decycler.py
│ │ ├── dema.py
│ │ ├── devstop.py
│ │ ├── di.py
│ │ ├── dm.py
│ │ ├── donchian.py
│ │ ├── dpo.py
│ │ ├── dti.py
│ │ ├── dx.py
│ │ ├── edcf.py
│ │ ├── efi.py
│ │ ├── ema.py
│ │ ├── emd.py
│ │ ├── emv.py
│ │ ├── epma.py
│ │ ├── er.py
│ │ ├── eri.py
│ │ ├── fisher.py
│ │ ├── fosc.py
│ │ ├── frama.py
│ │ ├── fwma.py
│ │ ├── gatorosc.py
│ │ ├── gauss.py
│ │ ├── heikin_ashi_candles.py
│ │ ├── high_pass.py
│ │ ├── high_pass_2_pole.py
│ │ ├── hma.py
│ │ ├── hull_suit.py
│ │ ├── hurst_exponent.py
│ │ ├── hwma.py
│ │ ├── ichimoku_cloud.py
│ │ ├── ichimoku_cloud_seq.py
│ │ ├── ift_rsi.py
│ │ ├── itrend.py
│ │ ├── jma.py
│ │ ├── jsa.py
│ │ ├── kama.py
│ │ ├── kaufmanstop.py
│ │ ├── kdj.py
│ │ ├── keltner.py
│ │ ├── kst.py
│ │ ├── kurtosis.py
│ │ ├── kvo.py
│ │ ├── linearreg.py
│ │ ├── linearreg_angle.py
│ │ ├── linearreg_intercept.py
│ │ ├── linearreg_slope.py
│ │ ├── lrsi.py
│ │ ├── ma.py
│ │ ├── maaq.py
│ │ ├── mab.py
│ │ ├── macd.py
│ │ ├── mama.py
│ │ ├── marketfi.py
│ │ ├── mass.py
│ │ ├── mcginley_dynamic.py
│ │ ├── mean_ad.py
│ │ ├── median_ad.py
│ │ ├── medprice.py
│ │ ├── mfi.py
│ │ ├── midpoint.py
│ │ ├── midprice.py
│ │ ├── minmax.py
│ │ ├── mom.py
│ │ ├── mwdx.py
│ │ ├── natr.py
│ │ ├── nma.py
│ │ ├── nvi.py
│ │ ├── obv.py
│ │ ├── pfe.py
│ │ ├── pivot.py
│ │ ├── pma.py
│ │ ├── ppo.py
│ │ ├── pvi.py
│ │ ├── pwma.py
│ │ ├── qstick.py
│ │ ├── reflex.py
│ │ ├── rma.py
│ │ ├── roc.py
│ │ ├── rocp.py
│ │ ├── rocr.py
│ │ ├── rocr100.py
│ │ ├── roofing.py
│ │ ├── rsi.py
│ │ ├── rsmk.py
│ │ ├── rsx.py
│ │ ├── rvi.py
│ │ ├── safezonestop.py
│ │ ├── sar.py
│ │ ├── settings.jsonc
│ │ ├── sinwma.py
│ │ ├── skew.py
│ │ ├── sma.py
│ │ ├── smma.py
│ │ ├── squeeze_momentum.py
│ │ ├── sqwma.py
│ │ ├── srsi.py
│ │ ├── srwma.py
│ │ ├── stc.py
│ │ ├── stddev.py
│ │ ├── stiffness.py
│ │ ├── stochastic.py
│ │ ├── stochf.py
│ │ ├── supersmoother.py
│ │ ├── supersmoother_3_pole.py
│ │ ├── supertrend.py
│ │ ├── support_resistance_with_break.py
│ │ ├── swma.py
│ │ ├── t3.py
│ │ ├── tema.py
│ │ ├── trange.py
│ │ ├── trendflex.py
│ │ ├── trima.py
│ │ ├── trix.py
│ │ ├── tsf.py
│ │ ├── tsi.py
│ │ ├── ttm_squeeze.py
│ │ ├── ttm_trend.py
│ │ ├── typprice.py
│ │ ├── ui.py
│ │ ├── ultosc.py
│ │ ├── var.py
│ │ ├── vi.py
│ │ ├── vidya.py
│ │ ├── vlma.py
│ │ ├── volume.py
│ │ ├── vosc.py
│ │ ├── voss.py
│ │ ├── vpci.py
│ │ ├── vpt.py
│ │ ├── vpwma.py
│ │ ├── vwap.py
│ │ ├── vwma.py
│ │ ├── vwmacd.py
│ │ ├── wad.py
│ │ ├── waddah_attr_explosion.py
│ │ ├── wclprice.py
│ │ ├── wilders.py
│ │ ├── willr.py
│ │ ├── wma.py
│ │ ├── wt.py
│ │ ├── zlema.py
│ │ └── zscore.py
│ ├── info.py
│ ├── libs/
│ │ ├── __init__.py
│ │ ├── custom_json/
│ │ │ └── __init__.py
│ │ └── dynamic_numpy_array/
│ │ └── __init__.py
│ ├── models/
│ │ ├── BacktestSession.py
│ │ ├── Candle.py
│ │ ├── ClosedTrade.py
│ │ ├── Exchange.py
│ │ ├── ExchangeApiKeys.py
│ │ ├── FuturesExchange.py
│ │ ├── LiveEquitySnapshot.py
│ │ ├── LiveSession.py
│ │ ├── Log.py
│ │ ├── MonteCarloSession.py
│ │ ├── NotificationApiKeys.py
│ │ ├── OpenTab.py
│ │ ├── OptimizationSession.py
│ │ ├── Option.py
│ │ ├── Order.py
│ │ ├── Orderbook.py
│ │ ├── Position.py
│ │ ├── Route.py
│ │ ├── SpotExchange.py
│ │ ├── Ticker.py
│ │ ├── Trade.py
│ │ └── __init__.py
│ ├── modes/
│ │ ├── __init__.py
│ │ ├── backtest_mode.py
│ │ ├── data_provider.py
│ │ ├── exchange_api_keys.py
│ │ ├── import_candles_mode/
│ │ │ ├── __init__.py
│ │ │ └── drivers/
│ │ │ ├── Apex/
│ │ │ │ ├── ApexOmniPerpetual.py
│ │ │ │ ├── ApexOmniPerpetualTestnet.py
│ │ │ │ ├── ApexProMain.py
│ │ │ │ ├── ApexProPerpetual.py
│ │ │ │ ├── ApexProPerpetualTestnet.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── apex_pro_utils.py
│ │ │ │ └── omni_files/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── zklink_sdk-arm.py
│ │ │ │ ├── zklink_sdk-pc.py
│ │ │ │ ├── zklink_sdk-x86.py
│ │ │ │ └── zklink_sdk.py
│ │ │ ├── Binance/
│ │ │ │ ├── BinanceMain.py
│ │ │ │ ├── BinancePerpetualFutures.py
│ │ │ │ ├── BinancePerpetualFuturesTestnet.py
│ │ │ │ ├── BinanceSpot.py
│ │ │ │ ├── BinanceUSSpot.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── binance_utils.py
│ │ │ ├── Bitfinex/
│ │ │ │ ├── BitfinexSpot.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── bitfinex_utils.py
│ │ │ ├── Bybit/
│ │ │ │ ├── BybitMain.py
│ │ │ │ ├── BybitSpot.py
│ │ │ │ ├── BybitSpotTestnet.py
│ │ │ │ ├── BybitUSDCPerpetual.py
│ │ │ │ ├── BybitUSDCPerpetualTestnet.py
│ │ │ │ ├── BybitUSDTPerpetual.py
│ │ │ │ ├── BybitUSDTPerpetualTestnet.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── bybit_utils.py
│ │ │ ├── Coinbase/
│ │ │ │ ├── CoinbaseSpot.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── coinbase_utils.py
│ │ │ ├── Gate/
│ │ │ │ ├── GateSpot.py
│ │ │ │ ├── GateSpotMain.py
│ │ │ │ ├── GateUSDTMain.py
│ │ │ │ ├── GateUSDTPerpetual.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── gate_utils.py
│ │ │ ├── Hyperliquid/
│ │ │ │ ├── HyperliquidPerpetual.py
│ │ │ │ ├── HyperliquidPerpetualMain.py
│ │ │ │ ├── HyperliquidPerpetualTestnet.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── hyperliquid_utils.py
│ │ │ ├── __init__.py
│ │ │ └── interface.py
│ │ ├── monte_carlo_mode/
│ │ │ ├── MonteCarloRunner.py
│ │ │ └── __init__.py
│ │ ├── notification_api_keys.py
│ │ ├── optimize_mode/
│ │ │ ├── Optimize.py
│ │ │ ├── __init__.py
│ │ │ └── fitness.py
│ │ └── utils.py
│ ├── repositories/
│ │ ├── __init__.py
│ │ ├── candle_repository.py
│ │ ├── closed_trade_repository.py
│ │ ├── live_equity_repository.py
│ │ ├── live_session_repository.py
│ │ ├── open_tab_repository.py
│ │ └── order_repository.py
│ ├── research/
│ │ ├── __init__.py
│ │ ├── backtest.py
│ │ ├── candles.py
│ │ ├── import_candles.py
│ │ ├── ml.py
│ │ └── monte_carlo/
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── monte_carlo_candles.py
│ │ └── monte_carlo_trades.py
│ ├── routes/
│ │ └── __init__.py
│ ├── services/
│ │ ├── __init__.py
│ │ ├── api.py
│ │ ├── auth.py
│ │ ├── broker.py
│ │ ├── cache.py
│ │ ├── candle_service.py
│ │ ├── charts.py
│ │ ├── closed_trade_service.py
│ │ ├── color.py
│ │ ├── db.py
│ │ ├── env.py
│ │ ├── exchange_service.py
│ │ ├── failure.py
│ │ ├── file.py
│ │ ├── general_info.py
│ │ ├── installer.py
│ │ ├── jesse_trade.py
│ │ ├── logger.py
│ │ ├── lsp.py
│ │ ├── metrics.py
│ │ ├── migrator.py
│ │ ├── multiprocessing.py
│ │ ├── notifier.py
│ │ ├── order_service.py
│ │ ├── position_service.py
│ │ ├── progressbar.py
│ │ ├── redis.py
│ │ ├── report.py
│ │ ├── strategy_handler/
│ │ │ ├── ExampleStrategy/
│ │ │ │ └── __init__.py
│ │ │ └── __init__.py
│ │ ├── strategy_service.py
│ │ ├── table.py
│ │ ├── tradingview.py
│ │ ├── transformers.py
│ │ ├── validators.py
│ │ ├── web.py
│ │ └── ws_manager.py
│ ├── static/
│ │ ├── 200.html
│ │ ├── 404.html
│ │ ├── _nuxt/
│ │ │ ├── -30QC5Em.js
│ │ │ ├── 2oJWbEOo.js
│ │ │ ├── 3TATJI7h.js
│ │ │ ├── 3cNudfSz.js
│ │ │ ├── 3e1v2bzS.js
│ │ │ ├── 3kbuJQcV.js
│ │ │ ├── 3xVqZejG.js
│ │ │ ├── 5LuOXUq_.js
│ │ │ ├── 727ZlQH0.js
│ │ │ ├── 7A4Fjokl.js
│ │ │ ├── 7O62HKoU.js
│ │ │ ├── 9C6ErRqt.js
│ │ │ ├── 9VOnL4Iz.js
│ │ │ ├── B-DoSBHF.js
│ │ │ ├── B-k3dvlD.js
│ │ │ ├── B-k8r3hf.js
│ │ │ ├── B-lZjTdr.js
│ │ │ ├── B0XVJmRM.js
│ │ │ ├── B0m2ddpp.js
│ │ │ ├── B0qRVHPH.js
│ │ │ ├── B14Poo8t.js
│ │ │ ├── B1SYOhNW.js
│ │ │ ├── B1bQXN8T.js
│ │ │ ├── B1vp6HhI.js
│ │ │ ├── B2Cf9XSq.js
│ │ │ ├── B2nSH5Xk.js
│ │ │ ├── B2vK47Ag.js
│ │ │ ├── B3ZDOciz.js
│ │ │ ├── B430Bg39.js
│ │ │ ├── B48N-Iqd.js
│ │ │ ├── B4VqtPa2.js
│ │ │ ├── B5auBHZD.js
│ │ │ ├── B5lbUyaz.js
│ │ │ ├── B5uW3Zvf.js
│ │ │ ├── B6W0miNI.js
│ │ │ ├── B7alP455.js
│ │ │ ├── B7mTdjB0.js
│ │ │ ├── B8ssZoUh.js
│ │ │ ├── B9wLZaAG.js
│ │ │ ├── BAng5TT0.js
│ │ │ ├── BC5c_5Pe.js
│ │ │ ├── BE9QQhgF.js
│ │ │ ├── BEBZ7ncR.js
│ │ │ ├── BEhvmC7f.js
│ │ │ ├── BFLt1xDp.js
│ │ │ ├── BFOHcciG.js
│ │ │ ├── BFk92hFI.js
│ │ │ ├── BGLI1Hdo.js
│ │ │ ├── BHOwM8T6.js
│ │ │ ├── BIEUsx6d.js
│ │ │ ├── BILxekzW.js
│ │ │ ├── BJ4Li9vH.js
│ │ │ ├── BJ5jdafP.js
│ │ │ ├── BJGe-b2p.js
│ │ │ ├── BK9xJ97g.js
│ │ │ ├── BKENxkRn.js
│ │ │ ├── BLhTXw86.js
│ │ │ ├── BLuZWbUW.js
│ │ │ ├── BMR_PYu6.js
│ │ │ ├── BMYPR7BL.js
│ │ │ ├── BMj5Y0dO.js
│ │ │ ├── BMl_rFTw.js
│ │ │ ├── BNHBcdi1.js
│ │ │ ├── BNioltXt.js
│ │ │ ├── BPT9niGB.js
│ │ │ ├── BPUjjr-i.js
│ │ │ ├── BPhBrDlE.js
│ │ │ ├── BQoSv7ci.js
│ │ │ ├── BQwtg7Y-.js
│ │ │ ├── BRk-K-rg.js
│ │ │ ├── BS9OwPT8.js
│ │ │ ├── BSxZ-RaX.js
│ │ │ ├── BTpWsGps.js
│ │ │ ├── BUEGK8hf.js
│ │ │ ├── BVUVsWT6.js
│ │ │ ├── BVr_1_27.js
│ │ │ ├── BVz_zdnA.js
│ │ │ ├── BW0IIeyO.js
│ │ │ ├── BWBTHuhh.js
│ │ │ ├── BX77sIaO.js
│ │ │ ├── BXW1EomU.js
│ │ │ ├── BXYnMxBe.js
│ │ │ ├── BXkSAIEj.js
│ │ │ ├── BY-TUvya.js
│ │ │ ├── BY6pwuIY.js
│ │ │ ├── BYtUz8ZP.js
│ │ │ ├── B_i9asfM.js
│ │ │ ├── B_m7g4N7.js
│ │ │ ├── BaOuBgqt.js
│ │ │ ├── BacktestTabs.CTcEQ1jl.css
│ │ │ ├── Bad53t6V.js
│ │ │ ├── BbSNqyBO.js
│ │ │ ├── Bc5xkKR1.js
│ │ │ ├── BdxkyMLR.js
│ │ │ ├── Be6lgOlo.js
│ │ │ ├── BeQkCIfX.js
│ │ │ ├── BfCpw3nA.js
│ │ │ ├── BfHTSMKl.js
│ │ │ ├── BfLuTCmN.js
│ │ │ ├── BfYIQCg8.js
│ │ │ ├── BfivnA6A.js
│ │ │ ├── BfjtVDDH.js
│ │ │ ├── Bg-kzb6g.js
│ │ │ ├── BgDCqdQA.js
│ │ │ ├── BgYniUM_.js
│ │ │ ├── BiFfXF7O.js
│ │ │ ├── Bid6LQhH.js
│ │ │ ├── BjABl1g7.js
│ │ │ ├── BjQB5zDj.js
│ │ │ ├── BjtZpFsH.js
│ │ │ ├── Bk9BmIv8.js
│ │ │ ├── BknIz3MU.js
│ │ │ ├── Bkuqu6BP.js
│ │ │ ├── Bl1h29GH.js
│ │ │ ├── BlxRB_8X.js
│ │ │ ├── BoXegm-a.js
│ │ │ ├── Bp6g37R7.js
│ │ │ ├── BpWG_bgh.js
│ │ │ ├── BsOYHjMa.js
│ │ │ ├── Bt5ljtES.js
│ │ │ ├── BthQWCQV.js
│ │ │ ├── Bu5BbsvL.js
│ │ │ ├── Bu73EIfS.js
│ │ │ ├── BuapDI9Y.js
│ │ │ ├── BuljS_lV.js
│ │ │ ├── BupSXVCO.js
│ │ │ ├── Bvotw-X0.js
│ │ │ ├── Bw0wYZmb.js
│ │ │ ├── Bw305WKR.js
│ │ │ ├── BwHcMc3Y.js
│ │ │ ├── BwXTMy5W.js
│ │ │ ├── BygKL3ZF.js
│ │ │ ├── BypH-vXm.js
│ │ │ ├── BzJJZx-M.js
│ │ │ ├── Bzb7OGdO.js
│ │ │ ├── C-_shW-Y.js
│ │ │ ├── C-nORZOA.js
│ │ │ ├── C-wny61x.js
│ │ │ ├── C0nbwVuJ.js
│ │ │ ├── C1XDQQGZ.js
│ │ │ ├── C1tVc3UG.js
│ │ │ ├── C1w2a3ep.js
│ │ │ ├── C30yJ1fx.js
│ │ │ ├── C39BiMTA.js
│ │ │ ├── C3FkfJm5.js
│ │ │ ├── C3khCPGq.js
│ │ │ ├── C3mMm8J8.js
│ │ │ ├── C3t2pwGQ.js
│ │ │ ├── C4bX54si.js
│ │ │ ├── C5Y8tDhP.js
│ │ │ ├── C5wWYbrZ.js
│ │ │ ├── C6794tGI.js
│ │ │ ├── C6j12Q_x.js
│ │ │ ├── C75U4IDy.js
│ │ │ ├── C7L56vO4.js
│ │ │ ├── C7gG9l05.js
│ │ │ ├── C8M2exoo.js
│ │ │ ├── C8lEn-DE.js
│ │ │ ├── C9L3yaDO.js
│ │ │ ├── CAQ2eGtk.js
│ │ │ ├── CB0Krxn9.js
│ │ │ ├── CB2ApiWb.js
│ │ │ ├── CCBS_C5_.js
│ │ │ ├── CD20-hSi.js
│ │ │ ├── CD_QflpE.js
│ │ │ ├── CG6Dc4jp.js
│ │ │ ├── CGVVOGHx.js
│ │ │ ├── CJaU5se_.js
│ │ │ ├── CKg9tqCS.js
│ │ │ ├── CM8KxXT1.js
│ │ │ ├── CMt9yHYq.js
│ │ │ ├── COJ4H7py.js
│ │ │ ├── COK4E0Yg.js
│ │ │ ├── COcR7UxN.js
│ │ │ ├── COyJrUc7.js
│ │ │ ├── CP8nbYEq.js
│ │ │ ├── CQ0soPOq.js
│ │ │ ├── CQjiPCtT.js
│ │ │ ├── CRzUWN8h.js
│ │ │ ├── CS3Unz2-.js
│ │ │ ├── CSHBycmS.js
│ │ │ ├── CSp6iqVD.js
│ │ │ ├── CTNlIIiR.js
│ │ │ ├── CTRr51gU.js
│ │ │ ├── CUKaiP0K.js
│ │ │ ├── CU_MfyYc.js
│ │ │ ├── CUnW07Te.js
│ │ │ ├── CV9EbfTh.js
│ │ │ ├── CVO1_9PV.js
│ │ │ ├── CViTd9PT.js
│ │ │ ├── CVw76BM1.js
│ │ │ ├── CXKOl_mN.js
│ │ │ ├── CYFUjXW1.js
│ │ │ ├── CYcD1Eih.js
│ │ │ ├── CYgUR4L5.js
│ │ │ ├── CZe0XNBd.js
│ │ │ ├── CZogWebk.js
│ │ │ ├── C_scCXcs.js
│ │ │ ├── CafNBF8u.js
│ │ │ ├── CbfX1IO0.js
│ │ │ ├── Cc5clBb7.js
│ │ │ ├── Cc6zh8Uk.js
│ │ │ ├── CdO5JTpU.js
│ │ │ ├── Cf8iN4DR.js
│ │ │ ├── CfBo882q.js
│ │ │ ├── CfQXZHmo.js
│ │ │ ├── CfnpWUYo.js
│ │ │ ├── Ci6OQyBP.js
│ │ │ ├── CircleProgressbar.Bqs-YaMH.css
│ │ │ ├── CjDtw9vr.js
│ │ │ ├── CkXjmgJE.js
│ │ │ ├── Ckkbw-AO.js
│ │ │ ├── ClGRhx96.js
│ │ │ ├── CmCqftbK.js
│ │ │ ├── CoJj_PRq.js
│ │ │ ├── Cq2jzwMq.js
│ │ │ ├── CqvT4tPC.js
│ │ │ ├── CrrKwR0a.js
│ │ │ ├── CsSk9TLD.js
│ │ │ ├── Csfq5Kiy.js
│ │ │ ├── CuFlys0T.js
│ │ │ ├── Cuk6v7N8.js
│ │ │ ├── Cv9koXgw.js
│ │ │ ├── CvhZxjKo.js
│ │ │ ├── CvkRSmvA.js
│ │ │ ├── CvlXmOiu.js
│ │ │ ├── Cw4FHd9N.js
│ │ │ ├── CwDv50qJ.js
│ │ │ ├── Cwg39VG_.js
│ │ │ ├── CwjWoCRV.js
│ │ │ ├── CyIGOvEh.js
│ │ │ ├── CyVeKkvQ.js
│ │ │ ├── CyktbL80.js
│ │ │ ├── Cz8P-rqG.js
│ │ │ ├── CzF1MCbP.js
│ │ │ ├── Cza_XSSt.js
│ │ │ ├── CzouJOBO.js
│ │ │ ├── D-1_drer.js
│ │ │ ├── D-2ljcwZ.js
│ │ │ ├── D0UiDa5C.js
│ │ │ ├── D0r3Knsf.js
│ │ │ ├── D2PfwrvU.js
│ │ │ ├── D2Z7JJdl.js
│ │ │ ├── D35nYK_C.js
│ │ │ ├── D4Tzg5kh.js
│ │ │ ├── D4aGjE-s.js
│ │ │ ├── D4h5O-jR.js
│ │ │ ├── D5KoaKCx.js
│ │ │ ├── D5pd2Owo.js
│ │ │ ├── D7lU1fdU.js
│ │ │ ├── D7oLnXFd.js
│ │ │ ├── D8mZ0lfy.js
│ │ │ ├── D9-PGadD.js
│ │ │ ├── D94h4QjT.js
│ │ │ ├── D9R-vmeu.js
│ │ │ ├── D9yiNO04.js
│ │ │ ├── DAi9KRSo.js
│ │ │ ├── DB0RB20n.js
│ │ │ ├── DBQeEorK.js
│ │ │ ├── DB_GagMm.js
│ │ │ ├── DCE3LsBG.js
│ │ │ ├── DDpSJMW6.js
│ │ │ ├── DDrv2Hr-.js
│ │ │ ├── DDtJtuOZ.js
│ │ │ ├── DEIpsLCJ.js
│ │ │ ├── DGRk4fvy.js
│ │ │ ├── DH5Ifo-i.js
│ │ │ ├── DHJKELXO.js
│ │ │ ├── DHo0CJ0O.js
│ │ │ ├── DIovg4uR.js
│ │ │ ├── DJlmqQ1C.js
│ │ │ ├── DK27pemE.js
│ │ │ ├── DKOGybHv.js
│ │ │ ├── DKXYxT9g.js
│ │ │ ├── DKykz6zU.js
│ │ │ ├── DLPipH_Q.js
│ │ │ ├── DLbgOhZU.js
│ │ │ ├── DLs3tTet.js
│ │ │ ├── DMFWKIsW.js
│ │ │ ├── DMpbkAFi.js
│ │ │ ├── DNquZEk8.js
│ │ │ ├── DOAuugfS.js
│ │ │ ├── DOk3G3cc.js
│ │ │ ├── DP9I38t9.js
│ │ │ ├── DPg46dy1.js
│ │ │ ├── DPvbFsQx.js
│ │ │ ├── DQ1-QYvQ.js
│ │ │ ├── DQ5Sj-RJ.js
│ │ │ ├── DQVVAn-B.js
│ │ │ ├── DRC6TkPh.js
│ │ │ ├── DREVFZK8.js
│ │ │ ├── DRNBmV_Q.js
│ │ │ ├── DRW-0cLl.js
│ │ │ ├── DRhBOlRY.js
│ │ │ ├── DUszq2jm.js
│ │ │ ├── DVG02705.js
│ │ │ ├── DVYH6Lj_.js
│ │ │ ├── DWGz5Zuj.js
│ │ │ ├── DWJ3fJO_.js
│ │ │ ├── DWedfzmr.js
│ │ │ ├── DXXGBMMv.js
│ │ │ ├── DXbdFlpD.js
│ │ │ ├── DYoNaHQp.js
│ │ │ ├── DYvnoCeB.js
│ │ │ ├── DZb6Dd70.js
│ │ │ ├── D_OY6ada.js
│ │ │ ├── D_z4Izcz.js
│ │ │ ├── DaasEFj5.js
│ │ │ ├── Dayu4EKP.js
│ │ │ ├── DbXoA79R.js
│ │ │ ├── Dbxjm_CC.js
│ │ │ ├── DcXBrGfk.js
│ │ │ ├── Ddv68eIx.js
│ │ │ ├── DeYg-96x.js
│ │ │ ├── Deuh7S70.js
│ │ │ ├── DfxzS6Rs.js
│ │ │ ├── Dgyr3wWZ.js
│ │ │ ├── DhMKtDLN.js
│ │ │ ├── DhUJRlN_.js
│ │ │ ├── Dhn9LcZ4.js
│ │ │ ├── Dj6nwHGl.js
│ │ │ ├── DjHMNizO.js
│ │ │ ├── DkBy-JyN.js
│ │ │ ├── DkLiglaE.js
│ │ │ ├── DmDlXweU.js
│ │ │ ├── DmdQbaLT.js
│ │ │ ├── DmtRXgke.js
│ │ │ ├── Dmy2k9nq.js
│ │ │ ├── Dn00JSTd.js
│ │ │ ├── DnULxvSX.js
│ │ │ ├── DnWQm4Tq.js
│ │ │ ├── DoFvH58O.js
│ │ │ ├── DqwNpetd.js
│ │ │ ├── DrRCxMg5.js
│ │ │ ├── Dr_JbmT0.js
│ │ │ ├── DrqOgyji.js
│ │ │ ├── Drsz93k2.js
│ │ │ ├── Ds-gbosJ.js
│ │ │ ├── DsBKuouk.js
│ │ │ ├── DsWjAdsX.js
│ │ │ ├── Dsg_Bt_b.js
│ │ │ ├── DtFQj3wx.js
│ │ │ ├── Du268qiB.js
│ │ │ ├── Du3IqvzK.js
│ │ │ ├── Du5NY7AG.js
│ │ │ ├── DvSxYeG4.js
│ │ │ ├── DxSadP1t.js
│ │ │ ├── DyKutqhl.js
│ │ │ ├── DyLYGjHh.js
│ │ │ ├── E1yjnBiT.js
│ │ │ ├── E3gJ1_iC.js
│ │ │ ├── FNqbgIOG.js
│ │ │ ├── GBQ2dnAY.js
│ │ │ ├── HNqc6WRo.js
│ │ │ ├── HeqvyViL.js
│ │ │ ├── HnGAYVZD.js
│ │ │ ├── HzYwdGDm.js
│ │ │ ├── IconCSS.RN4HczVp.css
│ │ │ ├── IuBKFhSY.js
│ │ │ ├── JqZropPD.js
│ │ │ ├── L9t79GZl.js
│ │ │ ├── LGGdnPYs.js
│ │ │ ├── LKU2TuZ1.js
│ │ │ ├── LiveTabs.15UVtLVQ.css
│ │ │ ├── O-0jUIAi.js
│ │ │ ├── P4WzXJd0.js
│ │ │ ├── PoHY5YXO.js
│ │ │ ├── Progress.CWZn3LuJ.css
│ │ │ ├── QhoSD0DR.js
│ │ │ ├── R900dpIa.js
│ │ │ ├── RFJ54-KY.js
│ │ │ ├── SKMF96pI.js
│ │ │ ├── SPD3sf1n.js
│ │ │ ├── StrategiesSidebar.BLGw1dq7.css
│ │ │ ├── T-Tgc4AT.js
│ │ │ ├── TU54ms6u.js
│ │ │ ├── Tz6hzZYG.js
│ │ │ ├── UIAJJxZW.js
│ │ │ ├── UL5zprDm.js
│ │ │ ├── UMmp-gVE.js
│ │ │ ├── VuadG5SK.js
│ │ │ ├── X3S5orim.js
│ │ │ ├── XBlWyCtg.js
│ │ │ ├── YJb9dmdj.js
│ │ │ ├── ZlaFEk-P.js
│ │ │ ├── _FEXNRsZ.js
│ │ │ ├── _id_.CZ9YoXDN.css
│ │ │ ├── _id_.PO5SUJPO.css
│ │ │ ├── ahYVQIuB.js
│ │ │ ├── ajMbGru0.js
│ │ │ ├── atvbtKCR.js
│ │ │ ├── bCA53EVm.js
│ │ │ ├── bN70gL4F.js
│ │ │ ├── cPjAOO0u.js
│ │ │ ├── dUAF8qyF.js
│ │ │ ├── din0uRiO.js
│ │ │ ├── e4jU7D2d.js
│ │ │ ├── eg146-Ew.js
│ │ │ ├── entry.Co9uk6v2.css
│ │ │ ├── error-404.DZraUJun.css
│ │ │ ├── error-500.XmAVHPl_.css
│ │ │ ├── fje9CFhw.js
│ │ │ ├── gRuQeaLk.js
│ │ │ ├── ifBTmRxC.js
│ │ │ ├── index.dzGxyoTu.css
│ │ │ ├── index.lQPmb1y9.css
│ │ │ ├── m09vb5r-.js
│ │ │ ├── m2LEI-9-.js
│ │ │ ├── m4gc_qpA.js
│ │ │ ├── m4uW47V2.js
│ │ │ ├── mebxcVVE.js
│ │ │ ├── nuxt-monaco-editor/
│ │ │ │ ├── metadata.d.ts
│ │ │ │ ├── metadata.js
│ │ │ │ └── vs/
│ │ │ │ ├── base/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── browser.js
│ │ │ │ │ │ ├── canIUse.js
│ │ │ │ │ │ ├── contextmenu.js
│ │ │ │ │ │ ├── defaultWorkerFactory.js
│ │ │ │ │ │ ├── dnd.js
│ │ │ │ │ │ ├── dom.js
│ │ │ │ │ │ ├── dompurify/
│ │ │ │ │ │ │ └── dompurify.js
│ │ │ │ │ │ ├── event.js
│ │ │ │ │ │ ├── fastDomNode.js
│ │ │ │ │ │ ├── fonts.js
│ │ │ │ │ │ ├── formattedTextRenderer.js
│ │ │ │ │ │ ├── globalPointerMoveMonitor.js
│ │ │ │ │ │ ├── history.js
│ │ │ │ │ │ ├── iframe.js
│ │ │ │ │ │ ├── keyboardEvent.js
│ │ │ │ │ │ ├── markdownRenderer.js
│ │ │ │ │ │ ├── mouseEvent.js
│ │ │ │ │ │ ├── performance.js
│ │ │ │ │ │ ├── pixelRatio.js
│ │ │ │ │ │ ├── touch.js
│ │ │ │ │ │ ├── trustedTypes.js
│ │ │ │ │ │ ├── ui/
│ │ │ │ │ │ │ ├── actionbar/
│ │ │ │ │ │ │ │ ├── actionViewItems.js
│ │ │ │ │ │ │ │ ├── actionbar.css
│ │ │ │ │ │ │ │ └── actionbar.js
│ │ │ │ │ │ │ ├── aria/
│ │ │ │ │ │ │ │ ├── aria.css
│ │ │ │ │ │ │ │ └── aria.js
│ │ │ │ │ │ │ ├── breadcrumbs/
│ │ │ │ │ │ │ │ ├── breadcrumbsWidget.css
│ │ │ │ │ │ │ │ └── breadcrumbsWidget.js
│ │ │ │ │ │ │ ├── button/
│ │ │ │ │ │ │ │ ├── button.css
│ │ │ │ │ │ │ │ └── button.js
│ │ │ │ │ │ │ ├── codicons/
│ │ │ │ │ │ │ │ ├── codicon/
│ │ │ │ │ │ │ │ │ ├── codicon-modifiers.css
│ │ │ │ │ │ │ │ │ └── codicon.css
│ │ │ │ │ │ │ │ └── codiconStyles.js
│ │ │ │ │ │ │ ├── contextview/
│ │ │ │ │ │ │ │ ├── contextview.css
│ │ │ │ │ │ │ │ └── contextview.js
│ │ │ │ │ │ │ ├── countBadge/
│ │ │ │ │ │ │ │ ├── countBadge.css
│ │ │ │ │ │ │ │ └── countBadge.js
│ │ │ │ │ │ │ ├── dialog/
│ │ │ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ │ │ └── dialog.js
│ │ │ │ │ │ │ ├── dropdown/
│ │ │ │ │ │ │ │ ├── dropdown.css
│ │ │ │ │ │ │ │ ├── dropdown.js
│ │ │ │ │ │ │ │ └── dropdownActionViewItem.js
│ │ │ │ │ │ │ ├── findinput/
│ │ │ │ │ │ │ │ ├── findInput.css
│ │ │ │ │ │ │ │ ├── findInput.js
│ │ │ │ │ │ │ │ ├── findInputToggles.js
│ │ │ │ │ │ │ │ └── replaceInput.js
│ │ │ │ │ │ │ ├── highlightedlabel/
│ │ │ │ │ │ │ │ └── highlightedLabel.js
│ │ │ │ │ │ │ ├── hover/
│ │ │ │ │ │ │ │ ├── hover.js
│ │ │ │ │ │ │ │ ├── hoverDelegate.js
│ │ │ │ │ │ │ │ ├── hoverDelegate2.js
│ │ │ │ │ │ │ │ ├── hoverDelegateFactory.js
│ │ │ │ │ │ │ │ ├── hoverWidget.css
│ │ │ │ │ │ │ │ └── hoverWidget.js
│ │ │ │ │ │ │ ├── iconLabel/
│ │ │ │ │ │ │ │ ├── iconLabel.js
│ │ │ │ │ │ │ │ ├── iconLabels.js
│ │ │ │ │ │ │ │ └── iconlabel.css
│ │ │ │ │ │ │ ├── inputbox/
│ │ │ │ │ │ │ │ ├── inputBox.css
│ │ │ │ │ │ │ │ └── inputBox.js
│ │ │ │ │ │ │ ├── keybindingLabel/
│ │ │ │ │ │ │ │ ├── keybindingLabel.css
│ │ │ │ │ │ │ │ └── keybindingLabel.js
│ │ │ │ │ │ │ ├── list/
│ │ │ │ │ │ │ │ ├── list.css
│ │ │ │ │ │ │ │ ├── list.js
│ │ │ │ │ │ │ │ ├── listPaging.js
│ │ │ │ │ │ │ │ ├── listView.js
│ │ │ │ │ │ │ │ ├── listWidget.js
│ │ │ │ │ │ │ │ ├── rangeMap.js
│ │ │ │ │ │ │ │ ├── rowCache.js
│ │ │ │ │ │ │ │ └── splice.js
│ │ │ │ │ │ │ ├── menu/
│ │ │ │ │ │ │ │ └── menu.js
│ │ │ │ │ │ │ ├── mouseCursor/
│ │ │ │ │ │ │ │ ├── mouseCursor.css
│ │ │ │ │ │ │ │ └── mouseCursor.js
│ │ │ │ │ │ │ ├── progressbar/
│ │ │ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ │ │ └── progressbar.js
│ │ │ │ │ │ │ ├── resizable/
│ │ │ │ │ │ │ │ └── resizable.js
│ │ │ │ │ │ │ ├── sash/
│ │ │ │ │ │ │ │ ├── sash.css
│ │ │ │ │ │ │ │ └── sash.js
│ │ │ │ │ │ │ ├── scrollbar/
│ │ │ │ │ │ │ │ ├── abstractScrollbar.js
│ │ │ │ │ │ │ │ ├── horizontalScrollbar.js
│ │ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ │ └── scrollbars.css
│ │ │ │ │ │ │ │ ├── scrollableElement.js
│ │ │ │ │ │ │ │ ├── scrollableElementOptions.js
│ │ │ │ │ │ │ │ ├── scrollbarArrow.js
│ │ │ │ │ │ │ │ ├── scrollbarState.js
│ │ │ │ │ │ │ │ ├── scrollbarVisibilityController.js
│ │ │ │ │ │ │ │ └── verticalScrollbar.js
│ │ │ │ │ │ │ ├── selectBox/
│ │ │ │ │ │ │ │ ├── selectBox.css
│ │ │ │ │ │ │ │ ├── selectBox.js
│ │ │ │ │ │ │ │ ├── selectBoxCustom.css
│ │ │ │ │ │ │ │ ├── selectBoxCustom.js
│ │ │ │ │ │ │ │ └── selectBoxNative.js
│ │ │ │ │ │ │ ├── splitview/
│ │ │ │ │ │ │ │ ├── splitview.css
│ │ │ │ │ │ │ │ └── splitview.js
│ │ │ │ │ │ │ ├── table/
│ │ │ │ │ │ │ │ ├── table.css
│ │ │ │ │ │ │ │ ├── table.js
│ │ │ │ │ │ │ │ └── tableWidget.js
│ │ │ │ │ │ │ ├── toggle/
│ │ │ │ │ │ │ │ ├── toggle.css
│ │ │ │ │ │ │ │ └── toggle.js
│ │ │ │ │ │ │ ├── toolbar/
│ │ │ │ │ │ │ │ ├── toolbar.css
│ │ │ │ │ │ │ │ └── toolbar.js
│ │ │ │ │ │ │ ├── tree/
│ │ │ │ │ │ │ │ ├── abstractTree.js
│ │ │ │ │ │ │ │ ├── asyncDataTree.js
│ │ │ │ │ │ │ │ ├── compressedObjectTreeModel.js
│ │ │ │ │ │ │ │ ├── dataTree.js
│ │ │ │ │ │ │ │ ├── indexTreeModel.js
│ │ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ │ └── tree.css
│ │ │ │ │ │ │ │ ├── objectTree.js
│ │ │ │ │ │ │ │ ├── objectTreeModel.js
│ │ │ │ │ │ │ │ └── tree.js
│ │ │ │ │ │ │ └── widget.js
│ │ │ │ │ │ └── window.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── arrays.js
│ │ │ │ │ ├── arraysFind.js
│ │ │ │ │ ├── assert.js
│ │ │ │ │ ├── async.js
│ │ │ │ │ ├── buffer.js
│ │ │ │ │ ├── cache.js
│ │ │ │ │ ├── cancellation.js
│ │ │ │ │ ├── charCode.js
│ │ │ │ │ ├── codicons.js
│ │ │ │ │ ├── codiconsLibrary.js
│ │ │ │ │ ├── codiconsUtil.js
│ │ │ │ │ ├── collections.js
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── comparers.js
│ │ │ │ │ ├── dataTransfer.js
│ │ │ │ │ ├── decorators.js
│ │ │ │ │ ├── diff/
│ │ │ │ │ │ ├── diff.js
│ │ │ │ │ │ └── diffChange.js
│ │ │ │ │ ├── equals.js
│ │ │ │ │ ├── errorMessage.js
│ │ │ │ │ ├── errors.js
│ │ │ │ │ ├── event.js
│ │ │ │ │ ├── extpath.js
│ │ │ │ │ ├── filters.js
│ │ │ │ │ ├── functional.js
│ │ │ │ │ ├── fuzzyScorer.js
│ │ │ │ │ ├── glob.js
│ │ │ │ │ ├── hash.js
│ │ │ │ │ ├── hierarchicalKind.js
│ │ │ │ │ ├── history.js
│ │ │ │ │ ├── hotReload.js
│ │ │ │ │ ├── htmlContent.js
│ │ │ │ │ ├── iconLabels.js
│ │ │ │ │ ├── idGenerator.js
│ │ │ │ │ ├── ime.js
│ │ │ │ │ ├── iterator.js
│ │ │ │ │ ├── jsonSchema.js
│ │ │ │ │ ├── keyCodes.js
│ │ │ │ │ ├── keybindingLabels.js
│ │ │ │ │ ├── keybindings.js
│ │ │ │ │ ├── labels.js
│ │ │ │ │ ├── lazy.js
│ │ │ │ │ ├── lifecycle.js
│ │ │ │ │ ├── linkedList.js
│ │ │ │ │ ├── linkedText.js
│ │ │ │ │ ├── map.js
│ │ │ │ │ ├── marked/
│ │ │ │ │ │ └── marked.js
│ │ │ │ │ ├── marshalling.js
│ │ │ │ │ ├── marshallingIds.js
│ │ │ │ │ ├── mime.js
│ │ │ │ │ ├── naturalLanguage/
│ │ │ │ │ │ └── korean.js
│ │ │ │ │ ├── navigator.js
│ │ │ │ │ ├── network.js
│ │ │ │ │ ├── numbers.js
│ │ │ │ │ ├── objects.js
│ │ │ │ │ ├── observable.js
│ │ │ │ │ ├── observableInternal/
│ │ │ │ │ │ ├── autorun.js
│ │ │ │ │ │ ├── base.js
│ │ │ │ │ │ ├── debugName.js
│ │ │ │ │ │ ├── derived.js
│ │ │ │ │ │ ├── logging.js
│ │ │ │ │ │ ├── promise.js
│ │ │ │ │ │ └── utils.js
│ │ │ │ │ ├── paging.js
│ │ │ │ │ ├── path.js
│ │ │ │ │ ├── platform.js
│ │ │ │ │ ├── process.js
│ │ │ │ │ ├── range.js
│ │ │ │ │ ├── resources.js
│ │ │ │ │ ├── scrollable.js
│ │ │ │ │ ├── search.js
│ │ │ │ │ ├── sequence.js
│ │ │ │ │ ├── severity.js
│ │ │ │ │ ├── stopwatch.js
│ │ │ │ │ ├── strings.js
│ │ │ │ │ ├── symbols.js
│ │ │ │ │ ├── ternarySearchTree.js
│ │ │ │ │ ├── tfIdf.js
│ │ │ │ │ ├── themables.js
│ │ │ │ │ ├── types.js
│ │ │ │ │ ├── uint.js
│ │ │ │ │ ├── uri.js
│ │ │ │ │ ├── uuid.js
│ │ │ │ │ └── worker/
│ │ │ │ │ └── simpleWorker.js
│ │ │ │ ├── basic-languages/
│ │ │ │ │ ├── _.contribution.js
│ │ │ │ │ ├── abap/
│ │ │ │ │ │ ├── abap.contribution.d.ts
│ │ │ │ │ │ ├── abap.contribution.js
│ │ │ │ │ │ └── abap.js
│ │ │ │ │ ├── apex/
│ │ │ │ │ │ ├── apex.contribution.d.ts
│ │ │ │ │ │ ├── apex.contribution.js
│ │ │ │ │ │ └── apex.js
│ │ │ │ │ ├── azcli/
│ │ │ │ │ │ ├── azcli.contribution.d.ts
│ │ │ │ │ │ ├── azcli.contribution.js
│ │ │ │ │ │ └── azcli.js
│ │ │ │ │ ├── bat/
│ │ │ │ │ │ ├── bat.contribution.d.ts
│ │ │ │ │ │ ├── bat.contribution.js
│ │ │ │ │ │ └── bat.js
│ │ │ │ │ ├── bicep/
│ │ │ │ │ │ ├── bicep.contribution.d.ts
│ │ │ │ │ │ ├── bicep.contribution.js
│ │ │ │ │ │ └── bicep.js
│ │ │ │ │ ├── cameligo/
│ │ │ │ │ │ ├── cameligo.contribution.d.ts
│ │ │ │ │ │ ├── cameligo.contribution.js
│ │ │ │ │ │ └── cameligo.js
│ │ │ │ │ ├── clojure/
│ │ │ │ │ │ ├── clojure.contribution.d.ts
│ │ │ │ │ │ ├── clojure.contribution.js
│ │ │ │ │ │ └── clojure.js
│ │ │ │ │ ├── coffee/
│ │ │ │ │ │ ├── coffee.contribution.d.ts
│ │ │ │ │ │ ├── coffee.contribution.js
│ │ │ │ │ │ └── coffee.js
│ │ │ │ │ ├── cpp/
│ │ │ │ │ │ ├── cpp.contribution.d.ts
│ │ │ │ │ │ ├── cpp.contribution.js
│ │ │ │ │ │ └── cpp.js
│ │ │ │ │ ├── csharp/
│ │ │ │ │ │ ├── csharp.contribution.d.ts
│ │ │ │ │ │ ├── csharp.contribution.js
│ │ │ │ │ │ └── csharp.js
│ │ │ │ │ ├── csp/
│ │ │ │ │ │ ├── csp.contribution.d.ts
│ │ │ │ │ │ ├── csp.contribution.js
│ │ │ │ │ │ └── csp.js
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── css.contribution.d.ts
│ │ │ │ │ │ ├── css.contribution.js
│ │ │ │ │ │ └── css.js
│ │ │ │ │ ├── cypher/
│ │ │ │ │ │ ├── cypher.contribution.d.ts
│ │ │ │ │ │ ├── cypher.contribution.js
│ │ │ │ │ │ └── cypher.js
│ │ │ │ │ ├── dart/
│ │ │ │ │ │ ├── dart.contribution.d.ts
│ │ │ │ │ │ ├── dart.contribution.js
│ │ │ │ │ │ └── dart.js
│ │ │ │ │ ├── dockerfile/
│ │ │ │ │ │ ├── dockerfile.contribution.d.ts
│ │ │ │ │ │ ├── dockerfile.contribution.js
│ │ │ │ │ │ └── dockerfile.js
│ │ │ │ │ ├── ecl/
│ │ │ │ │ │ ├── ecl.contribution.d.ts
│ │ │ │ │ │ ├── ecl.contribution.js
│ │ │ │ │ │ └── ecl.js
│ │ │ │ │ ├── elixir/
│ │ │ │ │ │ ├── elixir.contribution.d.ts
│ │ │ │ │ │ ├── elixir.contribution.js
│ │ │ │ │ │ └── elixir.js
│ │ │ │ │ ├── flow9/
│ │ │ │ │ │ ├── flow9.contribution.d.ts
│ │ │ │ │ │ ├── flow9.contribution.js
│ │ │ │ │ │ └── flow9.js
│ │ │ │ │ ├── freemarker2/
│ │ │ │ │ │ ├── freemarker2.contribution.d.ts
│ │ │ │ │ │ ├── freemarker2.contribution.js
│ │ │ │ │ │ └── freemarker2.js
│ │ │ │ │ ├── fsharp/
│ │ │ │ │ │ ├── fsharp.contribution.d.ts
│ │ │ │ │ │ ├── fsharp.contribution.js
│ │ │ │ │ │ └── fsharp.js
│ │ │ │ │ ├── go/
│ │ │ │ │ │ ├── go.contribution.d.ts
│ │ │ │ │ │ ├── go.contribution.js
│ │ │ │ │ │ └── go.js
│ │ │ │ │ ├── graphql/
│ │ │ │ │ │ ├── graphql.contribution.d.ts
│ │ │ │ │ │ ├── graphql.contribution.js
│ │ │ │ │ │ └── graphql.js
│ │ │ │ │ ├── handlebars/
│ │ │ │ │ │ ├── handlebars.contribution.d.ts
│ │ │ │ │ │ ├── handlebars.contribution.js
│ │ │ │ │ │ └── handlebars.js
│ │ │ │ │ ├── hcl/
│ │ │ │ │ │ ├── hcl.contribution.d.ts
│ │ │ │ │ │ ├── hcl.contribution.js
│ │ │ │ │ │ └── hcl.js
│ │ │ │ │ ├── html/
│ │ │ │ │ │ ├── html.contribution.d.ts
│ │ │ │ │ │ ├── html.contribution.js
│ │ │ │ │ │ └── html.js
│ │ │ │ │ ├── ini/
│ │ │ │ │ │ ├── ini.contribution.d.ts
│ │ │ │ │ │ ├── ini.contribution.js
│ │ │ │ │ │ └── ini.js
│ │ │ │ │ ├── java/
│ │ │ │ │ │ ├── java.contribution.d.ts
│ │ │ │ │ │ ├── java.contribution.js
│ │ │ │ │ │ └── java.js
│ │ │ │ │ ├── javascript/
│ │ │ │ │ │ ├── javascript.contribution.d.ts
│ │ │ │ │ │ ├── javascript.contribution.js
│ │ │ │ │ │ └── javascript.js
│ │ │ │ │ ├── julia/
│ │ │ │ │ │ ├── julia.contribution.d.ts
│ │ │ │ │ │ ├── julia.contribution.js
│ │ │ │ │ │ └── julia.js
│ │ │ │ │ ├── kotlin/
│ │ │ │ │ │ ├── kotlin.contribution.d.ts
│ │ │ │ │ │ ├── kotlin.contribution.js
│ │ │ │ │ │ └── kotlin.js
│ │ │ │ │ ├── less/
│ │ │ │ │ │ ├── less.contribution.d.ts
│ │ │ │ │ │ ├── less.contribution.js
│ │ │ │ │ │ └── less.js
│ │ │ │ │ ├── lexon/
│ │ │ │ │ │ ├── lexon.contribution.d.ts
│ │ │ │ │ │ ├── lexon.contribution.js
│ │ │ │ │ │ └── lexon.js
│ │ │ │ │ ├── liquid/
│ │ │ │ │ │ ├── liquid.contribution.d.ts
│ │ │ │ │ │ ├── liquid.contribution.js
│ │ │ │ │ │ └── liquid.js
│ │ │ │ │ ├── lua/
│ │ │ │ │ │ ├── lua.contribution.d.ts
│ │ │ │ │ │ ├── lua.contribution.js
│ │ │ │ │ │ └── lua.js
│ │ │ │ │ ├── m3/
│ │ │ │ │ │ ├── m3.contribution.d.ts
│ │ │ │ │ │ ├── m3.contribution.js
│ │ │ │ │ │ └── m3.js
│ │ │ │ │ ├── markdown/
│ │ │ │ │ │ ├── markdown.contribution.d.ts
│ │ │ │ │ │ ├── markdown.contribution.js
│ │ │ │ │ │ └── markdown.js
│ │ │ │ │ ├── mdx/
│ │ │ │ │ │ ├── mdx.contribution.d.ts
│ │ │ │ │ │ ├── mdx.contribution.js
│ │ │ │ │ │ └── mdx.js
│ │ │ │ │ ├── mips/
│ │ │ │ │ │ ├── mips.contribution.d.ts
│ │ │ │ │ │ ├── mips.contribution.js
│ │ │ │ │ │ └── mips.js
│ │ │ │ │ ├── monaco.contribution.js
│ │ │ │ │ ├── msdax/
│ │ │ │ │ │ ├── msdax.contribution.d.ts
│ │ │ │ │ │ ├── msdax.contribution.js
│ │ │ │ │ │ └── msdax.js
│ │ │ │ │ ├── mysql/
│ │ │ │ │ │ ├── mysql.contribution.d.ts
│ │ │ │ │ │ ├── mysql.contribution.js
│ │ │ │ │ │ └── mysql.js
│ │ │ │ │ ├── objective-c/
│ │ │ │ │ │ ├── objective-c.contribution.d.ts
│ │ │ │ │ │ ├── objective-c.contribution.js
│ │ │ │ │ │ └── objective-c.js
│ │ │ │ │ ├── pascal/
│ │ │ │ │ │ ├── pascal.contribution.d.ts
│ │ │ │ │ │ ├── pascal.contribution.js
│ │ │ │ │ │ └── pascal.js
│ │ │ │ │ ├── pascaligo/
│ │ │ │ │ │ ├── pascaligo.contribution.d.ts
│ │ │ │ │ │ ├── pascaligo.contribution.js
│ │ │ │ │ │ └── pascaligo.js
│ │ │ │ │ ├── perl/
│ │ │ │ │ │ ├── perl.contribution.d.ts
│ │ │ │ │ │ ├── perl.contribution.js
│ │ │ │ │ │ └── perl.js
│ │ │ │ │ ├── pgsql/
│ │ │ │ │ │ ├── pgsql.contribution.d.ts
│ │ │ │ │ │ ├── pgsql.contribution.js
│ │ │ │ │ │ └── pgsql.js
│ │ │ │ │ ├── php/
│ │ │ │ │ │ ├── php.contribution.d.ts
│ │ │ │ │ │ ├── php.contribution.js
│ │ │ │ │ │ └── php.js
│ │ │ │ │ ├── pla/
│ │ │ │ │ │ ├── pla.contribution.d.ts
│ │ │ │ │ │ ├── pla.contribution.js
│ │ │ │ │ │ └── pla.js
│ │ │ │ │ ├── postiats/
│ │ │ │ │ │ ├── postiats.contribution.d.ts
│ │ │ │ │ │ ├── postiats.contribution.js
│ │ │ │ │ │ └── postiats.js
│ │ │ │ │ ├── powerquery/
│ │ │ │ │ │ ├── powerquery.contribution.d.ts
│ │ │ │ │ │ ├── powerquery.contribution.js
│ │ │ │ │ │ └── powerquery.js
│ │ │ │ │ ├── powershell/
│ │ │ │ │ │ ├── powershell.contribution.d.ts
│ │ │ │ │ │ ├── powershell.contribution.js
│ │ │ │ │ │ └── powershell.js
│ │ │ │ │ ├── protobuf/
│ │ │ │ │ │ ├── protobuf.contribution.d.ts
│ │ │ │ │ │ ├── protobuf.contribution.js
│ │ │ │ │ │ └── protobuf.js
│ │ │ │ │ ├── pug/
│ │ │ │ │ │ ├── pug.contribution.d.ts
│ │ │ │ │ │ ├── pug.contribution.js
│ │ │ │ │ │ └── pug.js
│ │ │ │ │ ├── python/
│ │ │ │ │ │ ├── python.contribution.d.ts
│ │ │ │ │ │ ├── python.contribution.js
│ │ │ │ │ │ └── python.js
│ │ │ │ │ ├── qsharp/
│ │ │ │ │ │ ├── qsharp.contribution.d.ts
│ │ │ │ │ │ ├── qsharp.contribution.js
│ │ │ │ │ │ └── qsharp.js
│ │ │ │ │ ├── r/
│ │ │ │ │ │ ├── r.contribution.d.ts
│ │ │ │ │ │ ├── r.contribution.js
│ │ │ │ │ │ └── r.js
│ │ │ │ │ ├── razor/
│ │ │ │ │ │ ├── razor.contribution.d.ts
│ │ │ │ │ │ ├── razor.contribution.js
│ │ │ │ │ │ └── razor.js
│ │ │ │ │ ├── redis/
│ │ │ │ │ │ ├── redis.contribution.d.ts
│ │ │ │ │ │ ├── redis.contribution.js
│ │ │ │ │ │ └── redis.js
│ │ │ │ │ ├── redshift/
│ │ │ │ │ │ ├── redshift.contribution.d.ts
│ │ │ │ │ │ ├── redshift.contribution.js
│ │ │ │ │ │ └── redshift.js
│ │ │ │ │ ├── restructuredtext/
│ │ │ │ │ │ ├── restructuredtext.contribution.d.ts
│ │ │ │ │ │ ├── restructuredtext.contribution.js
│ │ │ │ │ │ └── restructuredtext.js
│ │ │ │ │ ├── ruby/
│ │ │ │ │ │ ├── ruby.contribution.d.ts
│ │ │ │ │ │ ├── ruby.contribution.js
│ │ │ │ │ │ └── ruby.js
│ │ │ │ │ ├── rust/
│ │ │ │ │ │ ├── rust.contribution.d.ts
│ │ │ │ │ │ ├── rust.contribution.js
│ │ │ │ │ │ └── rust.js
│ │ │ │ │ ├── sb/
│ │ │ │ │ │ ├── sb.contribution.d.ts
│ │ │ │ │ │ ├── sb.contribution.js
│ │ │ │ │ │ └── sb.js
│ │ │ │ │ ├── scala/
│ │ │ │ │ │ ├── scala.contribution.d.ts
│ │ │ │ │ │ ├── scala.contribution.js
│ │ │ │ │ │ └── scala.js
│ │ │ │ │ ├── scheme/
│ │ │ │ │ │ ├── scheme.contribution.d.ts
│ │ │ │ │ │ ├── scheme.contribution.js
│ │ │ │ │ │ └── scheme.js
│ │ │ │ │ ├── scss/
│ │ │ │ │ │ ├── scss.contribution.d.ts
│ │ │ │ │ │ ├── scss.contribution.js
│ │ │ │ │ │ └── scss.js
│ │ │ │ │ ├── shell/
│ │ │ │ │ │ ├── shell.contribution.d.ts
│ │ │ │ │ │ ├── shell.contribution.js
│ │ │ │ │ │ └── shell.js
│ │ │ │ │ ├── solidity/
│ │ │ │ │ │ ├── solidity.contribution.d.ts
│ │ │ │ │ │ ├── solidity.contribution.js
│ │ │ │ │ │ └── solidity.js
│ │ │ │ │ ├── sophia/
│ │ │ │ │ │ ├── sophia.contribution.d.ts
│ │ │ │ │ │ ├── sophia.contribution.js
│ │ │ │ │ │ └── sophia.js
│ │ │ │ │ ├── sparql/
│ │ │ │ │ │ ├── sparql.contribution.d.ts
│ │ │ │ │ │ ├── sparql.contribution.js
│ │ │ │ │ │ └── sparql.js
│ │ │ │ │ ├── sql/
│ │ │ │ │ │ ├── sql.contribution.d.ts
│ │ │ │ │ │ ├── sql.contribution.js
│ │ │ │ │ │ └── sql.js
│ │ │ │ │ ├── st/
│ │ │ │ │ │ ├── st.contribution.d.ts
│ │ │ │ │ │ ├── st.contribution.js
│ │ │ │ │ │ └── st.js
│ │ │ │ │ ├── swift/
│ │ │ │ │ │ ├── swift.contribution.d.ts
│ │ │ │ │ │ ├── swift.contribution.js
│ │ │ │ │ │ └── swift.js
│ │ │ │ │ ├── systemverilog/
│ │ │ │ │ │ ├── systemverilog.contribution.d.ts
│ │ │ │ │ │ ├── systemverilog.contribution.js
│ │ │ │ │ │ └── systemverilog.js
│ │ │ │ │ ├── tcl/
│ │ │ │ │ │ ├── tcl.contribution.d.ts
│ │ │ │ │ │ ├── tcl.contribution.js
│ │ │ │ │ │ └── tcl.js
│ │ │ │ │ ├── twig/
│ │ │ │ │ │ ├── twig.contribution.d.ts
│ │ │ │ │ │ ├── twig.contribution.js
│ │ │ │ │ │ └── twig.js
│ │ │ │ │ ├── typescript/
│ │ │ │ │ │ ├── typescript.contribution.d.ts
│ │ │ │ │ │ ├── typescript.contribution.js
│ │ │ │ │ │ └── typescript.js
│ │ │ │ │ ├── typespec/
│ │ │ │ │ │ ├── typespec.contribution.d.ts
│ │ │ │ │ │ ├── typespec.contribution.js
│ │ │ │ │ │ └── typespec.js
│ │ │ │ │ ├── vb/
│ │ │ │ │ │ ├── vb.contribution.d.ts
│ │ │ │ │ │ ├── vb.contribution.js
│ │ │ │ │ │ └── vb.js
│ │ │ │ │ ├── wgsl/
│ │ │ │ │ │ ├── wgsl.contribution.d.ts
│ │ │ │ │ │ ├── wgsl.contribution.js
│ │ │ │ │ │ └── wgsl.js
│ │ │ │ │ ├── xml/
│ │ │ │ │ │ ├── xml.contribution.d.ts
│ │ │ │ │ │ ├── xml.contribution.js
│ │ │ │ │ │ └── xml.js
│ │ │ │ │ └── yaml/
│ │ │ │ │ ├── yaml.contribution.d.ts
│ │ │ │ │ ├── yaml.contribution.js
│ │ │ │ │ └── yaml.js
│ │ │ │ ├── editor/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── charWidthReader.js
│ │ │ │ │ │ │ ├── domFontInfo.js
│ │ │ │ │ │ │ ├── editorConfiguration.js
│ │ │ │ │ │ │ ├── elementSizeObserver.js
│ │ │ │ │ │ │ ├── fontMeasurements.js
│ │ │ │ │ │ │ ├── migrateOptions.js
│ │ │ │ │ │ │ └── tabFocus.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── mouseHandler.js
│ │ │ │ │ │ │ ├── mouseTarget.js
│ │ │ │ │ │ │ ├── pointerHandler.js
│ │ │ │ │ │ │ ├── textAreaHandler.css
│ │ │ │ │ │ │ ├── textAreaHandler.js
│ │ │ │ │ │ │ ├── textAreaInput.js
│ │ │ │ │ │ │ └── textAreaState.js
│ │ │ │ │ │ ├── coreCommands.d.ts
│ │ │ │ │ │ ├── coreCommands.js
│ │ │ │ │ │ ├── dnd.js
│ │ │ │ │ │ ├── editorBrowser.js
│ │ │ │ │ │ ├── editorDom.js
│ │ │ │ │ │ ├── editorExtensions.js
│ │ │ │ │ │ ├── observableUtilities.js
│ │ │ │ │ │ ├── services/
│ │ │ │ │ │ │ ├── abstractCodeEditorService.js
│ │ │ │ │ │ │ ├── bulkEditService.js
│ │ │ │ │ │ │ ├── codeEditorService.js
│ │ │ │ │ │ │ ├── editorWorkerService.js
│ │ │ │ │ │ │ ├── hoverService/
│ │ │ │ │ │ │ │ ├── hover.css
│ │ │ │ │ │ │ │ ├── hoverService.js
│ │ │ │ │ │ │ │ ├── hoverWidget.js
│ │ │ │ │ │ │ │ └── updatableHoverWidget.js
│ │ │ │ │ │ │ ├── markerDecorations.js
│ │ │ │ │ │ │ ├── openerService.js
│ │ │ │ │ │ │ └── webWorker.js
│ │ │ │ │ │ ├── stableEditorScroll.js
│ │ │ │ │ │ ├── view/
│ │ │ │ │ │ │ ├── domLineBreaksComputer.js
│ │ │ │ │ │ │ ├── dynamicViewOverlay.js
│ │ │ │ │ │ │ ├── renderingContext.js
│ │ │ │ │ │ │ ├── viewController.js
│ │ │ │ │ │ │ ├── viewLayer.js
│ │ │ │ │ │ │ ├── viewOverlays.js
│ │ │ │ │ │ │ ├── viewPart.js
│ │ │ │ │ │ │ └── viewUserInputEvents.js
│ │ │ │ │ │ ├── view.js
│ │ │ │ │ │ ├── viewParts/
│ │ │ │ │ │ │ ├── blockDecorations/
│ │ │ │ │ │ │ │ ├── blockDecorations.css
│ │ │ │ │ │ │ │ └── blockDecorations.js
│ │ │ │ │ │ │ ├── contentWidgets/
│ │ │ │ │ │ │ │ └── contentWidgets.js
│ │ │ │ │ │ │ ├── currentLineHighlight/
│ │ │ │ │ │ │ │ ├── currentLineHighlight.css
│ │ │ │ │ │ │ │ └── currentLineHighlight.js
│ │ │ │ │ │ │ ├── decorations/
│ │ │ │ │ │ │ │ ├── decorations.css
│ │ │ │ │ │ │ │ └── decorations.js
│ │ │ │ │ │ │ ├── editorScrollbar/
│ │ │ │ │ │ │ │ └── editorScrollbar.js
│ │ │ │ │ │ │ ├── glyphMargin/
│ │ │ │ │ │ │ │ ├── glyphMargin.css
│ │ │ │ │ │ │ │ └── glyphMargin.js
│ │ │ │ │ │ │ ├── indentGuides/
│ │ │ │ │ │ │ │ ├── indentGuides.css
│ │ │ │ │ │ │ │ └── indentGuides.js
│ │ │ │ │ │ │ ├── lineNumbers/
│ │ │ │ │ │ │ │ ├── lineNumbers.css
│ │ │ │ │ │ │ │ └── lineNumbers.js
│ │ │ │ │ │ │ ├── lines/
│ │ │ │ │ │ │ │ ├── domReadingContext.js
│ │ │ │ │ │ │ │ ├── rangeUtil.js
│ │ │ │ │ │ │ │ ├── viewLine.js
│ │ │ │ │ │ │ │ ├── viewLines.css
│ │ │ │ │ │ │ │ └── viewLines.js
│ │ │ │ │ │ │ ├── linesDecorations/
│ │ │ │ │ │ │ │ ├── linesDecorations.css
│ │ │ │ │ │ │ │ └── linesDecorations.js
│ │ │ │ │ │ │ ├── margin/
│ │ │ │ │ │ │ │ ├── margin.css
│ │ │ │ │ │ │ │ └── margin.js
│ │ │ │ │ │ │ ├── marginDecorations/
│ │ │ │ │ │ │ │ ├── marginDecorations.css
│ │ │ │ │ │ │ │ └── marginDecorations.js
│ │ │ │ │ │ │ ├── minimap/
│ │ │ │ │ │ │ │ ├── minimap.css
│ │ │ │ │ │ │ │ ├── minimap.js
│ │ │ │ │ │ │ │ ├── minimapCharRenderer.js
│ │ │ │ │ │ │ │ ├── minimapCharRendererFactory.js
│ │ │ │ │ │ │ │ ├── minimapCharSheet.js
│ │ │ │ │ │ │ │ └── minimapPreBaked.js
│ │ │ │ │ │ │ ├── overlayWidgets/
│ │ │ │ │ │ │ │ ├── overlayWidgets.css
│ │ │ │ │ │ │ │ └── overlayWidgets.js
│ │ │ │ │ │ │ ├── overviewRuler/
│ │ │ │ │ │ │ │ ├── decorationsOverviewRuler.js
│ │ │ │ │ │ │ │ └── overviewRuler.js
│ │ │ │ │ │ │ ├── rulers/
│ │ │ │ │ │ │ │ ├── rulers.css
│ │ │ │ │ │ │ │ └── rulers.js
│ │ │ │ │ │ │ ├── scrollDecoration/
│ │ │ │ │ │ │ │ ├── scrollDecoration.css
│ │ │ │ │ │ │ │ └── scrollDecoration.js
│ │ │ │ │ │ │ ├── selections/
│ │ │ │ │ │ │ │ ├── selections.css
│ │ │ │ │ │ │ │ └── selections.js
│ │ │ │ │ │ │ ├── viewCursors/
│ │ │ │ │ │ │ │ ├── viewCursor.js
│ │ │ │ │ │ │ │ ├── viewCursors.css
│ │ │ │ │ │ │ │ └── viewCursors.js
│ │ │ │ │ │ │ ├── viewZones/
│ │ │ │ │ │ │ │ └── viewZones.js
│ │ │ │ │ │ │ └── whitespace/
│ │ │ │ │ │ │ ├── whitespace.css
│ │ │ │ │ │ │ └── whitespace.js
│ │ │ │ │ │ └── widget/
│ │ │ │ │ │ ├── codeEditor/
│ │ │ │ │ │ │ ├── codeEditorContributions.js
│ │ │ │ │ │ │ ├── codeEditorWidget.d.ts
│ │ │ │ │ │ │ ├── codeEditorWidget.js
│ │ │ │ │ │ │ ├── editor.css
│ │ │ │ │ │ │ └── embeddedCodeEditorWidget.js
│ │ │ │ │ │ ├── diffEditor/
│ │ │ │ │ │ │ ├── commands.js
│ │ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ │ ├── accessibleDiffViewer.css
│ │ │ │ │ │ │ │ ├── accessibleDiffViewer.js
│ │ │ │ │ │ │ │ ├── diffEditorDecorations.js
│ │ │ │ │ │ │ │ ├── diffEditorEditors.js
│ │ │ │ │ │ │ │ ├── diffEditorSash.js
│ │ │ │ │ │ │ │ └── diffEditorViewZones/
│ │ │ │ │ │ │ │ ├── diffEditorViewZones.js
│ │ │ │ │ │ │ │ ├── inlineDiffDeletedCodeMargin.js
│ │ │ │ │ │ │ │ └── renderLines.js
│ │ │ │ │ │ │ ├── delegatingEditorImpl.js
│ │ │ │ │ │ │ ├── diffEditor.contribution.d.ts
│ │ │ │ │ │ │ ├── diffEditor.contribution.js
│ │ │ │ │ │ │ ├── diffEditorOptions.js
│ │ │ │ │ │ │ ├── diffEditorViewModel.js
│ │ │ │ │ │ │ ├── diffEditorWidget.js
│ │ │ │ │ │ │ ├── diffProviderFactoryService.js
│ │ │ │ │ │ │ ├── features/
│ │ │ │ │ │ │ │ ├── gutterFeature.js
│ │ │ │ │ │ │ │ ├── hideUnchangedRegionsFeature.js
│ │ │ │ │ │ │ │ ├── movedBlocksLinesFeature.js
│ │ │ │ │ │ │ │ ├── overviewRulerFeature.js
│ │ │ │ │ │ │ │ └── revertButtonsFeature.js
│ │ │ │ │ │ │ ├── registrations.contribution.js
│ │ │ │ │ │ │ ├── style.css
│ │ │ │ │ │ │ ├── utils/
│ │ │ │ │ │ │ │ └── editorGutter.js
│ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ ├── markdownRenderer/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── markdownRenderer.js
│ │ │ │ │ │ │ └── renderedMarkdown.css
│ │ │ │ │ │ └── multiDiffEditor/
│ │ │ │ │ │ ├── colors.js
│ │ │ │ │ │ ├── diffEditorItemTemplate.js
│ │ │ │ │ │ ├── model.js
│ │ │ │ │ │ ├── multiDiffEditorViewModel.js
│ │ │ │ │ │ ├── multiDiffEditorWidget.js
│ │ │ │ │ │ ├── multiDiffEditorWidgetImpl.js
│ │ │ │ │ │ ├── objectPool.js
│ │ │ │ │ │ ├── style.css
│ │ │ │ │ │ ├── utils.js
│ │ │ │ │ │ └── workbenchUIElementFactory.js
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── commands/
│ │ │ │ │ │ │ ├── replaceCommand.js
│ │ │ │ │ │ │ ├── shiftCommand.js
│ │ │ │ │ │ │ ├── surroundSelectionCommand.js
│ │ │ │ │ │ │ └── trimTrailingWhitespaceCommand.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── diffEditor.js
│ │ │ │ │ │ │ ├── editorConfiguration.js
│ │ │ │ │ │ │ ├── editorConfigurationSchema.js
│ │ │ │ │ │ │ ├── editorOptions.js
│ │ │ │ │ │ │ ├── editorZoom.js
│ │ │ │ │ │ │ └── fontInfo.js
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── characterClassifier.js
│ │ │ │ │ │ │ ├── cursorColumns.js
│ │ │ │ │ │ │ ├── dimension.js
│ │ │ │ │ │ │ ├── editOperation.js
│ │ │ │ │ │ │ ├── editorColorRegistry.js
│ │ │ │ │ │ │ ├── eolCounter.js
│ │ │ │ │ │ │ ├── indentation.js
│ │ │ │ │ │ │ ├── lineRange.js
│ │ │ │ │ │ │ ├── offsetRange.js
│ │ │ │ │ │ │ ├── position.js
│ │ │ │ │ │ │ ├── positionToOffset.js
│ │ │ │ │ │ │ ├── range.js
│ │ │ │ │ │ │ ├── rgba.js
│ │ │ │ │ │ │ ├── selection.js
│ │ │ │ │ │ │ ├── stringBuilder.js
│ │ │ │ │ │ │ ├── textChange.js
│ │ │ │ │ │ │ ├── textEdit.js
│ │ │ │ │ │ │ ├── textLength.js
│ │ │ │ │ │ │ ├── textModelDefaults.js
│ │ │ │ │ │ │ ├── wordCharacterClassifier.js
│ │ │ │ │ │ │ └── wordHelper.js
│ │ │ │ │ │ ├── cursor/
│ │ │ │ │ │ │ ├── cursor.js
│ │ │ │ │ │ │ ├── cursorAtomicMoveOperations.js
│ │ │ │ │ │ │ ├── cursorCollection.js
│ │ │ │ │ │ │ ├── cursorColumnSelection.js
│ │ │ │ │ │ │ ├── cursorContext.js
│ │ │ │ │ │ │ ├── cursorDeleteOperations.js
│ │ │ │ │ │ │ ├── cursorMoveCommands.js
│ │ │ │ │ │ │ ├── cursorMoveOperations.js
│ │ │ │ │ │ │ ├── cursorTypeOperations.js
│ │ │ │ │ │ │ ├── cursorWordOperations.js
│ │ │ │ │ │ │ └── oneCursor.js
│ │ │ │ │ │ ├── cursorCommon.js
│ │ │ │ │ │ ├── cursorEvents.js
│ │ │ │ │ │ ├── diff/
│ │ │ │ │ │ │ ├── defaultLinesDiffComputer/
│ │ │ │ │ │ │ │ ├── algorithms/
│ │ │ │ │ │ │ │ │ ├── diffAlgorithm.js
│ │ │ │ │ │ │ │ │ ├── dynamicProgrammingDiffing.js
│ │ │ │ │ │ │ │ │ └── myersDiffAlgorithm.js
│ │ │ │ │ │ │ │ ├── computeMovedLines.js
│ │ │ │ │ │ │ │ ├── defaultLinesDiffComputer.js
│ │ │ │ │ │ │ │ ├── heuristicSequenceOptimizations.js
│ │ │ │ │ │ │ │ ├── lineSequence.js
│ │ │ │ │ │ │ │ ├── linesSliceCharSequence.js
│ │ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ │ ├── documentDiffProvider.js
│ │ │ │ │ │ │ ├── legacyLinesDiffComputer.js
│ │ │ │ │ │ │ ├── linesDiffComputer.js
│ │ │ │ │ │ │ ├── linesDiffComputers.js
│ │ │ │ │ │ │ └── rangeMapping.js
│ │ │ │ │ │ ├── editorAction.js
│ │ │ │ │ │ ├── editorCommon.js
│ │ │ │ │ │ ├── editorContextKeys.js
│ │ │ │ │ │ ├── editorFeatures.js
│ │ │ │ │ │ ├── editorTheme.js
│ │ │ │ │ │ ├── encodedTokenAttributes.js
│ │ │ │ │ │ ├── languageFeatureRegistry.js
│ │ │ │ │ │ ├── languageSelector.js
│ │ │ │ │ │ ├── languages/
│ │ │ │ │ │ │ ├── autoIndent.js
│ │ │ │ │ │ │ ├── defaultDocumentColorsComputer.js
│ │ │ │ │ │ │ ├── enterAction.js
│ │ │ │ │ │ │ ├── language.js
│ │ │ │ │ │ │ ├── languageConfiguration.js
│ │ │ │ │ │ │ ├── languageConfigurationRegistry.js
│ │ │ │ │ │ │ ├── linkComputer.js
│ │ │ │ │ │ │ ├── modesRegistry.js
│ │ │ │ │ │ │ ├── nullTokenize.js
│ │ │ │ │ │ │ ├── supports/
│ │ │ │ │ │ │ │ ├── characterPair.js
│ │ │ │ │ │ │ │ ├── electricCharacter.js
│ │ │ │ │ │ │ │ ├── indentRules.js
│ │ │ │ │ │ │ │ ├── indentationLineProcessor.js
│ │ │ │ │ │ │ │ ├── inplaceReplaceSupport.js
│ │ │ │ │ │ │ │ ├── languageBracketsConfiguration.js
│ │ │ │ │ │ │ │ ├── onEnter.js
│ │ │ │ │ │ │ │ ├── richEditBrackets.js
│ │ │ │ │ │ │ │ └── tokenization.js
│ │ │ │ │ │ │ ├── supports.js
│ │ │ │ │ │ │ └── textToHtmlTokenizer.js
│ │ │ │ │ │ ├── languages.js
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── bracketPairsTextModelPart/
│ │ │ │ │ │ │ │ ├── bracketPairsImpl.js
│ │ │ │ │ │ │ │ ├── bracketPairsTree/
│ │ │ │ │ │ │ │ │ ├── ast.js
│ │ │ │ │ │ │ │ │ ├── beforeEditPositionMapper.js
│ │ │ │ │ │ │ │ │ ├── bracketPairsTree.js
│ │ │ │ │ │ │ │ │ ├── brackets.js
│ │ │ │ │ │ │ │ │ ├── combineTextEditInfos.js
│ │ │ │ │ │ │ │ │ ├── concat23Trees.js
│ │ │ │ │ │ │ │ │ ├── length.js
│ │ │ │ │ │ │ │ │ ├── nodeReader.js
│ │ │ │ │ │ │ │ │ ├── parser.js
│ │ │ │ │ │ │ │ │ ├── smallImmutableSet.js
│ │ │ │ │ │ │ │ │ └── tokenizer.js
│ │ │ │ │ │ │ │ ├── colorizedBracketPairsDecorationProvider.js
│ │ │ │ │ │ │ │ └── fixBrackets.js
│ │ │ │ │ │ │ ├── decorationProvider.js
│ │ │ │ │ │ │ ├── editStack.js
│ │ │ │ │ │ │ ├── fixedArray.js
│ │ │ │ │ │ │ ├── guidesTextModelPart.js
│ │ │ │ │ │ │ ├── indentationGuesser.js
│ │ │ │ │ │ │ ├── intervalTree.js
│ │ │ │ │ │ │ ├── mirrorTextModel.js
│ │ │ │ │ │ │ ├── pieceTreeTextBuffer/
│ │ │ │ │ │ │ │ ├── pieceTreeBase.js
│ │ │ │ │ │ │ │ ├── pieceTreeTextBuffer.js
│ │ │ │ │ │ │ │ ├── pieceTreeTextBufferBuilder.js
│ │ │ │ │ │ │ │ └── rbTreeBase.js
│ │ │ │ │ │ │ ├── prefixSumComputer.js
│ │ │ │ │ │ │ ├── textModel.js
│ │ │ │ │ │ │ ├── textModelPart.js
│ │ │ │ │ │ │ ├── textModelSearch.js
│ │ │ │ │ │ │ ├── textModelText.js
│ │ │ │ │ │ │ ├── textModelTokens.js
│ │ │ │ │ │ │ ├── tokenizationTextModelPart.js
│ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ ├── model.js
│ │ │ │ │ │ ├── modelLineProjectionData.js
│ │ │ │ │ │ ├── services/
│ │ │ │ │ │ │ ├── editorBaseApi.js
│ │ │ │ │ │ │ ├── editorSimpleWorker.js
│ │ │ │ │ │ │ ├── editorWorker.js
│ │ │ │ │ │ │ ├── editorWorkerHost.js
│ │ │ │ │ │ │ ├── findSectionHeaders.js
│ │ │ │ │ │ │ ├── getIconClasses.js
│ │ │ │ │ │ │ ├── languageFeatureDebounce.js
│ │ │ │ │ │ │ ├── languageFeatures.js
│ │ │ │ │ │ │ ├── languageFeaturesService.js
│ │ │ │ │ │ │ ├── languageService.js
│ │ │ │ │ │ │ ├── languagesAssociations.js
│ │ │ │ │ │ │ ├── languagesRegistry.js
│ │ │ │ │ │ │ ├── markerDecorations.js
│ │ │ │ │ │ │ ├── markerDecorationsService.js
│ │ │ │ │ │ │ ├── model.js
│ │ │ │ │ │ │ ├── modelService.js
│ │ │ │ │ │ │ ├── resolverService.js
│ │ │ │ │ │ │ ├── semanticTokensDto.js
│ │ │ │ │ │ │ ├── semanticTokensProviderStyling.js
│ │ │ │ │ │ │ ├── semanticTokensStyling.js
│ │ │ │ │ │ │ ├── semanticTokensStylingService.js
│ │ │ │ │ │ │ ├── textResourceConfiguration.js
│ │ │ │ │ │ │ ├── treeViewsDnd.js
│ │ │ │ │ │ │ ├── treeViewsDndService.js
│ │ │ │ │ │ │ └── unicodeTextModelHighlighter.js
│ │ │ │ │ │ ├── standalone/
│ │ │ │ │ │ │ └── standaloneEnums.js
│ │ │ │ │ │ ├── standaloneStrings.js
│ │ │ │ │ │ ├── textModelBracketPairs.js
│ │ │ │ │ │ ├── textModelEvents.js
│ │ │ │ │ │ ├── textModelGuides.js
│ │ │ │ │ │ ├── tokenizationRegistry.js
│ │ │ │ │ │ ├── tokenizationTextModelPart.js
│ │ │ │ │ │ ├── tokens/
│ │ │ │ │ │ │ ├── contiguousMultilineTokens.js
│ │ │ │ │ │ │ ├── contiguousMultilineTokensBuilder.js
│ │ │ │ │ │ │ ├── contiguousTokensEditing.js
│ │ │ │ │ │ │ ├── contiguousTokensStore.js
│ │ │ │ │ │ │ ├── lineTokens.js
│ │ │ │ │ │ │ ├── sparseMultilineTokens.js
│ │ │ │ │ │ │ └── sparseTokensStore.js
│ │ │ │ │ │ ├── viewEventHandler.js
│ │ │ │ │ │ ├── viewEvents.js
│ │ │ │ │ │ ├── viewLayout/
│ │ │ │ │ │ │ ├── lineDecorations.js
│ │ │ │ │ │ │ ├── linePart.js
│ │ │ │ │ │ │ ├── linesLayout.js
│ │ │ │ │ │ │ ├── viewLayout.js
│ │ │ │ │ │ │ ├── viewLineRenderer.js
│ │ │ │ │ │ │ └── viewLinesViewportData.js
│ │ │ │ │ │ ├── viewModel/
│ │ │ │ │ │ │ ├── glyphLanesModel.js
│ │ │ │ │ │ │ ├── minimapTokensColorTracker.js
│ │ │ │ │ │ │ ├── modelLineProjection.js
│ │ │ │ │ │ │ ├── monospaceLineBreaksComputer.js
│ │ │ │ │ │ │ ├── overviewZoneManager.js
│ │ │ │ │ │ │ ├── viewContext.js
│ │ │ │ │ │ │ ├── viewModelDecorations.js
│ │ │ │ │ │ │ ├── viewModelImpl.js
│ │ │ │ │ │ │ └── viewModelLines.js
│ │ │ │ │ │ ├── viewModel.js
│ │ │ │ │ │ └── viewModelEventDispatcher.js
│ │ │ │ │ ├── contrib/
│ │ │ │ │ │ ├── anchorSelect/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── anchorSelect.css
│ │ │ │ │ │ │ ├── anchorSelect.d.ts
│ │ │ │ │ │ │ └── anchorSelect.js
│ │ │ │ │ │ ├── bracketMatching/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── bracketMatching.css
│ │ │ │ │ │ │ ├── bracketMatching.d.ts
│ │ │ │ │ │ │ └── bracketMatching.js
│ │ │ │ │ │ ├── caretOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── caretOperations.d.ts
│ │ │ │ │ │ │ ├── caretOperations.js
│ │ │ │ │ │ │ ├── moveCaretCommand.js
│ │ │ │ │ │ │ ├── transpose.d.ts
│ │ │ │ │ │ │ └── transpose.js
│ │ │ │ │ │ ├── clipboard/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── clipboard.d.ts
│ │ │ │ │ │ │ └── clipboard.js
│ │ │ │ │ │ ├── codeAction/
│ │ │ │ │ │ │ ├── browser/
│ │ │ │ │ │ │ │ ├── codeAction.js
│ │ │ │ │ │ │ │ ├── codeActionCommands.js
│ │ │ │ │ │ │ │ ├── codeActionContributions.d.ts
│ │ │ │ │ │ │ │ ├── codeActionContributions.js
│ │ │ │ │ │ │ │ ├── codeActionController.js
│ │ │ │ │ │ │ │ ├── codeActionKeybindingResolver.js
│ │ │ │ │ │ │ │ ├── codeActionMenu.js
│ │ │ │ │ │ │ │ ├── codeActionModel.js
│ │ │ │ │ │ │ │ ├── lightBulbWidget.css
│ │ │ │ │ │ │ │ └── lightBulbWidget.js
│ │ │ │ │ │ │ └── common/
│ │ │ │ │ │ │ └── types.js
│ │ │ │ │ │ ├── codelens/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── codeLensCache.js
│ │ │ │ │ │ │ ├── codelens.js
│ │ │ │ │ │ │ ├── codelensController.d.ts
│ │ │ │ │ │ │ ├── codelensController.js
│ │ │ │ │ │ │ ├── codelensWidget.css
│ │ │ │ │ │ │ └── codelensWidget.js
│ │ │ │ │ │ ├── colorPicker/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── color.js
│ │ │ │ │ │ │ ├── colorContributions.d.ts
│ │ │ │ │ │ │ ├── colorContributions.js
│ │ │ │ │ │ │ ├── colorDetector.js
│ │ │ │ │ │ │ ├── colorHoverParticipant.js
│ │ │ │ │ │ │ ├── colorPicker.css
│ │ │ │ │ │ │ ├── colorPickerModel.js
│ │ │ │ │ │ │ ├── colorPickerWidget.js
│ │ │ │ │ │ │ ├── defaultDocumentColorProvider.js
│ │ │ │ │ │ │ ├── standaloneColorPickerActions.d.ts
│ │ │ │ │ │ │ ├── standaloneColorPickerActions.js
│ │ │ │ │ │ │ └── standaloneColorPickerWidget.js
│ │ │ │ │ │ ├── comment/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── blockCommentCommand.js
│ │ │ │ │ │ │ ├── comment.d.ts
│ │ │ │ │ │ │ ├── comment.js
│ │ │ │ │ │ │ └── lineCommentCommand.js
│ │ │ │ │ │ ├── contextmenu/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contextmenu.d.ts
│ │ │ │ │ │ │ └── contextmenu.js
│ │ │ │ │ │ ├── cursorUndo/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── cursorUndo.d.ts
│ │ │ │ │ │ │ └── cursorUndo.js
│ │ │ │ │ │ ├── diffEditorBreadcrumbs/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contribution.d.ts
│ │ │ │ │ │ │ └── contribution.js
│ │ │ │ │ │ ├── dnd/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── dnd.css
│ │ │ │ │ │ │ ├── dnd.d.ts
│ │ │ │ │ │ │ ├── dnd.js
│ │ │ │ │ │ │ └── dragAndDropCommand.js
│ │ │ │ │ │ ├── documentSymbols/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── documentSymbols.d.ts
│ │ │ │ │ │ │ ├── documentSymbols.js
│ │ │ │ │ │ │ └── outlineModel.js
│ │ │ │ │ │ ├── dropOrPasteInto/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── copyPasteContribution.d.ts
│ │ │ │ │ │ │ ├── copyPasteContribution.js
│ │ │ │ │ │ │ ├── copyPasteController.js
│ │ │ │ │ │ │ ├── defaultProviders.js
│ │ │ │ │ │ │ ├── dropIntoEditorContribution.d.ts
│ │ │ │ │ │ │ ├── dropIntoEditorContribution.js
│ │ │ │ │ │ │ ├── dropIntoEditorController.js
│ │ │ │ │ │ │ ├── edit.js
│ │ │ │ │ │ │ ├── postEditWidget.css
│ │ │ │ │ │ │ └── postEditWidget.js
│ │ │ │ │ │ ├── editorState/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── editorState.js
│ │ │ │ │ │ │ └── keybindingCancellation.js
│ │ │ │ │ │ ├── find/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── findController.d.ts
│ │ │ │ │ │ │ ├── findController.js
│ │ │ │ │ │ │ ├── findDecorations.js
│ │ │ │ │ │ │ ├── findModel.js
│ │ │ │ │ │ │ ├── findOptionsWidget.css
│ │ │ │ │ │ │ ├── findOptionsWidget.js
│ │ │ │ │ │ │ ├── findState.js
│ │ │ │ │ │ │ ├── findWidget.css
│ │ │ │ │ │ │ ├── findWidget.js
│ │ │ │ │ │ │ ├── replaceAllCommand.js
│ │ │ │ │ │ │ └── replacePattern.js
│ │ │ │ │ │ ├── folding/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── folding.css
│ │ │ │ │ │ │ ├── folding.d.ts
│ │ │ │ │ │ │ ├── folding.js
│ │ │ │ │ │ │ ├── foldingDecorations.js
│ │ │ │ │ │ │ ├── foldingModel.js
│ │ │ │ │ │ │ ├── foldingRanges.js
│ │ │ │ │ │ │ ├── hiddenRangeModel.js
│ │ │ │ │ │ │ ├── indentRangeProvider.js
│ │ │ │ │ │ │ └── syntaxRangeProvider.js
│ │ │ │ │ │ ├── fontZoom/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── fontZoom.d.ts
│ │ │ │ │ │ │ └── fontZoom.js
│ │ │ │ │ │ ├── format/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── format.js
│ │ │ │ │ │ │ ├── formatActions.d.ts
│ │ │ │ │ │ │ ├── formatActions.js
│ │ │ │ │ │ │ └── formattingEdit.js
│ │ │ │ │ │ ├── gotoError/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── gotoError.d.ts
│ │ │ │ │ │ │ ├── gotoError.js
│ │ │ │ │ │ │ ├── gotoErrorWidget.js
│ │ │ │ │ │ │ ├── markerNavigationService.js
│ │ │ │ │ │ │ └── media/
│ │ │ │ │ │ │ └── gotoErrorWidget.css
│ │ │ │ │ │ ├── gotoSymbol/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── goToCommands.d.ts
│ │ │ │ │ │ │ ├── goToCommands.js
│ │ │ │ │ │ │ ├── goToSymbol.js
│ │ │ │ │ │ │ ├── link/
│ │ │ │ │ │ │ │ ├── clickLinkGesture.js
│ │ │ │ │ │ │ │ ├── goToDefinitionAtPosition.css
│ │ │ │ │ │ │ │ ├── goToDefinitionAtPosition.d.ts
│ │ │ │ │ │ │ │ └── goToDefinitionAtPosition.js
│ │ │ │ │ │ │ ├── peek/
│ │ │ │ │ │ │ │ ├── referencesController.js
│ │ │ │ │ │ │ │ ├── referencesTree.js
│ │ │ │ │ │ │ │ ├── referencesWidget.css
│ │ │ │ │ │ │ │ └── referencesWidget.js
│ │ │ │ │ │ │ ├── referencesModel.js
│ │ │ │ │ │ │ └── symbolNavigation.js
│ │ │ │ │ │ ├── hover/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contentHoverComputer.js
│ │ │ │ │ │ │ ├── contentHoverController.js
│ │ │ │ │ │ │ ├── contentHoverStatusBar.js
│ │ │ │ │ │ │ ├── contentHoverTypes.js
│ │ │ │ │ │ │ ├── contentHoverWidget.js
│ │ │ │ │ │ │ ├── getHover.js
│ │ │ │ │ │ │ ├── hover.css
│ │ │ │ │ │ │ ├── hoverAccessibleViews.js
│ │ │ │ │ │ │ ├── hoverActionIds.js
│ │ │ │ │ │ │ ├── hoverActions.js
│ │ │ │ │ │ │ ├── hoverContribution.d.ts
│ │ │ │ │ │ │ ├── hoverContribution.js
│ │ │ │ │ │ │ ├── hoverController.js
│ │ │ │ │ │ │ ├── hoverOperation.js
│ │ │ │ │ │ │ ├── hoverTypes.js
│ │ │ │ │ │ │ ├── marginHoverComputer.js
│ │ │ │ │ │ │ ├── marginHoverWidget.js
│ │ │ │ │ │ │ ├── markdownHoverParticipant.js
│ │ │ │ │ │ │ ├── markerHoverParticipant.js
│ │ │ │ │ │ │ └── resizableContentWidget.js
│ │ │ │ │ │ ├── inPlaceReplace/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── inPlaceReplace.css
│ │ │ │ │ │ │ ├── inPlaceReplace.d.ts
│ │ │ │ │ │ │ ├── inPlaceReplace.js
│ │ │ │ │ │ │ └── inPlaceReplaceCommand.js
│ │ │ │ │ │ ├── indentation/
│ │ │ │ │ │ │ ├── browser/
│ │ │ │ │ │ │ │ ├── indentation.d.ts
│ │ │ │ │ │ │ │ └── indentation.js
│ │ │ │ │ │ │ └── common/
│ │ │ │ │ │ │ ├── indentUtils.js
│ │ │ │ │ │ │ └── indentation.js
│ │ │ │ │ │ ├── inlayHints/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── inlayHints.js
│ │ │ │ │ │ │ ├── inlayHintsContribution.d.ts
│ │ │ │ │ │ │ ├── inlayHintsContribution.js
│ │ │ │ │ │ │ ├── inlayHintsController.js
│ │ │ │ │ │ │ ├── inlayHintsHover.js
│ │ │ │ │ │ │ └── inlayHintsLocations.js
│ │ │ │ │ │ ├── inlineCompletions/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── commandIds.js
│ │ │ │ │ │ │ ├── commands.js
│ │ │ │ │ │ │ ├── ghostText.css
│ │ │ │ │ │ │ ├── ghostText.js
│ │ │ │ │ │ │ ├── ghostTextWidget.js
│ │ │ │ │ │ │ ├── hoverParticipant.js
│ │ │ │ │ │ │ ├── inlineCompletionContextKeys.js
│ │ │ │ │ │ │ ├── inlineCompletions.contribution.d.ts
│ │ │ │ │ │ │ ├── inlineCompletions.contribution.js
│ │ │ │ │ │ │ ├── inlineCompletionsAccessibleView.js
│ │ │ │ │ │ │ ├── inlineCompletionsController.js
│ │ │ │ │ │ │ ├── inlineCompletionsHintsWidget.css
│ │ │ │ │ │ │ ├── inlineCompletionsHintsWidget.js
│ │ │ │ │ │ │ ├── inlineCompletionsModel.js
│ │ │ │ │ │ │ ├── inlineCompletionsSource.js
│ │ │ │ │ │ │ ├── provideInlineCompletions.js
│ │ │ │ │ │ │ ├── singleTextEdit.js
│ │ │ │ │ │ │ ├── suggestWidgetInlineCompletionProvider.js
│ │ │ │ │ │ │ └── utils.js
│ │ │ │ │ │ ├── inlineEdit/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── commandIds.js
│ │ │ │ │ │ │ ├── commands.js
│ │ │ │ │ │ │ ├── ghostTextWidget.js
│ │ │ │ │ │ │ ├── hoverParticipant.js
│ │ │ │ │ │ │ ├── inlineEdit.contribution.d.ts
│ │ │ │ │ │ │ ├── inlineEdit.contribution.js
│ │ │ │ │ │ │ ├── inlineEdit.css
│ │ │ │ │ │ │ ├── inlineEditController.js
│ │ │ │ │ │ │ ├── inlineEditHintsWidget.css
│ │ │ │ │ │ │ └── inlineEditHintsWidget.js
│ │ │ │ │ │ ├── inlineProgress/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── inlineProgress.d.ts
│ │ │ │ │ │ │ ├── inlineProgress.js
│ │ │ │ │ │ │ └── inlineProgressWidget.css
│ │ │ │ │ │ ├── lineSelection/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── lineSelection.d.ts
│ │ │ │ │ │ │ └── lineSelection.js
│ │ │ │ │ │ ├── linesOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── copyLinesCommand.js
│ │ │ │ │ │ │ ├── linesOperations.d.ts
│ │ │ │ │ │ │ ├── linesOperations.js
│ │ │ │ │ │ │ ├── moveLinesCommand.js
│ │ │ │ │ │ │ └── sortLinesCommand.js
│ │ │ │ │ │ ├── linkedEditing/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── linkedEditing.css
│ │ │ │ │ │ │ ├── linkedEditing.d.ts
│ │ │ │ │ │ │ └── linkedEditing.js
│ │ │ │ │ │ ├── links/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── getLinks.js
│ │ │ │ │ │ │ ├── links.css
│ │ │ │ │ │ │ ├── links.d.ts
│ │ │ │ │ │ │ └── links.js
│ │ │ │ │ │ ├── longLinesHelper/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── longLinesHelper.d.ts
│ │ │ │ │ │ │ └── longLinesHelper.js
│ │ │ │ │ │ ├── message/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── messageController.css
│ │ │ │ │ │ │ └── messageController.js
│ │ │ │ │ │ ├── multicursor/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── multicursor.d.ts
│ │ │ │ │ │ │ └── multicursor.js
│ │ │ │ │ │ ├── parameterHints/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── parameterHints.css
│ │ │ │ │ │ │ ├── parameterHints.d.ts
│ │ │ │ │ │ │ ├── parameterHints.js
│ │ │ │ │ │ │ ├── parameterHintsModel.js
│ │ │ │ │ │ │ ├── parameterHintsWidget.js
│ │ │ │ │ │ │ └── provideSignatureHelp.js
│ │ │ │ │ │ ├── peekView/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ └── peekViewWidget.css
│ │ │ │ │ │ │ └── peekView.js
│ │ │ │ │ │ ├── quickAccess/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── commandsQuickAccess.js
│ │ │ │ │ │ │ ├── editorNavigationQuickAccess.js
│ │ │ │ │ │ │ ├── gotoLineQuickAccess.js
│ │ │ │ │ │ │ └── gotoSymbolQuickAccess.js
│ │ │ │ │ │ ├── readOnlyMessage/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── contribution.d.ts
│ │ │ │ │ │ │ └── contribution.js
│ │ │ │ │ │ ├── rename/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── rename.d.ts
│ │ │ │ │ │ │ ├── rename.js
│ │ │ │ │ │ │ ├── renameWidget.css
│ │ │ │ │ │ │ └── renameWidget.js
│ │ │ │ │ │ ├── sectionHeaders/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── sectionHeaders.d.ts
│ │ │ │ │ │ │ └── sectionHeaders.js
│ │ │ │ │ │ ├── semanticTokens/
│ │ │ │ │ │ │ ├── browser/
│ │ │ │ │ │ │ │ ├── documentSemanticTokens.d.ts
│ │ │ │ │ │ │ │ ├── documentSemanticTokens.js
│ │ │ │ │ │ │ │ ├── viewportSemanticTokens.d.ts
│ │ │ │ │ │ │ │ └── viewportSemanticTokens.js
│ │ │ │ │ │ │ └── common/
│ │ │ │ │ │ │ ├── getSemanticTokens.js
│ │ │ │ │ │ │ └── semanticTokensConfig.js
│ │ │ │ │ │ ├── smartSelect/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── bracketSelections.js
│ │ │ │ │ │ │ ├── smartSelect.d.ts
│ │ │ │ │ │ │ ├── smartSelect.js
│ │ │ │ │ │ │ └── wordSelections.js
│ │ │ │ │ │ ├── snippet/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── snippetController2.d.ts
│ │ │ │ │ │ │ ├── snippetController2.js
│ │ │ │ │ │ │ ├── snippetParser.js
│ │ │ │ │ │ │ ├── snippetSession.css
│ │ │ │ │ │ │ ├── snippetSession.js
│ │ │ │ │ │ │ └── snippetVariables.js
│ │ │ │ │ │ ├── stickyScroll/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── stickyScroll.css
│ │ │ │ │ │ │ ├── stickyScrollActions.js
│ │ │ │ │ │ │ ├── stickyScrollContribution.d.ts
│ │ │ │ │ │ │ ├── stickyScrollContribution.js
│ │ │ │ │ │ │ ├── stickyScrollController.js
│ │ │ │ │ │ │ ├── stickyScrollElement.js
│ │ │ │ │ │ │ ├── stickyScrollModelProvider.js
│ │ │ │ │ │ │ ├── stickyScrollProvider.js
│ │ │ │ │ │ │ └── stickyScrollWidget.js
│ │ │ │ │ │ ├── suggest/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── completionModel.js
│ │ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ │ └── suggest.css
│ │ │ │ │ │ │ ├── suggest.js
│ │ │ │ │ │ │ ├── suggestAlternatives.js
│ │ │ │ │ │ │ ├── suggestCommitCharacters.js
│ │ │ │ │ │ │ ├── suggestController.d.ts
│ │ │ │ │ │ │ ├── suggestController.js
│ │ │ │ │ │ │ ├── suggestInlineCompletions.d.ts
│ │ │ │ │ │ │ ├── suggestInlineCompletions.js
│ │ │ │ │ │ │ ├── suggestMemory.js
│ │ │ │ │ │ │ ├── suggestModel.js
│ │ │ │ │ │ │ ├── suggestOvertypingCapturer.js
│ │ │ │ │ │ │ ├── suggestWidget.js
│ │ │ │ │ │ │ ├── suggestWidgetDetails.js
│ │ │ │ │ │ │ ├── suggestWidgetRenderer.js
│ │ │ │ │ │ │ ├── suggestWidgetStatus.js
│ │ │ │ │ │ │ ├── wordContextKey.js
│ │ │ │ │ │ │ └── wordDistance.js
│ │ │ │ │ │ ├── symbolIcons/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── symbolIcons.css
│ │ │ │ │ │ │ └── symbolIcons.js
│ │ │ │ │ │ ├── toggleTabFocusMode/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── toggleTabFocusMode.d.ts
│ │ │ │ │ │ │ └── toggleTabFocusMode.js
│ │ │ │ │ │ ├── tokenization/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── tokenization.d.ts
│ │ │ │ │ │ │ └── tokenization.js
│ │ │ │ │ │ ├── unicodeHighlighter/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── bannerController.css
│ │ │ │ │ │ │ ├── bannerController.js
│ │ │ │ │ │ │ ├── unicodeHighlighter.css
│ │ │ │ │ │ │ ├── unicodeHighlighter.d.ts
│ │ │ │ │ │ │ └── unicodeHighlighter.js
│ │ │ │ │ │ ├── unusualLineTerminators/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── unusualLineTerminators.d.ts
│ │ │ │ │ │ │ └── unusualLineTerminators.js
│ │ │ │ │ │ ├── wordHighlighter/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── highlightDecorations.css
│ │ │ │ │ │ │ ├── highlightDecorations.js
│ │ │ │ │ │ │ ├── wordHighlighter.d.ts
│ │ │ │ │ │ │ └── wordHighlighter.js
│ │ │ │ │ │ ├── wordOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── wordOperations.d.ts
│ │ │ │ │ │ │ └── wordOperations.js
│ │ │ │ │ │ ├── wordPartOperations/
│ │ │ │ │ │ │ └── browser/
│ │ │ │ │ │ │ ├── wordPartOperations.d.ts
│ │ │ │ │ │ │ └── wordPartOperations.js
│ │ │ │ │ │ └── zoneWidget/
│ │ │ │ │ │ └── browser/
│ │ │ │ │ │ ├── zoneWidget.css
│ │ │ │ │ │ └── zoneWidget.js
│ │ │ │ │ ├── edcore.main.js
│ │ │ │ │ ├── editor.all.js
│ │ │ │ │ ├── editor.api.d.ts
│ │ │ │ │ ├── editor.api.js
│ │ │ │ │ ├── editor.main.js
│ │ │ │ │ ├── editor.worker.js
│ │ │ │ │ └── standalone/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── colorizer.js
│ │ │ │ │ │ ├── iPadShowKeyboard/
│ │ │ │ │ │ │ ├── iPadShowKeyboard.css
│ │ │ │ │ │ │ ├── iPadShowKeyboard.d.ts
│ │ │ │ │ │ │ └── iPadShowKeyboard.js
│ │ │ │ │ │ ├── inspectTokens/
│ │ │ │ │ │ │ ├── inspectTokens.css
│ │ │ │ │ │ │ ├── inspectTokens.d.ts
│ │ │ │ │ │ │ └── inspectTokens.js
│ │ │ │ │ │ ├── quickAccess/
│ │ │ │ │ │ │ ├── standaloneCommandsQuickAccess.d.ts
│ │ │ │ │ │ │ ├── standaloneCommandsQuickAccess.js
│ │ │ │ │ │ │ ├── standaloneGotoLineQuickAccess.d.ts
│ │ │ │ │ │ │ ├── standaloneGotoLineQuickAccess.js
│ │ │ │ │ │ │ ├── standaloneGotoSymbolQuickAccess.d.ts
│ │ │ │ │ │ │ ├── standaloneGotoSymbolQuickAccess.js
│ │ │ │ │ │ │ ├── standaloneHelpQuickAccess.d.ts
│ │ │ │ │ │ │ └── standaloneHelpQuickAccess.js
│ │ │ │ │ │ ├── quickInput/
│ │ │ │ │ │ │ ├── standaloneQuickInput.css
│ │ │ │ │ │ │ └── standaloneQuickInputService.js
│ │ │ │ │ │ ├── referenceSearch/
│ │ │ │ │ │ │ ├── standaloneReferenceSearch.d.ts
│ │ │ │ │ │ │ └── standaloneReferenceSearch.js
│ │ │ │ │ │ ├── standalone-tokens.css
│ │ │ │ │ │ ├── standaloneCodeEditor.js
│ │ │ │ │ │ ├── standaloneCodeEditorService.js
│ │ │ │ │ │ ├── standaloneEditor.js
│ │ │ │ │ │ ├── standaloneLanguages.js
│ │ │ │ │ │ ├── standaloneLayoutService.js
│ │ │ │ │ │ ├── standaloneServices.js
│ │ │ │ │ │ ├── standaloneThemeService.js
│ │ │ │ │ │ └── toggleHighContrast/
│ │ │ │ │ │ ├── toggleHighContrast.d.ts
│ │ │ │ │ │ └── toggleHighContrast.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── monarch/
│ │ │ │ │ │ ├── monarchCommon.js
│ │ │ │ │ │ ├── monarchCompile.js
│ │ │ │ │ │ ├── monarchLexer.js
│ │ │ │ │ │ └── monarchTypes.js
│ │ │ │ │ ├── standaloneTheme.js
│ │ │ │ │ └── themes.js
│ │ │ │ ├── language/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── css.worker.js
│ │ │ │ │ │ ├── cssMode.js
│ │ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ │ └── monaco.contribution.js
│ │ │ │ │ ├── html/
│ │ │ │ │ │ ├── html.worker.js
│ │ │ │ │ │ ├── htmlMode.js
│ │ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ │ └── monaco.contribution.js
│ │ │ │ │ ├── json/
│ │ │ │ │ │ ├── json.worker.js
│ │ │ │ │ │ ├── jsonMode.js
│ │ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ │ └── monaco.contribution.js
│ │ │ │ │ └── typescript/
│ │ │ │ │ ├── monaco.contribution.d.ts
│ │ │ │ │ ├── monaco.contribution.js
│ │ │ │ │ ├── ts.worker.js
│ │ │ │ │ └── tsMode.js
│ │ │ │ ├── nls.js
│ │ │ │ └── platform/
│ │ │ │ ├── accessibility/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── accessibilityService.js
│ │ │ │ │ │ ├── accessibleView.js
│ │ │ │ │ │ └── accessibleViewRegistry.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── accessibility.js
│ │ │ │ ├── accessibilitySignal/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── accessibilitySignalService.js
│ │ │ │ ├── action/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── action.js
│ │ │ │ │ └── actionCommonCategories.js
│ │ │ │ ├── actionWidget/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── actionList.js
│ │ │ │ │ │ ├── actionWidget.css
│ │ │ │ │ │ └── actionWidget.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── actionWidget.js
│ │ │ │ ├── actions/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── menuEntryActionViewItem.css
│ │ │ │ │ │ ├── menuEntryActionViewItem.js
│ │ │ │ │ │ └── toolbar.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── menuService.js
│ │ │ │ ├── clipboard/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ └── clipboardService.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── clipboardService.js
│ │ │ │ ├── commands/
│ │ │ │ │ └── common/
│ │ │ │ │ └── commands.js
│ │ │ │ ├── configuration/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── configuration.js
│ │ │ │ │ ├── configurationModels.js
│ │ │ │ │ ├── configurationRegistry.js
│ │ │ │ │ └── configurations.js
│ │ │ │ ├── contextkey/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ └── contextKeyService.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── contextkey.js
│ │ │ │ │ ├── contextkeys.js
│ │ │ │ │ └── scanner.js
│ │ │ │ ├── contextview/
│ │ │ │ │ └── browser/
│ │ │ │ │ ├── contextMenuHandler.js
│ │ │ │ │ ├── contextMenuService.js
│ │ │ │ │ ├── contextView.js
│ │ │ │ │ └── contextViewService.js
│ │ │ │ ├── dialogs/
│ │ │ │ │ └── common/
│ │ │ │ │ └── dialogs.js
│ │ │ │ ├── dnd/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── dnd.js
│ │ │ │ ├── editor/
│ │ │ │ │ └── common/
│ │ │ │ │ └── editor.js
│ │ │ │ ├── environment/
│ │ │ │ │ └── common/
│ │ │ │ │ └── environment.js
│ │ │ │ ├── extensions/
│ │ │ │ │ └── common/
│ │ │ │ │ └── extensions.js
│ │ │ │ ├── files/
│ │ │ │ │ └── common/
│ │ │ │ │ └── files.js
│ │ │ │ ├── history/
│ │ │ │ │ └── browser/
│ │ │ │ │ ├── contextScopedHistoryWidget.js
│ │ │ │ │ └── historyWidgetKeybindingHint.js
│ │ │ │ ├── hover/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── hover.js
│ │ │ │ ├── instantiation/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── descriptors.js
│ │ │ │ │ ├── extensions.js
│ │ │ │ │ ├── graph.js
│ │ │ │ │ ├── instantiation.js
│ │ │ │ │ ├── instantiationService.js
│ │ │ │ │ └── serviceCollection.js
│ │ │ │ ├── jsonschemas/
│ │ │ │ │ └── common/
│ │ │ │ │ └── jsonContributionRegistry.js
│ │ │ │ ├── keybinding/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── abstractKeybindingService.js
│ │ │ │ │ ├── baseResolvedKeybinding.js
│ │ │ │ │ ├── keybinding.js
│ │ │ │ │ ├── keybindingResolver.js
│ │ │ │ │ ├── keybindingsRegistry.js
│ │ │ │ │ ├── resolvedKeybindingItem.js
│ │ │ │ │ └── usLayoutResolvedKeybinding.js
│ │ │ │ ├── label/
│ │ │ │ │ └── common/
│ │ │ │ │ └── label.js
│ │ │ │ ├── layout/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── layoutService.js
│ │ │ │ ├── list/
│ │ │ │ │ └── browser/
│ │ │ │ │ └── listService.js
│ │ │ │ ├── log/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── log.js
│ │ │ │ │ └── logService.js
│ │ │ │ ├── markers/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── markerService.js
│ │ │ │ │ └── markers.js
│ │ │ │ ├── notification/
│ │ │ │ │ └── common/
│ │ │ │ │ └── notification.js
│ │ │ │ ├── observable/
│ │ │ │ │ └── common/
│ │ │ │ │ └── platformObservableUtils.js
│ │ │ │ ├── opener/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── link.css
│ │ │ │ │ │ └── link.js
│ │ │ │ │ └── common/
│ │ │ │ │ └── opener.js
│ │ │ │ ├── policy/
│ │ │ │ │ └── common/
│ │ │ │ │ └── policy.js
│ │ │ │ ├── progress/
│ │ │ │ │ └── common/
│ │ │ │ │ └── progress.js
│ │ │ │ ├── quickinput/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── commandsQuickAccess.js
│ │ │ │ │ │ ├── helpQuickAccess.js
│ │ │ │ │ │ ├── media/
│ │ │ │ │ │ │ └── quickInput.css
│ │ │ │ │ │ ├── pickerQuickAccess.js
│ │ │ │ │ │ ├── quickAccess.js
│ │ │ │ │ │ ├── quickInput.js
│ │ │ │ │ │ ├── quickInputActions.js
│ │ │ │ │ │ ├── quickInputBox.js
│ │ │ │ │ │ ├── quickInputController.js
│ │ │ │ │ │ ├── quickInputService.js
│ │ │ │ │ │ ├── quickInputTree.js
│ │ │ │ │ │ └── quickInputUtils.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── quickAccess.js
│ │ │ │ │ └── quickInput.js
│ │ │ │ ├── registry/
│ │ │ │ │ └── common/
│ │ │ │ │ └── platform.js
│ │ │ │ ├── severityIcon/
│ │ │ │ │ └── browser/
│ │ │ │ │ ├── media/
│ │ │ │ │ │ └── severityIcon.css
│ │ │ │ │ └── severityIcon.js
│ │ │ │ ├── storage/
│ │ │ │ │ └── common/
│ │ │ │ │ └── storage.js
│ │ │ │ ├── telemetry/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── gdprTypings.js
│ │ │ │ │ └── telemetry.js
│ │ │ │ ├── theme/
│ │ │ │ │ ├── browser/
│ │ │ │ │ │ ├── defaultStyles.js
│ │ │ │ │ │ └── iconsStyleSheet.js
│ │ │ │ │ └── common/
│ │ │ │ │ ├── colorRegistry.js
│ │ │ │ │ ├── colorUtils.js
│ │ │ │ │ ├── colors/
│ │ │ │ │ │ ├── baseColors.js
│ │ │ │ │ │ ├── chartsColors.js
│ │ │ │ │ │ ├── editorColors.js
│ │ │ │ │ │ ├── inputColors.js
│ │ │ │ │ │ ├── listColors.js
│ │ │ │ │ │ ├── menuColors.js
│ │ │ │ │ │ ├── minimapColors.js
│ │ │ │ │ │ ├── miscColors.js
│ │ │ │ │ │ ├── quickpickColors.js
│ │ │ │ │ │ └── searchColors.js
│ │ │ │ │ ├── iconRegistry.js
│ │ │ │ │ ├── theme.js
│ │ │ │ │ └── themeService.js
│ │ │ │ ├── undoRedo/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── undoRedo.js
│ │ │ │ │ └── undoRedoService.js
│ │ │ │ └── workspace/
│ │ │ │ └── common/
│ │ │ │ ├── workspace.js
│ │ │ │ └── workspaceTrust.js
│ │ │ ├── nyqBNV6O.js
│ │ │ ├── oQwgk5qA.js
│ │ │ ├── qXRMwz9A.js
│ │ │ ├── qmhIZ77x.js
│ │ │ ├── qpfuy3xp.js
│ │ │ ├── rKxcFsZi.js
│ │ │ ├── rUbGlJbN.js
│ │ │ ├── s0YP2YF7.js
│ │ │ ├── sacFqUAJ.js
│ │ │ ├── sdHcTMYB.js
│ │ │ ├── shcSOmrb.js
│ │ │ ├── ul-Lp4lw.js
│ │ │ ├── w-ucz2PV.js
│ │ │ ├── w8dY5SsB.js
│ │ │ ├── wI6OXr6j.js
│ │ │ ├── wLBHnxd4.js
│ │ │ ├── xI-RfyKK.js
│ │ │ ├── xW4inM5L.js
│ │ │ ├── ySlJ1b_l.js
│ │ │ ├── yf5bffbF.js
│ │ │ ├── zIqOaAtZ.js
│ │ │ └── zocC4JxJ.js
│ │ ├── index.html
│ │ └── robots.txt
│ ├── store/
│ │ ├── __init__.py
│ │ ├── state_app.py
│ │ ├── state_candles.py
│ │ ├── state_closed_trades.py
│ │ ├── state_exchanges.py
│ │ ├── state_logs.py
│ │ ├── state_orderbook.py
│ │ ├── state_orders.py
│ │ ├── state_positions.py
│ │ ├── state_tickers.py
│ │ └── state_trades.py
│ ├── strategies/
│ │ ├── CanAddClosedTradeToStore/
│ │ │ └── __init__.py
│ │ ├── Strategy.py
│ │ ├── Test01/
│ │ │ └── __init__.py
│ │ ├── Test02/
│ │ │ └── __init__.py
│ │ ├── Test04/
│ │ │ └── __init__.py
│ │ ├── Test05/
│ │ │ └── __init__.py
│ │ ├── Test06/
│ │ │ └── __init__.py
│ │ ├── Test07/
│ │ │ └── __init__.py
│ │ ├── Test08/
│ │ │ └── __init__.py
│ │ ├── Test09/
│ │ │ └── __init__.py
│ │ ├── Test10/
│ │ │ └── __init__.py
│ │ ├── Test11/
│ │ │ └── __init__.py
│ │ ├── Test12/
│ │ │ └── __init__.py
│ │ ├── Test13/
│ │ │ └── __init__.py
│ │ ├── Test14/
│ │ │ └── __init__.py
│ │ ├── Test15/
│ │ │ └── __init__.py
│ │ ├── Test16/
│ │ │ └── __init__.py
│ │ ├── Test17/
│ │ │ └── __init__.py
│ │ ├── Test18/
│ │ │ └── __init__.py
│ │ ├── Test19/
│ │ │ └── __init__.py
│ │ ├── Test20/
│ │ │ └── __init__.py
│ │ ├── Test21/
│ │ │ └── __init__.py
│ │ ├── Test22/
│ │ │ └── __init__.py
│ │ ├── Test23/
│ │ │ └── __init__.py
│ │ ├── Test24/
│ │ │ └── __init__.py
│ │ ├── Test25/
│ │ │ └── __init__.py
│ │ ├── Test26/
│ │ │ └── __init__.py
│ │ ├── Test27/
│ │ │ └── __init__.py
│ │ ├── Test28/
│ │ │ └── __init__.py
│ │ ├── Test29/
│ │ │ └── __init__.py
│ │ ├── Test30/
│ │ │ └── __init__.py
│ │ ├── Test31/
│ │ │ └── __init__.py
│ │ ├── Test32/
│ │ │ └── __init__.py
│ │ ├── Test33/
│ │ │ └── __init__.py
│ │ ├── Test34/
│ │ │ └── __init__.py
│ │ ├── Test35/
│ │ │ └── __init__.py
│ │ ├── Test36/
│ │ │ └── __init__.py
│ │ ├── Test37/
│ │ │ └── __init__.py
│ │ ├── Test38/
│ │ │ └── __init__.py
│ │ ├── Test39/
│ │ │ └── __init__.py
│ │ ├── Test40/
│ │ │ └── __init__.py
│ │ ├── Test41/
│ │ │ └── __init__.py
│ │ ├── Test44/
│ │ │ └── __init__.py
│ │ ├── Test45/
│ │ │ └── __init__.py
│ │ ├── Test46/
│ │ │ └── __init__.py
│ │ ├── Test47/
│ │ │ └── __init__.py
│ │ ├── Test48/
│ │ │ └── __init__.py
│ │ ├── TestAddHorizontalLineToCandleChart/
│ │ │ └── __init__.py
│ │ ├── TestAddHorizontalLineToExtraChart/
│ │ │ └── __init__.py
│ │ ├── TestAddLineToCandleChart/
│ │ │ └── __init__.py
│ │ ├── TestAddLineToExtraChart/
│ │ │ └── __init__.py
│ │ ├── TestAfterMethod/
│ │ │ └── __init__.py
│ │ ├── TestAverageEntryPriceProperty/
│ │ │ └── __init__.py
│ │ ├── TestBalanceAndFeeReductionWorksCorrectlyInSpotModeInBothBuyAndSellOrders/
│ │ │ └── __init__.py
│ │ ├── TestBalancesAreHandledCorrectlyForCancellingOrdersInSpot/
│ │ │ └── __init__.py
│ │ ├── TestBeforeMethod/
│ │ │ └── __init__.py
│ │ ├── TestBeforeTerminate/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionLong1/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionLong2/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionShort1/
│ │ │ └── __init__.py
│ │ ├── TestCanCancelEntryOrdersAfterOpenPositionShort2/
│ │ │ └── __init__.py
│ │ ├── TestCanOpenANewPositionImmediatelyAfterClosingViaUpdatePosition/
│ │ │ └── __init__.py
│ │ ├── TestCanRunWithoutShorting/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitStopLossOrderWithSizeEqualToCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitStopLossOrderWithSizeLessThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitTakeProfitAndStopLossAtSameTimeInSpot/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitTakeProfitOrderWithSizeEqualToCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCanSubmitTakeProfitOrderWithSizeLessThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCannotSetStopLossOrderInGoLong/
│ │ │ └── __init__.py
│ │ ├── TestCannotSetTakeProfitOrderInGoLong/
│ │ │ └── __init__.py
│ │ ├── TestCannotSpendMoreThanAvailableBalance/
│ │ │ └── __init__.py
│ │ ├── TestCannotSubmitStopLossOrderWithSizeMoreThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCannotSubmitTakeProfitOrderWithSizeMoreThanCurrentPositionQty/
│ │ │ └── __init__.py
│ │ ├── TestCapitalPropertyRaisesNotImplementedError/
│ │ │ └── __init__.py
│ │ ├── TestClosedTradeAfterExitingTrade/
│ │ │ └── __init__.py
│ │ ├── TestCurrentRouteIndex1/
│ │ │ └── __init__.py
│ │ ├── TestCurrentRouteIndex2/
│ │ │ └── __init__.py
│ │ ├── TestDailyBalanceStoresPortfolioValue/
│ │ │ └── __init__.py
│ │ ├── TestDailyBalancesProperty/
│ │ │ └── __init__.py
│ │ ├── TestDataRoutes1/
│ │ │ └── __init__.py
│ │ ├── TestDataRoutes2/
│ │ │ └── __init__.py
│ │ ├── TestDefaultHyperparameters/
│ │ │ └── __init__.py
│ │ ├── TestDnaMethod/
│ │ │ └── __init__.py
│ │ ├── TestEmptyStrategy/
│ │ │ └── __init__.py
│ │ ├── TestEntryOrdersAndExitOrdersProperties/
│ │ │ └── __init__.py
│ │ ├── TestExchangeTypeProperty1/
│ │ │ └── __init__.py
│ │ ├── TestExchangeTypeProperty2/
│ │ │ └── __init__.py
│ │ ├── TestFuturesExchangeAvailableMargin/
│ │ │ └── __init__.py
│ │ ├── TestHasLongAndShortEntryOrdersPropertiesInFilters/
│ │ │ └── __init__.py
│ │ ├── TestHasLongEntryOrdersProperty/
│ │ │ └── __init__.py
│ │ ├── TestHasShortEntryOrdersProperty/
│ │ │ └── __init__.py
│ │ ├── TestIncreasedAndReducedCount/
│ │ │ └── __init__.py
│ │ ├── TestIncreasingShortPosition/
│ │ │ └── __init__.py
│ │ ├── TestInsufficientMargin1/
│ │ │ └── __init__.py
│ │ ├── TestInsufficientMargin2/
│ │ │ └── __init__.py
│ │ ├── TestInsufficientMargin3/
│ │ │ └── __init__.py
│ │ ├── TestLeverageProperty1/
│ │ │ └── __init__.py
│ │ ├── TestLeverageProperty2/
│ │ │ └── __init__.py
│ │ ├── TestLiquidationInCrossModeForShortTrade/
│ │ │ └── __init__.py
│ │ ├── TestLiquidationInIsolatedModeForLongTrade/
│ │ │ └── __init__.py
│ │ ├── TestLiquidationInIsolatedModeForShortTrade/
│ │ │ └── __init__.py
│ │ ├── TestLogMethodInStrategyClass/
│ │ │ └── __init__.py
│ │ ├── TestMarkPrice/
│ │ │ └── __init__.py
│ │ ├── TestMarketOrderForLowPriceDifference/
│ │ │ └── __init__.py
│ │ ├── TestMetrics1/
│ │ │ └── __init__.py
│ │ ├── TestMultipleEntryOrdersUpdateEntryLongPositions/
│ │ │ └── __init__.py
│ │ ├── TestMultipleEntryOrdersUpdateEntryShortPositions/
│ │ │ └── __init__.py
│ │ ├── TestOnCancelMethod/
│ │ │ └── __init__.py
│ │ ├── TestOnClosePosition/
│ │ │ └── __init__.py
│ │ ├── TestOnRouteOpenPosition/
│ │ │ └── __init__.py
│ │ ├── TestOnRouteOpenPosition2/
│ │ │ └── __init__.py
│ │ ├── TestOrderIsStopLossProperty/
│ │ │ └── __init__.py
│ │ ├── TestOrderIsTakeProfitProperty/
│ │ │ └── __init__.py
│ │ ├── TestOrderPriceCannotBeGreaterThanZero/
│ │ │ └── __init__.py
│ │ ├── TestOrderValueProperty/
│ │ │ └── __init__.py
│ │ ├── TestOrdersAreSortedBeforeExecution/
│ │ │ └── __init__.py
│ │ ├── TestPortfolioValue/
│ │ │ └── __init__.py
│ │ ├── TestPortfolioValueIncludesPositionValueAndOpenOrdersValue/
│ │ │ └── __init__.py
│ │ ├── TestPositionExchangeTypeProperty1/
│ │ │ └── __init__.py
│ │ ├── TestPositionExchangeTypeProperty2/
│ │ │ └── __init__.py
│ │ ├── TestPositionOpenIncreaseReduceCloseEventsInSpot/
│ │ │ └── __init__.py
│ │ ├── TestPositionTotalCostProperty/
│ │ │ └── __init__.py
│ │ ├── TestPositionWithLeverage1/
│ │ │ └── __init__.py
│ │ ├── TestPositionWithLeverage2/
│ │ │ └── __init__.py
│ │ ├── TestPositions/
│ │ │ └── __init__.py
│ │ ├── TestProperBalanceHanldingInSpotAfterOrderCancellation/
│ │ │ └── __init__.py
│ │ ├── TestReduceOnlyMarketOrders/
│ │ │ └── __init__.py
│ │ ├── TestShortInSpot/
│ │ │ └── __init__.py
│ │ ├── TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceLongPosition/
│ │ │ └── __init__.py
│ │ ├── TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceShortPosition/
│ │ │ └── __init__.py
│ │ ├── TestStopOrderShouldConsiderExecutedTakeProfitOrdersInSpot/
│ │ │ └── __init__.py
│ │ ├── TestStrategyVariablesAreResetBeforeOpeningNewPosition/
│ │ │ └── __init__.py
│ │ ├── TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientLongPosition/
│ │ │ └── __init__.py
│ │ ├── TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientShortPosition/
│ │ │ └── __init__.py
│ │ ├── TestTerminate/
│ │ │ └── __init__.py
│ │ ├── TestUsageOfShouldCancelRaisesNotImplementedError/
│ │ │ └── __init__.py
│ │ ├── TestVanillaStrategy/
│ │ │ └── __init__.py
│ │ ├── TestWalletBalance/
│ │ │ └── __init__.py
│ │ ├── TestWithoutCancelMethod/
│ │ │ └── __init__.py
│ │ └── __init__.py
│ ├── testing_utils.py
│ ├── utils.py
│ └── version.py
├── requirements.txt
├── setup.py
├── tests/
│ ├── __init__.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── test_candles_0.py
│ │ ├── test_candles_1.py
│ │ └── test_candles_indicators.py
│ ├── storage/
│ │ └── logs/
│ │ └── backtest-mode/
│ │ └── .txt
│ ├── test_backtest.py
│ ├── test_broker.py
│ ├── test_candle_service.py
│ ├── test_completed_trade.py
│ ├── test_conflicting_orders.py
│ ├── test_dynamic_numpy_array.py
│ ├── test_exchange.py
│ ├── test_helpers.py
│ ├── test_import_candles.py
│ ├── test_indicators.py
│ ├── test_isolated_backtest.py
│ ├── test_lsp.py
│ ├── test_metrics.py
│ ├── test_order.py
│ ├── test_parent_strategy.py
│ ├── test_position.py
│ ├── test_research.py
│ ├── test_router.py
│ ├── test_spot_mode.py
│ ├── test_state_candle.py
│ ├── test_state_exchanges.py
│ ├── test_state_logs.py
│ ├── test_state_orderbook.py
│ ├── test_state_orders.py
│ ├── test_state_ticker.py
│ ├── test_state_trades.py
│ └── test_utils.py
└── utils/
├── candle_info.sh
└── candle_info.sql
Showing preview only (3,650K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (40827 symbols across 1273 files)
FILE: conftest.py
function pytest_configure (line 1) | def pytest_configure(config):
FILE: jesse/__init__.py
function lifespan (line 21) | async def lifespan(app):
function index (line 32) | async def index():
FILE: jesse/candle_pipelines/base_candles.py
class BaseCandlesPipeline (line 4) | class BaseCandlesPipeline:
method __init__ (line 5) | def __init__(self, batch_size: int) -> None:
method get_candles (line 10) | def get_candles(self, candles: np.ndarray, index: int, candles_step: i...
method process (line 27) | def process(self, original_1m_candles: np.ndarray, out: np.ndarray) ->...
FILE: jesse/candle_pipelines/gaussian_noise.py
class GaussianNoiseCandlesPipeline (line 6) | class GaussianNoiseCandlesPipeline(BaseCandlesPipeline):
method __init__ (line 8) | def __init__(self, batch_size: int, *,
method process (line 28) | def process(self, original_1m_candles: np.ndarray, out: np.ndarray) ->...
FILE: jesse/candle_pipelines/gaussian_resampler.py
class GaussianResamplerCandlesPipeline (line 6) | class GaussianResamplerCandlesPipeline(BaseCandlesPipeline):
method __init__ (line 8) | def __init__(self, batch_size: int, *,
method process (line 18) | def process(self, original_1m_candles: np.ndarray, out: np.ndarray) ->...
FILE: jesse/candle_pipelines/moving_block_bootstrap.py
class MovingBlockBootstrapCandlesPipeline (line 5) | class MovingBlockBootstrapCandlesPipeline(BaseCandlesPipeline):
method __init__ (line 6) | def __init__(self, batch_size: int, **_ignored) -> None:
method _bootstrap_blocks (line 30) | def _bootstrap_blocks(self, arr: np.ndarray, n: int) -> np.ndarray:
method process (line 48) | def process(self, original_1m_candles: np.ndarray, out: np.ndarray) ->...
FILE: jesse/cli.py
function cli (line 14) | def cli() -> None:
function install_live (line 25) | def install_live(strict: bool) -> None:
function run (line 33) | def run() -> None:
FILE: jesse/config.py
function set_config (line 116) | def set_config(conf: dict) -> None:
function reset_config (line 165) | def reset_config() -> None:
FILE: jesse/controllers/auth_controller.py
function login (line 16) | def login(json_request: LoginRequestJson):
function login (line 24) | def login(json_request: LoginRequestJson):
function auth (line 32) | def auth(json_request: LoginRequestJson):
function shutdown (line 40) | async def shutdown(background_tasks: BackgroundTasks, authorization: Opt...
function jesse_trade_token (line 52) | async def jesse_trade_token(authorization: Optional[str] = Header(None)):
FILE: jesse/controllers/backtest_controller.py
function backtest (line 27) | def backtest(request_json: BacktestRequestJson, authorization: Optional[...
function cancel_backtest (line 59) | def cancel_backtest(request_json: CancelRequestJson, authorization: Opti...
function get_logs (line 75) | def get_logs(session_id: str, token: str = Query(...)):
function download_backtest_log (line 94) | def download_backtest_log(session_id: str, token: str = Query(...)):
function get_backtest_sessions (line 108) | def get_backtest_sessions(request_json: GetBacktestSessionsRequestJson =...
function get_backtest_session_by_id (line 134) | def get_backtest_session_by_id(session_id: str, authorization: Optional[...
function update_session_state (line 159) | def update_session_state(request_json: UpdateBacktestSessionStateRequest...
function remove_backtest_session (line 174) | def remove_backtest_session(session_id: str, authorization: Optional[str...
function update_session_notes (line 202) | def update_session_notes(session_id: str, request_json: UpdateBacktestSe...
function purge_sessions (line 224) | def purge_sessions(request_json: dict = Body(...), authorization: Option...
function get_backtest_session_chart_data (line 242) | def get_backtest_session_chart_data(session_id: str, authorization: Opti...
function get_backtest_session_strategy_codes (line 264) | def get_backtest_session_strategy_codes(session_id: str, authorization: ...
FILE: jesse/controllers/candles_controller.py
function import_candles (line 14) | def import_candles(request_json: ImportCandlesRequestJson, authorization...
function cancel_import_candles (line 37) | def cancel_import_candles(request_json: CancelRequestJson, authorization...
function clear_candles_database_cache (line 51) | def clear_candles_database_cache(authorization: Optional[str] = Header(N...
function get_candles (line 68) | def get_candles(json_request: GetCandlesRequestJson, authorization: Opti...
function get_existing_candles (line 88) | def get_existing_candles(authorization: Optional[str] = Header(None)) ->...
function delete_candles (line 103) | def delete_candles(json_request: DeleteCandlesRequestJson, authorization...
FILE: jesse/controllers/closed_trade_controller.py
function get_closed_trades (line 14) | def get_closed_trades(
function get_closed_trade_by_id (line 39) | def get_closed_trade_by_id(trade_id: str, authorization: Optional[str] =...
function get_trades_live_history (line 65) | def get_trades_live_history(
FILE: jesse/controllers/config_controller.py
function get_config (line 13) | def get_config(json_request: ConfigRequestJson, authorization: Optional[...
function update_config (line 28) | def update_config(json_request: ConfigRequestJson, authorization: Option...
FILE: jesse/controllers/exchange_controller.py
function exchange_supported_symbols (line 17) | def exchange_supported_symbols(request_json: ExchangeSupportedSymbolsReq...
function get_exchange_api_keys_endpoint (line 32) | def get_exchange_api_keys_endpoint(authorization: Optional[str] = Header...
function store_exchange_api_keys_endpoint (line 41) | def store_exchange_api_keys_endpoint(json_request: StoreExchangeApiKeyRe...
function delete_exchange_api_keys_endpoint (line 54) | def delete_exchange_api_keys_endpoint(json_request: DeleteExchangeApiKey...
function get_exchange_supported_symbols (line 63) | def get_exchange_supported_symbols(exchange: str) -> JSONResponse:
FILE: jesse/controllers/file_controller.py
function download (line 13) | def download(mode: str, file_type: str, session_id: str, token: str = Qu...
function download_api_keys (line 25) | def download_api_keys(
function import_api_keys (line 45) | async def import_api_keys(
FILE: jesse/controllers/live_controller.py
function live (line 27) | def live(request_json: LiveRequestJson, authorization: Optional[str] = H...
function cancel_live (line 75) | def cancel_live(request_json: LiveCancelRequestJson, authorization: Opti...
function get_logs (line 88) | def get_logs(json_request: GetLogsRequestJson, authorization: Optional[s...
function get_orders (line 104) | def get_orders(json_request: GetOrdersRequestJson, authorization: Option...
function get_live_sessions (line 120) | def get_live_sessions(
function get_live_session_by_id (line 150) | def get_live_session_by_id(session_id: str, authorization: Optional[str]...
function remove_live_session (line 174) | def remove_live_session(session_id: str, authorization: Optional[str] = ...
function update_session_notes (line 202) | def update_session_notes(
function update_state (line 233) | def update_state(request_json: UpdateLiveSessionStateRequestJson, author...
function purge_sessions (line 248) | def purge_sessions(request_json: dict = Body(...), authorization: Option...
function get_equity_curve (line 266) | def get_equity_curve(
FILE: jesse/controllers/lsp_controller.py
function get_lsp_config (line 11) | def get_lsp_config(authorization: Optional[str] = Header(None))->JSONRes...
FILE: jesse/controllers/monte_carlo_controller.py
function monte_carlo (line 35) | async def monte_carlo(request: Request, request_json: MonteCarloRequestJ...
function cancel_monte_carlo (line 109) | def cancel_monte_carlo(request_json: CancelMonteCarloRequestJson, author...
function terminate_monte_carlo (line 125) | def terminate_monte_carlo(request_json: TerminateMonteCarloRequestJson, ...
function resume_monte_carlo (line 145) | async def resume_monte_carlo(request_json: MonteCarloRequestJson, author...
function get_monte_carlo_sessions_endpoint (line 197) | def get_monte_carlo_sessions_endpoint(request_json: GetMonteCarloSession...
function get_monte_carlo_session_by_id_endpoint (line 223) | def get_monte_carlo_session_by_id_endpoint(session_id: str, authorizatio...
function get_monte_carlo_equity_curves (line 249) | def get_monte_carlo_equity_curves(session_id: str, authorization: Option...
function update_session_state (line 327) | def update_session_state(
function remove_monte_carlo_session (line 345) | def remove_monte_carlo_session(session_id: str, authorization: Optional[...
function update_session_notes (line 373) | def update_session_notes(session_id: str, request_json: UpdateMonteCarlo...
function get_session_strategy_code (line 395) | def get_session_strategy_code(session_id: str, authorization: Optional[s...
function get_session_logs (line 414) | def get_session_logs(session_id: str, authorization: Optional[str] = Hea...
function purge_sessions (line 436) | def purge_sessions(request_json: dict, authorization: Optional[str] = He...
function get_running_session (line 454) | def get_running_session(authorization: Optional[str] = Header(None)):
FILE: jesse/controllers/notification_controller.py
function get_notification_api_keys (line 12) | def get_notification_api_keys(authorization: Optional[str] = Header(None...
function store_notification_api_keys (line 25) | def store_notification_api_keys(
function delete_notification_api_keys (line 43) | def delete_notification_api_keys(
FILE: jesse/controllers/optimization_controller.py
function optimization (line 21) | async def optimization(request_json: OptimizationRequestJson, authorizat...
function rerun_optimization (line 79) | async def rerun_optimization(request_json: OptimizationRequestJson, auth...
function cancel_optimization (line 128) | def cancel_optimization(request_json: CancelRequestJson, authorization: ...
function download_optimization_log (line 142) | def download_optimization_log(token: str = Query(...)):
function get_optimization_sessions (line 155) | def get_optimization_sessions(request_json: GetOptimizationSessionsReque...
function get_optimization_session_by_id (line 181) | def get_optimization_session_by_id(session_id: str, authorization: Optio...
function update_session_state (line 205) | def update_session_state(request_json: UpdateOptimizationSessionStateReq...
function terminate_optimization (line 220) | def terminate_optimization(request_json: TerminateOptimizationRequestJso...
function resume_optimization (line 237) | async def resume_optimization(request_json: OptimizationRequestJson, aut...
function remove_optimization_session (line 287) | def remove_optimization_session(session_id: str, authorization: Optional...
function update_session_notes (line 315) | def update_session_notes(session_id: str, request_json: UpdateOptimizati...
function get_session_notes (line 337) | def get_session_notes(session_id: str, authorization: Optional[str] = He...
function get_session_strategy_codes (line 358) | def get_session_strategy_codes(session_id: str, authorization: Optional[...
function get_session_logs (line 377) | def get_session_logs(session_id: str, authorization: Optional[str] = Hea...
function purge_sessions (line 399) | def purge_sessions(request_json: dict = Body(...), authorization: Option...
function get_running_session (line 417) | def get_running_session(authorization: Optional[str] = Header(None)):
FILE: jesse/controllers/order_controller.py
function get_order_by_id (line 15) | def get_order_by_id(order_id: str, authorization: Optional[str] = Header...
function get_orders_live_history (line 45) | def get_orders_live_history(
FILE: jesse/controllers/strategy_controller.py
function make_strategy (line 22) | def make_strategy(json_request: NewStrategyRequestJson, authorization: O...
function get_strategies (line 34) | def get_strategies(authorization: Optional[str] = Header(None)) -> JSONR...
function get_strategy (line 46) | def get_strategy(
function save_strategy (line 61) | def save_strategy(
function delete_strategy (line 76) | def delete_strategy(
function index_jesse_trade_strategies (line 91) | async def index_jesse_trade_strategies(
function get_jesse_trade_periods (line 138) | async def get_jesse_trade_periods(
function get_jesse_trade_strategy (line 168) | async def get_jesse_trade_strategy(
function get_jesse_trade_strategy_metrics (line 205) | async def get_jesse_trade_strategy_metrics(
function import_strategy (line 246) | async def import_strategy(
FILE: jesse/controllers/system_controller.py
function feedback (line 14) | def feedback(json_request: FeedbackRequestJson, authorization: Optional[...
function report_exception (line 26) | def report_exception(json_request: ReportExceptionRequestJson,
function general_info (line 48) | def general_info(authorization: Optional[str] = Header(None)) -> JSONRes...
function active_workers (line 72) | def active_workers(authorization: Optional[str] = Header(None)) -> JSONR...
function help_search (line 85) | def help_search(json_request: HelpSearchRequestJson, authorization: Opti...
FILE: jesse/controllers/tabs_controller.py
class TabsListRequest (line 11) | class TabsListRequest(BaseModel):
class TabsAddRequest (line 15) | class TabsAddRequest(BaseModel):
class TabsRemoveRequest (line 20) | class TabsRemoveRequest(BaseModel):
class TabsReorderRequest (line 25) | class TabsReorderRequest(BaseModel):
class TabsResponse (line 30) | class TabsResponse(BaseModel):
function list_tabs (line 35) | async def list_tabs(req: TabsListRequest, authorization: Optional[str] =...
function add_tab (line 47) | async def add_tab(req: TabsAddRequest, authorization: Optional[str] = He...
function remove_tab (line 60) | async def remove_tab(req: TabsRemoveRequest, authorization: Optional[str...
function reorder_tabs (line 72) | async def reorder_tabs(req: TabsReorderRequest, authorization: Optional[...
FILE: jesse/controllers/websocket_controller.py
function websocket_endpoint (line 11) | async def websocket_endpoint(websocket: WebSocket, token: str = Query(.....
FILE: jesse/enums/__init__.py
class sides (line 4) | class sides:
class trade_types (line 10) | class trade_types:
class order_statuses (line 16) | class order_statuses:
class timeframes (line 27) | class timeframes:
class colors (line 48) | class colors:
class order_types (line 57) | class order_types:
class exchanges (line 66) | class exchanges:
class migration_actions (line 97) | class migration_actions:
class order_submitted_via (line 109) | class order_submitted_via:
class live_session_statuses (line 115) | class live_session_statuses:
class live_session_modes (line 124) | class live_session_modes:
FILE: jesse/exceptions/__init__.py
class EmptyPosition (line 1) | class EmptyPosition(Exception):
class OpenPositionError (line 5) | class OpenPositionError(Exception):
class OrderNotAllowed (line 9) | class OrderNotAllowed(Exception):
class ConflictingRules (line 13) | class ConflictingRules(Exception):
class InvalidStrategy (line 17) | class InvalidStrategy(Exception):
class CandleNotFoundInDatabase (line 21) | class CandleNotFoundInDatabase(Exception):
class CandleNotFoundInExchange (line 25) | class CandleNotFoundInExchange(Exception):
class SymbolNotFound (line 29) | class SymbolNotFound(Exception):
class RouteNotFound (line 33) | class RouteNotFound(Exception):
method __init__ (line 34) | def __init__(self, symbol, timeframe):
class InvalidRoutes (line 39) | class InvalidRoutes(Exception):
class ExchangeInMaintenance (line 43) | class ExchangeInMaintenance(Exception):
class ExchangeNotResponding (line 47) | class ExchangeNotResponding(Exception):
class ExchangeRejectedOrder (line 51) | class ExchangeRejectedOrder(Exception):
class ExchangeRejectedLeverageNumber (line 54) | class ExchangeRejectedLeverageNumber(Exception):
class ExchangeOrderNotFound (line 58) | class ExchangeOrderNotFound(Exception):
class InvalidShape (line 62) | class InvalidShape(Exception):
class InvalidConfig (line 66) | class InvalidConfig(Exception):
class InvalidTimeframe (line 70) | class InvalidTimeframe(Exception):
class InvalidSymbol (line 74) | class InvalidSymbol(Exception):
class NegativeBalance (line 78) | class NegativeBalance(Exception):
class InsufficientMargin (line 82) | class InsufficientMargin(Exception):
class InsufficientBalance (line 86) | class InsufficientBalance(Exception):
class Termination (line 90) | class Termination(Exception):
class InvalidExchangeApiKeys (line 94) | class InvalidExchangeApiKeys(Exception):
class ExchangeError (line 98) | class ExchangeError(Exception):
class NotSupportedError (line 102) | class NotSupportedError(Exception):
class CandlesNotFound (line 106) | class CandlesNotFound(Exception):
class InvalidDateRange (line 110) | class InvalidDateRange(Exception):
FILE: jesse/exchanges/exchange.py
class Exchange (line 6) | class Exchange(ABC):
method market_order (line 12) | def market_order(self, symbol: str, qty: float, current_price: float, ...
method limit_order (line 16) | def limit_order(self, symbol: str, qty: float, price: float, side: str...
method stop_order (line 20) | def stop_order(self, symbol: str, qty: float, price: float, side: str,...
method cancel_all_orders (line 24) | def cancel_all_orders(self, symbol: str) -> None:
method cancel_order (line 28) | def cancel_order(self, symbol: str, order_id: str) -> None:
method _fetch_precisions (line 32) | def _fetch_precisions(self) -> None:
FILE: jesse/exchanges/sandbox/Sandbox.py
class Sandbox (line 10) | class Sandbox(Exchange):
method __init__ (line 11) | def __init__(self, name='Sandbox'):
method market_order (line 15) | def market_order(self, symbol: str, qty: float, current_price: float, ...
method limit_order (line 27) | def limit_order(self, symbol: str, qty: float, price: float, side: str...
method stop_order (line 39) | def stop_order(self, symbol: str, qty: float, price: float, side: str,...
method cancel_all_orders (line 51) | def cancel_all_orders(self, symbol: str) -> List[Order]:
method cancel_order (line 64) | def cancel_order(self, symbol: str, order_id: str) -> None:
method _fetch_precisions (line 68) | def _fetch_precisions(self) -> None:
FILE: jesse/factories/candle_factory.py
function range_candles (line 17) | def range_candles(count: int) -> np.ndarray:
function candles_from_close_prices (line 28) | def candles_from_close_prices(prices: Union[list, range]) -> np.ndarray:
function fake_candle (line 57) | def fake_candle(attributes: dict = None, reset: bool = False) -> np.ndar...
FILE: jesse/factories/order_factory.py
function fake_order (line 11) | def fake_order(attributes: dict = None) -> Order:
FILE: jesse/helpers.py
function app_currency (line 26) | def app_currency() -> str:
function app_mode (line 36) | def app_mode() -> str:
function arrow_to_timestamp (line 41) | def arrow_to_timestamp(arrow_time: arrow.arrow.Arrow) -> int:
function base_asset (line 45) | def base_asset(symbol: str) -> str:
function binary_search (line 49) | def binary_search(arr: list, item) -> int:
function class_iter (line 67) | def class_iter(Class):
function clean_orderbook_list (line 72) | def clean_orderbook_list(arr) -> List[List[float]]:
function color (line 76) | def color(msg_text: str, msg_color: str) -> str:
function convert_number (line 87) | def convert_number(old_max: float, old_min: float, new_max: float, new_m...
function dashless_symbol (line 101) | def dashless_symbol(symbol: str) -> str:
function dashy_symbol (line 105) | def dashy_symbol(symbol: str) -> str:
function underline_to_dashy_symbol (line 129) | def underline_to_dashy_symbol(symbol: str) -> str:
function dashy_to_underline (line 133) | def dashy_to_underline(symbol: str) -> str:
function get_base_asset (line 137) | def get_base_asset(symbol: str) -> str:
function get_quote_asset (line 141) | def get_quote_asset(symbol: str) -> str:
function date_diff_in_days (line 145) | def date_diff_in_days(date1: arrow.arrow.Arrow, date2: arrow.arrow.Arrow...
function date_to_timestamp (line 155) | def date_to_timestamp(date: str) -> int:
function dna_to_hp (line 165) | def dna_to_hp(strategy_hp, dna: str):
function dump_exception (line 197) | def dump_exception() -> None:
function estimate_average_price (line 206) | def estimate_average_price(order_qty: float, order_price: float, current...
function estimate_PNL (line 224) | def estimate_PNL(qty: float, entry_price: float, exit_price: float, trad...
function estimate_PNL_percentage (line 236) | def estimate_PNL_percentage(qty: float, entry_price: float, exit_price: ...
function file_exists (line 246) | def file_exists(path: str) -> bool:
function clear_file (line 250) | def clear_file(path: str) -> None:
function make_directory (line 255) | def make_directory(path: str) -> None:
function floor_with_precision (line 260) | def floor_with_precision(num: float, precision: int = 0) -> float:
function format_currency (line 265) | def format_currency(num: float) -> str:
function format_price (line 269) | def format_price(price: float) -> str:
function generate_unique_id (line 320) | def generate_unique_id() -> str:
function generate_short_unique_id (line 324) | def generate_short_unique_id() -> str:
function get_arrow (line 328) | def get_arrow(timestamp: int) -> arrow.arrow.Arrow:
function get_candle_source (line 332) | def get_candle_source(candles: np.ndarray, source_type: str = "close") -...
function get_config (line 342) | def get_config(keys: str, default: Any = None) -> Any:
function get_store (line 368) | def get_store():
function get_strategy_class (line 373) | def get_strategy_class(strategy_name: str):
function insecure_hash (line 427) | def insecure_hash(msg: str) -> str:
function insert_list (line 431) | def insert_list(index: int, item, arr: list) -> list:
function is_backtesting (line 441) | def is_backtesting() -> bool:
function is_debuggable (line 446) | def is_debuggable(debug_item) -> bool:
function is_debugging (line 454) | def is_debugging() -> bool:
function is_importing_candles (line 459) | def is_importing_candles() -> bool:
function is_live (line 465) | def is_live() -> bool:
function is_livetrading (line 470) | def is_livetrading() -> bool:
function is_optimizing (line 476) | def is_optimizing() -> bool:
function is_paper_trading (line 482) | def is_paper_trading() -> bool:
function is_unit_testing (line 487) | def is_unit_testing() -> bool:
function is_valid_uuid (line 502) | def is_valid_uuid(uuid_to_test: str, version: int = 4) -> bool:
function key (line 510) | def key(exchange: str, symbol: str, timeframe: str = None):
function max_timeframe (line 517) | def max_timeframe(timeframes_list: list) -> str:
function normalize (line 526) | def normalize(x: float, x_min: float, x_max: float) -> float:
function now (line 533) | def now(force_fresh=False) -> int:
function now_to_timestamp (line 540) | def now_to_timestamp(force_fresh=False) -> int:
function now_to_datetime (line 549) | def now_to_datetime():
function current_1m_candle_timestamp (line 553) | def current_1m_candle_timestamp():
function np_ffill (line 557) | def np_ffill(arr: np.ndarray, axis: int = 0) -> np.ndarray:
function np_shift (line 575) | def np_shift(arr: np.ndarray, num: int, fill_value=0) -> np.ndarray:
function opposite_side (line 591) | def opposite_side(s: str) -> str:
function opposite_type (line 603) | def opposite_type(t: str) -> str:
function orderbook_insertion_index_search (line 613) | def orderbook_insertion_index_search(arr, target: int, ascending: bool =...
function orderbook_trim_price (line 644) | def orderbook_trim_price(p: float, ascending: bool, unit: float) -> float:
function prepare_qty (line 657) | def prepare_qty(qty: float, side: str) -> float:
function python_version (line 668) | def python_version() -> tuple:
function quote_asset (line 672) | def quote_asset(symbol: str) -> str:
function random_str (line 680) | def random_str(num_characters: int = 8) -> str:
function readable_duration (line 684) | def readable_duration(seconds: int, granularity: int = 2) -> str:
function relative_to_absolute (line 706) | def relative_to_absolute(path: str) -> str:
function round_or_none (line 710) | def round_or_none(x: Union[float, None], digits: int = 0) -> Optional[fl...
function round_price_for_live_mode (line 719) | def round_price_for_live_mode(price, precision: int) -> Union[float, np....
function round_qty_for_live_mode (line 730) | def round_qty_for_live_mode(roundable_qty: float, precision: int) -> Uni...
function round_decimals_down (line 760) | def round_decimals_down(number: Union[np.ndarray, float], decimals: int ...
function is_almost_equal (line 777) | def is_almost_equal(a: float, b: float, tolerance: float = 1e-8) -> bool:
function same_length (line 806) | def same_length(bigger: np.ndarray, shorter: np.ndarray) -> np.ndarray:
function secure_hash (line 810) | def secure_hash(msg: str) -> str:
function should_execute_silently (line 814) | def should_execute_silently() -> bool:
function side_to_type (line 819) | def side_to_type(s: str) -> str:
function string_after_character (line 832) | def string_after_character(s: str, character: str) -> str:
function slice_candles (line 839) | def slice_candles(candles: np.ndarray, sequential: bool) -> np.ndarray:
function style (line 846) | def style(msg_text: str, msg_style: str) -> str:
function terminate_app (line 859) | def terminate_app() -> None:
function error (line 867) | def error(msg: str, force_print: bool = False) -> None:
function _print_error (line 878) | def _print_error(msg: str) -> None:
function timestamp_to_arrow (line 885) | def timestamp_to_arrow(timestamp: int) -> arrow.arrow.Arrow:
function timestamp_to_date (line 889) | def timestamp_to_date(timestamp: int) -> str:
function timestamp_to_time (line 893) | def timestamp_to_time(timestamp: int) -> str:
function timestamp_to_iso8601 (line 897) | def timestamp_to_iso8601(timestamp: int) -> str:
function iso8601_to_timestamp (line 902) | def iso8601_to_timestamp(iso8601: str) -> int:
function today_to_timestamp (line 907) | def today_to_timestamp() -> int:
function type_to_side (line 917) | def type_to_side(t: str) -> str:
function unique_list (line 927) | def unique_list(arr) -> list:
function closing_side (line 938) | def closing_side(position_type: str) -> str:
function merge_dicts (line 947) | def merge_dicts(d1: dict, d2: dict) -> dict:
function computer_name (line 971) | def computer_name():
function validate_response (line 976) | def validate_response(response):
function get_session_id (line 986) | def get_session_id():
function get_pid (line 993) | def get_pid():
function is_jesse_project (line 997) | def is_jesse_project():
function dd (line 1002) | def dd(item):
function dump (line 1010) | def dump(*item):
function debug (line 1028) | def debug(*item):
function terminal_debug (line 1044) | def terminal_debug(*item):
function float_or_none (line 1056) | def float_or_none(item):
function str_or_none (line 1066) | def str_or_none(item, encoding='utf-8'):
function cpu_cores_count (line 1086) | def cpu_cores_count():
function convert_to_env_name (line 1092) | def convert_to_env_name(name: str) -> str:
function is_notebook (line 1096) | def is_notebook():
function get_os (line 1113) | def get_os() -> str:
function is_docker (line 1126) | def is_docker() -> bool:
function clear_output (line 1131) | def clear_output():
function clean_nan_values (line 1139) | def clean_nan_values(obj):
function clean_infinite_values (line 1168) | def clean_infinite_values(obj):
function get_class_name (line 1190) | def get_class_name(cls):
function next_candle_timestamp (line 1198) | def next_candle_timestamp(candle: np.ndarray, timeframe: str) -> int:
function get_candle_start_timestamp_based_on_timeframe (line 1202) | def get_candle_start_timestamp_based_on_timeframe(timeframe: str, num_ca...
function is_price_near (line 1208) | def is_price_near(order_price, price_to_compare, percentage_threshold=0....
function gzip_compress (line 1218) | def gzip_compress(data):
function timeframe_to_one_minutes (line 1225) | def timeframe_to_one_minutes(timeframe: str) -> int:
function compressed_response (line 1230) | def compressed_response(content: str) -> dict:
function validate_cwd (line 1247) | def validate_cwd() -> None:
function has_live_trade_plugin (line 1261) | def has_live_trade_plugin() -> bool:
function normalize_bool (line 1269) | def normalize_bool(v: Any) -> bool:
FILE: jesse/indicators/acosc.py
function sma (line 9) | def sma(arr: np.ndarray, period: int) -> np.ndarray:
function mom (line 15) | def mom(arr: np.ndarray, period: int = 1) -> np.ndarray:
function acosc (line 18) | def acosc(candles: np.ndarray, sequential: bool = False) -> AC:
FILE: jesse/indicators/ad.py
function ad (line 8) | def ad(candles: np.ndarray, sequential: bool = False) -> Union[float, np...
FILE: jesse/indicators/adosc.py
function adosc (line 8) | def adosc(candles: np.ndarray, fast_period: int = 3, slow_period: int = ...
FILE: jesse/indicators/adx.py
function adx (line 7) | def adx(candles: np.ndarray, period: int = 14, sequential: bool = False)...
FILE: jesse/indicators/adxr.py
function _adxr (line 9) | def _adxr(high, low, close, period):
function adxr (line 86) | def adxr(candles: np.ndarray, period: int = 14, sequential: bool = False...
FILE: jesse/indicators/alligator.py
function alligator (line 8) | def alligator(candles: np.ndarray, source_type: str = "hl2", sequential:...
FILE: jesse/indicators/alma.py
function alma (line 8) | def alma(candles: np.ndarray, period: int = 9, sigma: float = 6.0, distr...
function strided_axis0 (line 45) | def strided_axis0(a, L):
FILE: jesse/indicators/ao.py
function momentum (line 10) | def momentum(arr):
function ao (line 16) | def ao(candles: np.ndarray, sequential: bool = False) -> AO:
FILE: jesse/indicators/apo.py
function apo (line 9) | def apo(candles: np.ndarray, fast_period: int = 12, slow_period: int = 2...
FILE: jesse/indicators/aroon.py
function aroon (line 10) | def aroon(candles: np.ndarray, period: int = 14, sequential: bool = Fals...
FILE: jesse/indicators/aroonosc.py
function _compute_aroonosc_nb (line 9) | def _compute_aroonosc_nb(high: np.ndarray, low: np.ndarray, period: int)...
function aroonosc (line 39) | def aroonosc(candles: np.ndarray, period: int = 14, sequential: bool = F...
FILE: jesse/indicators/atr.py
function atr (line 7) | def atr(candles: np.ndarray, period: int = 14, sequential: bool = False)...
FILE: jesse/indicators/avgprice.py
function avgprice (line 8) | def avgprice(candles: np.ndarray, sequential: bool = False) -> Union[flo...
FILE: jesse/indicators/bandpass.py
function bandpass (line 13) | def bandpass(candles: np.ndarray, period: int = 20, bandwidth: float = 0...
function bp_fast (line 49) | def bp_fast(source, hp, alpha, beta): # Function is compiled to machine...
FILE: jesse/indicators/beta.py
function beta (line 9) | def beta(candles: np.ndarray, benchmark_candles: np.ndarray, period: int...
FILE: jesse/indicators/bollinger_bands.py
function _bollinger_bands_fallback (line 22) | def _bollinger_bands_fallback(source: np.ndarray, period: int, devup: fl...
function bollinger_bands (line 40) | def bollinger_bands(
FILE: jesse/indicators/bollinger_bands_width.py
function bollinger_bands_width (line 7) | def bollinger_bands_width(candles: np.ndarray, period: int = 20, mult: f...
FILE: jesse/indicators/bop.py
function bop (line 8) | def bop(candles: np.ndarray, sequential: bool = False) -> Union[float, n...
FILE: jesse/indicators/cc.py
function cc (line 10) | def cc(candles: np.ndarray, wma_period: int = 10, roc_short_period: int ...
FILE: jesse/indicators/cci.py
function calculate_cci_loop (line 9) | def calculate_cci_loop(tp, period):
function cci (line 37) | def cci(candles: np.ndarray, period: int = 14, sequential: bool = False)...
FILE: jesse/indicators/cfo.py
function _compute_cfo (line 8) | def _compute_cfo(source: np.ndarray, period: int, scalar: float) -> np.n...
function cfo (line 42) | def cfo(candles: np.ndarray, period: int = 14, scalar: float = 100, sour...
FILE: jesse/indicators/cg.py
function cg (line 9) | def cg(candles: np.ndarray, period: int = 10, source_type: str = "close"...
function go_fast (line 30) | def go_fast(source, period): # Function is compiled to machine code whe...
FILE: jesse/indicators/chande.py
function chande (line 8) | def chande(candles: np.ndarray, period: int = 22, mult: float = 3.0, dir...
FILE: jesse/indicators/chop.py
function chop (line 9) | def chop(candles: np.ndarray, period: int = 14, scalar: float = 100, dri...
FILE: jesse/indicators/cksp.py
function atr (line 9) | def atr(high: np.ndarray, low: np.ndarray, close: np.ndarray, timeperiod...
function rolling_max (line 26) | def rolling_max(arr: np.ndarray, window: int) -> np.ndarray:
function rolling_min (line 42) | def rolling_min(arr: np.ndarray, window: int) -> np.ndarray:
function cksp (line 58) | def cksp(candles: np.ndarray, p: int = 10, x: float = 1.0, q: int = 9, ...
FILE: jesse/indicators/cmo.py
function _cmo_numba (line 8) | def _cmo_numba(source: np.ndarray, period: int) -> np.ndarray:
function cmo (line 43) | def cmo(candles: np.ndarray, period: int = 14, source_type: str = "close...
FILE: jesse/indicators/correl.py
function correl (line 8) | def correl(candles: np.ndarray, period: int = 5, sequential: bool = Fals...
FILE: jesse/indicators/correlation_cycle.py
function correlation_cycle (line 11) | def correlation_cycle(candles: np.ndarray, period: int = 20, threshold: ...
function go_fast (line 43) | def go_fast(source, period): # Function is compiled to machine code whe...
FILE: jesse/indicators/cvi.py
function cvi (line 7) | def cvi(candles: np.ndarray, period: int = 5, sequential: bool = False) ...
FILE: jesse/indicators/cwma.py
function cwma (line 9) | def cwma(candles: np.ndarray, period: int = 14, source_type: str = "clos...
function vpwma_fast (line 35) | def vpwma_fast(source, period):
FILE: jesse/indicators/damiani_volatmeter.py
function atr (line 11) | def atr(high: np.ndarray, low: np.ndarray, close: np.ndarray, timeperiod...
function damiani_volatmeter (line 41) | def damiani_volatmeter(candles: np.ndarray, vis_atr: int = 13, vis_std: ...
function damiani_volatmeter_fast (line 74) | def damiani_volatmeter_fast(source, sed_std, atrvis, atrsed, vis_std, th...
FILE: jesse/indicators/dec_osc.py
function dec_osc (line 10) | def dec_osc(candles: np.ndarray, hp_period: int = 125, k: float = 1, sou...
FILE: jesse/indicators/decycler.py
function decycler (line 10) | def decycler(candles: np.ndarray, hp_period: int = 125, source_type: str...
FILE: jesse/indicators/dema.py
function _ema (line 16) | def _ema(x: np.ndarray, period: int) -> np.ndarray:
function dema (line 26) | def dema(candles: np.ndarray, period: int = 30, source_type: str = "clos...
function _dema_python (line 58) | def _dema_python(source: np.ndarray, period: int, sequential: bool) -> U...
FILE: jesse/indicators/devstop.py
function devstop (line 11) | def devstop(candles: np.ndarray, period: int = 20, mult: float = 0, devt...
function rolling_max (line 47) | def rolling_max(arr, window):
function rolling_min (line 56) | def rolling_min(arr, window):
function rolling_mean (line 65) | def rolling_mean(arr, window):
function rolling_std (line 74) | def rolling_std(arr, window):
FILE: jesse/indicators/di.py
function di (line 11) | def di(candles: np.ndarray, period: int = 14, sequential: bool = False) ...
FILE: jesse/indicators/dm.py
function dm (line 13) | def dm(candles: np.ndarray, period: int = 14, sequential: bool = False) ...
FILE: jesse/indicators/donchian.py
function donchian (line 10) | def donchian(candles: np.ndarray, period: int = 20, sequential: bool = F...
FILE: jesse/indicators/dpo.py
function _dpo (line 9) | def _dpo(source, period, sma):
function dpo (line 23) | def dpo(candles: np.ndarray, period: int = 5, source_type: str = "close"...
FILE: jesse/indicators/dti.py
function _ema (line 12) | def _ema(arr: np.ndarray, period: int) -> np.ndarray:
function dti (line 29) | def dti(candles: np.ndarray, r: int = 14, s: int = 10, u: int = 5, seque...
FILE: jesse/indicators/dx.py
function _fast_dm_tr (line 13) | def _fast_dm_tr(high: np.ndarray, low: np.ndarray, close: np.ndarray) ->...
function dx (line 40) | def dx(candles: np.ndarray, di_length: int = 14, adx_smoothing: int = 14...
FILE: jesse/indicators/edcf.py
function edcf (line 9) | def edcf(candles: np.ndarray, period: int = 15, source_type: str = "hl2"...
function edcf_fast (line 35) | def edcf_fast(source, period):
FILE: jesse/indicators/efi.py
function efi (line 9) | def efi(candles: np.ndarray, period: int = 13, source_type: str = "close...
function efi_fast (line 34) | def efi_fast(source, volume):
function ema (line 42) | def ema(data: np.ndarray, period: int) -> np.ndarray:
FILE: jesse/indicators/ema.py
function ema (line 9) | def ema(candles: np.ndarray, period: int = 5, source_type: str = "close"...
FILE: jesse/indicators/emd.py
function emd (line 11) | def emd(candles: np.ndarray, period: int = 20, delta=0.5, fraction=0.1, ...
function bp_fast (line 42) | def bp_fast(price, period, delta):
function peak_valley_fast (line 58) | def peak_valley_fast(bp, price):
FILE: jesse/indicators/emv.py
function _emv (line 9) | def _emv(high: np.ndarray, low: np.ndarray, volume: np.ndarray, length, ...
function emv (line 25) | def emv(candles: np.ndarray, length: int = 14, div: int = 10000, sequent...
FILE: jesse/indicators/epma.py
function epma (line 9) | def epma(candles: np.ndarray, period: int = 11, offset: int = 4, source_...
function epma_fast (line 36) | def epma_fast(source, period, offset):
FILE: jesse/indicators/er.py
function er (line 9) | def er(candles: np.ndarray, period: int = 5, source_type: str = "close",...
FILE: jesse/indicators/eri.py
function eri (line 11) | def eri(candles: np.ndarray, period: int = 13, matype: int = 1, source_t...
FILE: jesse/indicators/fisher.py
function _fisher_transform (line 10) | def _fisher_transform(high: np.ndarray, low: np.ndarray, period: int) ->...
function fisher (line 45) | def fisher(candles: np.ndarray, period: int = 9, sequential: bool = Fals...
FILE: jesse/indicators/fosc.py
function linear_regression_line (line 8) | def linear_regression_line(x, y):
function fosc (line 21) | def fosc(candles: np.ndarray, period: int = 5, source_type: str = "close...
FILE: jesse/indicators/frama.py
function frama (line 9) | def frama(candles: np.ndarray, window: int = 10, FC: int = 1, SC: int = ...
function frame_fast (line 40) | def frame_fast(candles, n, SC, FC):
FILE: jesse/indicators/fwma.py
function fwma (line 10) | def fwma(candles: np.ndarray, period: int = 5, source_type: str = "close...
function fibonacci (line 37) | def fibonacci(n: int = 2) -> np.ndarray:
FILE: jesse/indicators/gatorosc.py
function gatorosc (line 10) | def gatorosc(candles: np.ndarray, source_type: str = "close", sequential...
function numpy_ewma (line 48) | def numpy_ewma(data, window):
FILE: jesse/indicators/gauss.py
function gauss (line 9) | def gauss(candles: np.ndarray, period: int = 14, poles: int = 4, source_...
function gauss_fast (line 40) | def gauss_fast(source, period, poles):
FILE: jesse/indicators/heikin_ashi_candles.py
function heikin_ashi_candles (line 10) | def heikin_ashi_candles(candles: np.ndarray, sequential: bool = False) -...
function ha_fast (line 28) | def ha_fast(source):
FILE: jesse/indicators/high_pass.py
function high_pass (line 9) | def high_pass(candles: np.ndarray, period: int = 48, source_type: str = ...
function high_pass_fast (line 37) | def high_pass_fast(source, period): # Function is compiled to machine c...
FILE: jesse/indicators/high_pass_2_pole.py
function high_pass_2_pole (line 9) | def high_pass_2_pole(candles: np.ndarray, period: int = 48, source_type:...
function high_pass_2_pole_fast (line 38) | def high_pass_2_pole_fast(source, period, K=0.707): # Function is compi...
FILE: jesse/indicators/hma.py
function _wma (line 8) | def _wma(arr: np.ndarray, period: int) -> np.ndarray:
function hma (line 21) | def hma(candles: np.ndarray, period: int = 5, source_type: str = "close"...
FILE: jesse/indicators/hull_suit.py
function hull_suit (line 11) | def hull_suit(candles: np.ndarray, mode_switch: str = 'Hma', length: int...
FILE: jesse/indicators/hurst_exponent.py
function hurst_exponent (line 8) | def hurst_exponent(candles: np.ndarray, min_chunksize: int = 8, max_chun...
function hurst_rs (line 41) | def hurst_rs(x, min_chunksize, max_chunksize, num_chunksize):
function hurst_dma (line 114) | def hurst_dma(prices, min_chunksize=8, max_chunksize=200, num_chunksize=5):
function hurst_dsod (line 162) | def hurst_dsod(x):
FILE: jesse/indicators/hwma.py
function hwma (line 9) | def hwma(candles: np.ndarray, na: float = 0.2, nb: float = 0.1, nc: floa...
function hwma_fast (line 41) | def hwma_fast(source, na, nb, nc):
FILE: jesse/indicators/ichimoku_cloud.py
function ichimoku_cloud (line 8) | def ichimoku_cloud(candles: np.ndarray, conversion_line_period: int = 9,...
FILE: jesse/indicators/ichimoku_cloud_seq.py
function ichimoku_cloud_seq (line 13) | def ichimoku_cloud_seq(candles: np.ndarray, conversion_line_period: int ...
function _line_helper (line 48) | def _line_helper(candles, period):
function _rolling_max (line 53) | def _rolling_max(a, period):
function _rolling_min (line 63) | def _rolling_min(a, period):
FILE: jesse/indicators/ift_rsi.py
function ift_rsi (line 8) | def ift_rsi(candles: np.ndarray, rsi_period: int = 5, wma_period: int =9...
FILE: jesse/indicators/itrend.py
function itrend (line 11) | def itrend(candles: np.ndarray, alpha: float = 0.07, source_type: str = ...
function itrend_fast (line 35) | def itrend_fast(source, alpha):
FILE: jesse/indicators/jma.py
function jma (line 9) | def jma(candles: np.ndarray, period:int=7, phase:float=50, power:int=2, ...
function jma_helper (line 32) | def jma_helper(src, phaseRatio, beta, alpha):
FILE: jesse/indicators/jsa.py
function jsa (line 8) | def jsa(candles: np.ndarray, period: int = 30, source_type: str = "close...
FILE: jesse/indicators/kama.py
function kama (line 7) | def kama(candles: np.ndarray, period: int = 14, fast_length: int = 2, sl...
FILE: jesse/indicators/kaufmanstop.py
function kaufmanstop (line 9) | def kaufmanstop(candles: np.ndarray, period: int = 22, mult: float = 2, ...
FILE: jesse/indicators/kdj.py
function _rolling_max (line 10) | def _rolling_max(a, window):
function _rolling_min (line 22) | def _rolling_min(a, window):
function kdj (line 34) | def kdj(candles: np.ndarray, fastk_period: int = 9, slowk_period: int = ...
FILE: jesse/indicators/keltner.py
function _atr (line 11) | def _atr(high: np.ndarray, low: np.ndarray, close: np.ndarray, period: i...
function _calculate_keltner (line 41) | def _calculate_keltner(source: np.ndarray, high: np.ndarray, low: np.nda...
function keltner (line 54) | def keltner(candles: np.ndarray, period: int = 20, multiplier: float = 2...
FILE: jesse/indicators/kst.py
function kst (line 12) | def kst(candles: np.ndarray, sma_period1: int = 10, sma_period2: int = 1...
FILE: jesse/indicators/kurtosis.py
function kurtosis (line 10) | def kurtosis(candles: np.ndarray, period: int = 5, source_type: str = "h...
FILE: jesse/indicators/kvo.py
function kvo (line 7) | def kvo(candles: np.ndarray, short_period: int = 34, long_period: int = ...
FILE: jesse/indicators/linearreg.py
function _fast_linearreg (line 10) | def _fast_linearreg(source: np.ndarray, period: int) -> np.ndarray:
function linearreg (line 26) | def linearreg(candles: np.ndarray, period: int = 14, source_type: str = ...
FILE: jesse/indicators/linearreg_angle.py
function linearreg_angle (line 8) | def linearreg_angle(candles: np.ndarray, period: int = 14, source_type: ...
FILE: jesse/indicators/linearreg_intercept.py
function linearreg_intercept (line 8) | def linearreg_intercept(candles: np.ndarray, period: int = 14, source_ty...
FILE: jesse/indicators/linearreg_slope.py
function linearreg_slope (line 8) | def linearreg_slope(candles: np.ndarray, period: int = 14, source_type: ...
FILE: jesse/indicators/lrsi.py
function lrsi (line 9) | def lrsi(candles: np.ndarray, alpha: float = 0.2, sequential: bool = Fal...
function lrsi_fast (line 30) | def lrsi_fast(alpha, candles):
FILE: jesse/indicators/ma.py
function ma (line 8) | def ma(candles: np.ndarray, period: int = 30, matype: int = 0, source_t...
FILE: jesse/indicators/maaq.py
function maaq (line 10) | def maaq(candles: np.ndarray, period: int = 11, fast_period: int = 2, sl...
function maaq_fast (line 51) | def maaq_fast(source, temp, period):
FILE: jesse/indicators/mab.py
function mab (line 11) | def mab(candles: np.ndarray, fast_period: int = 10, slow_period: int = 5...
FILE: jesse/indicators/macd.py
function macd (line 9) | def macd(candles: np.ndarray, fast_period: int = 12, slow_period: int = ...
FILE: jesse/indicators/mama.py
function mama (line 11) | def mama(candles: np.ndarray, fastlimit: float = 0.5, slowlimit: float =...
function fast_mama (line 47) | def fast_mama(source, fastlimit, slowlimit):
FILE: jesse/indicators/marketfi.py
function marketfi (line 8) | def marketfi(candles: np.ndarray, sequential: bool = False) -> Union[flo...
FILE: jesse/indicators/mass.py
function mass (line 9) | def mass(candles: np.ndarray, period: int = 5, sequential: bool = False)...
function mass_sum (line 43) | def mass_sum(ratio: np.ndarray, period: int) -> np.ndarray:
function calc_ema (line 52) | def calc_ema(data, n):
FILE: jesse/indicators/mcginley_dynamic.py
function mcginley_dynamic (line 9) | def mcginley_dynamic(candles: np.ndarray, period: int = 10, k: float = 0...
function md_fast (line 37) | def md_fast(source, k, period):
FILE: jesse/indicators/mean_ad.py
function mean_ad (line 9) | def mean_ad(candles: np.ndarray, period: int = 5, source_type: str = "hl...
FILE: jesse/indicators/median_ad.py
function median_ad (line 10) | def median_ad(candles: np.ndarray, period: int = 5, source_type: str = "...
FILE: jesse/indicators/medprice.py
function medprice (line 8) | def medprice(candles: np.ndarray, sequential: bool = False) -> Union[flo...
FILE: jesse/indicators/mfi.py
function mfi (line 8) | def mfi(candles: np.ndarray, period: int = 14, sequential: bool = False)...
FILE: jesse/indicators/midpoint.py
function midpoint (line 8) | def midpoint(candles: np.ndarray, period: int = 14, source_type: str = "...
FILE: jesse/indicators/midprice.py
function midprice (line 8) | def midprice(candles: np.ndarray, period: int = 14, sequential: bool = F...
FILE: jesse/indicators/minmax.py
function minmax (line 11) | def minmax(candles: np.ndarray, order: int = 3, sequential: bool = False...
FILE: jesse/indicators/mom.py
function mom (line 8) | def mom(candles: np.ndarray, period: int = 10, source_type: str = "close...
FILE: jesse/indicators/mwdx.py
function mwdx (line 9) | def mwdx(candles: np.ndarray, factor: float = 0.2, source_type: str = "c...
function mwdx_fast (line 38) | def mwdx_fast(source, fac):
FILE: jesse/indicators/natr.py
function natr (line 7) | def natr(candles: np.ndarray, period: int = 14, sequential: bool = False...
FILE: jesse/indicators/nma.py
function nma (line 9) | def nma(candles: np.ndarray, period: int = 40, source_type: str = "close...
function nma_fast (line 33) | def nma_fast(source, period):
FILE: jesse/indicators/nvi.py
function _nvi_fast (line 10) | def _nvi_fast(source: np.ndarray, volume: np.ndarray) -> np.ndarray:
function nvi (line 23) | def nvi(candles: np.ndarray, source_type: str = "close", sequential: boo...
FILE: jesse/indicators/obv.py
function obv (line 8) | def obv(candles: np.ndarray, sequential: bool = False) -> Union[float, n...
FILE: jesse/indicators/pfe.py
function numpy_ema (line 9) | def numpy_ema(data: np.ndarray, period: int) -> np.ndarray:
function rolling_sum (line 20) | def rolling_sum(arr: np.ndarray, window: int) -> np.ndarray:
function pfe (line 29) | def pfe(candles: np.ndarray, period: int = 10, smoothing: int = 5, sourc...
FILE: jesse/indicators/pivot.py
function pivot (line 10) | def pivot(candles: np.ndarray, mode: int = 0, sequential: bool = False) ...
FILE: jesse/indicators/pma.py
function pma (line 10) | def pma(candles: np.ndarray, source_type: str = "hl2", sequential: bool ...
function pma_fast (line 37) | def pma_fast(source):
FILE: jesse/indicators/ppo.py
function ppo (line 9) | def ppo(candles: np.ndarray, fast_period: int = 12, slow_period: int = 2...
FILE: jesse/indicators/pvi.py
function _pvi_fast (line 10) | def _pvi_fast(source: np.ndarray, volume: np.ndarray) -> np.ndarray:
function pvi (line 26) | def pvi(candles: np.ndarray, source_type: str = "close", sequential: boo...
FILE: jesse/indicators/pwma.py
function pwma (line 11) | def pwma(candles: np.ndarray, period: int = 5, source_type: str = "close...
function pascals_triangle (line 38) | def pascals_triangle(n: int = None) -> np.ndarray:
function combination (line 52) | def combination(n, r) -> int:
FILE: jesse/indicators/qstick.py
function _qstick_fast (line 10) | def _qstick_fast(open_prices: np.ndarray, close_prices: np.ndarray, peri...
function qstick (line 27) | def qstick(candles: np.ndarray, period: int = 5, sequential: bool = Fals...
FILE: jesse/indicators/reflex.py
function reflex (line 11) | def reflex(candles: np.ndarray, period: int = 20, source_type: str = "cl...
function reflex_fast (line 41) | def reflex_fast(ssf, period):
FILE: jesse/indicators/rma.py
function rma (line 9) | def rma(candles: np.ndarray, length: int = 14, source_type="close", sequ...
function rma_fast (line 38) | def rma_fast(source, _length):
FILE: jesse/indicators/roc.py
function roc (line 8) | def roc(candles: np.ndarray, period: int = 10, source_type: str = "close...
FILE: jesse/indicators/rocp.py
function rocp (line 7) | def rocp(candles: np.ndarray, period: int = 10, source_type: str = "clos...
FILE: jesse/indicators/rocr.py
function rocr (line 8) | def rocr(candles: np.ndarray, period: int = 10, source_type: str = "clos...
FILE: jesse/indicators/rocr100.py
function rocr100 (line 8) | def rocr100(candles: np.ndarray, period: int = 10, source_type: str = "c...
FILE: jesse/indicators/roofing.py
function roofing (line 11) | def roofing(candles: np.ndarray, hp_period: int = 48, lp_period: int = 1...
FILE: jesse/indicators/rsi.py
function rsi (line 8) | def rsi(candles: np.ndarray, period: int = 14, source_type: str = "close...
FILE: jesse/indicators/rsmk.py
function rsmk (line 10) | def rsmk(candles: np.ndarray, candles_compare: np.ndarray, lookback: int...
FILE: jesse/indicators/rsx.py
function rsx (line 9) | def rsx(candles: np.ndarray, period: int = 14, source_type: str = "close...
function rsx_fast (line 30) | def rsx_fast(source, period):
FILE: jesse/indicators/rvi.py
function rvi (line 11) | def rvi(candles: np.ndarray, period: int = 10, ma_len: int = 14, matype:...
function _rolling_std (line 55) | def _rolling_std(arr: np.ndarray, window: int) -> np.ndarray:
FILE: jesse/indicators/safezonestop.py
function wilder_smoothing_numba (line 8) | def wilder_smoothing_numba(raw: np.ndarray, period: int) -> np.ndarray:
function rolling_max_numba (line 17) | def rolling_max_numba(arr: np.ndarray, window: int) -> np.ndarray:
function rolling_min_numba (line 32) | def rolling_min_numba(arr: np.ndarray, window: int) -> np.ndarray:
function safezonestop (line 46) | def safezonestop(candles: np.ndarray, period: int = 22, mult: float = 2....
FILE: jesse/indicators/sar.py
function sar (line 8) | def sar(candles: np.ndarray, acceleration: float = 0.02, maximum: float ...
function _fast_sar (line 36) | def _fast_sar(high, low, acceleration, maximum, n):
FILE: jesse/indicators/sinwma.py
function sinwma (line 9) | def sinwma(candles: np.ndarray, period: int = 14, source_type: str = "cl...
FILE: jesse/indicators/skew.py
function skew (line 10) | def skew(candles: np.ndarray, period: int = 5, source_type: str = "hl2",...
FILE: jesse/indicators/sma.py
function sma (line 9) | def sma(candles: np.ndarray, period: int = 5, source_type: str = "close"...
FILE: jesse/indicators/smma.py
function smma (line 8) | def smma(candles: np.ndarray, period: int = 5, source_type: str = "close...
function numpy_ewma (line 31) | def numpy_ewma(data, window):
FILE: jesse/indicators/squeeze_momentum.py
function squeeze_momentum (line 13) | def squeeze_momentum(candles: np.ndarray, length: int = 20, mult: float ...
function _highest (line 71) | def _highest(values, length):
function _lowest (line 82) | def _lowest(values, length):
FILE: jesse/indicators/sqwma.py
function sqwma (line 9) | def sqwma(candles: np.ndarray, period: int = 14, source_type: str = "clo...
function sqwma_fast (line 35) | def sqwma_fast(source, period):
FILE: jesse/indicators/srsi.py
function srsi (line 13) | def srsi(
FILE: jesse/indicators/srwma.py
function srwma (line 9) | def srwma(candles: np.ndarray, period: int = 14, source_type: str = "clo...
function srwma_fast (line 35) | def srwma_fast(source, period):
FILE: jesse/indicators/stc.py
function ema (line 8) | def ema(series: np.ndarray, period: int) -> np.ndarray:
function stoch (line 18) | def stoch(series: np.ndarray, period: int) -> np.ndarray:
function stc (line 35) | def stc(candles: np.ndarray, fast_period: int = 23, slow_period: int = 5...
FILE: jesse/indicators/stddev.py
function stddev (line 8) | def stddev(candles: np.ndarray, period: int = 5, nbdev: float = 1, sourc...
FILE: jesse/indicators/stiffness.py
function stiffness (line 12) | def stiffness(candles: np.ndarray, ma_length: int = 100, stiff_length: i...
function _count_price_exceed_series (line 39) | def _count_price_exceed_series(close_prices, art_series, length):
FILE: jesse/indicators/stochastic.py
function stoch (line 13) | def stoch(candles: np.ndarray, fastk_period: int = 14, slowk_period: int...
FILE: jesse/indicators/stochf.py
function stochf (line 12) | def stochf(candles: np.ndarray, fastk_period: int = 5, fastd_period: int...
FILE: jesse/indicators/supersmoother.py
function supersmoother (line 9) | def supersmoother(candles: np.ndarray, period: int = 14, source_type: st...
function supersmoother_fast (line 37) | def supersmoother_fast(source, period):
FILE: jesse/indicators/supersmoother_3_pole.py
function supersmoother_3_pole (line 13) | def supersmoother_3_pole(candles: np.ndarray, period: int = 14, source_t...
function supersmoother_fast (line 41) | def supersmoother_fast(source, period):
FILE: jesse/indicators/supertrend.py
function supertrend (line 11) | def supertrend(candles: np.ndarray, period: int = 10, factor: float = 3,...
function atr_loop (line 30) | def atr_loop(high, low, close, period):
function supertrend_fast (line 62) | def supertrend_fast(candles, atr, factor, period):
FILE: jesse/indicators/support_resistance_with_break.py
function support_resistance_with_breaks (line 9) | def support_resistance_with_breaks(candles: np.ndarray, left_bars: int =...
function _resistance (line 42) | def _resistance(source, left_bars, right_bars):
function _support (line 81) | def _support(source, left_bars, right_bars):
FILE: jesse/indicators/swma.py
function swma (line 10) | def swma(candles: np.ndarray, period: int = 5, source_type: str = "close...
function symmetric_triangle (line 38) | def symmetric_triangle(n: int = None) -> np.ndarray:
FILE: jesse/indicators/t3.py
function t3 (line 7) | def t3(candles: np.ndarray, period: int = 5, vfactor: float = 0, source_...
function _t3_fast_python (line 60) | def _t3_fast_python(source: np.ndarray, k: float, w1: float, w2: float, ...
FILE: jesse/indicators/tema.py
function tema (line 7) | def tema(candles: np.ndarray, period: int = 9, source_type: str = "close...
FILE: jesse/indicators/trange.py
function trange (line 8) | def trange(candles: np.ndarray, sequential: bool = False) -> Union[float...
FILE: jesse/indicators/trendflex.py
function trendflex (line 11) | def trendflex(candles: np.ndarray, period: int = 20, source_type: str = ...
function trendflex_fast (line 42) | def trendflex_fast(ssf, period):
FILE: jesse/indicators/trima.py
function trima (line 8) | def trima(candles: np.ndarray, period: int = 30, source_type: str = "clo...
FILE: jesse/indicators/trix.py
function _ema_numba (line 10) | def _ema_numba(data, period):
function ema (line 20) | def ema(data: np.ndarray, period: int) -> np.ndarray:
function trix (line 24) | def trix(candles: np.ndarray, period: int = 18, source_type: str = "clos...
FILE: jesse/indicators/tsf.py
function tsf (line 8) | def tsf(candles: np.ndarray, period: int = 14, source_type: str = "close...
FILE: jesse/indicators/tsi.py
function tsi (line 7) | def tsi(candles: np.ndarray, long_period: int = 25, short_period: int = ...
function _mom (line 39) | def _mom(series, period):
function _ema (line 43) | def _ema(series, period):
FILE: jesse/indicators/ttm_squeeze.py
function ttm_squeeze (line 7) | def ttm_squeeze(candles: np.ndarray, length_ttms: int = 20, bb_mult_ttms...
FILE: jesse/indicators/ttm_trend.py
function ttm_trend (line 9) | def ttm_trend(candles: np.ndarray, period: int = 5, source_type: str = "...
FILE: jesse/indicators/typprice.py
function typprice (line 8) | def typprice(candles: np.ndarray, sequential: bool = False) -> Union[flo...
FILE: jesse/indicators/ui.py
function ui (line 8) | def ui(candles: np.ndarray, period: int = 14, scalar: float = 100, sourc...
FILE: jesse/indicators/ultosc.py
function ultosc (line 8) | def ultosc(candles: np.ndarray, timeperiod1: int = 7, timeperiod2: int =...
function _rolling_sum (line 50) | def _rolling_sum(data, window):
FILE: jesse/indicators/var.py
function var (line 8) | def var(candles: np.ndarray, period: int = 14, nbdev: float = 1, source_...
FILE: jesse/indicators/vi.py
function vi (line 10) | def vi(candles: np.ndarray, period: int = 14, sequential: bool = False) ...
FILE: jesse/indicators/vidya.py
function vidya_numba (line 8) | def vidya_numba(source: np.ndarray, length: int, fix_cmo: bool, select: ...
function vidya (line 50) | def vidya(candles: np.ndarray, length: int = 9, fix_cmo: bool = True, se...
FILE: jesse/indicators/vlma.py
function moving_std (line 11) | def moving_std(source: np.ndarray, window: int) -> np.ndarray:
function vlma (line 37) | def vlma(candles: np.ndarray, min_period: int = 5, max_period: int = 50,...
function vlma_fast (line 83) | def vlma_fast(source, a, b, c, d, min_period, max_period):
FILE: jesse/indicators/volume.py
function volume (line 10) | def volume(
FILE: jesse/indicators/vosc.py
function vosc (line 6) | def vosc(candles: np.ndarray, short_period: int = 2, long_period: int = ...
FILE: jesse/indicators/voss.py
function voss (line 11) | def voss(candles: np.ndarray, period: int = 20, predict: int = 3, bandwi...
function voss_fast (line 38) | def voss_fast(source, period, predict, bandwith):
FILE: jesse/indicators/vpci.py
function vpci (line 11) | def vpci(candles: np.ndarray, short_range: int = 5, long_range: int = 25...
FILE: jesse/indicators/vpt.py
function vpt (line 8) | def vpt(candles: np.ndarray, source_type: str = "close", sequential: boo...
FILE: jesse/indicators/vpwma.py
function vpwma (line 9) | def vpwma(candles: np.ndarray, period: int = 14, power: float = 0.382, s...
function vpwma_fast (line 36) | def vpwma_fast(source, period, power):
FILE: jesse/indicators/vwap.py
function vwap (line 6) | def vwap(
function _calculate_vwap (line 54) | def _calculate_vwap(source: np.ndarray, volume: np.ndarray, group_indice...
FILE: jesse/indicators/vwma.py
function vwma (line 9) | def vwma(candles: np.ndarray, period: int = 20, source_type: str = "clos...
FILE: jesse/indicators/vwmacd.py
function vwmacd (line 11) | def vwmacd(candles: np.ndarray, fast_period: int = 12, slow_period: int ...
FILE: jesse/indicators/wad.py
function _wad_numba (line 10) | def _wad_numba(high: np.ndarray, low: np.ndarray, close: np.ndarray) -> ...
function wad (line 31) | def wad(candles: np.ndarray, sequential: bool = False) -> Union[float, n...
FILE: jesse/indicators/waddah_attr_explosion.py
function waddah_attar_explosion (line 13) | def waddah_attar_explosion(candles: np.ndarray, sensitivity: int = 150, ...
function _calc_bb_upper (line 44) | def _calc_bb_upper(source, length, mult):
function _calc_bb_lower (line 50) | def _calc_bb_lower(source, length, mult):
FILE: jesse/indicators/wclprice.py
function wclprice (line 8) | def wclprice(candles: np.ndarray, sequential: bool = False) -> Union[flo...
FILE: jesse/indicators/wilders.py
function _wilders_fast (line 10) | def _wilders_fast(source: np.ndarray, period: int) -> np.ndarray:
function wilders (line 23) | def wilders(candles: np.ndarray, period: int = 5, source_type: str = "cl...
FILE: jesse/indicators/willr.py
function willr (line 9) | def willr(candles: np.ndarray, period: int = 14, sequential: bool = Fals...
FILE: jesse/indicators/wma.py
function wma (line 9) | def wma(candles: np.ndarray, period: int = 30, source_type: str = "close...
FILE: jesse/indicators/wt.py
function wt (line 17) | def wt(candles: np.ndarray, wtchannellen: int = 9, wtaveragelen: int = 1...
FILE: jesse/indicators/zlema.py
function zlema (line 9) | def zlema(candles: np.ndarray, period: int = 20, source_type: str = "clo...
FILE: jesse/indicators/zscore.py
function zscore (line 11) | def zscore(candles: np.ndarray, period: int = 14, matype: int = 0, nbdev...
FILE: jesse/libs/custom_json/__init__.py
class NpEncoder (line 5) | class NpEncoder(json.JSONEncoder):
method default (line 6) | def default(self, obj):
FILE: jesse/libs/dynamic_numpy_array/__init__.py
class DynamicNumpyArray (line 6) | class DynamicNumpyArray:
method __init__ (line 14) | def __init__(self, shape: tuple, drop_at: int = None):
method __str__ (line 21) | def __str__(self) -> str:
method __len__ (line 24) | def __len__(self) -> int:
method __getitem__ (line 27) | def __getitem__(self, i):
method __setitem__ (line 46) | def __setitem__(self, i, item) -> None:
method append (line 69) | def append(self, item: np.ndarray) -> None:
method get_last_item (line 89) | def get_last_item(self):
method get_past_item (line 96) | def get_past_item(self, past_index) -> np.ndarray:
method flush (line 106) | def flush(self) -> None:
method append_multiple (line 111) | def append_multiple(self, items: np.ndarray) -> None:
method delete (line 137) | def delete(self, index: int, axis=None) -> None:
FILE: jesse/models/BacktestSession.py
class BacktestSession (line 11) | class BacktestSession(peewee.Model):
class Meta (line 43) | class Meta:
method __init__ (line 52) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method metrics_json (line 62) | def metrics_json(self):
method metrics_json (line 71) | def metrics_json(self, metrics_dict):
method equity_curve_json (line 78) | def equity_curve_json(self):
method equity_curve_json (line 87) | def equity_curve_json(self, curve_data):
method trades_json (line 94) | def trades_json(self):
method trades_json (line 103) | def trades_json(self, trades_list):
method hyperparameters_json (line 110) | def hyperparameters_json(self):
method hyperparameters_json (line 119) | def hyperparameters_json(self, hp_dict):
method chart_data_json (line 126) | def chart_data_json(self):
method chart_data_json (line 135) | def chart_data_json(self, data_dict):
method state_json (line 142) | def state_json(self):
method state_json (line 156) | def state_json(self, state_data):
method strategy_codes_json (line 163) | def strategy_codes_json(self):
method strategy_codes_json (line 172) | def strategy_codes_json(self, codes_dict):
method duration (line 179) | def duration(self):
method net_profit_percentage (line 191) | def net_profit_percentage(self):
function get_backtest_session_by_id (line 210) | def get_backtest_session_by_id(id: str):
function store_backtest_session (line 217) | def store_backtest_session(
function update_backtest_session_status (line 251) | def update_backtest_session_status(id: str, status: str) -> None:
function store_backtest_session_exception (line 260) | def store_backtest_session_exception(id: str, exception: str, traceback:...
function update_backtest_session_results (line 270) | def update_backtest_session_results(
function get_backtest_sessions (line 308) | def get_backtest_sessions(limit: int = 50, offset: int = 0, title_search...
function delete_backtest_session (line 342) | def delete_backtest_session(id: str) -> bool:
function purge_backtest_sessions (line 351) | def purge_backtest_sessions(days_old: int = None) -> int:
function update_backtest_session_state (line 388) | def update_backtest_session_state(id: str, state: dict) -> None:
function update_backtest_session_notes (line 417) | def update_backtest_session_notes(id: str, title: str = None, descriptio...
FILE: jesse/models/Candle.py
class Candle (line 11) | class Candle(peewee.Model):
class Meta (line 26) | class Meta:
method __init__ (line 34) | def __init__(self, attributes: dict = None, **kwargs) -> None:
FILE: jesse/models/ClosedTrade.py
class ClosedTrade (line 16) | class ClosedTrade(peewee.Model):
class Meta (line 34) | class Meta:
method __init__ (line 40) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method to_json (line 56) | def to_json(self) -> dict:
method to_dict (line 76) | def to_dict(self) -> dict:
method to_dict_with_orders (line 96) | def to_dict_with_orders(self) -> dict:
method fee (line 102) | def fee(self) -> float:
method size (line 106) | def size(self) -> float:
method pnl (line 110) | def pnl(self) -> float:
method pnl_percentage (line 122) | def pnl_percentage(self) -> float:
method roi (line 129) | def roi(self) -> float:
method total_cost (line 137) | def total_cost(self) -> float:
method holding_period (line 144) | def holding_period(self) -> int:
method is_long (line 151) | def is_long(self) -> bool:
method is_short (line 155) | def is_short(self) -> bool:
method qty (line 159) | def qty(self) -> float:
method entry_price (line 168) | def entry_price(self) -> float:
method current_qty (line 179) | def current_qty(self) -> float:
method exit_price (line 191) | def exit_price(self) -> float:
method is_open (line 202) | def is_open(self) -> bool:
FILE: jesse/models/Exchange.py
class Exchange (line 9) | class Exchange(ABC):
method __init__ (line 10) | def __init__(self, name: str, starting_balance: float, fee_rate: float...
method wallet_balance (line 56) | def wallet_balance(self) -> float:
method available_margin (line 61) | def available_margin(self) -> float:
method on_order_submission (line 65) | def on_order_submission(self, order: Order) -> None:
method on_order_execution (line 69) | def on_order_execution(self, order: Order) -> None:
method on_order_cancellation (line 73) | def on_order_cancellation(self, order: Order) -> None:
FILE: jesse/models/ExchangeApiKeys.py
class ExchangeApiKeys (line 9) | class ExchangeApiKeys(peewee.Model):
class Meta (line 18) | class Meta:
method __init__ (line 23) | def __init__(self, attributes=None, **kwargs) -> None:
method get_additional_fields (line 32) | def get_additional_fields(self) -> dict:
FILE: jesse/models/FuturesExchange.py
class FuturesExchange (line 13) | class FuturesExchange(Exchange):
method __init__ (line 14) | def __init__(
method started_balance (line 37) | def started_balance(self) -> float:
method wallet_balance (line 44) | def wallet_balance(self) -> float:
method available_margin (line 51) | def available_margin(self) -> float:
method charge_fee (line 85) | def charge_fee(self, amount: float) -> None:
method add_realized_pnl (line 97) | def add_realized_pnl(self, realized_pnl: float) -> None:
method on_order_submission (line 106) | def on_order_submission(self, order: Order) -> None:
method on_order_execution (line 130) | def on_order_execution(self, order: Order) -> None:
method on_order_cancellation (line 149) | def on_order_cancellation(self, order: Order) -> None:
method update_from_stream (line 167) | def update_from_stream(self, data: dict) -> None:
function find_order_index (line 180) | def find_order_index(orders, order_array):
FILE: jesse/models/LiveEquitySnapshot.py
class LiveEquitySnapshot (line 9) | class LiveEquitySnapshot(peewee.Model):
class Meta (line 15) | class Meta:
method __init__ (line 24) | def __init__(self, attributes: dict = None, **kwargs) -> None:
FILE: jesse/models/LiveSession.py
class LiveSession (line 11) | class LiveSession(peewee.Model):
class Meta (line 40) | class Meta:
method __init__ (line 50) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method state_json (line 60) | def state_json(self):
method state_json (line 74) | def state_json(self, state_data):
method strategy_codes_json (line 81) | def strategy_codes_json(self):
method strategy_codes_json (line 90) | def strategy_codes_json(self, codes_dict):
method duration (line 97) | def duration(self):
FILE: jesse/models/Log.py
class Log (line 9) | class Log(peewee.Model):
class Meta (line 17) | class Meta:
method __init__ (line 24) | def __init__(self, attributes=None, **kwargs) -> None:
function store_log_into_db (line 43) | def store_log_into_db(log: dict, log_type: str) -> None:
FILE: jesse/models/MonteCarloSession.py
function _convert_numpy_types (line 8) | def _convert_numpy_types(obj):
class MonteCarloSession (line 29) | class MonteCarloSession(peewee.Model):
class Meta (line 39) | class Meta:
method __init__ (line 48) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method state_json (line 58) | def state_json(self):
method state_json (line 69) | def state_json(self, state_data):
method strategy_codes_json (line 73) | def strategy_codes_json(self):
method strategy_codes_json (line 79) | def strategy_codes_json(self, codes_dict):
method trades_session (line 83) | def trades_session(self):
method candles_session (line 92) | def candles_session(self):
class MonteCarloTradesSession (line 101) | class MonteCarloTradesSession(peewee.Model):
class Meta (line 114) | class Meta:
method __init__ (line 123) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method results_json (line 133) | def results_json(self):
method results_json (line 139) | def results_json(self, results_data):
class MonteCarloCandlesSession (line 143) | class MonteCarloCandlesSession(peewee.Model):
class Meta (line 158) | class Meta:
method __init__ (line 167) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method results_json (line 177) | def results_json(self):
method results_json (line 183) | def results_json(self, results_data):
method pipeline_params_json (line 187) | def pipeline_params_json(self):
method pipeline_params_json (line 193) | def pipeline_params_json(self, params_data):
function get_monte_carlo_session_by_id (line 209) | def get_monte_carlo_session_by_id(id: str):
function get_monte_carlo_sessions (line 216) | def get_monte_carlo_sessions(limit: int = 50, offset: int = 0, title_sea...
function store_monte_carlo_session (line 250) | def store_monte_carlo_session(id: str, status: str, state: dict = None, ...
function update_monte_carlo_session_status (line 269) | def update_monte_carlo_session_status(id: str, status: str) -> None:
function update_monte_carlo_session_state (line 277) | def update_monte_carlo_session_state(id: str, state: dict, strategy_code...
function delete_monte_carlo_session (line 308) | def delete_monte_carlo_session(id: str) -> bool:
function update_monte_carlo_session_notes (line 325) | def update_monte_carlo_session_notes(id: str, title: str = None, descrip...
function purge_monte_carlo_sessions (line 342) | def purge_monte_carlo_sessions(days_old: int = None) -> int:
function get_running_monte_carlo_session_id (line 387) | def get_running_monte_carlo_session_id():
function get_trades_session_by_parent_id (line 397) | def get_trades_session_by_parent_id(parent_id: str):
function store_trades_session (line 406) | def store_trades_session(parent_id: str, num_scenarios: int) -> str:
function update_trades_session_progress (line 422) | def update_trades_session_progress(id: str, completed: int, results: dic...
function update_trades_session_status (line 434) | def update_trades_session_status(id: str, status: str) -> None:
function get_candles_session_by_parent_id (line 443) | def get_candles_session_by_parent_id(parent_id: str):
function store_candles_session (line 452) | def store_candles_session(parent_id: str, num_scenarios: int, pipeline_t...
function update_candles_session_progress (line 470) | def update_candles_session_progress(id: str, completed: int, results: di...
function update_candles_session_status (line 482) | def update_candles_session_status(id: str, status: str) -> None:
function store_session_exception (line 491) | def store_session_exception(session_id: str, session_type: str, exceptio...
function append_session_logs (line 505) | def append_session_logs(session_id: str, session_type: str, log_message:...
function append_monte_carlo_session_logs (line 524) | def append_monte_carlo_session_logs(session_id: str, log_message: str) -...
FILE: jesse/models/NotificationApiKeys.py
class NotificationApiKeys (line 8) | class NotificationApiKeys(peewee.Model):
class Meta (line 15) | class Meta:
method __init__ (line 20) | def __init__(self, attributes=None, **kwargs) -> None:
FILE: jesse/models/OpenTab.py
class OpenTab (line 10) | class OpenTab(peewee.Model):
class Meta (line 26) | class Meta:
method __init__ (line 34) | def __init__(self, attributes: dict = None, **kwargs) -> None:
FILE: jesse/models/OptimizationSession.py
class OptimizationSession (line 12) | class OptimizationSession(peewee.Model):
class Meta (line 42) | class Meta:
method __init__ (line 51) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method best_trials_json (line 61) | def best_trials_json(self):
method best_trials_json (line 70) | def best_trials_json(self, trials_list):
method objective_curve_json (line 77) | def objective_curve_json(self):
method objective_curve_json (line 86) | def objective_curve_json(self, curve_data):
method state_json (line 93) | def state_json(self):
method state_json (line 107) | def state_json(self, state_data):
method strategy_codes_json (line 114) | def strategy_codes_json(self):
method strategy_codes_json (line 123) | def strategy_codes_json(self, codes_dict):
method duration (line 130) | def duration(self):
method best_score (line 143) | def best_score(self):
function get_optimization_session_by_id (line 164) | def get_optimization_session_by_id(id: str):
function reset_optimization_session (line 171) | def reset_optimization_session(id: str):
function store_optimization_session (line 183) | def store_optimization_session(
function update_optimization_session_status (line 204) | def update_optimization_session_status(id: str, status: str) -> None:
function add_session_exception (line 213) | def add_session_exception(id: str, exception: str, traceback: str) -> None:
function update_optimization_session_trials (line 223) | def update_optimization_session_trials(
function get_optimization_session (line 245) | def get_optimization_session(id: str) -> dict:
function get_optimization_sessions (line 260) | def get_optimization_sessions(limit: int = 50, offset: int = 0, title_se...
function delete_optimization_session (line 294) | def delete_optimization_session(id: str) -> bool:
function update_optimization_session_state (line 303) | def update_optimization_session_state(id: str, state: dict, strategy_cod...
function update_optimization_session_notes (line 337) | def update_optimization_session_notes(id: str, title: str = None, descri...
function update_optimization_session_notes (line 345) | def update_optimization_session_notes(id: str, title: str = None, descri...
function purge_optimization_sessions (line 362) | def purge_optimization_sessions(days_old: int = None) -> int:
function get_running_optimization_session_id (line 399) | def get_running_optimization_session_id():
FILE: jesse/models/Option.py
class Option (line 9) | class Option(peewee.Model):
class Meta (line 15) | class Meta:
method __init__ (line 20) | def __init__(self, attributes=None, **kwargs) -> None:
FILE: jesse/models/Order.py
class Order (line 12) | class Order(Model):
class Meta (line 41) | class Meta:
method __init__ (line 47) | def __init__(self, attributes: dict = None, **kwargs) -> None:
method is_canceled (line 57) | def is_canceled(self) -> bool:
method is_active (line 61) | def is_active(self) -> bool:
method is_cancellable (line 65) | def is_cancellable(self):
method is_queued (line 72) | def is_queued(self) -> bool:
method is_new (line 83) | def is_new(self) -> bool:
method is_executed (line 87) | def is_executed(self) -> bool:
method is_filled (line 91) | def is_filled(self) -> bool:
method is_partially_filled (line 95) | def is_partially_filled(self) -> bool:
method is_stop_loss (line 99) | def is_stop_loss(self):
method is_take_profit (line 103) | def is_take_profit(self):
method to_dict (line 107) | def to_dict(self):
method value (line 133) | def value(self) -> float:
method remaining_qty (line 137) | def remaining_qty(self) -> float:
FILE: jesse/models/Orderbook.py
class Orderbook (line 6) | class Orderbook(peewee.Model):
class Meta (line 15) | class Meta:
method __init__ (line 21) | def __init__(self, attributes: dict = None, **kwargs) -> None:
function store_orderbook_into_db (line 35) | def store_orderbook_into_db(exchange: str, symbol: str, orderbook: np.nd...
FILE: jesse/models/Position.py
class Position (line 6) | class Position:
method __init__ (line 24) | def __init__(self, attributes: dict = None) -> None:
method mark_price (line 32) | def mark_price(self) -> float:
method funding_rate (line 42) | def funding_rate(self) -> float:
method next_funding_timestamp (line 52) | def next_funding_timestamp(self) -> Union[int, None]:
method value (line 62) | def value(self) -> float:
method type (line 77) | def type(self) -> str:
method pnl_percentage (line 91) | def pnl_percentage(self) -> float:
method roi (line 100) | def roi(self) -> float:
method total_cost (line 111) | def total_cost(self) -> float:
method leverage (line 125) | def leverage(self) -> Union[int, np.float64]:
method exchange_type (line 135) | def exchange_type(self) -> str:
method entry_margin (line 139) | def entry_margin(self) -> float:
method pnl (line 146) | def pnl(self) -> float:
method is_open (line 166) | def is_open(self) -> bool:
method is_close (line 175) | def is_close(self) -> bool:
method is_long (line 184) | def is_long(self) -> bool:
method is_short (line 193) | def is_short(self) -> bool:
method mode (line 202) | def mode(self) -> str:
method liquidation_price (line 209) | def liquidation_price(self) -> Union[float, np.float64]:
method _initial_margin_rate (line 235) | def _initial_margin_rate(self) -> float:
method bankruptcy_price (line 239) | def bankruptcy_price(self) -> Union[float, np.float64]:
method to_dict (line 248) | def to_dict(self):
method _min_notional_size (line 265) | def _min_notional_size(self) -> float:
method _min_qty (line 272) | def _min_qty(self) -> float:
method _can_mutate_qty (line 286) | def _can_mutate_qty(self):
FILE: jesse/models/Route.py
class Route (line 1) | class Route:
method __init__ (line 2) | def __init__(
FILE: jesse/models/SpotExchange.py
class SpotExchange (line 10) | class SpotExchange(Exchange):
method __init__ (line 11) | def __init__(self, name: str, starting_balance: float, fee_rate: float):
method started_balance (line 22) | def started_balance(self) -> float:
method wallet_balance (line 29) | def wallet_balance(self) -> float:
method available_margin (line 33) | def available_margin(self) -> float:
method on_order_submission (line 36) | def on_order_submission(self, order: Order) -> None:
method on_order_execution (line 75) | def on_order_execution(self, order: Order) -> None:
method on_order_cancellation (line 107) | def on_order_cancellation(self, order: Order) -> None:
method update_from_stream (line 130) | def update_from_stream(self, data: dict) -> None:
FILE: jesse/models/Ticker.py
class Ticker (line 6) | class Ticker(peewee.Model):
class Meta (line 21) | class Meta:
method __init__ (line 27) | def __init__(self, attributes: dict = None, **kwargs) -> None:
function store_ticker_into_db (line 41) | def store_ticker_into_db(exchange: str, symbol: str, ticker: np.ndarray)...
FILE: jesse/models/Trade.py
class Trade (line 7) | class Trade(peewee.Model):
class Meta (line 23) | class Meta:
method __init__ (line 29) | def __init__(self, attributes: dict = None, **kwargs) -> None:
function store_trade_into_db (line 43) | def store_trade_into_db(exchange: str, symbol: str, trade: np.ndarray) -...
FILE: jesse/modes/backtest_mode.py
function run (line 31) | def run(
function _execute_backtest (line 73) | def _execute_backtest(
function _handle_sync_no_candles (line 263) | def _handle_sync_no_candles(e, start_date, exchange):
function _get_formatted_candles_for_frontend (line 294) | def _get_formatted_candles_for_frontend():
function _get_formatted_orders_for_frontend (line 322) | def _get_formatted_orders_for_frontend():
function _get_add_line_to_candle_chart (line 334) | def _get_add_line_to_candle_chart():
function _get_add_extra_line_chart (line 346) | def _get_add_extra_line_chart():
function _get_add_horizontal_line_to_candle_chart (line 358) | def _get_add_horizontal_line_to_candle_chart():
function _get_add_horizontal_line_to_extra_chart (line 370) | def _get_add_horizontal_line_to_extra_chart():
function _handle_missing_candles (line 382) | def _handle_missing_candles(exchange: str, symbol: str, start_date: int,...
function load_candles (line 407) | def load_candles(start_date: int, finish_date: int) -> Tuple[dict, dict]:
function _handle_warmup_candles (line 453) | def _handle_warmup_candles(warmup_candles: dict, start_date: str) -> None:
function simulator (line 487) | def simulator(*args, fast_mode: bool = False, **kwargs) -> dict:
function _step_simulator (line 494) | def _step_simulator(
function _simulation_minutes_length (line 635) | def _simulation_minutes_length(candles: dict) -> int:
function _prepare_times_before_simulation (line 641) | def _prepare_times_before_simulation(candles: dict) -> None:
function _prepare_routes (line 655) | def _prepare_routes(
function get_candles_from_pipeline (line 731) | def get_candles_from_pipeline(candles_pipeline: Optional[BaseCandlesPipe...
function _update_progress_bar (line 740) | def _update_progress_bar(
function _finish_progress_bar (line 763) | def _finish_progress_bar(progressbar: Progressbar, run_silently: bool):
function _get_fixed_jumped_candle (line 777) | def _get_fixed_jumped_candle(
function _simulate_price_change_effect (line 797) | def _simulate_price_change_effect(real_candle: np.ndarray, exchange: str...
function _check_for_liquidations (line 853) | def _check_for_liquidations(candle: np.ndarray, exchange: str, symbol: s...
function _generate_outputs (line 887) | def _generate_outputs(
function _skip_simulator (line 917) | def _skip_simulator(
function _calculate_minimum_candle_step (line 996) | def _calculate_minimum_candle_step():
function _simulate_new_candles (line 1027) | def _simulate_new_candles(candles: dict, candles_pipelines: Dict[str, Ba...
function _simulate_price_change_effect_multiple_candles (line 1072) | def _simulate_price_change_effect_multiple_candles(
function _update_all_routes_a_partial_candle (line 1161) | def _update_all_routes_a_partial_candle(
function _execute_routes (line 1203) | def _execute_routes(candle_index: int, candles_step: int) -> None:
function _get_executing_orders (line 1225) | def _get_executing_orders(exchange, symbol, real_candle):
function _sort_execution_orders (line 1234) | def _sort_execution_orders(orders: List[Order], short_candles: np.ndarray):
FILE: jesse/modes/data_provider.py
function get_candles (line 18) | def get_candles(exchange: str, symbol: str, timeframe: str):
function get_config (line 88) | def get_config(client_config: dict, has_live=False) -> dict:
function update_config (line 134) | def update_config(client_config: dict):
function download_file (line 151) | def download_file(mode: str, file_type: str, session_id: str = None):
function download_api_keys (line 180) | def download_api_keys():
function validate_csv_content (line 226) | def validate_csv_content(content: str) -> bool:
function import_api_keys_from_csv (line 261) | def import_api_keys_from_csv(content: str) -> Dict[str, any]:
function get_backtest_logs (line 324) | def get_backtest_logs(session_id: str):
function get_monte_carlo_logs (line 336) | def get_monte_carlo_logs(session_id: str):
function get_optimization_logs (line 347) | def get_optimization_logs(session_id: str):
function download_backtest_log (line 358) | def download_backtest_log(session_id: str):
FILE: jesse/modes/exchange_api_keys.py
function get_exchange_api_keys (line 9) | def get_exchange_api_keys() -> JSONResponse:
function store_exchange_api_keys (line 35) | def store_exchange_api_keys(
function delete_exchange_api_keys (line 103) | def delete_exchange_api_keys(exchange_api_key_id: str) -> JSONResponse:
FILE: jesse/modes/import_candles_mode/__init__.py
function run (line 23) | def run(
function _get_candles_from_backup_exchange (line 219) | def _get_candles_from_backup_exchange(exchange: str, backup_driver: Cand...
function _fill_absent_candles (line 336) | def _fill_absent_candles(temp_candles: List[Dict[str, Union[str, Any]]],...
function store_candles_list (line 392) | def store_candles_list(candles: List[Dict]) -> None:
FILE: jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetual.py
class ApexOmniPerpetual (line 5) | class ApexOmniPerpetual(ApexProMain):
method __init__ (line 6) | def __init__(self) -> None:
FILE: jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetualTestnet.py
class ApexOmniPerpetualTestnet (line 5) | class ApexOmniPerpetualTestnet(ApexProMain):
method __init__ (line 6) | def __init__(self) -> None:
FILE: jesse/modes/import_candles_mode/drivers/Apex/ApexProMain.py
class ApexProMain (line 9) | class ApexProMain(CandleExchange):
method __init__ (line 10) | def __init__(self, name: str, rest_endpoint: str) -> None:
method get_starting_time (line 17) | def get_starting_time(self, symbol: str) -> int:
method fetch (line 40) | def fetch(self, symbol: str, start_timestamp: int, timeframe: str = '1...
method get_available_symbols (line 76) | def get_available_symbols(self) -> list:
FILE: jesse/modes/import_candles_mode/drivers/Apex/ApexProPerpetual.py
class ApexProPerpetual (line 5) | class ApexProPerpetual(ApexProMain):
method __init__ (line 6) | def __init__(self) -> None:
FILE: jesse/modes/import_candles_mode/drivers/Apex/ApexProPerpetualTestnet.py
class ApexProPerpetualTestnet (line 5) | class ApexProPerpetualTestnet(ApexProMain):
method __init__ (line 6) | def __init__(self) -> None:
FILE: jesse/modes/import_candles_mode/drivers/Apex/apex_pro_utils.py
function timeframe_to_interval (line 4) | def timeframe_to_interval(timeframe: str) -> str:
function interval_to_timeframe (line 36) | def interval_to_timeframe(interval: str) -> str:
FILE: jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-arm.py
class _UniffiRustBuffer (line 30) | class _UniffiRustBuffer(ctypes.Structure):
method alloc (line 38) | def alloc(size):
method reserve (line 42) | def reserve(rbuf, additional):
method free (line 45) | def free(self):
method __str__ (line 48) | def __str__(self):
method alloc_with_builder (line 56) | def alloc_with_builder(*args):
method consume_with_stream (line 70) | def consume_with_stream(self):
method read_with_stream (line 85) | def read_with_stream(self):
class _UniffiForeignBytes (line 96) | class _UniffiForeignBytes(ctypes.Structure):
method __str__ (line 102) | def __str__(self):
class _UniffiRustBufferStream (line 106) | class _UniffiRustBufferStream:
method __init__ (line 111) | def __init__(self, data, len):
method from_rust_buffer (line 117) | def from_rust_buffer(cls, buf):
method remaining (line 120) | def remaining(self):
method _unpack_from (line 123) | def _unpack_from(self, size, format):
method read (line 130) | def read(self, size):
method read_i8 (line 137) | def read_i8(self):
method read_u8 (line 140) | def read_u8(self):
method read_i16 (line 143) | def read_i16(self):
method read_u16 (line 146) | def read_u16(self):
method read_i32 (line 149) | def read_i32(self):
method read_u32 (line 152) | def read_u32(self):
method read_i64 (line 155) | def read_i64(self):
method read_u64 (line 158) | def read_u64(self):
method read_float (line 161) | def read_float(self):
method read_double (line 165) | def read_double(self):
method read_c_size_t (line 168) | def read_c_size_t(self):
class _UniffiRustBufferBuilder (line 171) | class _UniffiRustBufferBuilder:
method __init__ (line 176) | def __init__(self):
method finalize (line 180) | def finalize(self):
method discard (line 185) | def discard(self):
method _reserve (line 191) | def _reserve(self, num_bytes):
method _pack_into (line 197) | def _pack_into(self, size, format, value):
method write (line 203) | def write(self, value):
method write_i8 (line 208) | def write_i8(self, v):
method write_u8 (line 211) | def write_u8(self, v):
method write_i16 (line 214) | def write_i16(self, v):
method write_u16 (line 217) | def write_u16(self, v):
method write_i32 (line 220) | def write_i32(self, v):
method write_u32 (line 223) | def write_u32(self, v):
method write_i64 (line 226) | def write_i64(self, v):
method write_u64 (line 229) | def write_u64(self, v):
method write_float (line 232) | def write_float(self, v):
method write_double (line 235) | def write_double(self, v):
method write_c_size_t (line 238) | def write_c_size_t(self, v):
class InternalError (line 243) | class InternalError(Exception):
class _UniffiRustCallStatus (line 246) | class _UniffiRustCallStatus(ctypes.Structure):
method __str__ (line 260) | def __str__(self):
function _rust_call (line 270) | def _rust_call(fn, *args):
function _rust_call_with_error (line 274) | def _rust_call_with_error(error_ffi_converter, fn, *args):
function _uniffi_check_call_status (line 286) | def _uniffi_check_call_status(error_ffi_converter, call_status):
class _UniffiPointerManagerCPython (line 315) | class _UniffiPointerManagerCPython:
method new_pointer (line 323) | def new_pointer(self, obj):
method release_pointer (line 338) | def release_pointer(self, address):
method lookup (line 344) | def lookup(self, address):
class _UniffiPointerManagerGeneral (line 347) | class _UniffiPointerManagerGeneral:
method __init__ (line 358) | def __init__(self):
method new_pointer (line 363) | def new_pointer(self, obj):
method release_pointer (line 370) | def release_pointer(self, handle):
method lookup (line 374) | def lookup(self, handle):
class _UniffiConverterPrimitive (line 384) | class _UniffiConverterPrimitive:
method check (line 386) | def check(cls, value):
method lift (line 390) | def lift(cls, value):
method lower (line 394) | def lower(cls, value):
method lowerUnchecked (line 398) | def lowerUnchecked(cls, value):
method write (line 402) | def write(cls, value, buf):
class _UniffiConverterPrimitiveInt (line 405) | class _UniffiConverterPrimitiveInt(_UniffiConverterPrimitive):
method check (line 407) | def check(cls, value):
class _UniffiConverterPrimitiveFloat (line 418) | class _UniffiConverterPrimitiveFloat(_UniffiConverterPrimitive):
method check (line 420) | def check(cls, value):
class _UniffiConverterRustBuffer (line 431) | class _UniffiConverterRustBuffer:
method lift (line 433) | def lift(cls, rbuf):
method lower (line 438) | def lower(cls, value):
function _uniffi_future_callback_t (line 467) | def _uniffi_future_callback_t(return_type):
function _uniffi_load_indirect (line 473) | def _uniffi_load_indirect():
function _uniffi_check_contract_api_version (line 498) | def _uniffi_check_contract_api_version(lib):
function _uniffi_check_api_checksums (line 506) | def _uniffi_check_api_checksums(lib):
class _UniffiConverterUInt8 (line 2414) | class _UniffiConverterUInt8(_UniffiConverterPrimitiveInt):
method read (line 2420) | def read(buf):
method write_unchecked (line 2424) | def write_unchecked(value, buf):
class _UniffiConverterUInt16 (line 2427) | class _UniffiConverterUInt16(_UniffiConverterPrimitiveInt):
method read (line 2433) | def read(buf):
method write_unchecked (line 2437) | def write_unchecked(value, buf):
class _UniffiConverterInt16 (line 2440) | class _UniffiConverterInt16(_UniffiConverterPrimitiveInt):
method read (line 2446) | def read(buf):
method write_unchecked (line 2450) | def write_unchecked(value, buf):
class _UniffiConverterUInt32 (line 2453) | class _UniffiConverterUInt32(_UniffiConverterPrimitiveInt):
method read (line 2459) | def read(buf):
method write_unchecked (line 2463) | def write_unchecked(value, buf):
class _UniffiConverterUInt64 (line 2466) | class _UniffiConverterUInt64(_UniffiConverterPrimitiveInt):
method read (line 2472) | def read(buf):
method write_unchecked (line 2476) | def write_unchecked(value, buf):
class _UniffiConverterBool (line 2479) | class _UniffiConverterBool(_UniffiConverterPrimitive):
method check (line 2481) | def check(cls, value):
method read (line 2485) | def read(cls, buf):
method write_unchecked (line 2489) | def write_unchecked(cls, value, buf):
method lift (line 2493) | def lift(value):
class _UniffiConverterString (line 2496) | class _UniffiConverterString:
method check (line 2498) | def check(value):
method read (line 2504) | def read(buf):
method write (line 2512) | def write(value, buf):
method lift (line 2519) | def lift(buf):
method lower (line 2524) | def lower(value):
class AutoDeleveraging (line 2532) | class AutoDeleveraging:
method __init__ (line 2534) | def __init__(self, builder: "AutoDeleveragingBuilder"):
method __del__ (line 2539) | def __del__(self):
method _make_instance_ (line 2547) | def _make_instance_(cls, pointer):
method create_signed_tx (line 2555) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "AutoDeleveraging":
method get_bytes (line 2564) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2569) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 2574) | def is_signature_valid(self, ):
method is_valid (line 2579) | def is_valid(self, ):
method json_str (line 2584) | def json_str(self, ):
method to_zklink_tx (line 2589) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 2599) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeAutoDeleveraging (line 2605) | class _UniffiConverterTypeAutoDeleveraging:
method read (line 2607) | def read(cls, buf):
method write (line 2614) | def write(cls, value, buf):
method lift (line 2620) | def lift(value):
method lower (line 2624) | def lower(value):
class ChangePubKey (line 2629) | class ChangePubKey:
method __init__ (line 2631) | def __init__(self, builder: "ChangePubKeyBuilder"):
method __del__ (line 2636) | def __del__(self):
method _make_instance_ (line 2644) | def _make_instance_(cls, pointer):
method get_bytes (line 2652) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2662) | def get_signature(self, ) -> "ZkLinkSignature":
method is_onchain (line 2672) | def is_onchain(self, ):
method is_signature_valid (line 2682) | def is_signature_valid(self, ):
method is_valid (line 2692) | def is_valid(self, ):
method json_str (line 2702) | def json_str(self, ):
method to_zklink_tx (line 2712) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 2722) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeChangePubKey (line 2732) | class _UniffiConverterTypeChangePubKey:
method read (line 2734) | def read(cls, buf):
method write (line 2741) | def write(cls, value, buf):
method lift (line 2747) | def lift(value):
method lower (line 2751) | def lower(value):
class Contract (line 2756) | class Contract:
method __init__ (line 2758) | def __init__(self, builder: "ContractBuilder"):
method __del__ (line 2763) | def __del__(self):
method _make_instance_ (line 2771) | def _make_instance_(cls, pointer):
method create_signed_contract (line 2779) | def create_signed_contract(self, zklink_signer: "ZkLinkSigner") -> "Co...
method get_bytes (line 2792) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2802) | def get_signature(self, ) -> "ZkLinkSignature":
method is_long (line 2812) | def is_long(self, ):
method is_short (line 2822) | def is_short(self, ):
method is_signature_valid (line 2832) | def is_signature_valid(self, ):
class _UniffiConverterTypeContract (line 2842) | class _UniffiConverterTypeContract:
method read (line 2844) | def read(cls, buf):
method write (line 2851) | def write(cls, value, buf):
method lift (line 2857) | def lift(value):
method lower (line 2861) | def lower(value):
class ContractMatching (line 2866) | class ContractMatching:
method __init__ (line 2868) | def __init__(self, builder: "ContractMatchingBuilder"):
method __del__ (line 2873) | def __del__(self):
method _make_instance_ (line 2881) | def _make_instance_(cls, pointer):
method create_signed_tx (line 2889) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "ContractMatching":
method get_bytes (line 2902) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2912) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 2922) | def is_signature_valid(self, ):
method is_valid (line 2932) | def is_valid(self, ):
method json_str (line 2942) | def json_str(self, ):
method to_zklink_tx (line 2952) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 2962) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeContractMatching (line 2972) | class _UniffiConverterTypeContractMatching:
method read (line 2974) | def read(cls, buf):
method write (line 2981) | def write(cls, value, buf):
method lift (line 2987) | def lift(value):
method lower (line 2991) | def lower(value):
class Deposit (line 2996) | class Deposit:
method __init__ (line 2998) | def __init__(self, builder: "DepositBuilder"):
method __del__ (line 3003) | def __del__(self):
method _make_instance_ (line 3011) | def _make_instance_(cls, pointer):
method get_bytes (line 3019) | def get_bytes(self, ) -> "typing.List[int]":
method json_str (line 3029) | def json_str(self, ):
method tx_hash (line 3039) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeDeposit (line 3049) | class _UniffiConverterTypeDeposit:
method read (line 3051) | def read(cls, buf):
method write (line 3058) | def write(cls, value, buf):
method lift (line 3064) | def lift(value):
method lower (line 3068) | def lower(value):
class EthSigner (line 3073) | class EthSigner:
method __init__ (line 3075) | def __init__(self, private_key: str):
method __del__ (line 3080) | def __del__(self):
method _make_instance_ (line 3088) | def _make_instance_(cls, pointer):
method get_address (line 3096) | def get_address(self, ) -> "Address":
method sign_message (line 3106) | def sign_message(self, message: "typing.List[int]") -> "PackedEthSigna...
class _UniffiConverterTypeEthSigner (line 3119) | class _UniffiConverterTypeEthSigner:
method read (line 3121) | def read(cls, buf):
method write (line 3128) | def write(cls, value, buf):
method lift (line 3134) | def lift(value):
method lower (line 3138) | def lower(value):
class ForcedExit (line 3143) | class ForcedExit:
method __init__ (line 3145) | def __init__(self, builder: "ForcedExitBuilder"):
method __del__ (line 3150) | def __del__(self):
method _make_instance_ (line 3158) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3166) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "ForcedExit":
method get_bytes (line 3179) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3189) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3199) | def is_signature_valid(self, ):
method is_valid (line 3209) | def is_valid(self, ):
method json_str (line 3219) | def json_str(self, ):
method to_zklink_tx (line 3229) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3239) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeForcedExit (line 3249) | class _UniffiConverterTypeForcedExit:
method read (line 3251) | def read(cls, buf):
method write (line 3258) | def write(cls, value, buf):
method lift (line 3264) | def lift(value):
method lower (line 3268) | def lower(value):
class FullExit (line 3273) | class FullExit:
method __init__ (line 3275) | def __init__(self, builder: "FullExitBuilder"):
method __del__ (line 3280) | def __del__(self):
method _make_instance_ (line 3288) | def _make_instance_(cls, pointer):
method get_bytes (line 3296) | def get_bytes(self, ) -> "typing.List[int]":
method is_valid (line 3306) | def is_valid(self, ):
method json_str (line 3316) | def json_str(self, ):
method to_zklink_tx (line 3326) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3336) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeFullExit (line 3346) | class _UniffiConverterTypeFullExit:
method read (line 3348) | def read(cls, buf):
method write (line 3355) | def write(cls, value, buf):
method lift (line 3361) | def lift(value):
method lower (line 3365) | def lower(value):
class Funding (line 3370) | class Funding:
method __init__ (line 3372) | def __init__(self, builder: "FundingBuilder"):
method __del__ (line 3377) | def __del__(self):
method _make_instance_ (line 3385) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3393) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Funding":
method get_bytes (line 3406) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3416) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3426) | def is_signature_valid(self, ):
method is_valid (line 3436) | def is_valid(self, ):
method json_str (line 3446) | def json_str(self, ):
method to_zklink_tx (line 3456) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3466) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeFunding (line 3476) | class _UniffiConverterTypeFunding:
method read (line 3478) | def read(cls, buf):
method write (line 3485) | def write(cls, value, buf):
method lift (line 3491) | def lift(value):
method lower (line 3495) | def lower(value):
class Liquidation (line 3500) | class Liquidation:
method __init__ (line 3502) | def __init__(self, builder: "LiquidationBuilder"):
method __del__ (line 3507) | def __del__(self):
method _make_instance_ (line 3515) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3523) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Liquidation":
method get_bytes (line 3536) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3546) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3556) | def is_signature_valid(self, ):
method is_valid (line 3566) | def is_valid(self, ):
method json_str (line 3576) | def json_str(self, ):
method to_zklink_tx (line 3586) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3596) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeLiquidation (line 3606) | class _UniffiConverterTypeLiquidation:
method read (line 3608) | def read(cls, buf):
method write (line 3615) | def write(cls, value, buf):
method lift (line 3621) | def lift(value):
method lower (line 3625) | def lower(value):
class Order (line 3630) | class Order:
method __init__ (line 3632) | def __init__(self, account_id: "AccountId",sub_account_id: "SubAccount...
method __del__ (line 3661) | def __del__(self):
method _make_instance_ (line 3669) | def _make_instance_(cls, pointer):
method create_signed_order (line 3677) | def create_signed_order(self, zklink_signer: "ZkLinkSigner") -> "Order":
method get_bytes (line 3690) | def get_bytes(self, ) -> "typing.List[int]":
method get_eth_sign_msg (line 3700) | def get_eth_sign_msg(self, quote_token: str,based_token: str,decimals:...
method get_signature (line 3716) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3726) | def is_signature_valid(self, ):
method is_valid (line 3736) | def is_valid(self, ):
method json_str (line 3746) | def json_str(self, ):
class _UniffiConverterTypeOrder (line 3756) | class _UniffiConverterTypeOrder:
method read (line 3758) | def read(cls, buf):
method write (line 3765) | def write(cls, value, buf):
method lift (line 3771) | def lift(value):
method lower (line 3775) | def lower(value):
class OrderMatching (line 3780) | class OrderMatching:
method __init__ (line 3782) | def __init__(self, builder: "OrderMatchingBuilder"):
method __del__ (line 3787) | def __del__(self):
method _make_instance_ (line 3795) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3803) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "OrderMatching":
method get_bytes (line 3816) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3826) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3836) | def is_signature_valid(self, ):
method is_valid (line 3846) | def is_valid(self, ):
method json_str (line 3856) | def json_str(self, ):
method to_zklink_tx (line 3866) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3876) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeOrderMatching (line 3886) | class _UniffiConverterTypeOrderMatching:
method read (line 3888) | def read(cls, buf):
method write (line 3895) | def write(cls, value, buf):
method lift (line 3901) | def lift(value):
method lower (line 3905) | def lower(value):
class Signer (line 3910) | class Signer:
method __init__ (line 3912) | def __init__(self, private_key: str,l1_type: "L1SignerType"):
method __del__ (line 3919) | def __del__(self):
method _make_instance_ (line 3927) | def _make_instance_(cls, pointer):
method sign_auto_deleveraging (line 3935) | def sign_auto_deleveraging(self, tx: "AutoDeleveraging") -> "TxSignatu...
method sign_change_pubkey_with_create2data_auth (line 3948) | def sign_change_pubkey_with_create2data_auth(self, tx: "ChangePubKey",...
method sign_change_pubkey_with_eth_ecdsa_auth (line 3963) | def sign_change_pubkey_with_eth_ecdsa_auth(self, tx: "ChangePubKey") -...
method sign_change_pubkey_with_onchain_auth_data (line 3976) | def sign_change_pubkey_with_onchain_auth_data(self, tx: "ChangePubKey"...
method sign_contract_matching (line 3989) | def sign_contract_matching(self, tx: "ContractMatching") -> "TxSignatu...
method sign_forced_exit (line 4002) | def sign_forced_exit(self, tx: "ForcedExit") -> "TxSignature":
method sign_funding (line 4015) | def sign_funding(self, tx: "Funding") -> "TxSignature":
method sign_liquidation (line 4028) | def sign_liquidation(self, tx: "Liquidation") -> "TxSignature":
method sign_order_matching (line 4041) | def sign_order_matching(self, tx: "OrderMatching") -> "TxSignature":
method sign_transfer (line 4054) | def sign_transfer(self, tx: "Transfer",token_sybmol: str,chain_id: "ty...
method sign_withdraw (line 4073) | def sign_withdraw(self, tx: "Withdraw",l2_source_token_symbol: str,cha...
class _UniffiConverterTypeSigner (line 4092) | class _UniffiConverterTypeSigner:
method read (line 4094) | def read(cls, buf):
method write (line 4101) | def write(cls, value, buf):
method lift (line 4107) | def lift(value):
method lower (line 4111) | def lower(value):
class StarkSigner (line 4116) | class StarkSigner:
method __init__ (line 4118) | def __init__(self, ):
method __del__ (line 4121) | def __del__(self):
method _make_instance_ (line 4129) | def _make_instance_(cls, pointer):
method new_from_hex_str (line 4137) | def new_from_hex_str(cls, hex_str: str):
method sign_message (line 4146) | def sign_message(self, typed_data: "TypedData",addr: str) -> "StarkEip...
class _UniffiConverterTypeStarkSigner (line 4161) | class _UniffiConverterTypeStarkSigner:
method read (line 4163) | def read(cls, buf):
method write (line 4170) | def write(cls, value, buf):
method lift (line 4176) | def lift(value):
method lower (line 4180) | def lower(value):
class Transfer (line 4185) | class Transfer:
method __init__ (line 4187) | def __init__(self, builder: "TransferBuilder"):
method __del__ (line 4192) | def __del__(self):
method _make_instance_ (line 4200) | def _make_instance_(cls, pointer):
method create_signed_tx (line 4208) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Transfer":
method eth_signature (line 4221) | def eth_signature(self, eth_signer: "EthSigner",token_symbol: str) -> ...
method get_bytes (line 4236) | def get_bytes(self, ) -> "typing.List[int]":
method get_eth_sign_msg (line 4246) | def get_eth_sign_msg(self, token_symbol: str):
method get_signature (line 4258) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 4268) | def is_signature_valid(self, ):
method is_valid (line 4278) | def is_valid(self, ):
method json_str (line 4288) | def json_str(self, ):
method to_zklink_tx (line 4298) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 4308) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeTransfer (line 4318) | class _UniffiConverterTypeTransfer:
method read (line 4320) | def read(cls, buf):
method write (line 4327) | def write(cls, value, buf):
method lift (line 4333) | def lift(value):
method lower (line 4337) | def lower(value):
class TypedData (line 4342) | class TypedData:
method __init__ (line 4344) | def __init__(self, message: "TypedDataMessage",chain_id: str):
method __del__ (line 4351) | def __del__(self):
method _make_instance_ (line 4359) | def _make_instance_(cls, pointer):
class _UniffiConverterTypeTypedData (line 4367) | class _UniffiConverterTypeTypedData:
method read (line 4369) | def read(cls, buf):
method write (line 4376) | def write(cls, value, buf):
method lift (line 4382) | def lift(value):
method lower (line 4386) | def lower(value):
class UpdateGlobalVar (line 4391) | class UpdateGlobalVar:
method __init__ (line 4393) | def __init__(self, builder: "UpdateGlobalVarBuilder"):
method __del__ (line 4398) | def __del__(self):
method _make_instance_ (line 4406) | def _make_instance_(cls, pointer):
method get_bytes (line 4414) | def get_bytes(self, ) -> "typing.List[int]":
method is_valid (line 4424) | def is_valid(self, ):
method json_str (line 4434) | def json_str(self, ):
method to_zklink_tx (line 4444) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 4454) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeUpdateGlobalVar (line 4464) | class _UniffiConverterTypeUpdateGlobalVar:
method read (line 4466) | def read(cls, buf):
method write (line 4473) | def write(cls, value, buf):
method lift (line 4479) | def lift(value):
method lower (line 4483) | def lower(value):
class Withdraw (line 4488) | class Withdraw:
method __init__ (line 4490) | def __init__(self, builder: "WithdrawBuilder"):
method __del__ (line 4495) | def __del__(self):
method _make_instance_ (line 4503) | def _make_instance_(cls, pointer):
method create_signed_tx (line 4511) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Withdraw":
method eth_signature (line 4524) | def eth_signature(self, eth_signer: "EthSigner",l2_source_token_symbol...
method get_bytes (line 4539) | def get_bytes(self, ) -> "typing.List[int]":
method get_eth_sign_msg (line 4549) | def get_eth_sign_msg(self, token_symbol: str):
method get_signature (line 4561) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 4571) | def is_signature_valid(self, ):
method is_valid (line 4581) | def is_valid(self, ):
method json_str (line 4591) | def json_str(self, ):
method to_zklink_tx (line 4601) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 4611) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeWithdraw (line 4621) | class _UniffiConverterTypeWithdraw:
method read (line 4623) | def read(cls, buf):
method write (line 4630) | def write(cls, value, buf):
method lift (line 4636) | def lift(value):
method lower (line 4640) | def lower(value):
class ZkLinkSigner (line 4645) | class ZkLinkSigner:
method __init__ (line 4647) | def __init__(self, ):
method __del__ (line 4650) | def __del__(self):
method _make_instance_ (line 4658) | def _make_instance_(cls, pointer):
method new_from_bytes (line 4666) | def new_from_bytes(cls, slice: "typing.List[int]"):
method new_from_hex_eth_signer (line 4675) | def new_from_hex_eth_signer(cls, eth_hex_private_key: str):
method new_from_hex_stark_signer (line 4684) | def new_from_hex_stark_signer(cls, hex_private_key: str,addr: str,chai...
method new_from_seed (line 4697) | def new_from_seed(cls, seed: "typing.List[int]"):
method public_key (line 4706) | def public_key(self, ) -> "PackedPublicKey":
method sign_musig (line 4716) | def sign_musig(self, msg: "typing.List[int]") -> "ZkLinkSignature":
class _UniffiConverterTypeZkLinkSigner (line 4729) | class _UniffiConverterTypeZkLinkSigner:
method read (line 4731) | def read(cls, buf):
method write (line 4738) | def write(cls, value, buf):
method lift (line 4744) | def lift(value):
method lower (line 4748) | def lower(value):
class AutoDeleveragingBuilder (line 4752) | class AutoDeleveragingBuilder:
method __init__ (line 4756) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 4769) | def __str__(self):
method __eq__ (line 4772) | def __eq__(self, other):
class _UniffiConverterTypeAutoDeleveragingBuilder (line 4797) | class _UniffiConverterTypeAutoDeleveragingBuilder(_UniffiConverterRustBu...
method read (line 4799) | def read(buf):
method write (line 4815) | def write(value, buf):
class ChangePubKeyBuilder (line 4829) | class ChangePubKeyBuilder:
method __init__ (line 4833) | def __init__(self, chain_id: "ChainId", account_id: "AccountId", sub_a...
method __str__ (line 4844) | def __str__(self):
method __eq__ (line 4847) | def __eq__(self, other):
class _UniffiConverterTypeChangePubKeyBuilder (line 4868) | class _UniffiConverterTypeChangePubKeyBuilder(_UniffiConverterRustBuffer):
method read (line 4870) | def read(buf):
method write (line 4884) | def write(value, buf):
class ContractBuilder (line 4896) | class ContractBuilder:
method __init__ (line 4900) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 4913) | def __str__(self):
method __eq__ (line 4916) | def __eq__(self, other):
class _UniffiConverterTypeContractBuilder (line 4941) | class _UniffiConverterTypeContractBuilder(_UniffiConverterRustBuffer):
method read (line 4943) | def read(buf):
method write (line 4959) | def write(value, buf):
class ContractMatchingBuilder (line 4973) | class ContractMatchingBuilder:
method __init__ (line 4977) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 4987) | def __str__(self):
method __eq__ (line 4990) | def __eq__(self, other):
class _UniffiConverterTypeContractMatchingBuilder (line 5009) | class _UniffiConverterTypeContractMatchingBuilder(_UniffiConverterRustBu...
method read (line 5011) | def read(buf):
method write (line 5024) | def write(value, buf):
class ContractPrice (line 5035) | class ContractPrice:
method __init__ (line 5039) | def __init__(self, pair_id: "PairId", market_price: "BigUint"):
method __str__ (line 5043) | def __str__(self):
method __eq__ (line 5046) | def __eq__(self, other):
class _UniffiConverterTypeContractPrice (line 5053) | class _UniffiConverterTypeContractPrice(_UniffiConverterRustBuffer):
method read (line 5055) | def read(buf):
method write (line 5062) | def write(value, buf):
class Create2Data (line 5067) | class Create2Data:
method __init__ (line 5071) | def __init__(self, creator_address: "ZkLinkAddress", salt_arg: "H256",...
method __str__ (line 5076) | def __str__(self):
method __eq__ (line 5079) | def __eq__(self, other):
class _UniffiConverterTypeCreate2Data (line 5088) | class _UniffiConverterTypeCreate2Data(_UniffiConverterRustBuffer):
method read (line 5090) | def read(buf):
method write (line 5098) | def write(value, buf):
class DepositBuilder (line 5104) | class DepositBuilder:
method __init__ (line 5108) | def __init__(self, from_address: "ZkLinkAddress", to_address: "ZkLinkA...
method __str__ (line 5120) | def __str__(self):
method __eq__ (line 5123) | def __eq__(self, other):
class _UniffiConverterTypeDepositBuilder (line 5146) | class _UniffiConverterTypeDepositBuilder(_UniffiConverterRustBuffer):
method read (line 5148) | def read(buf):
method write (line 5163) | def write(value, buf):
class ForcedExitBuilder (line 5176) | class ForcedExitBuilder:
method __init__ (line 5180) | def __init__(self, to_chain_id: "ChainId", initiator_account_id: "Acco...
method __str__ (line 5193) | def __str__(self):
method __eq__ (line 5196) | def __eq__(self, other):
class _UniffiConverterTypeForcedExitBuilder (line 5221) | class _UniffiConverterTypeForcedExitBuilder(_UniffiConverterRustBuffer):
method read (line 5223) | def read(buf):
method write (line 5239) | def write(value, buf):
class FullExitBuilder (line 5253) | class FullExitBuilder:
method __init__ (line 5257) | def __init__(self, to_chain_id: "ChainId", account_id: "AccountId", su...
method __str__ (line 5269) | def __str__(self):
method __eq__ (line 5272) | def __eq__(self, other):
class _UniffiConverterTypeFullExitBuilder (line 5295) | class _UniffiConverterTypeFullExitBuilder(_UniffiConverterRustBuffer):
method read (line 5297) | def read(buf):
method write (line 5312) | def write(value, buf):
class FundingBuilder (line 5325) | class FundingBuilder:
method __init__ (line 5329) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5337) | def __str__(self):
method __eq__ (line 5340) | def __eq__(self, other):
class _UniffiConverterTypeFundingBuilder (line 5355) | class _UniffiConverterTypeFundingBuilder(_UniffiConverterRustBuffer):
method read (line 5357) | def read(buf):
method write (line 5368) | def write(value, buf):
class FundingInfo (line 5377) | class FundingInfo:
method __init__ (line 5381) | def __init__(self, pair_id: "PairId", price: "BigUint", funding_rate: ...
method __str__ (line 5386) | def __str__(self):
method __eq__ (line 5389) | def __eq__(self, other):
class _UniffiConverterTypeFundingInfo (line 5398) | class _UniffiConverterTypeFundingInfo(_UniffiConverterRustBuffer):
method read (line 5400) | def read(buf):
method write (line 5408) | def write(value, buf):
class LiquidationBuilder (line 5414) | class LiquidationBuilder:
method __init__ (line 5418) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5428) | def __str__(self):
method __eq__ (line 5431) | def __eq__(self, other):
class _UniffiConverterTypeLiquidationBuilder (line 5450) | class _UniffiConverterTypeLiquidationBuilder(_UniffiConverterRustBuffer):
method read (line 5452) | def read(buf):
method write (line 5465) | def write(value, buf):
class Message (line 5476) | class Message:
method __init__ (line 5480) | def __init__(self, data: str):
method __str__ (line 5483) | def __str__(self):
method __eq__ (line 5486) | def __eq__(self, other):
class _UniffiConverterTypeMessage (line 5491) | class _UniffiConverterTypeMessage(_UniffiConverterRustBuffer):
method read (line 5493) | def read(buf):
method write (line 5499) | def write(value, buf):
class OraclePrices (line 5503) | class OraclePrices:
method __init__ (line 5507) | def __init__(self, contract_prices: "typing.List[ContractPrice]", marg...
method __str__ (line 5511) | def __str__(self):
method __eq__ (line 5514) | def __eq__(self, other):
class _UniffiConverterTypeOraclePrices (line 5521) | class _UniffiConverterTypeOraclePrices(_UniffiConverterRustBuffer):
method read (line 5523) | def read(buf):
method write (line 5530) | def write(value, buf):
class OrderMatchingBuilder (line 5535) | class OrderMatchingBuilder:
method __init__ (line 5539) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5551) | def __str__(self):
method __eq__ (line 5554) | def __eq__(self, other):
class _UniffiConverterTypeOrderMatchingBuilder (line 5577) | class _UniffiConverterTypeOrderMatchingBuilder(_UniffiConverterRustBuffer):
method read (line 5579) | def read(buf):
method write (line 5594) | def write(value, buf):
class SpotPriceInfo (line 5607) | class SpotPriceInfo:
method __init__ (line 5611) | def __init__(self, token_id: "TokenId", price: "BigUint"):
method __str__ (line 5615) | def __str__(self):
method __eq__ (line 5618) | def __eq__(self, other):
class _UniffiConverterTypeSpotPriceInfo (line 5625) | class _UniffiConverterTypeSpotPriceInfo(_UniffiConverterRustBuffer):
method read (line 5627) | def read(buf):
method write (line 5634) | def write(value, buf):
class TransferBuilder (line 5639) | class TransferBuilder:
method __init__ (line 5643) | def __init__(self, account_id: "AccountId", to_address: "ZkLinkAddress...
method __str__ (line 5654) | def __str__(self):
method __eq__ (line 5657) | def __eq__(self, other):
class _UniffiConverterTypeTransferBuilder (line 5678) | class _UniffiConverterTypeTransferBuilder(_UniffiConverterRustBuffer):
method read (line 5680) | def read(buf):
method write (line 5694) | def write(value, buf):
class TxMessage (line 5706) | class TxMessage:
method __init__ (line 5710) | def __init__(self, transaction: str, amount: str, fee: str, token: str...
method __str__ (line 5718) | def __str__(self):
method __eq__ (line 5721) | def __eq__(self, other):
class _UniffiConverterTypeTxMessage (line 5736) | class _UniffiConverterTypeTxMessage(_UniffiConverterRustBuffer):
method read (line 5738) | def read(buf):
method write (line 5749) | def write(value, buf):
class TxSignature (line 5758) | class TxSignature:
method __init__ (line 5762) | def __init__(self, tx: "ZkLinkTx", layer1_signature: "typing.Optional[...
method __str__ (line 5766) | def __str__(self):
method __eq__ (line 5769) | def __eq__(self, other):
class _UniffiConverterTypeTxSignature (line 5776) | class _UniffiConverterTypeTxSignature(_UniffiConverterRustBuffer):
method read (line 5778) | def read(buf):
method write (line 5785) | def write(value, buf):
class UpdateGlobalVarBuilder (line 5790) | class UpdateGlobalVarBuilder:
method __init__ (line 5794) | def __init__(self, from_chain_id: "ChainId", sub_account_id: "SubAccou...
method __str__ (line 5800) | def __str__(self):
method __eq__ (line 5803) | def __eq__(self, other):
class _UniffiConverterTypeUpdateGlobalVarBuilder (line 5814) | class _UniffiConverterTypeUpdateGlobalVarBuilder(_UniffiConverterRustBuf...
method read (line 5816) | def read(buf):
method write (line 5825) | def write(value, buf):
class WithdrawBuilder (line 5832) | class WithdrawBuilder:
method __init__ (line 5836) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5851) | def __str__(self):
method __eq__ (line 5854) | def __eq__(self, other):
class _UniffiConverterTypeWithdrawBuilder (line 5883) | class _UniffiConverterTypeWithdrawBuilder(_UniffiConverterRustBuffer):
method read (line 5885) | def read(buf):
method write (line 5903) | def write(value, buf):
class ZkLinkSignature (line 5919) | class ZkLinkSignature:
method __init__ (line 5923) | def __init__(self, pub_key: "PackedPublicKey", signature: "PackedSigna...
method __str__ (line 5927) | def __str__(self):
method __eq__ (line 5930) | def __eq__(self, other):
class _UniffiConverterTypeZkLinkSignature (line 5937) | class _UniffiConverterTypeZkLinkSignature(_UniffiConverterRustBuffer):
method read (line 5939) | def read(buf):
method write (line 5946) | def write(value, buf):
class ChangePubKeyAuthData (line 5954) | class ChangePubKeyAuthData:
method __init__ (line 5955) | def __init__(self):
class ONCHAIN (line 5959) | class ONCHAIN:
method __init__ (line 5963) | def __init__(self,):
method __str__ (line 5968) | def __str__(self):
method __eq__ (line 5971) | def __eq__(self, other):
class ETH_ECDSA (line 5975) | class ETH_ECDSA:
method __init__ (line 5979) | def __init__(self,eth_signature: "PackedEthSignature"):
method __str__ (line 5984) | def __str__(self):
method __eq__ (line 5987) | def __eq__(self, other):
class ETH_CREATE2 (line 5993) | class ETH_CREATE2:
method __init__ (line 5997) | def __init__(self,data: "Create2Data"):
method __str__ (line 6002) | def __str__(self):
method __eq__ (line 6005) | def __eq__(self, other):
method is_onchain (line 6015) | def is_onchain(self) -> bool:
method is_eth_ecdsa (line 6017) | def is_eth_ecdsa(self) -> bool:
method is_eth_create2 (line 6019) | def is_eth_create2(self) -> bool:
class _UniffiConverterTypeChangePubKeyAuthData (line 6033) | class _UniffiConverterTypeChangePubKeyAuthData(_UniffiConverterRustBuffer):
method read (line 6035) | def read(buf):
method write (line 6050) | def write(value, buf):
class ChangePubKeyAuthRequest (line 6066) | class ChangePubKeyAuthRequest:
method __init__ (line 6067) | def __init__(self):
class ONCHAIN (line 6071) | class ONCHAIN:
method __init__ (line 6075) | def __init__(self,):
method __str__ (line 6080) | def __str__(self):
method __eq__ (line 6083) | def __eq__(self, other):
class ETH_ECDSA (line 6087) | class ETH_ECDSA:
method __init__ (line 6091) | def __init__(self,):
method __str__ (line 6096) | def __str__(self):
method __eq__ (line 6099) | def __eq__(self, other):
class ETH_CREATE2 (line 6103) | class ETH_CREATE2:
method __init__ (line 6107) | def __init__(self,data: "Create2Data"):
method __str__ (line 6112) | def __str__(self):
method __eq__ (line 6115) | def __eq__(self, other):
method is_onchain (line 6125) | def is_onchain(self) -> bool:
method is_eth_ecdsa (line 6127) | def is_eth_ecdsa(self) -> bool:
method is_eth_create2 (line 6129) | def is_eth_create2(self) -> bool:
class _UniffiConverterTypeChangePubKeyAuthRequest (line 6143) | class _UniffiConverterTypeChangePubKeyAuthRequest(_UniffiConverterRustBu...
method read (line 6145) | def read(buf):
method write (line 6159) | def write(value, buf):
class EthSignerError (line 6177) | class EthSignerError(Exception):
class InvalidEthSigner (line 6183) | class InvalidEthSigner(_UniffiTempEthSignerError):
method __repr__ (line 6184) | def __repr__(self):
class MissingEthPrivateKey (line 6187) | class MissingEthPrivateKey(_UniffiTempEthSignerError):
method __repr__ (line 6188) | def __repr__(self):
class MissingEthSigner (line 6191) | class MissingEthSigner(_UniffiTempEthSignerError):
method __repr__ (line 6192) | def __repr__(self):
class SigningFailed (line 6195) | class SigningFailed(_UniffiTempEthSignerError):
method __repr__ (line 6196) | def __repr__(self):
class UnlockingFailed (line 6199) | class UnlockingFailed(_UniffiTempEthSignerError):
method __repr__ (line 6200) | def __repr__(self):
class InvalidRawTx (line 6203) | class InvalidRawTx(_UniffiTempEthSignerError):
method __repr__ (line 6204) | def __repr__(self):
class Eip712Failed (line 6207) | class Eip712Failed(_UniffiTempEthSignerError):
method __repr__ (line 6208) | def __repr__(self):
class NoSigningKey (line 6211) | class NoSigningKey(_UniffiTempEthSignerError):
method __repr__ (line 6212) | def __repr__(self):
class DefineAddress (line 6215) | class DefineAddress(_UniffiTempEthSignerError):
method __repr__ (line 6216) | def __repr__(self):
class RecoverAddress (line 6219) | class RecoverAddress(_UniffiTempEthSignerError):
method __repr__ (line 6220) | def __repr__(self):
class LengthMismatched (line 6223) | class LengthMismatched(_UniffiTempEthSignerError):
method __repr__ (line 6224) | def __repr__(self):
class CryptoError (line 6227) | class CryptoError(_UniffiTempEthSignerError):
method __repr__ (line 6228) | def __repr__(self):
class InvalidSignatureStr (line 6231) | class InvalidSignatureStr(_UniffiTempEthSignerError):
method __repr__ (line 6232) | def __repr__(self):
class CustomError (line 6235) | class CustomError(_UniffiTempEthSignerError):
method __repr__ (line 6236) | def __repr__(self):
class RpcSignError (line 6239) | class RpcSignError(_UniffiTempEthSignerError):
method __repr__ (line 6240) | def __repr__(self):
class EthSignerError (line 6182) | class EthSignerError: # type: ignore
class InvalidEthSigner (line 6183) | class InvalidEthSigner(_UniffiTempEthSignerError):
method __repr__ (line 6184) | def __repr__(self):
class MissingEthPrivateKey (line 6187) | class MissingEthPrivateKey(_UniffiTempEthSignerError):
method __repr__ (line 6188) | def __repr__(self):
class MissingEthSigner (line 6191) | class MissingEthSigner(_UniffiTempEthSignerError):
method __repr__ (line 6192) | def __repr__(self):
class SigningFailed (line 6195) | class SigningFailed(_UniffiTempEthSignerError):
method __repr__ (line 6196) | def __repr__(self):
class UnlockingFailed (line 6199) | class UnlockingFailed(_UniffiTempEthSignerError):
method __repr__ (line 6200) | def __repr__(self):
class InvalidRawTx (line 6203) | class InvalidRawTx(_UniffiTempEthSignerError):
method __repr__ (line 6204) | def __repr__(self):
class Eip712Failed (line 6207) | class Eip712Failed(_UniffiTempEthSignerError):
method __repr__ (line 6208) | def __repr__(self):
class NoSigningKey (line 6211) | class NoSigningKey(_UniffiTempEthSignerError):
method __repr__ (line 6212) | def __repr__(self):
class DefineAddress (line 6215) | class DefineAddress(_UniffiTempEthSignerError):
method __repr__ (line 6216) | def __repr__(self):
class RecoverAddress (line 6219) | class RecoverAddress(_UniffiTempEthSignerError):
method __repr__ (line 6220) | def __repr__(self):
class LengthMismatched (line 6223) | class LengthMismatched(_UniffiTempEthSignerError):
method __repr__ (line 6224) | def __repr__(self):
class CryptoError (line 6227) | class CryptoError(_UniffiTempEthSignerError):
method __repr__ (line 6228) | def __repr__(self):
class InvalidSignatureStr (line 6231) | class InvalidSignatureStr(_UniffiTempEthSignerError):
method __repr__ (line 6232) | def __repr__(self):
class CustomError (line 6235) | class CustomError(_UniffiTempEthSignerError):
method __repr__ (line 6236) | def __repr__(self):
class RpcSignError (line 6239) | class RpcSignError(_UniffiTempEthSignerError):
method __repr__ (line 6240) | def __repr__(self):
class _UniffiConverterTypeEthSignerError (line 6248) | class _UniffiConverterTypeEthSignerError(_UniffiConverterRustBuffer):
method read (line 6250) | def read(buf):
method write (line 6315) | def write(value, buf):
class L1SignerType (line 6351) | class L1SignerType:
method __init__ (line 6352) | def __init__(self):
class ETH (line 6356) | class ETH:
method __init__ (line 6360) | def __init__(self,):
method __str__ (line 6365) | def __str__(self):
method __eq__ (line 6368) | def __eq__(self, other):
class STARKNET (line 6372) | class STARKNET:
method __init__ (line 6376) | def __init__(self,chain_id: str, address: str):
method __str__ (line 6382) | def __str__(self):
method __eq__ (line 6385) | def __eq__(self, other):
method is_eth (line 6397) | def is_eth(self) -> bool:
method is_starknet (line 6399) | def is_starknet(self) -> bool:
class _UniffiConverterTypeL1SignerType (line 6412) | class _UniffiConverterTypeL1SignerType(_UniffiConverterRustBuffer):
method read (line 6414) | def read(buf):
method write (line 6426) | def write(value, buf):
class L1Type (line 6440) | class L1Type(enum.Enum):
class _UniffiConverterTypeL1Type (line 6446) | class _UniffiConverterTypeL1Type(_UniffiConverterRustBuffer):
method read (line 6448) | def read(buf):
method write (line 6456) | def write(value, buf):
class Parameter (line 6468) | class Parameter:
method __init__ (line 6469) | def __init__(self):
class FEE_ACCOUNT (line 6473) | class FEE_ACCOUNT:
method __init__ (line 6477) | def __init__(self,account_id: "AccountId"):
method __str__ (line 6482) | def __str__(self):
method __eq__ (line 6485) | def __eq__(self, other):
class INSURANCE_FUND_ACCOUNT (line 6491) | class INSURANCE_FUND_ACCOUNT:
method __init__ (line 6495) | def __init__(self,account_id: "AccountId"):
method __str__ (line 6500) | def __str__(self):
method __eq__ (line 6503) | def __eq__(self, other):
class MARGIN_INFO (line 6509) | class MARGIN_INFO:
method __init__ (line 6513) | def __init__(self,margin_id: "MarginId", token_id: "TokenId", ratio:...
method __str__ (line 6520) | def __str__(self):
method __eq__ (line 6523) | def __eq__(self, other):
class FUNDING_INFOS (line 6533) | class FUNDING_INFOS:
method __init__ (line 6537) | def __init__(self,infos: "typing.List[FundingInfo]"):
method __str__ (line 6542) | def __str__(self):
method __eq__ (line 6545) | def __eq__(self, other):
class CONTRACT_INFO (line 6551) | class CONTRACT_INFO:
method __init__ (line 6555) | def __init__(self,pair_id: "PairId", symbol: str, initial_margin_rat...
method __str__ (line 6563) | def __str__(self):
method __eq__ (line 6566) | def __eq__(self, other):
method is_fee_account (line 6582) | def is_fee_account(self) -> bool:
method is_insurance_fund_account (line 6584) | def is_insurance_fund_account(self) -> bool:
method is_margin_info (line 6586) | def is_margin_info(self) -> bool:
method is_funding_infos (line 6588) | def is_funding_infos(self) -> bool:
method is_contract_info (line 6590) | def is_contract_info(self) -> bool:
class _UniffiConverterTypeParameter (line 6606) | class _UniffiConverterTypeParameter(_UniffiConverterRustBuffer):
method read (line 6608) | def read(buf):
method write (line 6637) | def write(value, buf):
class SignError (line 6668) | class SignError(Exception):
class EthSigningError (line 6674) | class EthSigningError(_UniffiTempSignError):
method __repr__ (line 6675) | def __repr__(self):
class ZkSigningError (line 6678) | class ZkSigningError(_UniffiTempSignError):
method __repr__ (line 6679) | def __repr__(self):
class StarkSigningError (line 6682) | class StarkSigningError(_UniffiTempSignError):
method __repr__ (line 6683) | def __repr__(self):
class IncorrectTx (line 6686) | class IncorrectTx(_UniffiTempSignError):
method __repr__ (line 6687) | def __repr__(self):
class SignError (line 6673) | class SignError: # type: ignore
class EthSigningError (line 6674) | class EthSigningError(_UniffiTempSignError):
method __repr__ (line 6675) | def __repr__(self):
class ZkSigningError (line 6678) | class ZkSigningError(_UniffiTempSignError):
method __repr__ (line 6679) | def __repr__(self):
class StarkSigningError (line 6682) | class StarkSigningError(_UniffiTempSignError):
method __repr__ (line 6683) | def __repr__(self):
class IncorrectTx (line 6686) | class IncorrectTx(_UniffiTempSignError):
method __repr__ (line 6687) | def __repr__(self):
class _UniffiConverterTypeSignError (line 6695) | class _UniffiConverterTypeSignError(_UniffiConverterRustBuffer):
method read (line 6697) | def read(buf):
method write (line 6718) | def write(value, buf):
class StarkSignerError (line 6735) | class StarkSignerError(Exception):
class InvalidStarknetSigner (line 6741) | class InvalidStarknetSigner(_UniffiTempStarkSignerError):
method __repr__ (line 6742) | def __repr__(self):
class InvalidSignature (line 6745) | class InvalidSignature(_UniffiTempStarkSignerError):
method __repr__ (line 6746) | def __repr__(self):
class InvalidPrivKey (line 6749) | class InvalidPrivKey(_UniffiTempStarkSignerError):
method __repr__ (line 6750) | def __repr__(self):
class SignError (line 6753) | class SignError(_UniffiTempStarkSignerError):
method __repr__ (line 6754) | def __repr__(self):
class RpcSignError (line 6757) | class RpcSignError(_UniffiTempStarkSignerError):
method __repr__ (line 6758) | def __repr__(self):
class StarkSignerError (line 6740) | class StarkSignerError: # type: ignore
class InvalidStarknetSigner (line 6741) | class InvalidStarknetSigner(_UniffiTempStarkSignerError):
method __repr__ (line 6742) | def __repr__(self):
class InvalidSignature (line 6745) | class InvalidSignature(_UniffiTempStarkSignerError):
method __repr__ (line 6746) | def __repr__(self):
class InvalidPrivKey (line 6749) | class InvalidPrivKey(_UniffiTempStarkSignerError):
method __repr__ (line 6750) | def __repr__(self):
class SignError (line 6753) | class SignError(_UniffiTempStarkSignerError):
method __repr__ (line 6754) | def __repr__(self):
class RpcSignError (line 6757) | class RpcSignError(_UniffiTempStarkSignerError):
method __repr__ (line 6758) | def __repr__(self):
class _UniffiConverterTypeStarkSignerError (line 6766) | class _UniffiConverterTypeStarkSignerError(_UniffiConverterRustBuffer):
method read (line 6768) | def read(buf):
method write (line 6793) | def write(value, buf):
class TypeError (line 6812) | class TypeError(Exception):
class InvalidAddress (line 6818) | class InvalidAddress(_UniffiTempTypeError):
method __repr__ (line 6819) | def __repr__(self):
class InvalidTxHash (line 6822) | class InvalidTxHash(_UniffiTempTypeError):
method __repr__ (line 6823) | def __repr__(self):
class NotStartWithZerox (line 6826) | class NotStartWithZerox(_UniffiTempTypeError):
method __repr__ (line 6827) | def __repr__(self):
class SizeMismatch (line 6830) | class SizeMismatch(_UniffiTempTypeError):
method __repr__ (line 6831) | def __repr__(self):
class DecodeFromHexErr (line 6834) | class DecodeFromHexErr(_UniffiTempTypeError):
method __repr__ (line 6835) | def __repr__(self):
class TooBigInteger (line 6838) | class TooBigInteger(_UniffiTempTypeError):
method __repr__ (line 6839) | def __repr__(self):
class InvalidBigIntStr (line 6842) | class InvalidBigIntStr(_UniffiTempTypeError):
method __repr__ (line 6843) | def __repr__(self):
class TypeError (line 6817) | class TypeError: # type: ignore
class InvalidAddress (line 6818) | class InvalidAddress(_UniffiTempTypeError):
method __repr__ (line 6819) | def __repr__(self):
class InvalidTxHash (line 6822) | class InvalidTxHash(_UniffiTempTypeError):
method __repr__ (line 6823) | def __repr__(self):
class NotStartWithZerox (line 6826) | class NotStartWithZerox(_UniffiTempTypeError):
method __repr__ (line 6827) | def __repr__(self):
class SizeMismatch (line 6830) | class SizeMismatch(_UniffiTempTypeError):
method __repr__ (line 6831) | def __repr__(self):
class DecodeFromHexErr (line 6834) | class DecodeFromHexErr(_UniffiTempTypeError):
method __repr__ (line 6835) | def __repr__(self):
class TooBigInteger (line 6838) | class TooBigInteger(_UniffiTempTypeError):
method __repr__ (line 6839) | def __repr__(self):
class InvalidBigIntStr (line 6842) | class InvalidBigIntStr(_UniffiTempTypeError):
method __repr__ (line 6843) | def __repr__(self):
class _UniffiConverterTypeTypeError (line 6851) | class _UniffiConverterTypeTypeError(_UniffiConverterRustBuffer):
method read (line 6853) | def read(buf):
method write (line 6886) | def write(value, buf):
class TypedDataMessage (line 6906) | class TypedDataMessage:
method __init__ (line 6907) | def __init__(self):
class CREATE_L2_KEY (line 6911) | class CREATE_L2_KEY:
method __init__ (line 6915) | def __init__(self,message: "Message"):
method __str__ (line 6920) | def __str__(self):
method __eq__ (line 6923) | def __eq__(self, other):
class TRANSACTION (line 6929) | class TRANSACTION:
method __init__ (line 6933) | def __init__(self,message: "TxMessage"):
method __str__ (line 6938) | def __str__(self):
method __eq__ (line 6941) | def __eq__(self, other):
method is_create_l2_key (line 6951) | def is_create_l2_key(self) -> bool:
method is_transaction (line 6953) | def is_transaction(self) -> bool:
class _UniffiConverterTypeTypedDataMessage (line 6966) | class _UniffiConverterTypeTypedDataMessage(_UniffiConverterRustBuffer):
method read (line 6968) | def read(buf):
method write (line 6980) | def write(value, buf):
class ZkSignerError (line 6997) | class ZkSignerError(Exception):
class CustomError (line 7003) | class CustomError(_UniffiTempZkSignerError):
method __repr__ (line 7004) | def __repr__(self):
class InvalidSignature (line 7007) | class InvalidSignature(_UniffiTempZkSignerError):
method __repr__ (line 7008) | def __repr__(self):
class InvalidPrivKey (line 7011) | class InvalidPrivKey(_UniffiTempZkSignerError):
method __repr__ (line 7012) | def __repr__(self):
class InvalidSeed (line 7015) | class InvalidSeed(_UniffiTempZkSignerError):
method __repr__ (line 7016) | def __repr__(self):
class InvalidPubkey (line 7019) | class InvalidPubkey(_UniffiTempZkSignerError):
method __repr__ (line 7020) | def __repr__(self):
class InvalidPubkeyHash (line 7023) | class InvalidPubkeyHash(_UniffiTempZkSignerError):
method __repr__ (line 7024) | def __repr__(self):
class EthSignerError (line 7027) | class EthSignerError(_UniffiTempZkSignerError):
method __repr__ (line 7028) | def __repr__(self):
class StarkSignerError (line 7031) | class StarkSignerError(_UniffiTempZkSignerError):
method __repr__ (line 7032) | def __repr__(self):
class ZkSignerError (line 7002) | class ZkSignerError: # type: ignore
class CustomError (line 7003) | class CustomError(_UniffiTempZkSignerError):
method __repr__ (line 7004) | def __repr__(self):
class InvalidSignature (line 7007) | class InvalidSignature(_UniffiTempZkSignerError):
method __repr__ (line 7008) | def __repr__(self):
class InvalidPrivKey (line 7011) | class InvalidPrivKey(_UniffiTempZkSignerError):
method __repr__ (line 7012) | def __repr__(self):
class InvalidSeed (line 7015) | class InvalidSeed(_UniffiTempZkSignerError):
method __repr__ (line 7016) | def __repr__(self):
class InvalidPubkey (line 7019) | class InvalidPubkey(_UniffiTempZkSignerError):
method __repr__ (line 7020) | def __repr__(self):
class InvalidPubkeyHash (line 7023) | class InvalidPubkeyHash(_UniffiTempZkSignerError):
method __repr__ (line 7024) | def __repr__(self):
class EthSignerError (line 7027) | class EthSignerError(_UniffiTempZkSignerError):
method __repr__ (line 7028) | def __repr__(self):
class StarkSignerError (line 7031) | class StarkSignerError(_UniffiTempZkSignerError):
method __repr__ (line 7032) | def __repr__(self):
class _UniffiConverterTypeZkSignerError (line 7040) | class _UniffiConverterTypeZkSignerError(_UniffiConverterRustBuffer):
method read (line 7042) | def read(buf):
method write (line 7079) | def write(value, buf):
class _UniffiConverterOptionalString (line 7099) | class _UniffiConverterOptionalString(_UniffiConverterRustBuffer):
method write (line 7101) | def write(cls, value, buf):
method read (line 7110) | def read(cls, buf):
class _UniffiConverterOptionalTypeZkLinkSignature (line 7121) | class _UniffiConverterOptionalTypeZkLinkSignature(_UniffiConverterRustBu...
method write (line 7123) | def write(cls, value, buf):
method read (line 7132) | def read(cls, buf):
class _UniffiConverterOptionalSequenceUInt8 (line 7143) | class _UniffiConverterOptionalSequenceUInt8(_UniffiConverterRustBuffer):
method write (line 7145) | def write(cls, value, buf):
method read (line 7154) | def read(cls, buf):
class _UniffiConverterOptionalTypeH256 (line 7165) | class _UniffiConverterOptionalTypeH256(_UniffiConverterRustBuffer):
method write (line 7167) | def write(cls, value, buf):
method read (line 7176) | def read(cls, buf):
class _UniffiConverterOptionalTypePackedEthSignature (line 7187) | class _UniffiConverterOptionalTypePackedEthSignature(_UniffiConverterRus...
method write (line 7189) | def write(cls, value, buf):
method read (line 7198) | def read(cls, buf):
class _UniffiConverterOptionalTypeTxLayer1Signature (line 7209) | class _UniffiConverterOptionalTypeTxLayer1Signature(_UniffiConverterRust...
method write (line 7211) | def write(cls, value, buf):
method read (line 7220) | def read(cls, buf):
class _UniffiConverterSequenceUInt8 (line 7231) | class _UniffiConverterSequenceUInt8(_UniffiConverterRustBuffer):
method write (line 7233) | def write(cls, value, buf):
method read (line 7240) | def read(cls, buf):
class _UniffiConverterSequenceTypeContract (line 7251) | class _UniffiConverterSequenceTypeContract(_UniffiConverterRustBuffer):
method write (line 7253) | def write(cls, value, buf):
method read (line 7260) | def read(cls, buf):
class _UniffiConverterSequenceTypeContractPrice (line 7271) | class _UniffiConverterSequenceTypeContractPrice(_UniffiConverterRustBuff...
method write (line 7273) | def write(cls, value, buf):
method read (line 7280) | def read(cls, buf):
class _UniffiConverterSequenceTypeFundingInfo (line 7291) | class _UniffiConverterSequenceTypeFundingInfo(_UniffiConverterRustBuffer):
method write (line 7293) | def write(cls, value, buf):
method read (line 7300) | def read(cls, buf):
class _UniffiConverterSequenceTypeSpotPriceInfo (line 7311) | class _UniffiConverterSequenceTypeSpotPriceInfo(_UniffiConverterRustBuff...
method write (line 7313) | def write(cls, value, buf):
method read (line 7320) | def read(cls, buf):
class _UniffiConverterSequenceTypeAccountId (line 7331) | class _UniffiConverterSequenceTypeAccountId(_UniffiConverterRustBuffer):
method write (line 7333) | def write(cls, value, buf):
method read (line 7340) | def read(cls, buf):
class _UniffiConverterTypeAccountId (line 7353) | class _UniffiConverterTypeAccountId:
method write (line 7355) | def write(value, buf):
method read (line 7359) | def read(buf):
method lift (line 7363) | def lift(value):
method lower (line 7367) | def lower(value):
class _UniffiConverterTypeAddress (line 7374) | class _UniffiConverterTypeAddress:
method write (line 7376) | def write(value, buf):
method read (line 7380) | def read(buf):
method lift (line 7384) | def lift(value):
method lower (line 7388) | def lower(value):
class _UniffiConverterTypeBigUint (line 7395) | class _UniffiConverterTypeBigUint:
method write (line 7397) | def write(value, buf):
method read (line 7401) | def read(buf):
method lift (line 7405) | def lift(value):
method lower (line 7409) | def lower(value):
class _UniffiConverterTypeBlockNumber (line 7416) | class _UniffiConverterTypeBlockNumber:
method write (line 7418) | def write(value, buf):
method read (line 7422) | def read(buf):
method lift (line 7426) | def lift(value):
method lower (line 7430) | def lower(value):
class _UniffiConverterTypeChainId (line 7437) | class _UniffiConverterTypeChainId:
method write (line 7439) | def write(value, buf):
method read (line 7443) | def read(buf):
method lift (line 7447) | def lift(value):
method lower (line 7451) | def lower(value):
class _UniffiConverterTypeEthBlockId (line 7458) | class _UniffiConverterTypeEthBlockId:
method write (line 7460) | def write(value, buf):
method read (line 7464) | def read(buf):
method lift (line 7468) | def lift(value):
method lower (line 7472) | def lower(value):
class _UniffiConverterTypeH256 (line 7479) | class _UniffiConverterTypeH256:
method write (line 7481) | def write(value, buf):
method read (line 7485) | def read(buf):
method lift (line 7489) | def lift(value):
method lower (line 7493) | def lower(value):
class _UniffiConverterTypeMarginId (line 7500) | class _UniffiConverterTypeMarginId:
method write (line 7502) | def write(value, buf):
method read (line 7506) | def read(buf):
method lift (line 7510) | def lift(value):
method lower (line 7514) | def lower(value):
class _UniffiConverterTypeNonce (line 7521) | class _UniffiConverterTypeNonce:
method write (line 7523) | def write(value, buf):
method read (line 7527) | def read(buf):
method lift (line 7531) | def lift(value):
method lower (line 7535) | def lower(value):
class _UniffiConverterTypePackedEthSignature (line 7542) | class _UniffiConverterTypePackedEthSignature:
method write (line 7544) | def write(value, buf):
method read (line 7548) | def read(buf):
method lift (line 7552) | def lift(value):
method lower (line 7556) | def lower(value):
class _UniffiConverterTypePackedPublicKey (line 7563) | class _UniffiConverterTypePackedPublicKey:
method write (line 7565) | def write(value, buf):
method read (line 7569) | def read(buf):
method lift (line 7573) | def lift(value):
method lower (line 7577) | def lower(value):
class _UniffiConverterTypePackedSignature (line 7584) | class _UniffiConverterTypePackedSignature:
method write (line 7586) | def write(value, buf):
method read (line 7590) | def read(buf):
method lift (line 7594) | def lift(value):
method lower (line 7598) | def lower(value):
class _UniffiConverterTypePairId (line 7605) | class _UniffiConverterTypePairId:
method write (line 7607) | def write(value, buf):
method read (line 7611) | def read(buf):
method lift (line 7615) | def lift(value):
method lower (line 7619) | def lower(value):
class _UniffiConverterTypePriorityOpId (line 7626) | class _UniffiConverterTypePriorityOpId:
method write (line 7628) | def write(value, buf):
method read (line 7632) | def read(buf):
method lift (line 7636) | def lift(value):
method lower (line 7640) | def lower(value):
class _UniffiConverterTypePubKeyHash (line 7647) | class _UniffiConverterTypePubKeyHash:
method write (line 7649) | def write(value, buf):
method read (line 7653) | def read(buf):
method lift (line 7657) | def lift(value):
method lower (line 7661) | def lower(value):
class _UniffiConverterTypeSlotId (line 7668) | class _UniffiConverterTypeSlotId:
method write (line 7670) | def write(value, buf):
method read (line 7674) | def read(buf):
method lift (line 7678) | def lift(value):
method lower (line 7682) | def lower(value):
class _UniffiConverterTypeStarkEip712Signature (line 7689) | class _UniffiConverterTypeStarkEip712Signature:
method write (line 7691) | def write(value, buf):
method read (line 7695) | def read(buf):
method lift (line 7699) | def lift(value):
method lower (line 7703) | def lower(value):
class _UniffiConverterTypeSubAccountId (line 7710) | class _UniffiConverterTypeSubAccountId:
method write (line 7712) | def write(value, buf):
method read (line 7716) | def read(buf):
method lift (line 7720) | def lift(value):
method lower (line 7724) | def lower(value):
class _UniffiConverterTypeTimeStamp (line 7731) | class _UniffiConverterTypeTimeStamp:
method write (line 7733) | def write(value, buf):
method read (line 7737) | def read(buf):
method lift (line 7741) | def lift(value):
method lower (line 7745) | def lower(value):
class _UniffiConverterTypeTokenId (line 7752) | class _UniffiConverterTypeTokenId:
method write (line 7754) | def write(value, buf):
method read (line 7758) | def read(buf):
method lift (line 7762) | def lift(value):
method lower (line 7766) | def lower(value):
class _UniffiConverterTypeTxHash (line 7773) | class _UniffiConverterTypeTxHash:
method write (line 7775) | def write(value, buf):
method read (line 7779) | def read(buf):
method lift (line 7783) | def lift(value):
method lower (line 7787) | def lower(value):
class _UniffiConverterTypeTxLayer1Signature (line 7794) | class _UniffiConverterTypeTxLayer1Signature:
method write (line 7796) | def write(value, buf):
method read (line 7800) | def read(buf):
method lift (line 7804) | def lift(value):
method lower (line 7808) | def lower(value):
class _UniffiConverterTypeZkLinkAddress (line 7815) | class _UniffiConverterTypeZkLinkAddress:
method write (line 7817) | def write(value, buf):
method read (line 7821) | def read(buf):
method lift (line 7825) | def lift(value):
method lower (line 7829) | def lower(value):
class _UniffiConverterTypeZkLinkTx (line 7836) | class _UniffiConverterTypeZkLinkTx:
method write (line 7838) | def write(value, buf):
method read (line 7842) | def read(buf):
method lift (line 7846) | def lift(value):
method lower (line 7850) | def lower(value):
function create_signed_change_pubkey (line 7853) | def create_signed_change_pubkey(zklink_signer: "ZkLinkSigner",tx: "Chang...
function eth_signature_of_change_pubkey (line 7863) | def eth_signature_of_change_pubkey(tx: "ChangePubKey",eth_signer: "EthSi...
function get_public_key_hash (line 7871) | def get_public_key_hash(public_key: "PackedPublicKey") -> "PubKeyHash":
function verify_musig (line 7877) | def verify_musig(signature: "ZkLinkSignature",msg: "typing.List[int]"):
function zklink_main_net_url (line 7885) | def zklink_main_net_url():
function zklink_test_net_url (line 7889) | def zklink_test_net_url():
FILE: jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-pc.py
class _UniffiRustBuffer (line 31) | class _UniffiRustBuffer(ctypes.Structure):
method alloc (line 39) | def alloc(size):
method reserve (line 43) | def reserve(rbuf, additional):
method free (line 46) | def free(self):
method __str__ (line 49) | def __str__(self):
method alloc_with_builder (line 57) | def alloc_with_builder(*args):
method consume_with_stream (line 71) | def consume_with_stream(self):
method read_with_stream (line 86) | def read_with_stream(self):
class _UniffiForeignBytes (line 97) | class _UniffiForeignBytes(ctypes.Structure):
method __str__ (line 103) | def __str__(self):
class _UniffiRustBufferStream (line 107) | class _UniffiRustBufferStream:
method __init__ (line 112) | def __init__(self, data, len):
method from_rust_buffer (line 118) | def from_rust_buffer(cls, buf):
method remaining (line 121) | def remaining(self):
method _unpack_from (line 124) | def _unpack_from(self, size, format):
method read (line 131) | def read(self, size):
method read_i8 (line 138) | def read_i8(self):
method read_u8 (line 141) | def read_u8(self):
method read_i16 (line 144) | def read_i16(self):
method read_u16 (line 147) | def read_u16(self):
method read_i32 (line 150) | def read_i32(self):
method read_u32 (line 153) | def read_u32(self):
method read_i64 (line 156) | def read_i64(self):
method read_u64 (line 159) | def read_u64(self):
method read_float (line 162) | def read_float(self):
method read_double (line 166) | def read_double(self):
method read_c_size_t (line 169) | def read_c_size_t(self):
class _UniffiRustBufferBuilder (line 172) | class _UniffiRustBufferBuilder:
method __init__ (line 177) | def __init__(self):
method finalize (line 181) | def finalize(self):
method discard (line 186) | def discard(self):
method _reserve (line 192) | def _reserve(self, num_bytes):
method _pack_into (line 198) | def _pack_into(self, size, format, value):
method write (line 204) | def write(self, value):
method write_i8 (line 209) | def write_i8(self, v):
method write_u8 (line 212) | def write_u8(self, v):
method write_i16 (line 215) | def write_i16(self, v):
method write_u16 (line 218) | def write_u16(self, v):
method write_i32 (line 221) | def write_i32(self, v):
method write_u32 (line 224) | def write_u32(self, v):
method write_i64 (line 227) | def write_i64(self, v):
method write_u64 (line 230) | def write_u64(self, v):
method write_float (line 233) | def write_float(self, v):
method write_double (line 236) | def write_double(self, v):
method write_c_size_t (line 239) | def write_c_size_t(self, v):
class InternalError (line 244) | class InternalError(Exception):
class _UniffiRustCallStatus (line 247) | class _UniffiRustCallStatus(ctypes.Structure):
method __str__ (line 261) | def __str__(self):
function _rust_call (line 271) | def _rust_call(fn, *args):
function _rust_call_with_error (line 275) | def _rust_call_with_error(error_ffi_converter, fn, *args):
function _uniffi_check_call_status (line 287) | def _uniffi_check_call_status(error_ffi_converter, call_status):
class _UniffiPointerManagerCPython (line 316) | class _UniffiPointerManagerCPython:
method new_pointer (line 324) | def new_pointer(self, obj):
method release_pointer (line 339) | def release_pointer(self, address):
method lookup (line 345) | def lookup(self, address):
class _UniffiPointerManagerGeneral (line 348) | class _UniffiPointerManagerGeneral:
method __init__ (line 359) | def __init__(self):
method new_pointer (line 364) | def new_pointer(self, obj):
method release_pointer (line 371) | def release_pointer(self, handle):
method lookup (line 375) | def lookup(self, handle):
class _UniffiConverterPrimitive (line 385) | class _UniffiConverterPrimitive:
method check (line 387) | def check(cls, value):
method lift (line 391) | def lift(cls, value):
method lower (line 395) | def lower(cls, value):
method lowerUnchecked (line 399) | def lowerUnchecked(cls, value):
method write (line 403) | def write(cls, value, buf):
class _UniffiConverterPrimitiveInt (line 406) | class _UniffiConverterPrimitiveInt(_UniffiConverterPrimitive):
method check (line 408) | def check(cls, value):
class _UniffiConverterPrimitiveFloat (line 419) | class _UniffiConverterPrimitiveFloat(_UniffiConverterPrimitive):
method check (line 421) | def check(cls, value):
class _UniffiConverterRustBuffer (line 432) | class _UniffiConverterRustBuffer:
method lift (line 434) | def lift(cls, rbuf):
method lower (line 439) | def lower(cls, value):
function _uniffi_future_callback_t (line 468) | def _uniffi_future_callback_t(return_type):
function _uniffi_load_indirect (line 474) | def _uniffi_load_indirect():
function _uniffi_check_contract_api_version (line 499) | def _uniffi_check_contract_api_version(lib):
function _uniffi_check_api_checksums (line 507) | def _uniffi_check_api_checksums(lib):
class _UniffiConverterUInt8 (line 2455) | class _UniffiConverterUInt8(_UniffiConverterPrimitiveInt):
method read (line 2461) | def read(buf):
method write_unchecked (line 2465) | def write_unchecked(value, buf):
class _UniffiConverterUInt16 (line 2468) | class _UniffiConverterUInt16(_UniffiConverterPrimitiveInt):
method read (line 2474) | def read(buf):
method write_unchecked (line 2478) | def write_unchecked(value, buf):
class _UniffiConverterInt16 (line 2481) | class _UniffiConverterInt16(_UniffiConverterPrimitiveInt):
method read (line 2487) | def read(buf):
method write_unchecked (line 2491) | def write_unchecked(value, buf):
class _UniffiConverterUInt32 (line 2494) | class _UniffiConverterUInt32(_UniffiConverterPrimitiveInt):
method read (line 2500) | def read(buf):
method write_unchecked (line 2504) | def write_unchecked(value, buf):
class _UniffiConverterUInt64 (line 2507) | class _UniffiConverterUInt64(_UniffiConverterPrimitiveInt):
method read (line 2513) | def read(buf):
method write_unchecked (line 2517) | def write_unchecked(value, buf):
class _UniffiConverterBool (line 2520) | class _UniffiConverterBool(_UniffiConverterPrimitive):
method check (line 2522) | def check(cls, value):
method read (line 2526) | def read(cls, buf):
method write_unchecked (line 2530) | def write_unchecked(cls, value, buf):
method lift (line 2534) | def lift(value):
class _UniffiConverterString (line 2537) | class _UniffiConverterString:
method check (line 2539) | def check(value):
method read (line 2545) | def read(buf):
method write (line 2553) | def write(value, buf):
method lift (line 2560) | def lift(buf):
method lower (line 2565) | def lower(value):
class AutoDeleveraging (line 2573) | class AutoDeleveraging:
method __init__ (line 2575) | def __init__(self, builder: "AutoDeleveragingBuilder"):
method __del__ (line 2580) | def __del__(self):
method _make_instance_ (line 2588) | def _make_instance_(cls, pointer):
method create_signed_tx (line 2596) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "AutoDeleveraging":
method get_bytes (line 2609) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2619) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 2629) | def is_signature_valid(self, ) -> bool:
method is_valid (line 2639) | def is_valid(self, ) -> bool:
method json_str (line 2649) | def json_str(self, ) -> str:
method to_zklink_tx (line 2659) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 2669) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeAutoDeleveraging (line 2679) | class _UniffiConverterTypeAutoDeleveraging:
method read (line 2681) | def read(cls, buf):
method write (line 2688) | def write(cls, value, buf):
method lift (line 2694) | def lift(value):
method lower (line 2698) | def lower(value):
class ChangePubKey (line 2703) | class ChangePubKey:
method __init__ (line 2705) | def __init__(self, builder: "ChangePubKeyBuilder"):
method __del__ (line 2710) | def __del__(self):
method _make_instance_ (line 2718) | def _make_instance_(cls, pointer):
method get_bytes (line 2726) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2736) | def get_signature(self, ) -> "ZkLinkSignature":
method is_onchain (line 2746) | def is_onchain(self, ) -> bool:
method is_signature_valid (line 2756) | def is_signature_valid(self, ) -> bool:
method is_valid (line 2766) | def is_valid(self, ) -> bool:
method json_str (line 2776) | def json_str(self, ) -> str:
method to_zklink_tx (line 2786) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 2796) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeChangePubKey (line 2806) | class _UniffiConverterTypeChangePubKey:
method read (line 2808) | def read(cls, buf):
method write (line 2815) | def write(cls, value, buf):
method lift (line 2821) | def lift(value):
method lower (line 2825) | def lower(value):
class Contract (line 2830) | class Contract:
method __init__ (line 2832) | def __init__(self, builder: "ContractBuilder"):
method __del__ (line 2837) | def __del__(self):
method _make_instance_ (line 2845) | def _make_instance_(cls, pointer):
method create_signed_contract (line 2853) | def create_signed_contract(self, zklink_signer: "ZkLinkSigner") -> "Co...
method get_bytes (line 2866) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2876) | def get_signature(self, ) -> "ZkLinkSignature":
method is_long (line 2886) | def is_long(self, ) -> bool:
method is_short (line 2896) | def is_short(self, ) -> bool:
method is_signature_valid (line 2906) | def is_signature_valid(self, ) -> bool:
class _UniffiConverterTypeContract (line 2916) | class _UniffiConverterTypeContract:
method read (line 2918) | def read(cls, buf):
method write (line 2925) | def write(cls, value, buf):
method lift (line 2931) | def lift(value):
method lower (line 2935) | def lower(value):
class ContractMatching (line 2940) | class ContractMatching:
method __init__ (line 2942) | def __init__(self, builder: "ContractMatchingBuilder"):
method __del__ (line 2947) | def __del__(self):
method _make_instance_ (line 2955) | def _make_instance_(cls, pointer):
method create_signed_tx (line 2963) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "ContractMatching":
method get_bytes (line 2976) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 2986) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 2996) | def is_signature_valid(self, ) -> bool:
method is_valid (line 3006) | def is_valid(self, ) -> bool:
method json_str (line 3016) | def json_str(self, ) -> str:
method to_zklink_tx (line 3026) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3036) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeContractMatching (line 3046) | class _UniffiConverterTypeContractMatching:
method read (line 3048) | def read(cls, buf):
method write (line 3055) | def write(cls, value, buf):
method lift (line 3061) | def lift(value):
method lower (line 3065) | def lower(value):
class Deposit (line 3070) | class Deposit:
method __init__ (line 3072) | def __init__(self, builder: "DepositBuilder"):
method __del__ (line 3077) | def __del__(self):
method _make_instance_ (line 3085) | def _make_instance_(cls, pointer):
method get_bytes (line 3093) | def get_bytes(self, ) -> "typing.List[int]":
method json_str (line 3103) | def json_str(self, ) -> str:
method tx_hash (line 3113) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeDeposit (line 3123) | class _UniffiConverterTypeDeposit:
method read (line 3125) | def read(cls, buf):
method write (line 3132) | def write(cls, value, buf):
method lift (line 3138) | def lift(value):
method lower (line 3142) | def lower(value):
class EthSigner (line 3147) | class EthSigner:
method __init__ (line 3149) | def __init__(self, private_key: str):
method __del__ (line 3154) | def __del__(self):
method _make_instance_ (line 3162) | def _make_instance_(cls, pointer):
method get_address (line 3170) | def get_address(self, ) -> "Address":
method sign_message (line 3180) | def sign_message(self, message: "typing.List[int]") -> "PackedEthSigna...
class _UniffiConverterTypeEthSigner (line 3193) | class _UniffiConverterTypeEthSigner:
method read (line 3195) | def read(cls, buf):
method write (line 3202) | def write(cls, value, buf):
method lift (line 3208) | def lift(value):
method lower (line 3212) | def lower(value):
class ForcedExit (line 3217) | class ForcedExit:
method __init__ (line 3219) | def __init__(self, builder: "ForcedExitBuilder"):
method __del__ (line 3224) | def __del__(self):
method _make_instance_ (line 3232) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3240) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "ForcedExit":
method get_bytes (line 3253) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3263) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3273) | def is_signature_valid(self, ) -> bool:
method is_valid (line 3283) | def is_valid(self, ) -> bool:
method json_str (line 3293) | def json_str(self, ) -> str:
method to_zklink_tx (line 3303) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3313) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeForcedExit (line 3323) | class _UniffiConverterTypeForcedExit:
method read (line 3325) | def read(cls, buf):
method write (line 3332) | def write(cls, value, buf):
method lift (line 3338) | def lift(value):
method lower (line 3342) | def lower(value):
class FullExit (line 3347) | class FullExit:
method __init__ (line 3349) | def __init__(self, builder: "FullExitBuilder"):
method __del__ (line 3354) | def __del__(self):
method _make_instance_ (line 3362) | def _make_instance_(cls, pointer):
method get_bytes (line 3370) | def get_bytes(self, ) -> "typing.List[int]":
method is_valid (line 3380) | def is_valid(self, ) -> bool:
method json_str (line 3390) | def json_str(self, ) -> str:
method to_zklink_tx (line 3400) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3410) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeFullExit (line 3420) | class _UniffiConverterTypeFullExit:
method read (line 3422) | def read(cls, buf):
method write (line 3429) | def write(cls, value, buf):
method lift (line 3435) | def lift(value):
method lower (line 3439) | def lower(value):
class Funding (line 3444) | class Funding:
method __init__ (line 3446) | def __init__(self, builder: "FundingBuilder"):
method __del__ (line 3451) | def __del__(self):
method _make_instance_ (line 3459) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3467) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Funding":
method get_bytes (line 3480) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3490) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3500) | def is_signature_valid(self, ) -> bool:
method is_valid (line 3510) | def is_valid(self, ) -> bool:
method json_str (line 3520) | def json_str(self, ) -> str:
method to_zklink_tx (line 3530) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3540) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeFunding (line 3550) | class _UniffiConverterTypeFunding:
method read (line 3552) | def read(cls, buf):
method write (line 3559) | def write(cls, value, buf):
method lift (line 3565) | def lift(value):
method lower (line 3569) | def lower(value):
class Liquidation (line 3574) | class Liquidation:
method __init__ (line 3576) | def __init__(self, builder: "LiquidationBuilder"):
method __del__ (line 3581) | def __del__(self):
method _make_instance_ (line 3589) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3597) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Liquidation":
method get_bytes (line 3610) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3620) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3630) | def is_signature_valid(self, ) -> bool:
method is_valid (line 3640) | def is_valid(self, ) -> bool:
method json_str (line 3650) | def json_str(self, ) -> str:
method to_zklink_tx (line 3660) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3670) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeLiquidation (line 3680) | class _UniffiConverterTypeLiquidation:
method read (line 3682) | def read(cls, buf):
method write (line 3689) | def write(cls, value, buf):
method lift (line 3695) | def lift(value):
method lower (line 3699) | def lower(value):
class Order (line 3704) | class Order:
method __init__ (line 3706) | def __init__(self, account_id: "AccountId",sub_account_id: "SubAccount...
method __del__ (line 3735) | def __del__(self):
method _make_instance_ (line 3743) | def _make_instance_(cls, pointer):
method create_signed_order (line 3751) | def create_signed_order(self, zklink_signer: "ZkLinkSigner") -> "Order":
method get_bytes (line 3764) | def get_bytes(self, ) -> "typing.List[int]":
method get_eth_sign_msg (line 3774) | def get_eth_sign_msg(self, quote_token: str,based_token: str,decimals:...
method get_signature (line 3790) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3800) | def is_signature_valid(self, ) -> bool:
method is_valid (line 3810) | def is_valid(self, ) -> bool:
method json_str (line 3820) | def json_str(self, ) -> str:
class _UniffiConverterTypeOrder (line 3830) | class _UniffiConverterTypeOrder:
method read (line 3832) | def read(cls, buf):
method write (line 3839) | def write(cls, value, buf):
method lift (line 3845) | def lift(value):
method lower (line 3849) | def lower(value):
class OrderMatching (line 3854) | class OrderMatching:
method __init__ (line 3856) | def __init__(self, builder: "OrderMatchingBuilder"):
method __del__ (line 3861) | def __del__(self):
method _make_instance_ (line 3869) | def _make_instance_(cls, pointer):
method create_signed_tx (line 3877) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "OrderMatching":
method get_bytes (line 3890) | def get_bytes(self, ) -> "typing.List[int]":
method get_signature (line 3900) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 3910) | def is_signature_valid(self, ) -> bool:
method is_valid (line 3920) | def is_valid(self, ) -> bool:
method json_str (line 3930) | def json_str(self, ) -> str:
method to_zklink_tx (line 3940) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 3950) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeOrderMatching (line 3960) | class _UniffiConverterTypeOrderMatching:
method read (line 3962) | def read(cls, buf):
method write (line 3969) | def write(cls, value, buf):
method lift (line 3975) | def lift(value):
method lower (line 3979) | def lower(value):
class Signer (line 3984) | class Signer:
method __init__ (line 3986) | def __init__(self, private_key: str,l1_type: "L1SignerType"):
method __del__ (line 3993) | def __del__(self):
method _make_instance_ (line 4001) | def _make_instance_(cls, pointer):
method sign_auto_deleveraging (line 4009) | def sign_auto_deleveraging(self, tx: "AutoDeleveraging") -> "TxSignatu...
method sign_change_pubkey_with_create2data_auth (line 4022) | def sign_change_pubkey_with_create2data_auth(self, tx: "ChangePubKey",...
method sign_change_pubkey_with_eth_ecdsa_auth (line 4037) | def sign_change_pubkey_with_eth_ecdsa_auth(self, tx: "ChangePubKey") -...
method sign_change_pubkey_with_onchain_auth_data (line 4050) | def sign_change_pubkey_with_onchain_auth_data(self, tx: "ChangePubKey"...
method sign_contract_matching (line 4063) | def sign_contract_matching(self, tx: "ContractMatching") -> "TxSignatu...
method sign_forced_exit (line 4076) | def sign_forced_exit(self, tx: "ForcedExit") -> "TxSignature":
method sign_funding (line 4089) | def sign_funding(self, tx: "Funding") -> "TxSignature":
method sign_liquidation (line 4102) | def sign_liquidation(self, tx: "Liquidation") -> "TxSignature":
method sign_order_matching (line 4115) | def sign_order_matching(self, tx: "OrderMatching") -> "TxSignature":
method sign_transfer (line 4128) | def sign_transfer(self, tx: "Transfer",token_sybmol: str,chain_id: "ty...
method sign_withdraw (line 4147) | def sign_withdraw(self, tx: "Withdraw",l2_source_token_symbol: str,cha...
class _UniffiConverterTypeSigner (line 4166) | class _UniffiConverterTypeSigner:
method read (line 4168) | def read(cls, buf):
method write (line 4175) | def write(cls, value, buf):
method lift (line 4181) | def lift(value):
method lower (line 4185) | def lower(value):
class StarkSigner (line 4190) | class StarkSigner:
method __init__ (line 4192) | def __init__(self, ):
method __del__ (line 4195) | def __del__(self):
method _make_instance_ (line 4203) | def _make_instance_(cls, pointer):
method new_from_hex_str (line 4211) | def new_from_hex_str(cls, hex_str: str):
method sign_message (line 4220) | def sign_message(self, typed_data: "TypedData",addr: str) -> "StarkEip...
class _UniffiConverterTypeStarkSigner (line 4235) | class _UniffiConverterTypeStarkSigner:
method read (line 4237) | def read(cls, buf):
method write (line 4244) | def write(cls, value, buf):
method lift (line 4250) | def lift(value):
method lower (line 4254) | def lower(value):
class Transfer (line 4259) | class Transfer:
method __init__ (line 4261) | def __init__(self, builder: "TransferBuilder"):
method __del__ (line 4266) | def __del__(self):
method _make_instance_ (line 4274) | def _make_instance_(cls, pointer):
method create_signed_tx (line 4282) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Transfer":
method eth_signature (line 4295) | def eth_signature(self, eth_signer: "EthSigner",token_symbol: str) -> ...
method get_bytes (line 4310) | def get_bytes(self, ) -> "typing.List[int]":
method get_eth_sign_msg (line 4320) | def get_eth_sign_msg(self, token_symbol: str) -> str:
method get_signature (line 4332) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 4342) | def is_signature_valid(self, ) -> bool:
method is_valid (line 4352) | def is_valid(self, ) -> bool:
method json_str (line 4362) | def json_str(self, ) -> str:
method to_zklink_tx (line 4372) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 4382) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeTransfer (line 4392) | class _UniffiConverterTypeTransfer:
method read (line 4394) | def read(cls, buf):
method write (line 4401) | def write(cls, value, buf):
method lift (line 4407) | def lift(value):
method lower (line 4411) | def lower(value):
class TypedData (line 4416) | class TypedData:
method __init__ (line 4418) | def __init__(self, message: "TypedDataMessage",chain_id: str):
method __del__ (line 4425) | def __del__(self):
method _make_instance_ (line 4433) | def _make_instance_(cls, pointer):
class _UniffiConverterTypeTypedData (line 4441) | class _UniffiConverterTypeTypedData:
method read (line 4443) | def read(cls, buf):
method write (line 4450) | def write(cls, value, buf):
method lift (line 4456) | def lift(value):
method lower (line 4460) | def lower(value):
class UpdateGlobalVar (line 4465) | class UpdateGlobalVar:
method __init__ (line 4467) | def __init__(self, builder: "UpdateGlobalVarBuilder"):
method __del__ (line 4472) | def __del__(self):
method _make_instance_ (line 4480) | def _make_instance_(cls, pointer):
method get_bytes (line 4488) | def get_bytes(self, ) -> "typing.List[int]":
method is_valid (line 4498) | def is_valid(self, ) -> bool:
method json_str (line 4508) | def json_str(self, ) -> str:
method to_zklink_tx (line 4518) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 4528) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeUpdateGlobalVar (line 4538) | class _UniffiConverterTypeUpdateGlobalVar:
method read (line 4540) | def read(cls, buf):
method write (line 4547) | def write(cls, value, buf):
method lift (line 4553) | def lift(value):
method lower (line 4557) | def lower(value):
class Withdraw (line 4562) | class Withdraw:
method __init__ (line 4564) | def __init__(self, builder: "WithdrawBuilder"):
method __del__ (line 4569) | def __del__(self):
method _make_instance_ (line 4577) | def _make_instance_(cls, pointer):
method create_signed_tx (line 4585) | def create_signed_tx(self, signer: "ZkLinkSigner") -> "Withdraw":
method eth_signature (line 4598) | def eth_signature(self, eth_signer: "EthSigner",l2_source_token_symbol...
method get_bytes (line 4613) | def get_bytes(self, ) -> "typing.List[int]":
method get_eth_sign_msg (line 4623) | def get_eth_sign_msg(self, token_symbol: str) -> str:
method get_signature (line 4635) | def get_signature(self, ) -> "ZkLinkSignature":
method is_signature_valid (line 4645) | def is_signature_valid(self, ) -> bool:
method is_valid (line 4655) | def is_valid(self, ) -> bool:
method json_str (line 4665) | def json_str(self, ) -> str:
method to_zklink_tx (line 4675) | def to_zklink_tx(self, ) -> "ZkLinkTx":
method tx_hash (line 4685) | def tx_hash(self, ) -> "typing.List[int]":
class _UniffiConverterTypeWithdraw (line 4695) | class _UniffiConverterTypeWithdraw:
method read (line 4697) | def read(cls, buf):
method write (line 4704) | def write(cls, value, buf):
method lift (line 4710) | def lift(value):
method lower (line 4714) | def lower(value):
class ZkLinkSigner (line 4719) | class ZkLinkSigner:
method __init__ (line 4721) | def __init__(self, ):
method __del__ (line 4724) | def __del__(self):
method _make_instance_ (line 4732) | def _make_instance_(cls, pointer):
method new_from_bytes (line 4740) | def new_from_bytes(cls, slice: "typing.List[int]"):
method new_from_hex_eth_signer (line 4749) | def new_from_hex_eth_signer(cls, eth_hex_private_key: str):
method new_from_hex_stark_signer (line 4758) | def new_from_hex_stark_signer(cls, hex_private_key: str,addr: str,chai...
method new_from_seed (line 4771) | def new_from_seed(cls, seed: "typing.List[int]"):
method public_key (line 4780) | def public_key(self, ) -> "PackedPublicKey":
method sign_musig (line 4790) | def sign_musig(self, msg: "typing.List[int]") -> "ZkLinkSignature":
class _UniffiConverterTypeZkLinkSigner (line 4803) | class _UniffiConverterTypeZkLinkSigner:
method read (line 4805) | def read(cls, buf):
method write (line 4812) | def write(cls, value, buf):
method lift (line 4818) | def lift(value):
method lower (line 4822) | def lower(value):
class AutoDeleveragingBuilder (line 4826) | class AutoDeleveragingBuilder:
method __init__ (line 4830) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 4843) | def __str__(self):
method __eq__ (line 4846) | def __eq__(self, other):
class _UniffiConverterTypeAutoDeleveragingBuilder (line 4871) | class _UniffiConverterTypeAutoDeleveragingBuilder(_UniffiConverterRustBu...
method read (line 4873) | def read(buf):
method write (line 4889) | def write(value, buf):
class ChangePubKeyBuilder (line 4903) | class ChangePubKeyBuilder:
method __init__ (line 4907) | def __init__(self, chain_id: "ChainId", account_id: "AccountId", sub_a...
method __str__ (line 4918) | def __str__(self):
method __eq__ (line 4921) | def __eq__(self, other):
class _UniffiConverterTypeChangePubKeyBuilder (line 4942) | class _UniffiConverterTypeChangePubKeyBuilder(_UniffiConverterRustBuffer):
method read (line 4944) | def read(buf):
method write (line 4958) | def write(value, buf):
class ContractBuilder (line 4970) | class ContractBuilder:
method __init__ (line 4974) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 4987) | def __str__(self):
method __eq__ (line 4990) | def __eq__(self, other):
class _UniffiConverterTypeContractBuilder (line 5015) | class _UniffiConverterTypeContractBuilder(_UniffiConverterRustBuffer):
method read (line 5017) | def read(buf):
method write (line 5033) | def write(value, buf):
class ContractMatchingBuilder (line 5047) | class ContractMatchingBuilder:
method __init__ (line 5051) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5061) | def __str__(self):
method __eq__ (line 5064) | def __eq__(self, other):
class _UniffiConverterTypeContractMatchingBuilder (line 5083) | class _UniffiConverterTypeContractMatchingBuilder(_UniffiConverterRustBu...
method read (line 5085) | def read(buf):
method write (line 5098) | def write(value, buf):
class ContractPrice (line 5109) | class ContractPrice:
method __init__ (line 5113) | def __init__(self, pair_id: "PairId", market_price: "BigUint"):
method __str__ (line 5117) | def __str__(self):
method __eq__ (line 5120) | def __eq__(self, other):
class _UniffiConverterTypeContractPrice (line 5127) | class _UniffiConverterTypeContractPrice(_UniffiConverterRustBuffer):
method read (line 5129) | def read(buf):
method write (line 5136) | def write(value, buf):
class Create2Data (line 5141) | class Create2Data:
method __init__ (line 5145) | def __init__(self, creator_address: "ZkLinkAddress", salt_arg: "H256",...
method __str__ (line 5150) | def __str__(self):
method __eq__ (line 5153) | def __eq__(self, other):
class _UniffiConverterTypeCreate2Data (line 5162) | class _UniffiConverterTypeCreate2Data(_UniffiConverterRustBuffer):
method read (line 5164) | def read(buf):
method write (line 5172) | def write(value, buf):
class DepositBuilder (line 5178) | class DepositBuilder:
method __init__ (line 5182) | def __init__(self, from_address: "ZkLinkAddress", to_address: "ZkLinkA...
method __str__ (line 5194) | def __str__(self):
method __eq__ (line 5197) | def __eq__(self, other):
class _UniffiConverterTypeDepositBuilder (line 5220) | class _UniffiConverterTypeDepositBuilder(_UniffiConverterRustBuffer):
method read (line 5222) | def read(buf):
method write (line 5237) | def write(value, buf):
class ForcedExitBuilder (line 5250) | class ForcedExitBuilder:
method __init__ (line 5254) | def __init__(self, to_chain_id: "ChainId", initiator_account_id: "Acco...
method __str__ (line 5267) | def __str__(self):
method __eq__ (line 5270) | def __eq__(self, other):
class _UniffiConverterTypeForcedExitBuilder (line 5295) | class _UniffiConverterTypeForcedExitBuilder(_UniffiConverterRustBuffer):
method read (line 5297) | def read(buf):
method write (line 5313) | def write(value, buf):
class FullExitBuilder (line 5327) | class FullExitBuilder:
method __init__ (line 5331) | def __init__(self, to_chain_id: "ChainId", account_id: "AccountId", su...
method __str__ (line 5343) | def __str__(self):
method __eq__ (line 5346) | def __eq__(self, other):
class _UniffiConverterTypeFullExitBuilder (line 5369) | class _UniffiConverterTypeFullExitBuilder(_UniffiConverterRustBuffer):
method read (line 5371) | def read(buf):
method write (line 5386) | def write(value, buf):
class FundingBuilder (line 5399) | class FundingBuilder:
method __init__ (line 5403) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5411) | def __str__(self):
method __eq__ (line 5414) | def __eq__(self, other):
class _UniffiConverterTypeFundingBuilder (line 5429) | class _UniffiConverterTypeFundingBuilder(_UniffiConverterRustBuffer):
method read (line 5431) | def read(buf):
method write (line 5442) | def write(value, buf):
class FundingInfo (line 5451) | class FundingInfo:
method __init__ (line 5455) | def __init__(self, pair_id: "PairId", price: "BigUint", funding_rate: ...
method __str__ (line 5460) | def __str__(self):
method __eq__ (line 5463) | def __eq__(self, other):
class _UniffiConverterTypeFundingInfo (line 5472) | class _UniffiConverterTypeFundingInfo(_UniffiConverterRustBuffer):
method read (line 5474) | def read(buf):
method write (line 5482) | def write(value, buf):
class LiquidationBuilder (line 5488) | class LiquidationBuilder:
method __init__ (line 5492) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5502) | def __str__(self):
method __eq__ (line 5505) | def __eq__(self, other):
class _UniffiConverterTypeLiquidationBuilder (line 5524) | class _UniffiConverterTypeLiquidationBuilder(_UniffiConverterRustBuffer):
method read (line 5526) | def read(buf):
method write (line 5539) | def write(value, buf):
class Message (line 5550) | class Message:
method __init__ (line 5554) | def __init__(self, data: str):
method __str__ (line 5557) | def __str__(self):
method __eq__ (line 5560) | def __eq__(self, other):
class _UniffiConverterTypeMessage (line 5565) | class _UniffiConverterTypeMessage(_UniffiConverterRustBuffer):
method read (line 5567) | def read(buf):
method write (line 5573) | def write(value, buf):
class OraclePrices (line 5577) | class OraclePrices:
method __init__ (line 5581) | def __init__(self, contract_prices: "typing.List[ContractPrice]", marg...
method __str__ (line 5585) | def __str__(self):
method __eq__ (line 5588) | def __eq__(self, other):
class _UniffiConverterTypeOraclePrices (line 5595) | class _UniffiConverterTypeOraclePrices(_UniffiConverterRustBuffer):
method read (line 5597) | def read(buf):
method write (line 5604) | def write(value, buf):
class OrderMatchingBuilder (line 5609) | class OrderMatchingBuilder:
method __init__ (line 5613) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5625) | def __str__(self):
method __eq__ (line 5628) | def __eq__(self, other):
class _UniffiConverterTypeOrderMatchingBuilder (line 5651) | class _UniffiConverterTypeOrderMatchingBuilder(_UniffiConverterRustBuffer):
method read (line 5653) | def read(buf):
method write (line 5668) | def write(value, buf):
class SpotPriceInfo (line 5681) | class SpotPriceInfo:
method __init__ (line 5685) | def __init__(self, token_id: "TokenId", price: "BigUint"):
method __str__ (line 5689) | def __str__(self):
method __eq__ (line 5692) | def __eq__(self, other):
class _UniffiConverterTypeSpotPriceInfo (line 5699) | class _UniffiConverterTypeSpotPriceInfo(_UniffiConverterRustBuffer):
method read (line 5701) | def read(buf):
method write (line 5708) | def write(value, buf):
class TransferBuilder (line 5713) | class TransferBuilder:
method __init__ (line 5717) | def __init__(self, account_id: "AccountId", to_address: "ZkLinkAddress...
method __str__ (line 5728) | def __str__(self):
method __eq__ (line 5731) | def __eq__(self, other):
class _UniffiConverterTypeTransferBuilder (line 5752) | class _UniffiConverterTypeTransferBuilder(_UniffiConverterRustBuffer):
method read (line 5754) | def read(buf):
method write (line 5768) | def write(value, buf):
class TxMessage (line 5780) | class TxMessage:
method __init__ (line 5784) | def __init__(self, transaction: str, amount: str, fee: str, token: str...
method __str__ (line 5792) | def __str__(self):
method __eq__ (line 5795) | def __eq__(self, other):
class _UniffiConverterTypeTxMessage (line 5810) | class _UniffiConverterTypeTxMessage(_UniffiConverterRustBuffer):
method read (line 5812) | def read(buf):
method write (line 5823) | def write(value, buf):
class TxSignature (line 5832) | class TxSignature:
method __init__ (line 5836) | def __init__(self, tx: "ZkLinkTx", layer1_signature: "typing.Optional[...
method __str__ (line 5840) | def __str__(self):
method __eq__ (line 5843) | def __eq__(self, other):
class _UniffiConverterTypeTxSignature (line 5850) | class _UniffiConverterTypeTxSignature(_UniffiConverterRustBuffer):
method read (line 5852) | def read(buf):
method write (line 5859) | def write(value, buf):
class UpdateGlobalVarBuilder (line 5864) | class UpdateGlobalVarBuilder:
method __init__ (line 5868) | def __init__(self, from_chain_id: "ChainId", sub_account_id: "SubAccou...
method __str__ (line 5874) | def __str__(self):
method __eq__ (line 5877) | def __eq__(self, other):
class _UniffiConverterTypeUpdateGlobalVarBuilder (line 5888) | class _UniffiConverterTypeUpdateGlobalVarBuilder(_UniffiConverterRustBuf...
method read (line 5890) | def read(buf):
method write (line 5899) | def write(value, buf):
class WithdrawBuilder (line 5906) | class WithdrawBuilder:
method __init__ (line 5910) | def __init__(self, account_id: "AccountId", sub_account_id: "SubAccoun...
method __str__ (line 5925) | def __str__(self):
method __eq__ (line 5928) | def __eq__(self, other):
class _UniffiConverterTypeWithdrawBuilder (line 5957) | class _UniffiConverterTypeWithdrawBuilder(_UniffiConverterRustBuffer):
method read (line 5959) | def read(buf):
method write (line 5977) | def write(value, buf):
class ZkLinkSignature (line 5993) | class ZkLinkSignature:
method __init__ (line 5997) | def __init__(self, pub_key: "PackedPublicKey", signature: "PackedSigna...
method __str__ (line 6001) | def __str__(self):
method __eq__ (line 6004) | def __eq__(self, other):
class _UniffiConverterTypeZkLinkSignature (line 6011) | class _UniffiConverterTypeZkLinkSignature(_UniffiConverterRustBuffer):
method read (line 6013) | def read(buf):
method write (line 6020) | def write(value, buf):
class ChangePubKeyAuthData (line 6028) | class ChangePubKeyAuthData:
method __init__ (line 6029) | def __init__(self):
class ONCHAIN (line 6033) | class ONCHAIN:
method __init__ (line 6037) | def __init__(self,):
method __str__ (line 6042) | def __str__(self):
method __eq__ (line 6045) | def __eq__(self, other):
class ETH_ECDSA (line 6049) | class ETH_ECDSA:
method __init__ (line 6053) | def __init__(self,eth_signature: "PackedEthSignature"):
method __str__ (line 6058) | def __str__(self):
method __eq__ (line 6061) | def __eq__(self, other):
class ETH_CREATE2 (line 6067) | class ETH_CREATE2:
method __init__ (line 6071) | def __init__(self,data: "Create2Data"):
method __str__ (line 6076) | def __str__(self):
method __eq__ (line 6079) | def __eq__(self, other):
method is_onchain (line 6089) | def is_onchain(self) -> bool:
method is_eth_ecdsa (line 6091) | def is_eth_ecdsa(self) -> bool:
method is_eth_create2 (line 6093) | def is_eth_create2(self) -> bool:
class _UniffiConverterTypeChangePubKeyAuthData (line 6107) | class _UniffiConverterTypeChangePubKeyAuthData(_UniffiConverterRustBuffer):
method read (line 6109) | def read(buf):
method write (line 6124) | def write(value, buf):
class ChangePubKeyAuthRequest (line 6140) | class ChangePubKeyAuthRequest:
method __init__ (line 6141) | def __init__(self):
class ONCHAIN (line 6145) | class ONCHAIN:
method __init__ (line 6149) | def __init__(self,):
method __str__ (line 6154) | def __str__(self):
method __eq__ (line 6157) | def __eq__(self, other):
class ETH_ECDSA (line 6161) | class ETH_ECDSA:
method __init__ (line 6165) | def __init__(self,):
method __str__ (line 6170) | def __str__(self):
method __eq__ (line 6173) | def __eq__(self, other):
class ETH_CREATE2 (line 6177) | class ETH_CREATE2:
method __init__ (line 6181) | def __init__(self,data: "Create2Data"):
method __str__ (line 6186) | def __str__(self):
method __eq__ (line 6189) | def __eq__(self, other):
method is_onchain (line 6199) | def is_onchain(self) -> bool:
method is_eth_ecdsa (line 6201) | def is_eth_ecdsa(self) -> bool:
method is_eth_create2 (line 6203) | def is_eth_create2(self) -> bool:
class _UniffiConverterTypeChangePubKeyAuthRequest (line 6217) | class _UniffiConvert
Copy disabled (too large)
Download .json
Condensed preview — 2201 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (32,860K chars).
[
{
"path": ".dockerignore",
"chars": 251,
"preview": "__pycache__\n*.pyc\n*.pyo\n*.pyd\n.Python\nenv\npip-log.txt\npip-delete-this-directory.txt\n.tox\n.coverage\n.coverage.*\n.cache\nno"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1416,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n<!--\nIMPORTANT:"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 967,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n<!--"
},
{
"path": ".github/stale.yml",
"chars": 682,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a "
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 2743,
"preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
},
{
"path": ".github/workflows/python-package.yml",
"chars": 1969,
"preview": "# This workflow will install Python dependencies, run tests and lint with a single version of Python\n# For more informat"
},
{
"path": ".gitignore",
"chars": 2200,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# Distribution / packaging\n.Python\nbuild/\ndev"
},
{
"path": "AGENTS.md",
"chars": 4923,
"preview": "# Jesse Repository Guide for AI Agents\n\n## Overview\nThe jesse repository is the **core open-source framework** of the Je"
},
{
"path": "Dockerfile",
"chars": 703,
"preview": "ARG TEST_BUILD=0\nFROM python:3.11-slim-bullseye AS jesse_basic_env\nENV PYTHONUNBUFFERED 1\n\nRUN apt-get update \\\n && a"
},
{
"path": "LICENSE",
"chars": 1068,
"preview": "MIT License\n\nCopyright (c) 2020 Jesse.Trade\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
},
{
"path": "MANIFEST.in",
"chars": 49,
"preview": "include jesse/static/*\ninclude jesse/static/**/*\n"
},
{
"path": "README.md",
"chars": 6977,
"preview": "<div align=\"center\">\n<br>\n<p align=\"center\">\n<img src=\"assets/jesse-logo.png\" alt=\"Jesse\" height=\"72\" />\n</p>\n\n<p align="
},
{
"path": "codecov.yml",
"chars": 23,
"preview": "ignore:\n - \"tests/**\"\n"
},
{
"path": "conftest.py",
"chars": 181,
"preview": "def pytest_configure(config):\n config.addinivalue_line(\n \"filterwarnings\",\n \"ignore:Please use `import "
},
{
"path": "jesse/__init__.py",
"chars": 3543,
"preview": "import os\nimport warnings\nfrom contextlib import asynccontextmanager\nfrom fastapi.responses import FileResponse\nfrom fas"
},
{
"path": "jesse/candle_pipelines/__init__.py",
"chars": 240,
"preview": "from .base_candles import BaseCandlesPipeline\nfrom .gaussian_noise import GaussianNoiseCandlesPipeline\nfrom .gaussian_re"
},
{
"path": "jesse/candle_pipelines/base_candles.py",
"chars": 1633,
"preview": "import numpy as np\n\n\nclass BaseCandlesPipeline:\n def __init__(self, batch_size: int) -> None:\n self._batch_siz"
},
{
"path": "jesse/candle_pipelines/gaussian_noise.py",
"chars": 2231,
"preview": "import numpy as np\nimport jesse.helpers as jh\nfrom .base_candles import BaseCandlesPipeline\n\n\nclass GaussianNoiseCandles"
},
{
"path": "jesse/candle_pipelines/gaussian_resampler.py",
"chars": 3074,
"preview": "import numpy as np\nfrom typing import Optional\nfrom .base_candles import BaseCandlesPipeline\n\n\nclass GaussianResamplerCa"
},
{
"path": "jesse/candle_pipelines/moving_block_bootstrap.py",
"chars": 3673,
"preview": "import numpy as np\nfrom .base_candles import BaseCandlesPipeline\n\n\nclass MovingBlockBootstrapCandlesPipeline(BaseCandles"
},
{
"path": "jesse/cli.py",
"chars": 2956,
"preview": "import time\n\nimport click\nfrom importlib.metadata import version as get_version\nimport uvicorn\n\nimport jesse.helpers as "
},
{
"path": "jesse/config.py",
"chars": 6240,
"preview": "import jesse.helpers as jh\nfrom jesse.modes.utils import get_exchange_type\nfrom jesse.enums import exchanges\nfrom jesse."
},
{
"path": "jesse/constants.py",
"chars": 1481,
"preview": "from jesse.enums import timeframes\n\n\nCANDLE_SOURCE_MAPPING = {\n \"open\": lambda c: c[:, 1],\n \"close\": lambda c"
},
{
"path": "jesse/controllers/__init__.py",
"chars": 64,
"preview": "from .exchange_controller import get_exchange_supported_symbols\n"
},
{
"path": "jesse/controllers/auth_controller.py",
"chars": 2933,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header, BackgroundTasks\nfrom fastapi.responses import JSONRes"
},
{
"path": "jesse/controllers/backtest_controller.py",
"chars": 9526,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header, Query, Body\nfrom fastapi.responses import JSONRespons"
},
{
"path": "jesse/controllers/candles_controller.py",
"chars": 3853,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header\nfrom starlette.responses import JSONResponse\nfrom jess"
},
{
"path": "jesse/controllers/closed_trade_controller.py",
"chars": 3363,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header, Query, Body\nfrom fastapi.responses import JSONRespons"
},
{
"path": "jesse/controllers/config_controller.py",
"chars": 1240,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header\nfrom fastapi.responses import JSONResponse\n\nfrom jesse"
},
{
"path": "jesse/controllers/exchange_controller.py",
"chars": 3416,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header\nfrom starlette.responses import JSONResponse\n\nfrom jes"
},
{
"path": "jesse/controllers/file_controller.py",
"chars": 2395,
"preview": "from fastapi import APIRouter, Query, Header, UploadFile, Form, File\nfrom typing import Optional\n\nfrom jesse.services im"
},
{
"path": "jesse/controllers/live_controller.py",
"chars": 9798,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header, Body\nfrom fastapi.responses import JSONResponse\n\nfrom"
},
{
"path": "jesse/controllers/lsp_controller.py",
"chars": 962,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header\nfrom fastapi.responses import JSONResponse\nfrom jesse."
},
{
"path": "jesse/controllers/monte_carlo_controller.py",
"chars": 15952,
"preview": "from fastapi import APIRouter, Header, Request\nfrom typing import Optional\nfrom fastapi.responses import JSONResponse\nim"
},
{
"path": "jesse/controllers/notification_controller.py",
"chars": 1772,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header\nfrom fastapi.responses import JSONResponse\n\nfrom jesse"
},
{
"path": "jesse/controllers/optimization_controller.py",
"chars": 14805,
"preview": "from fastapi import APIRouter, Header, Query, Body\nfrom typing import Optional, List\nfrom fastapi.responses import JSONR"
},
{
"path": "jesse/controllers/order_controller.py",
"chars": 2746,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header, Body\nfrom fastapi.responses import JSONResponse\n\nfrom"
},
{
"path": "jesse/controllers/strategy_controller.py",
"chars": 9959,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header, Query\nfrom fastapi.responses import JSONResponse\nimpo"
},
{
"path": "jesse/controllers/system_controller.py",
"chars": 3883,
"preview": "from typing import Optional\nfrom fastapi import APIRouter, Header\nfrom fastapi.responses import JSONResponse\n\nfrom jesse"
},
{
"path": "jesse/controllers/tabs_controller.py",
"chars": 2462,
"preview": "from fastapi import APIRouter, Header\nfrom pydantic import BaseModel\nfrom typing import List, Optional\nfrom jesse.reposi"
},
{
"path": "jesse/controllers/websocket_controller.py",
"chars": 1687,
"preview": "from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query\nfrom starlette.websockets import WebSocket, WebSock"
},
{
"path": "jesse/enums/__init__.py",
"chars": 2926,
"preview": "from dataclasses import dataclass\n\n@dataclass\nclass sides:\n BUY = 'buy'\n SELL = 'sell'\n\n\n@dataclass\nclass trade_ty"
},
{
"path": "jesse/exceptions/__init__.py",
"chars": 1483,
"preview": "class EmptyPosition(Exception):\n pass\n\n\nclass OpenPositionError(Exception):\n pass\n\n\nclass OrderNotAllowed(Exceptio"
},
{
"path": "jesse/exchanges/__init__.py",
"chars": 37,
"preview": "from .sandbox.Sandbox import Sandbox\n"
},
{
"path": "jesse/exchanges/exchange.py",
"chars": 885,
"preview": "from abc import ABC, abstractmethod\nfrom typing import Union\nfrom jesse.models.Order import Order\n\n\nclass Exchange(ABC):"
},
{
"path": "jesse/exchanges/sandbox/Sandbox.py",
"chars": 2390,
"preview": "from jesse.models.Order import Order\nimport jesse.helpers as jh\nfrom typing import List\nfrom jesse.enums import order_ty"
},
{
"path": "jesse/exchanges/sandbox/__init__.py",
"chars": 29,
"preview": "from .Sandbox import Sandbox\n"
},
{
"path": "jesse/factories/__init__.py",
"chars": 174,
"preview": "from .candle_factory import fake_candle\nfrom .candle_factory import range_candles\nfrom .candle_factory import candles_fr"
},
{
"path": "jesse/factories/candle_factory.py",
"chars": 2586,
"preview": "from random import randint\nfrom typing import Union\n\nimport numpy as np\n\n# 2021-01-01T00:00:00+00:00\nfirst_timestamp = 1"
},
{
"path": "jesse/factories/order_factory.py",
"chars": 1166,
"preview": "from random import randint\n\nimport jesse.helpers as jh\nfrom jesse.enums import exchanges, sides, order_types, order_stat"
},
{
"path": "jesse/helpers.py",
"chars": 36281,
"preview": "import hashlib\nfrom datetime import datetime\nimport math\nimport os\nimport gzip\nimport json\nfrom functools import lru_cac"
},
{
"path": "jesse/indicators/__init__.py",
"chars": 4731,
"preview": "from .acosc import acosc\nfrom .ad import ad\nfrom .adosc import adosc\nfrom .adx import adx\nfrom .adxr import adxr\nfrom .a"
},
{
"path": "jesse/indicators/acosc.py",
"chars": 1122,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\nAC = namedtuple('AC', ["
},
{
"path": "jesse/indicators/ad.py",
"chars": 960,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef ad(candles: np.ndarray, sequ"
},
{
"path": "jesse/indicators/adosc.py",
"chars": 853,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom jesse_rust import adosc as ado"
},
{
"path": "jesse/indicators/adx.py",
"chars": 961,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom jesse_rust import adx as adx_ru"
},
{
"path": "jesse/indicators/adxr.py",
"chars": 2960,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom numba import njit\n\n\n@njit(cach"
},
{
"path": "jesse/indicators/alligator.py",
"chars": 882,
"preview": "from collections import namedtuple\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom je"
},
{
"path": "jesse/indicators/alma.py",
"chars": 1676,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef alma(cand"
},
{
"path": "jesse/indicators/ao.py",
"chars": 986,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\nfrom .sma import sma\n\nAO"
},
{
"path": "jesse/indicators/apo.py",
"chars": 1196,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse.indi"
},
{
"path": "jesse/indicators/aroon.py",
"chars": 1752,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\nAROON = namedtuple('ARO"
},
{
"path": "jesse/indicators/aroonosc.py",
"chars": 1512,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import slice_candles\n\n@njit(cach"
},
{
"path": "jesse/indicators/atr.py",
"chars": 597,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom jesse_rust import atr as rust_a"
},
{
"path": "jesse/indicators/avgprice.py",
"chars": 503,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef avgprice(candles: np.ndarray"
},
{
"path": "jesse/indicators/bandpass.py",
"chars": 1968,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_sour"
},
{
"path": "jesse/indicators/beta.py",
"chars": 1493,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jesse.helpers"
},
{
"path": "jesse/indicators/bollinger_bands.py",
"chars": 3075,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom "
},
{
"path": "jesse/indicators/bollinger_bands_width.py",
"chars": 941,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse_rust i"
},
{
"path": "jesse/indicators/bop.py",
"chars": 694,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef bop(candles: np.ndarray, seq"
},
{
"path": "jesse/indicators/cc.py",
"chars": 1050,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom .roc impor"
},
{
"path": "jesse/indicators/cci.py",
"chars": 1456,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import slice_candles\n\n@njit(cach"
},
{
"path": "jesse/indicators/cfo.py",
"chars": 1953,
"preview": "from typing import Union\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_c"
},
{
"path": "jesse/indicators/cg.py",
"chars": 1298,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, same_l"
},
{
"path": "jesse/indicators/chande.py",
"chars": 854,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse_rust import chande as rust_chande\nfrom jesse.helpers import slic"
},
{
"path": "jesse/indicators/chop.py",
"chars": 763,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\nfrom jesse_rust import chop as cho"
},
{
"path": "jesse/indicators/cksp.py",
"chars": 2841,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\nCKSP = namedtuple('CKSP"
},
{
"path": "jesse/indicators/cmo.py",
"chars": 1779,
"preview": "from typing import Union\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_c"
},
{
"path": "jesse/indicators/correl.py",
"chars": 1664,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef correl(candles: np.ndarray, "
},
{
"path": "jesse/indicators/correlation_cycle.py",
"chars": 2980,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_sour"
},
{
"path": "jesse/indicators/cvi.py",
"chars": 601,
"preview": "from typing import Union\nimport numpy as np\nimport jesse.helpers as jh\nfrom jesse_rust import cvi as cvi_rust\n\n\ndef cvi("
},
{
"path": "jesse/indicators/cwma.py",
"chars": 1213,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/damiani_volatmeter.py",
"chars": 3571,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_sour"
},
{
"path": "jesse/indicators/dec_osc.py",
"chars": 927,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\nfrom .high_pas"
},
{
"path": "jesse/indicators/decycler.py",
"chars": 775,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\nfrom .high_pas"
},
{
"path": "jesse/indicators/dema.py",
"chars": 1913,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/devstop.py",
"chars": 2479,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jesse.helpers"
},
{
"path": "jesse/indicators/di.py",
"chars": 963,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\nfrom jesse_rust import d"
},
{
"path": "jesse/indicators/dm.py",
"chars": 862,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n# Import the high-perfo"
},
{
"path": "jesse/indicators/donchian.py",
"chars": 1818,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom jesse_rust import donchian as rust_donchian\nfrom jesse.helpe"
},
{
"path": "jesse/indicators/dpo.py",
"chars": 1289,
"preview": "from typing import Union\nimport numpy as np\nfrom numba import njit\nfrom jesse.helpers import get_candle_source, same_len"
},
{
"path": "jesse/indicators/dti.py",
"chars": 1646,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nimport jesse.helpers as jh\nfrom jesse.helpers impor"
},
{
"path": "jesse/indicators/dx.py",
"chars": 2399,
"preview": "from collections import namedtuple\n\nfrom typing import Union\n\nimport numpy as np\nfrom jesse.helpers import slice_candles"
},
{
"path": "jesse/indicators/edcf.py",
"chars": 1333,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/efi.py",
"chars": 1683,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, same_l"
},
{
"path": "jesse/indicators/ema.py",
"chars": 831,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse_rust"
},
{
"path": "jesse/indicators/emd.py",
"chars": 2095,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\nfrom jesse.indicators.sma import sma\nfrom "
},
{
"path": "jesse/indicators/emv.py",
"chars": 1208,
"preview": "from typing import Union\nimport numpy as np\nfrom numba import njit\nfrom jesse.helpers import same_length, slice_candles\n"
},
{
"path": "jesse/indicators/epma.py",
"chars": 1285,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/er.py",
"chars": 942,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jesse.helpers"
},
{
"path": "jesse/indicators/eri.py",
"chars": 1097,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom "
},
{
"path": "jesse/indicators/fisher.py",
"chars": 1957,
"preview": "from collections import namedtuple\nimport numpy as np\nfrom numba import njit\nfrom jesse.helpers import same_length, slic"
},
{
"path": "jesse/indicators/fosc.py",
"chars": 1404,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import get_candle_source, same_length, slice_candles\nfrom"
},
{
"path": "jesse/indicators/frama.py",
"chars": 2186,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import slice_candles\n\n\ndef frama"
},
{
"path": "jesse/indicators/fwma.py",
"chars": 1398,
"preview": "from math import fabs\nfrom typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_vi"
},
{
"path": "jesse/indicators/gatorosc.py",
"chars": 1928,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, np_shift, slice_can"
},
{
"path": "jesse/indicators/gauss.py",
"chars": 2215,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/heikin_ashi_candles.py",
"chars": 1695,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import slice_candles\n\n"
},
{
"path": "jesse/indicators/high_pass.py",
"chars": 1323,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/high_pass_2_pole.py",
"chars": 1506,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/hma.py",
"chars": 1472,
"preview": "from typing import Union\nimport numpy as np\nfrom numba import njit\nfrom jesse.helpers import get_candle_source, same_len"
},
{
"path": "jesse/indicators/hull_suit.py",
"chars": 2176,
"preview": "from collections import namedtuple\n\nfrom .wma import wma\nfrom .ema import ema\nimport numpy as np\nfrom jesse.helpers impo"
},
{
"path": "jesse/indicators/hurst_exponent.py",
"chars": 7176,
"preview": "import numpy as np\nfrom numba import njit\nfrom scipy import signal\n\nfrom jesse.helpers import get_candle_source, slice_c"
},
{
"path": "jesse/indicators/hwma.py",
"chars": 1640,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, same_l"
},
{
"path": "jesse/indicators/ichimoku_cloud.py",
"chars": 1151,
"preview": "from collections import namedtuple\nimport numpy as np\nfrom jesse_rust import ichimoku_cloud as ichimoku_cloud_rust\n\nIchi"
},
{
"path": "jesse/indicators/ichimoku_cloud_seq.py",
"chars": 2635,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jes"
},
{
"path": "jesse/indicators/ift_rsi.py",
"chars": 1004,
"preview": "from typing import Union\nfrom jesse.indicators.wma import wma\nfrom jesse.indicators.rsi import rsi\nimport numpy as np\n\nf"
},
{
"path": "jesse/indicators/itrend.py",
"chars": 1522,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_sour"
},
{
"path": "jesse/indicators/jma.py",
"chars": 1367,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/jsa.py",
"chars": 776,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, np_shift, slice_candles\n\n\ndef"
},
{
"path": "jesse/indicators/kama.py",
"chars": 1218,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse_rust i"
},
{
"path": "jesse/indicators/kaufmanstop.py",
"chars": 1066,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\nfrom jesse.indicators.ma import ma"
},
{
"path": "jesse/indicators/kdj.py",
"chars": 2394,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\nfrom jesse.indicators.ma"
},
{
"path": "jesse/indicators/keltner.py",
"chars": 2754,
"preview": "from collections import namedtuple\nimport numpy as np\nfrom numba import njit\nfrom jesse.helpers import get_candle_source"
},
{
"path": "jesse/indicators/kst.py",
"chars": 2111,
"preview": "from collections import namedtuple\n\nfrom jesse.indicators.roc import roc as _roc\nfrom jesse.indicators.sma import sma as"
},
{
"path": "jesse/indicators/kurtosis.py",
"chars": 866,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\nfrom scipy import s"
},
{
"path": "jesse/indicators/kvo.py",
"chars": 1615,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom jesse.indicators import ema\n\n\nd"
},
{
"path": "jesse/indicators/linearreg.py",
"chars": 1971,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/linearreg_angle.py",
"chars": 1308,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef linearreg"
},
{
"path": "jesse/indicators/linearreg_intercept.py",
"chars": 1668,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef linearreg"
},
{
"path": "jesse/indicators/linearreg_slope.py",
"chars": 1375,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef linearreg"
},
{
"path": "jesse/indicators/lrsi.py",
"chars": 1600,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import slice_candles\n\n\ndef lrsi("
},
{
"path": "jesse/indicators/ma.py",
"chars": 7451,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef ma(candle"
},
{
"path": "jesse/indicators/maaq.py",
"chars": 1814,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import (get_candle_source, np_sh"
},
{
"path": "jesse/indicators/mab.py",
"chars": 1943,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom "
},
{
"path": "jesse/indicators/macd.py",
"chars": 1314,
"preview": "from collections import namedtuple\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom je"
},
{
"path": "jesse/indicators/mama.py",
"chars": 5491,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_sour"
},
{
"path": "jesse/indicators/marketfi.py",
"chars": 625,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import same_length, slice_candles\n\n\ndef marketfi(candle"
},
{
"path": "jesse/indicators/mass.py",
"chars": 1768,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import same_length, slice_candle"
},
{
"path": "jesse/indicators/mcginley_dynamic.py",
"chars": 1197,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/mean_ad.py",
"chars": 1083,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jesse.helpers"
},
{
"path": "jesse/indicators/median_ad.py",
"chars": 982,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\nfrom scipy import s"
},
{
"path": "jesse/indicators/medprice.py",
"chars": 470,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef medprice(candles: np.ndarray"
},
{
"path": "jesse/indicators/mfi.py",
"chars": 1909,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef mfi(candles: np.ndarray, per"
},
{
"path": "jesse/indicators/midpoint.py",
"chars": 1333,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef midpoint("
},
{
"path": "jesse/indicators/midprice.py",
"chars": 1317,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom numpy.lib.stride_tricks import"
},
{
"path": "jesse/indicators/minmax.py",
"chars": 1264,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom scipy.signal import argrelextrema\n\nfrom jesse.helpers import"
},
{
"path": "jesse/indicators/mom.py",
"chars": 826,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef mom(candl"
},
{
"path": "jesse/indicators/mwdx.py",
"chars": 1066,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/natr.py",
"chars": 1946,
"preview": "import numpy as np\nfrom typing import Union\n\nfrom jesse.helpers import slice_candles\n\n\ndef natr(candles: np.ndarray, per"
},
{
"path": "jesse/indicators/nma.py",
"chars": 1438,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/nvi.py",
"chars": 1279,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, same_l"
},
{
"path": "jesse/indicators/obv.py",
"chars": 836,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef obv(candles: np.ndarray, seq"
},
{
"path": "jesse/indicators/pfe.py",
"chars": 2076,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom numba import njit\nfrom jesse.helpers import get_candle_source, same_l"
},
{
"path": "jesse/indicators/pivot.py",
"chars": 3281,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\nPIVOT = namedtuple('PIV"
},
{
"path": "jesse/indicators/pma.py",
"chars": 1540,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_sour"
},
{
"path": "jesse/indicators/ppo.py",
"chars": 1284,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse.indi"
},
{
"path": "jesse/indicators/pvi.py",
"chars": 1340,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, same_l"
},
{
"path": "jesse/indicators/pwma.py",
"chars": 1881,
"preview": "from functools import reduce\nfrom operator import mul\nfrom typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride"
},
{
"path": "jesse/indicators/qstick.py",
"chars": 1271,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import same_length, slice_candle"
},
{
"path": "jesse/indicators/reflex.py",
"chars": 1541,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/rma.py",
"chars": 1874,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import guvectorize, njit\n\nfrom jesse.helpers import get_candle_s"
},
{
"path": "jesse/indicators/roc.py",
"chars": 889,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef roc(candl"
},
{
"path": "jesse/indicators/rocp.py",
"chars": 837,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef rocp(candl"
},
{
"path": "jesse/indicators/rocr.py",
"chars": 1027,
"preview": "import numpy as np\n\nfrom typing import Union\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef rocr(cand"
},
{
"path": "jesse/indicators/rocr100.py",
"chars": 926,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef rocr100(c"
},
{
"path": "jesse/indicators/roofing.py",
"chars": 937,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\nfrom .high_pas"
},
{
"path": "jesse/indicators/rsi.py",
"chars": 835,
"preview": "import numpy as np\nfrom typing import Union\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse_rust "
},
{
"path": "jesse/indicators/rsmk.py",
"chars": 2746,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source\n\nRSMK = namedtuple('"
},
{
"path": "jesse/indicators/rsx.py",
"chars": 2626,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/rvi.py",
"chars": 2175,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jesse.helpers"
},
{
"path": "jesse/indicators/safezonestop.py",
"chars": 2709,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\nfrom jesse.helpers import np_shift, slice_candles\n\n@"
},
{
"path": "jesse/indicators/sar.py",
"chars": 2654,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import slice_candles\nfrom numba import njit\n\n\ndef sar(ca"
},
{
"path": "jesse/indicators/settings.jsonc",
"chars": 561,
"preview": "{\n \"[python]\": {\n \"editor.defaultFormatter\": \"ms-python.autopep8\",\n \"editor.formatOnSave\": true,\n "
},
{
"path": "jesse/indicators/sinwma.py",
"chars": 1086,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\n\nfrom jesse.helpers"
},
{
"path": "jesse/indicators/skew.py",
"chars": 850,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_view\nfrom scipy import s"
},
{
"path": "jesse/indicators/sma.py",
"chars": 790,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse_rust"
},
{
"path": "jesse/indicators/smma.py",
"chars": 1173,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef smma(cand"
},
{
"path": "jesse/indicators/squeeze_momentum.py",
"chars": 3333,
"preview": "from collections import namedtuple\n\nfrom .bollinger_bands import bollinger_bands\nfrom .sma import sma\nfrom .trange impor"
},
{
"path": "jesse/indicators/sqwma.py",
"chars": 1216,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/srsi.py",
"chars": 962,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n# Im"
},
{
"path": "jesse/indicators/srwma.py",
"chars": 1222,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/stc.py",
"chars": 2724,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef ema(serie"
},
{
"path": "jesse/indicators/stddev.py",
"chars": 1506,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef stddev(ca"
},
{
"path": "jesse/indicators/stiffness.py",
"chars": 1619,
"preview": "from collections import namedtuple\n\nfrom .sma import sma\nfrom .ema import ema\nfrom .stddev import stddev\n\nimport numpy a"
},
{
"path": "jesse/indicators/stochastic.py",
"chars": 1409,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n# Import the high-perfo"
},
{
"path": "jesse/indicators/stochf.py",
"chars": 1237,
"preview": "from collections import namedtuple\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n# Import the high-perfo"
},
{
"path": "jesse/indicators/supersmoother.py",
"chars": 1281,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/supersmoother_3_pole.py",
"chars": 1394,
"preview": "from typing import Union\n\nimport numpy as np\n\ntry:\n from numba import njit\nexcept ImportError:\n njit = lambda a : "
},
{
"path": "jesse/indicators/supertrend.py",
"chars": 4283,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import slice_candles\n\n"
},
{
"path": "jesse/indicators/support_resistance_with_break.py",
"chars": 4473,
"preview": "from collections import namedtuple\n\nimport numpy as np\nfrom .ema import ema\n\nSupportResistanceWithBreaks = namedtuple('S"
},
{
"path": "jesse/indicators/swma.py",
"chars": 1796,
"preview": "from math import floor\nfrom typing import Union\n\nimport numpy as np\nfrom numpy.lib.stride_tricks import sliding_window_v"
},
{
"path": "jesse/indicators/t3.py",
"chars": 3097,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef t3(candles"
},
{
"path": "jesse/indicators/tema.py",
"chars": 893,
"preview": "from typing import Union\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\nfrom jesse_rust i"
},
{
"path": "jesse/indicators/trange.py",
"chars": 825,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import slice_candles\n\n\ndef trange(candles: np.ndarray, "
},
{
"path": "jesse/indicators/trendflex.py",
"chars": 1486,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/trima.py",
"chars": 1265,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef trima(can"
},
{
"path": "jesse/indicators/trix.py",
"chars": 1457,
"preview": "from typing import Union\n\nimport numpy as np\nfrom numba import njit\n\nfrom jesse.helpers import get_candle_source, slice_"
},
{
"path": "jesse/indicators/tsf.py",
"chars": 2129,
"preview": "from typing import Union\n\nimport numpy as np\n\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef tsf(candl"
},
{
"path": "jesse/indicators/tsi.py",
"chars": 1866,
"preview": "from typing import Union\n\nimport numpy as np\nfrom jesse.helpers import get_candle_source, slice_candles\n\n\ndef tsi(candle"
}
]
// ... and 2001 more files (download for full content)
About this extraction
This page contains the full source code of the jesse-ai/jesse GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2201 files (39.9 MB), approximately 7.8M tokens, and a symbol index with 40827 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.