jesse 2.2.0__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1069) hide show
  1. {jesse-2.2.0/jesse.egg-info → jesse-2.2.2}/PKG-INFO +1 -1
  2. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/backtest_controller.py +1 -1
  3. {jesse-2.2.0 → jesse-2.2.2}/jesse/libs/dynamic_numpy_array/__init__.py +26 -17
  4. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/installer.py +7 -5
  5. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/order_service.py +13 -2
  6. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/position_service.py +3 -1
  7. jesse-2.2.2/jesse/strategies/TestBaseAndQuoteAssetProperties/__init__.py +17 -0
  8. jesse-2.2.2/jesse/strategies/TestOversizedReduceOnlyExitAccounting/__init__.py +43 -0
  9. jesse-2.2.2/jesse/version.py +1 -0
  10. {jesse-2.2.0 → jesse-2.2.2/jesse.egg-info}/PKG-INFO +1 -1
  11. {jesse-2.2.0 → jesse-2.2.2}/jesse.egg-info/SOURCES.txt +3 -0
  12. {jesse-2.2.0 → jesse-2.2.2}/setup.py +1 -1
  13. {jesse-2.2.0 → jesse-2.2.2}/tests/test_broker.py +60 -0
  14. jesse-2.2.2/tests/test_chart_data_serialization.py +84 -0
  15. jesse-2.2.2/tests/test_dynamic_numpy_array.py +254 -0
  16. {jesse-2.2.0 → jesse-2.2.2}/tests/test_parent_strategy.py +8 -0
  17. jesse-2.2.0/jesse/version.py +0 -1
  18. jesse-2.2.0/tests/test_dynamic_numpy_array.py +0 -130
  19. {jesse-2.2.0 → jesse-2.2.2}/LICENSE +0 -0
  20. {jesse-2.2.0 → jesse-2.2.2}/MANIFEST.in +0 -0
  21. {jesse-2.2.0 → jesse-2.2.2}/README.md +0 -0
  22. {jesse-2.2.0 → jesse-2.2.2}/jesse/__init__.py +0 -0
  23. {jesse-2.2.0 → jesse-2.2.2}/jesse/candle_pipelines/__init__.py +0 -0
  24. {jesse-2.2.0 → jesse-2.2.2}/jesse/candle_pipelines/base_candles.py +0 -0
  25. {jesse-2.2.0 → jesse-2.2.2}/jesse/candle_pipelines/gaussian_noise.py +0 -0
  26. {jesse-2.2.0 → jesse-2.2.2}/jesse/candle_pipelines/gaussian_resampler.py +0 -0
  27. {jesse-2.2.0 → jesse-2.2.2}/jesse/candle_pipelines/moving_block_bootstrap.py +0 -0
  28. {jesse-2.2.0 → jesse-2.2.2}/jesse/cli.py +0 -0
  29. {jesse-2.2.0 → jesse-2.2.2}/jesse/config.py +0 -0
  30. {jesse-2.2.0 → jesse-2.2.2}/jesse/constants.py +0 -0
  31. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/__init__.py +0 -0
  32. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/ai_model_controller.py +0 -0
  33. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/auth_controller.py +0 -0
  34. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/candles_controller.py +0 -0
  35. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/closed_trade_controller.py +0 -0
  36. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/config_controller.py +0 -0
  37. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/exchange_controller.py +0 -0
  38. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/file_controller.py +0 -0
  39. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/live_controller.py +0 -0
  40. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/lsp_controller.py +0 -0
  41. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/monte_carlo_controller.py +0 -0
  42. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/notification_controller.py +0 -0
  43. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/optimization_controller.py +0 -0
  44. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/order_controller.py +0 -0
  45. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/significance_test_controller.py +0 -0
  46. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/strategy_controller.py +0 -0
  47. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/system_controller.py +0 -0
  48. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/tabs_controller.py +0 -0
  49. {jesse-2.2.0 → jesse-2.2.2}/jesse/controllers/websocket_controller.py +0 -0
  50. {jesse-2.2.0 → jesse-2.2.2}/jesse/enums/__init__.py +0 -0
  51. {jesse-2.2.0 → jesse-2.2.2}/jesse/exceptions/__init__.py +0 -0
  52. {jesse-2.2.0 → jesse-2.2.2}/jesse/exchanges/__init__.py +0 -0
  53. {jesse-2.2.0 → jesse-2.2.2}/jesse/exchanges/exchange.py +0 -0
  54. {jesse-2.2.0 → jesse-2.2.2}/jesse/exchanges/sandbox/Sandbox.py +0 -0
  55. {jesse-2.2.0 → jesse-2.2.2}/jesse/exchanges/sandbox/__init__.py +0 -0
  56. {jesse-2.2.0 → jesse-2.2.2}/jesse/factories/__init__.py +0 -0
  57. {jesse-2.2.0 → jesse-2.2.2}/jesse/factories/candle_factory.py +0 -0
  58. {jesse-2.2.0 → jesse-2.2.2}/jesse/factories/order_factory.py +0 -0
  59. {jesse-2.2.0 → jesse-2.2.2}/jesse/helpers.py +0 -0
  60. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/__init__.py +0 -0
  61. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/acosc.py +0 -0
  62. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ad.py +0 -0
  63. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/adosc.py +0 -0
  64. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/adx.py +0 -0
  65. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/adxr.py +0 -0
  66. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/alligator.py +0 -0
  67. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/alma.py +0 -0
  68. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ao.py +0 -0
  69. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/apo.py +0 -0
  70. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/aroon.py +0 -0
  71. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/aroonosc.py +0 -0
  72. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/atr.py +0 -0
  73. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/avgprice.py +0 -0
  74. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/bandpass.py +0 -0
  75. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/beta.py +0 -0
  76. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/bollinger_bands.py +0 -0
  77. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/bollinger_bands_width.py +0 -0
  78. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/bop.py +0 -0
  79. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cc.py +0 -0
  80. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cci.py +0 -0
  81. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cfo.py +0 -0
  82. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cg.py +0 -0
  83. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/chande.py +0 -0
  84. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/chop.py +0 -0
  85. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cksp.py +0 -0
  86. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cmo.py +0 -0
  87. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/correl.py +0 -0
  88. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/correlation_cycle.py +0 -0
  89. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cvi.py +0 -0
  90. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/cwma.py +0 -0
  91. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/damiani_volatmeter.py +0 -0
  92. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/dec_osc.py +0 -0
  93. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/decycler.py +0 -0
  94. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/dema.py +0 -0
  95. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/devstop.py +0 -0
  96. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/di.py +0 -0
  97. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/dm.py +0 -0
  98. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/donchian.py +0 -0
  99. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/dpo.py +0 -0
  100. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/dti.py +0 -0
  101. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/dx.py +0 -0
  102. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/edcf.py +0 -0
  103. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/efi.py +0 -0
  104. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ema.py +0 -0
  105. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/emd.py +0 -0
  106. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/emv.py +0 -0
  107. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/epma.py +0 -0
  108. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/er.py +0 -0
  109. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/eri.py +0 -0
  110. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/fisher.py +0 -0
  111. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/fosc.py +0 -0
  112. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/frama.py +0 -0
  113. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/fwma.py +0 -0
  114. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/gatorosc.py +0 -0
  115. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/gauss.py +0 -0
  116. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/heikin_ashi_candles.py +0 -0
  117. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/high_pass.py +0 -0
  118. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/high_pass_2_pole.py +0 -0
  119. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/hma.py +0 -0
  120. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/hull_suit.py +0 -0
  121. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/hurst_exponent.py +0 -0
  122. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/hwma.py +0 -0
  123. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ichimoku_cloud.py +0 -0
  124. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ichimoku_cloud_seq.py +0 -0
  125. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ift_rsi.py +0 -0
  126. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/itrend.py +0 -0
  127. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/jma.py +0 -0
  128. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/jsa.py +0 -0
  129. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/kama.py +0 -0
  130. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/kaufmanstop.py +0 -0
  131. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/kdj.py +0 -0
  132. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/keltner.py +0 -0
  133. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/kst.py +0 -0
  134. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/kurtosis.py +0 -0
  135. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/kvo.py +0 -0
  136. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/linearreg.py +0 -0
  137. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/linearreg_angle.py +0 -0
  138. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/linearreg_intercept.py +0 -0
  139. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/linearreg_slope.py +0 -0
  140. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/lrsi.py +0 -0
  141. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ma.py +0 -0
  142. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/maaq.py +0 -0
  143. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mab.py +0 -0
  144. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/macd.py +0 -0
  145. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mama.py +0 -0
  146. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/marketfi.py +0 -0
  147. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mass.py +0 -0
  148. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mcginley_dynamic.py +0 -0
  149. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mean_ad.py +0 -0
  150. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/median_ad.py +0 -0
  151. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/medprice.py +0 -0
  152. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mfi.py +0 -0
  153. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/midpoint.py +0 -0
  154. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/midprice.py +0 -0
  155. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/minmax.py +0 -0
  156. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mom.py +0 -0
  157. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/mwdx.py +0 -0
  158. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/natr.py +0 -0
  159. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/nma.py +0 -0
  160. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/nvi.py +0 -0
  161. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/obv.py +0 -0
  162. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/pfe.py +0 -0
  163. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/pivot.py +0 -0
  164. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/pma.py +0 -0
  165. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ppo.py +0 -0
  166. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/pvi.py +0 -0
  167. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/pwma.py +0 -0
  168. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/qstick.py +0 -0
  169. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/reflex.py +0 -0
  170. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rma.py +0 -0
  171. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/roc.py +0 -0
  172. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rocp.py +0 -0
  173. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rocr.py +0 -0
  174. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rocr100.py +0 -0
  175. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/roofing.py +0 -0
  176. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rsi.py +0 -0
  177. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rsmk.py +0 -0
  178. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rsx.py +0 -0
  179. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/rvi.py +0 -0
  180. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/safezonestop.py +0 -0
  181. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/sar.py +0 -0
  182. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/sinwma.py +0 -0
  183. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/skew.py +0 -0
  184. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/sma.py +0 -0
  185. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/smma.py +0 -0
  186. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/squeeze_momentum.py +0 -0
  187. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/sqwma.py +0 -0
  188. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/srsi.py +0 -0
  189. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/srwma.py +0 -0
  190. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/stc.py +0 -0
  191. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/stddev.py +0 -0
  192. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/stiffness.py +0 -0
  193. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/stochastic.py +0 -0
  194. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/stochf.py +0 -0
  195. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/supersmoother.py +0 -0
  196. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/supersmoother_3_pole.py +0 -0
  197. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/supertrend.py +0 -0
  198. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/support_resistance_with_break.py +0 -0
  199. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/swma.py +0 -0
  200. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/t3.py +0 -0
  201. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/tema.py +0 -0
  202. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/trange.py +0 -0
  203. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/trendflex.py +0 -0
  204. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/trima.py +0 -0
  205. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/trix.py +0 -0
  206. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/tsf.py +0 -0
  207. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/tsi.py +0 -0
  208. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ttm_squeeze.py +0 -0
  209. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ttm_trend.py +0 -0
  210. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/typprice.py +0 -0
  211. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ui.py +0 -0
  212. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/ultosc.py +0 -0
  213. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/var.py +0 -0
  214. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vi.py +0 -0
  215. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vidya.py +0 -0
  216. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vlma.py +0 -0
  217. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/volume.py +0 -0
  218. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vosc.py +0 -0
  219. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/voss.py +0 -0
  220. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vpci.py +0 -0
  221. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vpt.py +0 -0
  222. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vpwma.py +0 -0
  223. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vwap.py +0 -0
  224. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vwma.py +0 -0
  225. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/vwmacd.py +0 -0
  226. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/wad.py +0 -0
  227. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/waddah_attr_explosion.py +0 -0
  228. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/wclprice.py +0 -0
  229. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/wilders.py +0 -0
  230. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/willr.py +0 -0
  231. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/wma.py +0 -0
  232. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/wt.py +0 -0
  233. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/zlema.py +0 -0
  234. {jesse-2.2.0 → jesse-2.2.2}/jesse/indicators/zscore.py +0 -0
  235. {jesse-2.2.0 → jesse-2.2.2}/jesse/info.py +0 -0
  236. {jesse-2.2.0 → jesse-2.2.2}/jesse/libs/__init__.py +0 -0
  237. {jesse-2.2.0 → jesse-2.2.2}/jesse/libs/custom_json/__init__.py +0 -0
  238. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/__init__.py +0 -0
  239. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/agent_rules.md +0 -0
  240. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/agent_rules.py +0 -0
  241. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/manager.py +0 -0
  242. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/mcp_config.py +0 -0
  243. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/__init__.py +0 -0
  244. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/backtest_management.md +0 -0
  245. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/backtest_metrics.md +0 -0
  246. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/candle.md +0 -0
  247. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/configuration.md +0 -0
  248. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/indicator.md +0 -0
  249. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/monte_carlo.md +0 -0
  250. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/position_risk.md +0 -0
  251. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/significance_test.md +0 -0
  252. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/strategy.md +0 -0
  253. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/resources/utilities.md +0 -0
  254. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/server.py +0 -0
  255. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/test.py +0 -0
  256. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/__init__.py +0 -0
  257. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/backtest.py +0 -0
  258. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/candles.py +0 -0
  259. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/config.py +0 -0
  260. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/general.py +0 -0
  261. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/indicator.py +0 -0
  262. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/monte_carlo.py +0 -0
  263. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/__init__.py +0 -0
  264. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/auth.py +0 -0
  265. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/backtest.py +0 -0
  266. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/candles.py +0 -0
  267. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/config.py +0 -0
  268. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/general.py +0 -0
  269. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/indicator.py +0 -0
  270. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/monte_carlo.py +0 -0
  271. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/significance_test.py +0 -0
  272. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/services/strategy.py +0 -0
  273. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/significance_test.py +0 -0
  274. {jesse-2.2.0 → jesse-2.2.2}/jesse/mcp/tools/strategy.py +0 -0
  275. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/AiModel.py +0 -0
  276. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/BacktestSession.py +0 -0
  277. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Candle.py +0 -0
  278. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/ClosedTrade.py +0 -0
  279. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Exchange.py +0 -0
  280. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/ExchangeApiKeys.py +0 -0
  281. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/FuturesExchange.py +0 -0
  282. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/LiveEquitySnapshot.py +0 -0
  283. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/LiveSession.py +0 -0
  284. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Log.py +0 -0
  285. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/MonteCarloSession.py +0 -0
  286. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/NotificationApiKeys.py +0 -0
  287. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/OpenTab.py +0 -0
  288. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/OptimizationSession.py +0 -0
  289. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Option.py +0 -0
  290. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Order.py +0 -0
  291. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Orderbook.py +0 -0
  292. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Position.py +0 -0
  293. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Route.py +0 -0
  294. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/SignificanceTestSession.py +0 -0
  295. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/SpotExchange.py +0 -0
  296. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Ticker.py +0 -0
  297. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/Trade.py +0 -0
  298. {jesse-2.2.0 → jesse-2.2.2}/jesse/models/__init__.py +0 -0
  299. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/__init__.py +0 -0
  300. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/backtest_mode.py +0 -0
  301. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/data_provider.py +0 -0
  302. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/exchange_api_keys.py +0 -0
  303. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/__init__.py +0 -0
  304. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetual.py +0 -0
  305. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetualTestnet.py +0 -0
  306. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/ApexProMain.py +0 -0
  307. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/ApexProPerpetual.py +0 -0
  308. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/ApexProPerpetualTestnet.py +0 -0
  309. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/__init__.py +0 -0
  310. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/apex_pro_utils.py +0 -0
  311. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/__init__.py +0 -0
  312. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk-arm.dylib +0 -0
  313. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk-x86.dylib +0 -0
  314. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk.dylib +0 -0
  315. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk.so +0 -0
  316. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-arm.py +0 -0
  317. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-pc.py +0 -0
  318. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-x86.py +0 -0
  319. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk.dll +0 -0
  320. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk.py +0 -0
  321. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/BinanceMain.py +0 -0
  322. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/BinancePerpetualFutures.py +0 -0
  323. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/BinancePerpetualFuturesTestnet.py +0 -0
  324. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/BinanceSpot.py +0 -0
  325. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/BinanceUSSpot.py +0 -0
  326. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/__init__.py +0 -0
  327. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Binance/binance_utils.py +0 -0
  328. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bitfinex/BitfinexSpot.py +0 -0
  329. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bitfinex/__init__.py +0 -0
  330. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bitfinex/bitfinex_utils.py +0 -0
  331. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitMain.py +0 -0
  332. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitSpot.py +0 -0
  333. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitSpotTestnet.py +0 -0
  334. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDCPerpetual.py +0 -0
  335. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDCPerpetualTestnet.py +0 -0
  336. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDTPerpetual.py +0 -0
  337. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDTPerpetualTestnet.py +0 -0
  338. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/__init__.py +0 -0
  339. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Bybit/bybit_utils.py +0 -0
  340. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Coinbase/CoinbaseSpot.py +0 -0
  341. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Coinbase/__init__.py +0 -0
  342. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Coinbase/coinbase_utils.py +0 -0
  343. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Gate/GateSpot.py +0 -0
  344. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Gate/GateSpotMain.py +0 -0
  345. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Gate/GateUSDTMain.py +0 -0
  346. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Gate/GateUSDTPerpetual.py +0 -0
  347. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Gate/__init__.py +0 -0
  348. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Gate/gate_utils.py +0 -0
  349. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetual.py +0 -0
  350. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetualMain.py +0 -0
  351. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetualTestnet.py +0 -0
  352. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Hyperliquid/__init__.py +0 -0
  353. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/Hyperliquid/hyperliquid_utils.py +0 -0
  354. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/__init__.py +0 -0
  355. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/import_candles_mode/drivers/interface.py +0 -0
  356. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/monte_carlo_mode/MonteCarloRunner.py +0 -0
  357. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/monte_carlo_mode/__init__.py +0 -0
  358. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/notification_api_keys.py +0 -0
  359. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/optimize_mode/Optimize.py +0 -0
  360. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/optimize_mode/__init__.py +0 -0
  361. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/optimize_mode/fitness.py +0 -0
  362. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/significance_test_mode/SignificanceTestRunner.py +0 -0
  363. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/significance_test_mode/__init__.py +0 -0
  364. {jesse-2.2.0 → jesse-2.2.2}/jesse/modes/utils.py +0 -0
  365. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/__init__.py +0 -0
  366. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/candle_repository.py +0 -0
  367. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/closed_trade_repository.py +0 -0
  368. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/live_equity_repository.py +0 -0
  369. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/live_session_repository.py +0 -0
  370. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/open_tab_repository.py +0 -0
  371. {jesse-2.2.0 → jesse-2.2.2}/jesse/repositories/order_repository.py +0 -0
  372. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/__init__.py +0 -0
  373. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/backtest.py +0 -0
  374. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/candles.py +0 -0
  375. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/import_candles.py +0 -0
  376. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/ml.py +0 -0
  377. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/monte_carlo/__init__.py +0 -0
  378. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/monte_carlo/common.py +0 -0
  379. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/monte_carlo/monte_carlo_candles.py +0 -0
  380. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/monte_carlo/monte_carlo_trades.py +0 -0
  381. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/optimize/__init__.py +0 -0
  382. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/rule_significance_testing/__init__.py +0 -0
  383. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/rule_significance_testing/bootstrap.py +0 -0
  384. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/rule_significance_testing/common.py +0 -0
  385. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/rule_significance_testing/plots.py +0 -0
  386. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/rule_significance_testing/rule_significance.py +0 -0
  387. {jesse-2.2.0 → jesse-2.2.2}/jesse/research/rule_significance_testing/simulator.py +0 -0
  388. {jesse-2.2.0 → jesse-2.2.2}/jesse/routes/__init__.py +0 -0
  389. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/__init__.py +0 -0
  390. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/api.py +0 -0
  391. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/auth.py +0 -0
  392. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/broker.py +0 -0
  393. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/cache.py +0 -0
  394. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/candle_service.py +0 -0
  395. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/charts.py +0 -0
  396. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/closed_trade_service.py +0 -0
  397. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/color.py +0 -0
  398. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/db.py +0 -0
  399. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/env.py +0 -0
  400. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/exchange_service.py +0 -0
  401. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/failure.py +0 -0
  402. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/file.py +0 -0
  403. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/general_info.py +0 -0
  404. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/jesse_trade.py +0 -0
  405. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/logger.py +0 -0
  406. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/lsp.py +0 -0
  407. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/metrics.py +0 -0
  408. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/migrator.py +0 -0
  409. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/multiprocessing.py +0 -0
  410. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/notifier.py +0 -0
  411. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/progressbar.py +0 -0
  412. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/redis.py +0 -0
  413. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/report.py +0 -0
  414. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/strategy_handler/ExampleStrategy/__init__.py +0 -0
  415. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/strategy_handler/__init__.py +0 -0
  416. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/strategy_service.py +0 -0
  417. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/table.py +0 -0
  418. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/tradingview.py +0 -0
  419. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/transformers.py +0 -0
  420. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/validators.py +0 -0
  421. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/web.py +0 -0
  422. {jesse-2.2.0 → jesse-2.2.2}/jesse/services/ws_manager.py +0 -0
  423. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/200.html +0 -0
  424. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/404.html +0 -0
  425. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/-30QC5Em.js +0 -0
  426. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/2oJWbEOo.js +0 -0
  427. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/3TATJI7h.js +0 -0
  428. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/3e1v2bzS.js +0 -0
  429. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/3kbuJQcV.js +0 -0
  430. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/3xVqZejG.js +0 -0
  431. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/5LuOXUq_.js +0 -0
  432. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/5y4Vyg26.js +0 -0
  433. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/727ZlQH0.js +0 -0
  434. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/7A4Fjokl.js +0 -0
  435. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/7O62HKoU.js +0 -0
  436. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/7ZYwO1wL.js +0 -0
  437. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/9AS84p_J.js +0 -0
  438. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/9C6ErRqt.js +0 -0
  439. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ALS-8XQs.js +0 -0
  440. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B-DoSBHF.js +0 -0
  441. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B-k3dvlD.js +0 -0
  442. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B-lZjTdr.js +0 -0
  443. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B08HEjoJ.js +0 -0
  444. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B0XVJmRM.js +0 -0
  445. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B0m2ddpp.js +0 -0
  446. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B0qRVHPH.js +0 -0
  447. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B14Poo8t.js +0 -0
  448. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B1SYOhNW.js +0 -0
  449. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B1bQXN8T.js +0 -0
  450. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B2Cf9XSq.js +0 -0
  451. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B2vK47Ag.js +0 -0
  452. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B3ZDOciz.js +0 -0
  453. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B430Bg39.js +0 -0
  454. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B48N-Iqd.js +0 -0
  455. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B4VqtPa2.js +0 -0
  456. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B5auBHZD.js +0 -0
  457. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B5lbUyaz.js +0 -0
  458. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B5uW3Zvf.js +0 -0
  459. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B6PwfRVo.js +0 -0
  460. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B6W0miNI.js +0 -0
  461. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B6cCR3B0.js +0 -0
  462. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B7alP455.js +0 -0
  463. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B7mTdjB0.js +0 -0
  464. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B8ssZoUh.js +0 -0
  465. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B9WNnh9E.js +0 -0
  466. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B9tAzFk8.js +0 -0
  467. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B9wLZaAG.js +0 -0
  468. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BAng5TT0.js +0 -0
  469. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BC5c_5Pe.js +0 -0
  470. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BE9QQhgF.js +0 -0
  471. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BEBZ7ncR.js +0 -0
  472. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BEhvmC7f.js +0 -0
  473. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BFLt1xDp.js +0 -0
  474. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BFOHcciG.js +0 -0
  475. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BFk9XlIc.js +0 -0
  476. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BGLI1Hdo.js +0 -0
  477. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BHOwM8T6.js +0 -0
  478. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BI9oDWm9.js +0 -0
  479. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BIEUsx6d.js +0 -0
  480. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BILxekzW.js +0 -0
  481. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BJ4Li9vH.js +0 -0
  482. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BJGe-b2p.js +0 -0
  483. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BK9xJ97g.js +0 -0
  484. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BLhTXw86.js +0 -0
  485. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BLuZWbUW.js +0 -0
  486. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BLxaRREJ.js +0 -0
  487. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BMR_PYu6.js +0 -0
  488. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BMYPR7BL.js +0 -0
  489. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BMj5Y0dO.js +0 -0
  490. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BNHBcdi1.js +0 -0
  491. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BNioltXt.js +0 -0
  492. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BPT9niGB.js +0 -0
  493. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BPhBrDlE.js +0 -0
  494. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BQHEbijl.js +0 -0
  495. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BQj7hEmF.js +0 -0
  496. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BQoSv7ci.js +0 -0
  497. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BQwtg7Y-.js +0 -0
  498. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BQyhglpn.js +0 -0
  499. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BRk-K-rg.js +0 -0
  500. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BSxZ-RaX.js +0 -0
  501. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BTpWsGps.js +0 -0
  502. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BUEGK8hf.js +0 -0
  503. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BVUVsWT6.js +0 -0
  504. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BVr_1_27.js +0 -0
  505. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BVz_zdnA.js +0 -0
  506. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BWBTHuhh.js +0 -0
  507. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BX77sIaO.js +0 -0
  508. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BXW1EomU.js +0 -0
  509. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BXYnMxBe.js +0 -0
  510. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BXkSAIEj.js +0 -0
  511. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BY-TUvya.js +0 -0
  512. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BY6pwuIY.js +0 -0
  513. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BYfEzaKc.js +0 -0
  514. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BYtUz8ZP.js +0 -0
  515. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BZ3mVgh7.js +0 -0
  516. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B_2NBH8x.js +0 -0
  517. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B_U3BDh3.js +0 -0
  518. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B_i9asfM.js +0 -0
  519. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/B_m7g4N7.js +0 -0
  520. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BacktestTabs.XpCeWK_e.css +0 -0
  521. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BbSNqyBO.js +0 -0
  522. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bc5xkKR1.js +0 -0
  523. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BcVrDPqo.js +0 -0
  524. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BdDjvGPZ.js +0 -0
  525. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BdxkyMLR.js +0 -0
  526. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Be6lgOlo.js +0 -0
  527. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BeQkCIfX.js +0 -0
  528. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BeX6IBQN.js +0 -0
  529. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BeosxbBR.js +0 -0
  530. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BfCpw3nA.js +0 -0
  531. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BfHTSMKl.js +0 -0
  532. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BfLuTCmN.js +0 -0
  533. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BfazEYIx.js +0 -0
  534. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BfivnA6A.js +0 -0
  535. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BfjtVDDH.js +0 -0
  536. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bg-kzb6g.js +0 -0
  537. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BgDCqdQA.js +0 -0
  538. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BgYniUM_.js +0 -0
  539. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BiA0Vjwq.js +0 -0
  540. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BiFfXF7O.js +0 -0
  541. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bid6LQhH.js +0 -0
  542. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BjABl1g7.js +0 -0
  543. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BjQB5zDj.js +0 -0
  544. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BknIz3MU.js +0 -0
  545. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bkuqu6BP.js +0 -0
  546. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bl1h29GH.js +0 -0
  547. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BlxRB_8X.js +0 -0
  548. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BoXegm-a.js +0 -0
  549. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bp6g37R7.js +0 -0
  550. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BpR4rFUe.js +0 -0
  551. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BpV-U7xH.js +0 -0
  552. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BpWG_bgh.js +0 -0
  553. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bri7RVrZ.js +0 -0
  554. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BsOYHjMa.js +0 -0
  555. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BsZeLSAC.js +0 -0
  556. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BthQWCQV.js +0 -0
  557. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bu5BbsvL.js +0 -0
  558. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bu73EIfS.js +0 -0
  559. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BuapDI9Y.js +0 -0
  560. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BupSXVCO.js +0 -0
  561. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bvotw-X0.js +0 -0
  562. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bw0wYZmb.js +0 -0
  563. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bw305WKR.js +0 -0
  564. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BwXTMy5W.js +0 -0
  565. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BxUR8wTn.js +0 -0
  566. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Byb2_aFw.js +0 -0
  567. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BygKL3ZF.js +0 -0
  568. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BypH-vXm.js +0 -0
  569. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/BzJJZx-M.js +0 -0
  570. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Bzb7OGdO.js +0 -0
  571. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C-_shW-Y.js +0 -0
  572. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C-nORZOA.js +0 -0
  573. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C-wny61x.js +0 -0
  574. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C0nbwVuJ.js +0 -0
  575. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C1XDQQGZ.js +0 -0
  576. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C1tVc3UG.js +0 -0
  577. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C1w2a3ep.js +0 -0
  578. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C30yJ1fx.js +0 -0
  579. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C39BiMTA.js +0 -0
  580. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C3FkfJm5.js +0 -0
  581. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C3khCPGq.js +0 -0
  582. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C3mMm8J8.js +0 -0
  583. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C3spBWn3.js +0 -0
  584. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C3t2pwGQ.js +0 -0
  585. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C5Y8tDhP.js +0 -0
  586. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C5wWYbrZ.js +0 -0
  587. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C6j12Q_x.js +0 -0
  588. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C75U4IDy.js +0 -0
  589. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C7L56vO4.js +0 -0
  590. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C7gG9l05.js +0 -0
  591. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C8M2exoo.js +0 -0
  592. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C8lEn-DE.js +0 -0
  593. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C9L3yaDO.js +0 -0
  594. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CAQ2eGtk.js +0 -0
  595. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CAqdCCoA.js +0 -0
  596. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CB0Krxn9.js +0 -0
  597. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CB2ApiWb.js +0 -0
  598. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CCBS_C5_.js +0 -0
  599. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CCaADRuf.js +0 -0
  600. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CD_QflpE.js +0 -0
  601. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CG6Dc4jp.js +0 -0
  602. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CGVVOGHx.js +0 -0
  603. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CHxWgl8u.js +0 -0
  604. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CJaU5se_.js +0 -0
  605. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CKg9tqCS.js +0 -0
  606. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CM8KxXT1.js +0 -0
  607. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CMgmWNdv.js +0 -0
  608. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CMt9yHYq.js +0 -0
  609. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/COJ4H7py.js +0 -0
  610. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/COK4E0Yg.js +0 -0
  611. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/COcR7UxN.js +0 -0
  612. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/COyJrUc7.js +0 -0
  613. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CPj6Oxyc.js +0 -0
  614. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CQ0soPOq.js +0 -0
  615. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CQjiPCtT.js +0 -0
  616. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CS3Unz2-.js +0 -0
  617. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CSHBycmS.js +0 -0
  618. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CSp6iqVD.js +0 -0
  619. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CTNlIIiR.js +0 -0
  620. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CTRr51gU.js +0 -0
  621. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CUnW07Te.js +0 -0
  622. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CV9EbfTh.js +0 -0
  623. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CVO1_9PV.js +0 -0
  624. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CVw76BM1.js +0 -0
  625. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CXKOl_mN.js +0 -0
  626. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CYFUjXW1.js +0 -0
  627. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CYgUR4L5.js +0 -0
  628. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CZe0XNBd.js +0 -0
  629. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/C_scCXcs.js +0 -0
  630. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CafNBF8u.js +0 -0
  631. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CbfX1IO0.js +0 -0
  632. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cc5clBb7.js +0 -0
  633. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CdO5JTpU.js +0 -0
  634. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cf8iN4DR.js +0 -0
  635. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CfA6H1iD.js +0 -0
  636. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CfQXZHmo.js +0 -0
  637. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CfnpWUYo.js +0 -0
  638. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CgoVc2CE.js +0 -0
  639. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ChA_izKI.js +0 -0
  640. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Ci6OQyBP.js +0 -0
  641. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CiLwMR9c.js +0 -0
  642. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CircleProgressbar.Bqs-YaMH.css +0 -0
  643. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CjDtw9vr.js +0 -0
  644. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CjZ9rSJP.js +0 -0
  645. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CjjU3m-a.js +0 -0
  646. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CkXjmgJE.js +0 -0
  647. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Ckkbw-AO.js +0 -0
  648. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cl4mw-2c.js +0 -0
  649. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ClGRhx96.js +0 -0
  650. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CmCqftbK.js +0 -0
  651. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CmUaXb8e.js +0 -0
  652. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CqwBQo24.js +0 -0
  653. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CrQ5KHDe.js +0 -0
  654. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CrrKwR0a.js +0 -0
  655. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CruqBWKG.js +0 -0
  656. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CsSk9TLD.js +0 -0
  657. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Csfq5Kiy.js +0 -0
  658. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CtHLcuxG.js +0 -0
  659. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CuFlys0T.js +0 -0
  660. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cuk6v7N8.js +0 -0
  661. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cv8gVKYl.js +0 -0
  662. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cv9koXgw.js +0 -0
  663. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CwjWoCRV.js +0 -0
  664. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CyIGOvEh.js +0 -0
  665. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CyVeKkvQ.js +0 -0
  666. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CyktbL80.js +0 -0
  667. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cz8P-rqG.js +0 -0
  668. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CzF1MCbP.js +0 -0
  669. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Cza_XSSt.js +0 -0
  670. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/CzouJOBO.js +0 -0
  671. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D-2ljcwZ.js +0 -0
  672. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D0UiDa5C.js +0 -0
  673. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D0r3Knsf.js +0 -0
  674. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D2PfwrvU.js +0 -0
  675. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D2Z7JJdl.js +0 -0
  676. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D4Tzg5kh.js +0 -0
  677. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D4d0bmRY.js +0 -0
  678. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D4h5O-jR.js +0 -0
  679. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D5KoaKCx.js +0 -0
  680. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D5ZsypWT.js +0 -0
  681. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D5pd2Owo.js +0 -0
  682. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D7lU1fdU.js +0 -0
  683. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D7oLnXFd.js +0 -0
  684. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D8SARrrT.js +0 -0
  685. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D8mZ0lfy.js +0 -0
  686. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D9-PGadD.js +0 -0
  687. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D9R-vmeu.js +0 -0
  688. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D9lg42C_.js +0 -0
  689. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D9yiNO04.js +0 -0
  690. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DAi9KRSo.js +0 -0
  691. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DB0RB20n.js +0 -0
  692. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DBIdNJb1.js +0 -0
  693. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DBQeEorK.js +0 -0
  694. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DB_GagMm.js +0 -0
  695. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DCE3LsBG.js +0 -0
  696. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DDA0whWr.js +0 -0
  697. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DDpSJMW6.js +0 -0
  698. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DDrv2Hr-.js +0 -0
  699. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DDtJtuOZ.js +0 -0
  700. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DEIpsLCJ.js +0 -0
  701. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DEsW6eUH.js +0 -0
  702. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DGfQJd6p.js +0 -0
  703. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DH5Ifo-i.js +0 -0
  704. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DHJKELXO.js +0 -0
  705. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DHo0CJ0O.js +0 -0
  706. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DIHTwG2N.js +0 -0
  707. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DIovg4uR.js +0 -0
  708. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DJ6C8EHK.js +0 -0
  709. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DJQgcT-d.js +0 -0
  710. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DJlmqQ1C.js +0 -0
  711. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DKOGybHv.js +0 -0
  712. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DKXYxT9g.js +0 -0
  713. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DKykz6zU.js +0 -0
  714. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DL8Ve5HW.js +0 -0
  715. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DLPipH_Q.js +0 -0
  716. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DLbgOhZU.js +0 -0
  717. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DLs3tTet.js +0 -0
  718. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DNPblYf5.js +0 -0
  719. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DNquZEk8.js +0 -0
  720. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DOAuugfS.js +0 -0
  721. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DOk3G3cc.js +0 -0
  722. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DPvbFsQx.js +0 -0
  723. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DQ1-QYvQ.js +0 -0
  724. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DQVVAn-B.js +0 -0
  725. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DRC6TkPh.js +0 -0
  726. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DRCs4cJW.js +0 -0
  727. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DREVFZK8.js +0 -0
  728. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DRNBmV_Q.js +0 -0
  729. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DRVtMX6w.js +0 -0
  730. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DRW-0cLl.js +0 -0
  731. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DRhBOlRY.js +0 -0
  732. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DUszq2jm.js +0 -0
  733. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DUuF8ec2.js +0 -0
  734. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DVG02705.js +0 -0
  735. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DVYH6Lj_.js +0 -0
  736. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DWGz5Zuj.js +0 -0
  737. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DWJ3fJO_.js +0 -0
  738. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DWedfzmr.js +0 -0
  739. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DXbdFlpD.js +0 -0
  740. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DYoNaHQp.js +0 -0
  741. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DYvnoCeB.js +0 -0
  742. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D_OY6ada.js +0 -0
  743. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D_y4Iqca.js +0 -0
  744. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/D_z4Izcz.js +0 -0
  745. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dayu4EKP.js +0 -0
  746. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DbXoA79R.js +0 -0
  747. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dbxjm_CC.js +0 -0
  748. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Ddv68eIx.js +0 -0
  749. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DeYg-96x.js +0 -0
  750. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Deuh7S70.js +0 -0
  751. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DfxzS6Rs.js +0 -0
  752. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dgyr3wWZ.js +0 -0
  753. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DhMKtDLN.js +0 -0
  754. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DhUJRlN_.js +0 -0
  755. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dhn9LcZ4.js +0 -0
  756. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DiytYwWf.js +0 -0
  757. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dj6nwHGl.js +0 -0
  758. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DjHMNizO.js +0 -0
  759. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DkBy-JyN.js +0 -0
  760. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DkLiglaE.js +0 -0
  761. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DmdQbaLT.js +0 -0
  762. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dmy2k9nq.js +0 -0
  763. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dn00JSTd.js +0 -0
  764. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DnULxvSX.js +0 -0
  765. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DoFvH58O.js +0 -0
  766. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DpC8jOIg.js +0 -0
  767. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DpwXO0Z8.js +0 -0
  768. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DqHb_Lsi.js +0 -0
  769. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DqwNpetd.js +0 -0
  770. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DrMooDfm.js +0 -0
  771. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DrRCxMg5.js +0 -0
  772. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Drsz93k2.js +0 -0
  773. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Ds-gbosJ.js +0 -0
  774. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DsBKuouk.js +0 -0
  775. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DsWjAdsX.js +0 -0
  776. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dsg_Bt_b.js +0 -0
  777. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DtFQj3wx.js +0 -0
  778. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DtpSKk35.js +0 -0
  779. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Du268qiB.js +0 -0
  780. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Du5NY7AG.js +0 -0
  781. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DvSxYeG4.js +0 -0
  782. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DxSadP1t.js +0 -0
  783. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Dy-ATyBD.js +0 -0
  784. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/DyKutqhl.js +0 -0
  785. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/E3gJ1_iC.js +0 -0
  786. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/FNqbgIOG.js +0 -0
  787. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/GBQ2dnAY.js +0 -0
  788. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/GnDLJWeX.js +0 -0
  789. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/HNqc6WRo.js +0 -0
  790. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/HnGAYVZD.js +0 -0
  791. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/HzYwdGDm.js +0 -0
  792. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/IconCSS.RN4HczVp.css +0 -0
  793. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Inter-VariableFont_slnt_wght.Cl4AQHp9.ttf +0 -0
  794. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/IuBKFhSY.js +0 -0
  795. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/JqZropPD.js +0 -0
  796. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/KXmA5gEz.js +0 -0
  797. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/L9t79GZl.js +0 -0
  798. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/LGGdnPYs.js +0 -0
  799. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/LKU2TuZ1.js +0 -0
  800. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/LiveTabs.15UVtLVQ.css +0 -0
  801. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/P4WzXJd0.js +0 -0
  802. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Pj9gCBS1.js +0 -0
  803. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/PoHY5YXO.js +0 -0
  804. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Progress.CWZn3LuJ.css +0 -0
  805. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/QhoSD0DR.js +0 -0
  806. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/R900dpIa.js +0 -0
  807. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/SKMF96pI.js +0 -0
  808. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/SPD3sf1n.js +0 -0
  809. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/StrategiesSidebar.-h7ix9-v.css +0 -0
  810. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/T-Tgc4AT.js +0 -0
  811. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/TU54ms6u.js +0 -0
  812. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Tz6hzZYG.js +0 -0
  813. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/UIAJJxZW.js +0 -0
  814. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/UL5zprDm.js +0 -0
  815. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/UMmp-gVE.js +0 -0
  816. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Ua_dVQ2E.js +0 -0
  817. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/VuadG5SK.js +0 -0
  818. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/XBlWyCtg.js +0 -0
  819. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/XVrfe6Qe.js +0 -0
  820. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/Y6DubyxG.js +0 -0
  821. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/YJb9dmdj.js +0 -0
  822. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ZlaFEk-P.js +0 -0
  823. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/_WwNv8Gt.js +0 -0
  824. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/_id_.BY-NJHml.css +0 -0
  825. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/_id_.DM7QJcru.css +0 -0
  826. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/_id_.J2oYSFWN.css +0 -0
  827. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ahYVQIuB.js +0 -0
  828. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ajMbGru0.js +0 -0
  829. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/atvbtKCR.js +0 -0
  830. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/bCA53EVm.js +0 -0
  831. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/bN70gL4F.js +0 -0
  832. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/cPjAOO0u.js +0 -0
  833. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/codicon.DCmgc-ay.ttf +0 -0
  834. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/din0uRiO.js +0 -0
  835. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/e4jU7D2d.js +0 -0
  836. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/eg146-Ew.js +0 -0
  837. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/entry.DZ1VJD8l.css +0 -0
  838. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/error-404.DZraUJun.css +0 -0
  839. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/error-500.XmAVHPl_.css +0 -0
  840. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/fje9CFhw.js +0 -0
  841. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/gRuQeaLk.js +0 -0
  842. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ifBTmRxC.js +0 -0
  843. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/index.BCxjJPBI.css +0 -0
  844. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/index.BujPmbc0.css +0 -0
  845. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/index.DGzxCzt4.css +0 -0
  846. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/index.K8JdO5jA.css +0 -0
  847. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/index.lQPmb1y9.css +0 -0
  848. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/jN37G9_2.js +0 -0
  849. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/logo-dark.tKoQPl1k.svg +0 -0
  850. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/logo-light.CS4l4ePq.png +0 -0
  851. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/m09vb5r-.js +0 -0
  852. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/m2LEI-9-.js +0 -0
  853. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/m4gc_qpA.js +0 -0
  854. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/m4uW47V2.js +0 -0
  855. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/mebxcVVE.js +0 -0
  856. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/nyqBNV6O.js +0 -0
  857. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/qmhIZ77x.js +0 -0
  858. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/qpfuy3xp.js +0 -0
  859. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/r--hdCBL.js +0 -0
  860. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/r4BD7fzp.js +0 -0
  861. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/sacFqUAJ.js +0 -0
  862. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/sdHcTMYB.js +0 -0
  863. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/shcSOmrb.js +0 -0
  864. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ul-Lp4lw.js +0 -0
  865. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/w-ucz2PV.js +0 -0
  866. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/w8dY5SsB.js +0 -0
  867. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/wI6OXr6j.js +0 -0
  868. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/xI-RfyKK.js +0 -0
  869. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/xW4inM5L.js +0 -0
  870. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/xgbdnDAz.js +0 -0
  871. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/ySlJ1b_l.js +0 -0
  872. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/yf5bffbF.js +0 -0
  873. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/_nuxt/zocC4JxJ.js +0 -0
  874. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/favicon.ico +0 -0
  875. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/favicons/android-chrome-192x192.png +0 -0
  876. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/favicons/android-chrome-512x512.png +0 -0
  877. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/favicons/apple-touch-icon.png +0 -0
  878. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/favicons/favicon-16x16.png +0 -0
  879. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/favicons/favicon-32x32.png +0 -0
  880. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/index.html +0 -0
  881. {jesse-2.2.0 → jesse-2.2.2}/jesse/static/robots.txt +0 -0
  882. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/__init__.py +0 -0
  883. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_app.py +0 -0
  884. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_candles.py +0 -0
  885. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_closed_trades.py +0 -0
  886. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_exchanges.py +0 -0
  887. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_logs.py +0 -0
  888. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_orderbook.py +0 -0
  889. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_orders.py +0 -0
  890. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_positions.py +0 -0
  891. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_tickers.py +0 -0
  892. {jesse-2.2.0 → jesse-2.2.2}/jesse/store/state_trades.py +0 -0
  893. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/CanAddClosedTradeToStore/__init__.py +0 -0
  894. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Strategy.py +0 -0
  895. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test01/__init__.py +0 -0
  896. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test02/__init__.py +0 -0
  897. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test04/__init__.py +0 -0
  898. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test05/__init__.py +0 -0
  899. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test06/__init__.py +0 -0
  900. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test07/__init__.py +0 -0
  901. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test08/__init__.py +0 -0
  902. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test09/__init__.py +0 -0
  903. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test10/__init__.py +0 -0
  904. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test11/__init__.py +0 -0
  905. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test12/__init__.py +0 -0
  906. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test13/__init__.py +0 -0
  907. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test14/__init__.py +0 -0
  908. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test15/__init__.py +0 -0
  909. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test16/__init__.py +0 -0
  910. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test17/__init__.py +0 -0
  911. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test18/__init__.py +0 -0
  912. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test19/__init__.py +0 -0
  913. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test20/__init__.py +0 -0
  914. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test21/__init__.py +0 -0
  915. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test22/__init__.py +0 -0
  916. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test23/__init__.py +0 -0
  917. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test24/__init__.py +0 -0
  918. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test25/__init__.py +0 -0
  919. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test26/__init__.py +0 -0
  920. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test27/__init__.py +0 -0
  921. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test28/__init__.py +0 -0
  922. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test29/__init__.py +0 -0
  923. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test30/__init__.py +0 -0
  924. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test31/__init__.py +0 -0
  925. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test32/__init__.py +0 -0
  926. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test33/__init__.py +0 -0
  927. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test34/__init__.py +0 -0
  928. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test35/__init__.py +0 -0
  929. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test36/__init__.py +0 -0
  930. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test37/__init__.py +0 -0
  931. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test38/__init__.py +0 -0
  932. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test39/__init__.py +0 -0
  933. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test40/__init__.py +0 -0
  934. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test41/__init__.py +0 -0
  935. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test44/__init__.py +0 -0
  936. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test45/__init__.py +0 -0
  937. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test46/__init__.py +0 -0
  938. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test47/__init__.py +0 -0
  939. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/Test48/__init__.py +0 -0
  940. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestAddHorizontalLineToCandleChart/__init__.py +0 -0
  941. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestAddHorizontalLineToExtraChart/__init__.py +0 -0
  942. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestAddLineToCandleChart/__init__.py +0 -0
  943. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestAddLineToExtraChart/__init__.py +0 -0
  944. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestAfterMethod/__init__.py +0 -0
  945. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestAverageEntryPriceProperty/__init__.py +0 -0
  946. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestBalanceAndFeeReductionWorksCorrectlyInSpotModeInBothBuyAndSellOrders/__init__.py +0 -0
  947. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestBalancesAreHandledCorrectlyForCancellingOrdersInSpot/__init__.py +0 -0
  948. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestBeforeMethod/__init__.py +0 -0
  949. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestBeforeTerminate/__init__.py +0 -0
  950. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong1/__init__.py +0 -0
  951. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong2/__init__.py +0 -0
  952. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionShort1/__init__.py +0 -0
  953. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionShort2/__init__.py +0 -0
  954. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanOpenANewPositionImmediatelyAfterClosingViaUpdatePosition/__init__.py +0 -0
  955. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanRunWithoutShorting/__init__.py +0 -0
  956. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanSubmitStopLossOrderWithSizeEqualToCurrentPositionQty/__init__.py +0 -0
  957. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanSubmitStopLossOrderWithSizeLessThanCurrentPositionQty/__init__.py +0 -0
  958. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanSubmitTakeProfitAndStopLossAtSameTimeInSpot/__init__.py +0 -0
  959. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanSubmitTakeProfitOrderWithSizeEqualToCurrentPositionQty/__init__.py +0 -0
  960. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCanSubmitTakeProfitOrderWithSizeLessThanCurrentPositionQty/__init__.py +0 -0
  961. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCannotSetStopLossOrderInGoLong/__init__.py +0 -0
  962. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCannotSetTakeProfitOrderInGoLong/__init__.py +0 -0
  963. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCannotSpendMoreThanAvailableBalance/__init__.py +0 -0
  964. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCannotSubmitStopLossOrderWithSizeMoreThanCurrentPositionQty/__init__.py +0 -0
  965. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCannotSubmitTakeProfitOrderWithSizeMoreThanCurrentPositionQty/__init__.py +0 -0
  966. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCapitalPropertyRaisesNotImplementedError/__init__.py +0 -0
  967. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestClosedTradeAfterExitingTrade/__init__.py +0 -0
  968. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCurrentRouteIndex1/__init__.py +0 -0
  969. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestCurrentRouteIndex2/__init__.py +0 -0
  970. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestDailyBalanceStoresPortfolioValue/__init__.py +0 -0
  971. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestDailyBalancesProperty/__init__.py +0 -0
  972. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestDataRoutes1/__init__.py +0 -0
  973. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestDataRoutes2/__init__.py +0 -0
  974. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestDefaultHyperparameters/__init__.py +0 -0
  975. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestDnaMethod/__init__.py +0 -0
  976. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestEmptyStrategy/__init__.py +0 -0
  977. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestEntryOrdersAndExitOrdersProperties/__init__.py +0 -0
  978. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestExchangeTypeProperty1/__init__.py +0 -0
  979. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestExchangeTypeProperty2/__init__.py +0 -0
  980. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestFuturesExchangeAvailableMargin/__init__.py +0 -0
  981. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestHasLongAndShortEntryOrdersPropertiesInFilters/__init__.py +0 -0
  982. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestHasLongEntryOrdersProperty/__init__.py +0 -0
  983. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestHasShortEntryOrdersProperty/__init__.py +0 -0
  984. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestIncreasedAndReducedCount/__init__.py +0 -0
  985. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestIncreasingShortPosition/__init__.py +0 -0
  986. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestInsufficientMargin1/__init__.py +0 -0
  987. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestInsufficientMargin2/__init__.py +0 -0
  988. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestInsufficientMargin3/__init__.py +0 -0
  989. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestLeverageProperty1/__init__.py +0 -0
  990. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestLeverageProperty2/__init__.py +0 -0
  991. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestLiquidationInCrossModeForShortTrade/__init__.py +0 -0
  992. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestLiquidationInIsolatedModeForLongTrade/__init__.py +0 -0
  993. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestLiquidationInIsolatedModeForShortTrade/__init__.py +0 -0
  994. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestLogMethodInStrategyClass/__init__.py +0 -0
  995. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestMarkPrice/__init__.py +0 -0
  996. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestMarketOrderForLowPriceDifference/__init__.py +0 -0
  997. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestMetrics1/__init__.py +0 -0
  998. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestMultipleEntryOrdersUpdateEntryLongPositions/__init__.py +0 -0
  999. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestMultipleEntryOrdersUpdateEntryShortPositions/__init__.py +0 -0
  1000. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOnCancelMethod/__init__.py +0 -0
  1001. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOnClosePosition/__init__.py +0 -0
  1002. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOnRouteOpenPosition/__init__.py +0 -0
  1003. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOnRouteOpenPosition2/__init__.py +0 -0
  1004. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOrderIsStopLossProperty/__init__.py +0 -0
  1005. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py +0 -0
  1006. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOrderPriceCannotBeGreaterThanZero/__init__.py +0 -0
  1007. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOrderValueProperty/__init__.py +0 -0
  1008. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestOrdersAreSortedBeforeExecution/__init__.py +0 -0
  1009. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPortfolioValue/__init__.py +0 -0
  1010. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPortfolioValueIncludesPositionValueAndOpenOrdersValue/__init__.py +0 -0
  1011. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositionExchangeTypeProperty1/__init__.py +0 -0
  1012. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositionExchangeTypeProperty2/__init__.py +0 -0
  1013. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositionOpenIncreaseReduceCloseEventsInSpot/__init__.py +0 -0
  1014. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositionTotalCostProperty/__init__.py +0 -0
  1015. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositionWithLeverage1/__init__.py +0 -0
  1016. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositionWithLeverage2/__init__.py +0 -0
  1017. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestPositions/__init__.py +0 -0
  1018. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestProperBalanceHanldingInSpotAfterOrderCancellation/__init__.py +0 -0
  1019. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestReduceOnlyMarketOrders/__init__.py +0 -0
  1020. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestShortInSpot/__init__.py +0 -0
  1021. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceLongPosition/__init__.py +0 -0
  1022. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceShortPosition/__init__.py +0 -0
  1023. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestStopOrderShouldConsiderExecutedTakeProfitOrdersInSpot/__init__.py +0 -0
  1024. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestStrategyVariablesAreResetBeforeOpeningNewPosition/__init__.py +0 -0
  1025. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientLongPosition/__init__.py +0 -0
  1026. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientShortPosition/__init__.py +0 -0
  1027. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestTerminate/__init__.py +0 -0
  1028. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestUsageOfShouldCancelRaisesNotImplementedError/__init__.py +0 -0
  1029. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestVanillaStrategy/__init__.py +0 -0
  1030. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestWalletBalance/__init__.py +0 -0
  1031. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/TestWithoutCancelMethod/__init__.py +0 -0
  1032. {jesse-2.2.0 → jesse-2.2.2}/jesse/strategies/__init__.py +0 -0
  1033. {jesse-2.2.0 → jesse-2.2.2}/jesse/testing_utils.py +0 -0
  1034. {jesse-2.2.0 → jesse-2.2.2}/jesse/utils.py +0 -0
  1035. {jesse-2.2.0 → jesse-2.2.2}/jesse.egg-info/dependency_links.txt +0 -0
  1036. {jesse-2.2.0 → jesse-2.2.2}/jesse.egg-info/entry_points.txt +0 -0
  1037. {jesse-2.2.0 → jesse-2.2.2}/jesse.egg-info/requires.txt +0 -0
  1038. {jesse-2.2.0 → jesse-2.2.2}/jesse.egg-info/top_level.txt +0 -0
  1039. {jesse-2.2.0 → jesse-2.2.2}/requirements.txt +0 -0
  1040. {jesse-2.2.0 → jesse-2.2.2}/setup.cfg +0 -0
  1041. {jesse-2.2.0 → jesse-2.2.2}/tests/__init__.py +0 -0
  1042. {jesse-2.2.0 → jesse-2.2.2}/tests/data/__init__.py +0 -0
  1043. {jesse-2.2.0 → jesse-2.2.2}/tests/data/test_candles_0.py +0 -0
  1044. {jesse-2.2.0 → jesse-2.2.2}/tests/data/test_candles_1.py +0 -0
  1045. {jesse-2.2.0 → jesse-2.2.2}/tests/data/test_candles_indicators.py +0 -0
  1046. {jesse-2.2.0 → jesse-2.2.2}/tests/test_backtest.py +0 -0
  1047. {jesse-2.2.0 → jesse-2.2.2}/tests/test_candle_service.py +0 -0
  1048. {jesse-2.2.0 → jesse-2.2.2}/tests/test_completed_trade.py +0 -0
  1049. {jesse-2.2.0 → jesse-2.2.2}/tests/test_conflicting_orders.py +0 -0
  1050. {jesse-2.2.0 → jesse-2.2.2}/tests/test_exchange.py +0 -0
  1051. {jesse-2.2.0 → jesse-2.2.2}/tests/test_helpers.py +0 -0
  1052. {jesse-2.2.0 → jesse-2.2.2}/tests/test_import_candles.py +0 -0
  1053. {jesse-2.2.0 → jesse-2.2.2}/tests/test_indicators.py +0 -0
  1054. {jesse-2.2.0 → jesse-2.2.2}/tests/test_isolated_backtest.py +0 -0
  1055. {jesse-2.2.0 → jesse-2.2.2}/tests/test_lsp.py +0 -0
  1056. {jesse-2.2.0 → jesse-2.2.2}/tests/test_metrics.py +0 -0
  1057. {jesse-2.2.0 → jesse-2.2.2}/tests/test_order.py +0 -0
  1058. {jesse-2.2.0 → jesse-2.2.2}/tests/test_position.py +0 -0
  1059. {jesse-2.2.0 → jesse-2.2.2}/tests/test_research.py +0 -0
  1060. {jesse-2.2.0 → jesse-2.2.2}/tests/test_router.py +0 -0
  1061. {jesse-2.2.0 → jesse-2.2.2}/tests/test_spot_mode.py +0 -0
  1062. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_candle.py +0 -0
  1063. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_exchanges.py +0 -0
  1064. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_logs.py +0 -0
  1065. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_orderbook.py +0 -0
  1066. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_orders.py +0 -0
  1067. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_ticker.py +0 -0
  1068. {jesse-2.2.0 → jesse-2.2.2}/tests/test_state_trades.py +0 -0
  1069. {jesse-2.2.0 → jesse-2.2.2}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jesse
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: A trading framework for cryptocurrencies
5
5
  Home-page: https://jesse.trade
6
6
  Author: Saleh Mir
@@ -286,7 +286,7 @@ def get_backtest_session_chart_data(session_id: str, authorization: Optional[str
286
286
  'error': f'Session with ID {session_id} not found'
287
287
  }, status_code=404)
288
288
 
289
- chart_data = jh.clean_infinite_values(json.loads(session.chart_data)) if session.chart_data else None
289
+ chart_data = jh.clean_nan_values(jh.clean_infinite_values(json.loads(session.chart_data))) if session.chart_data else None
290
290
 
291
291
  return JSONResponse({
292
292
  'chart_data': chart_data
@@ -69,10 +69,16 @@ class DynamicNumpyArray:
69
69
  def append(self, item: np.ndarray) -> None:
70
70
  self.index += 1
71
71
 
72
- # expand if the arr is almost full
73
- if self.index != 0 and (self.index + 1) % self.bucket_size == 0:
74
- new_bucket = np.zeros(self.shape)
75
- self.array = np.concatenate((self.array, new_bucket), axis=0)
72
+ # Grow the buffer when full, doubling capacity (geometric growth) so
73
+ # that total bytes copied across all appends is O(N) rather than the
74
+ # O(N^2 / bucket_size) of linear-bucket growth via np.concatenate.
75
+ if self.index >= len(self.array):
76
+ new_size = max(len(self.array) * 2, max(self.bucket_size, 1))
77
+ new_shape = (new_size,) + tuple(self.array.shape[1:])
78
+ new_array = np.zeros(new_shape, dtype=self.array.dtype)
79
+ if self.index > 0:
80
+ new_array[:self.index] = self.array[:self.index]
81
+ self.array = new_array
76
82
 
77
83
  # drop N% of the beginning values to free memory
78
84
  if (
@@ -109,18 +115,21 @@ class DynamicNumpyArray:
109
115
  self.bucket_size = self.shape[0]
110
116
 
111
117
  def append_multiple(self, items: np.ndarray) -> None:
112
- self.index += len(items)
113
-
114
- # expand if the arr will be greater than the maximum
115
- if self.index != 0 and (self.index + 1) >= len(self.array):
116
- # in case the shape is smaller than len(items)
117
- if isinstance(self.shape, int):
118
- shape = max(self.shape, len(items))
119
- else:
120
- shape = list(self.shape)
121
- shape[0] = max(len(items), shape[0])
122
- new_bucket = np.zeros(shape)
123
- self.array = np.concatenate((self.array, new_bucket), axis=0)
118
+ n_new = len(items)
119
+ old_index = self.index
120
+ self.index += n_new
121
+
122
+ # Grow the buffer geometrically (double) when needed. Must accommodate
123
+ # `self.index + 1` total elements; ensure we double-or-better to avoid
124
+ # degrading to linear growth when many small batches are appended.
125
+ if self.index + 1 > len(self.array):
126
+ min_required = self.index + 1
127
+ new_size = max(min_required, len(self.array) * 2, max(self.bucket_size, 1))
128
+ new_shape = (new_size,) + tuple(self.array.shape[1:])
129
+ new_array = np.zeros(new_shape, dtype=self.array.dtype)
130
+ if old_index >= 0:
131
+ new_array[:old_index + 1] = self.array[:old_index + 1]
132
+ self.array = new_array
124
133
 
125
134
  # drop N% of the beginning values to free memory
126
135
  if (
@@ -132,7 +141,7 @@ class DynamicNumpyArray:
132
141
  self.index -= shift_num
133
142
  self.array = np_shift(self.array, -shift_num)
134
143
 
135
- self.array[self.index - len(items) + 1 : self.index + 1] = items
144
+ self.array[self.index - n_new + 1 : self.index + 1] = items
136
145
 
137
146
  def delete(self, index: int, axis=None) -> None:
138
147
  self.array = np.delete(self.array, index, axis=axis)
@@ -49,17 +49,19 @@ def install(is_live_plugin_already_installed: bool, strict: bool):
49
49
  if not is_64_bit:
50
50
  raise NotImplementedError(f'Only 64-bit machines are supported')
51
51
 
52
- is_arm = platform.machine().startswith('arm')
52
+ # platform.machine() returns 'arm64' on macOS but 'aarch64' on Linux (e.g. an
53
+ # arm64 Docker container on Apple Silicon), so both must be matched.
54
+ is_arm = platform.machine().lower() in ('arm64', 'aarch64')
53
55
  print('is_arm', is_arm)
54
- # arm versions of linux and windows are not supported
55
- if is_arm and (os_name in ['linux', 'windows']):
56
- raise NotImplementedError(f'ARM versions of {os_name} are not supported. If you need them, send a request to contact@jesse.trade')
56
+ # ARM is supported on macOS and Linux; Windows on ARM is not.
57
+ if is_arm and os_name == 'windows':
58
+ raise NotImplementedError('ARM versions of Windows are not supported. If you need them, send a request to contact@jesse.trade')
57
59
 
58
60
  # format os_name to something acceptable for the API
59
61
  if os_name == 'mac':
60
62
  formatted_os_name = 'macOS - M1' if is_arm else 'macOS - Intel'
61
63
  elif os_name == 'linux':
62
- formatted_os_name = 'Linux - x86_64'
64
+ formatted_os_name = 'Linux - aarch64' if is_arm else 'Linux - x86_64'
63
65
  # windows
64
66
  else:
65
67
  formatted_os_name = 'Windows 10 - 64 bit'
@@ -55,9 +55,20 @@ def execute_order(order: Order, silent: bool = False) -> None:
55
55
  order.status = order_statuses.EXECUTED
56
56
  order.fee = order.fee or None
57
57
 
58
- # if it's not live trading, we set the filled qty to the qty.
58
+ # if it's not live trading, we set the filled qty to the qty.
59
59
  if not jh.is_livetrading():
60
- order.filled_qty = order.qty
60
+ # a reduce_only order can only fill up to the size of the open position. If its
61
+ # stated qty exceeds the remaining position (e.g. a stop-loss left oversized after
62
+ # partial take-profits), the actual fill is capped to what closes the position.
63
+ if order.reduce_only:
64
+ p = store.positions.get_position(order.exchange, order.symbol)
65
+ position_qty = p.qty if p else 0.0
66
+ if position_qty != 0 and abs(order.qty) > abs(position_qty):
67
+ order.filled_qty = -position_qty
68
+ else:
69
+ order.filled_qty = order.qty
70
+ else:
71
+ order.filled_qty = order.qty
61
72
 
62
73
  # set order fee for non-live modes if not already set. In live trading, the fee is fetched by the exchange.
63
74
  if not jh.is_livetrading() and order.fee is None:
@@ -177,7 +177,9 @@ def on_executed_order(position: Position, order: Order) -> None:
177
177
  price = order.price
178
178
 
179
179
  if position.exchange and position.exchange.type == 'futures':
180
- position.exchange.charge_fee(qty * price)
180
+ # fee is charged on what actually filled, not the stated qty (a reduce_only
181
+ # order may fill less than its stated qty when it exceeds the open position).
182
+ position.exchange.charge_fee(order.filled_qty * price)
181
183
 
182
184
  # order opens position
183
185
  if position.qty == 0:
@@ -0,0 +1,17 @@
1
+ from jesse.strategies import Strategy
2
+
3
+
4
+ class TestBaseAndQuoteAssetProperties(Strategy):
5
+ def before(self) -> None:
6
+ if self.index == 0:
7
+ assert self.base_asset == 'BTC'
8
+ assert self.quote_asset == 'USDT'
9
+
10
+ def should_long(self) -> bool:
11
+ return False
12
+
13
+ def go_long(self):
14
+ pass
15
+
16
+ def should_cancel_entry(self) -> bool:
17
+ return False
@@ -0,0 +1,43 @@
1
+ from jesse.strategies import Strategy
2
+ from jesse.store import store
3
+
4
+
5
+ class TestOversizedReduceOnlyExitAccounting(Strategy):
6
+ """
7
+ Reproduces the oversized reduce_only exit bug: when a reduce_only order's stated qty
8
+ exceeds the remaining position, the engine caps the actual fill but must account for
9
+ the *capped* qty (not the stated qty) in both the exit_price VWAP and the fee.
10
+
11
+ Down-trend prices walk 100 -> 11. We open long at 100 with TWO stop-loss tiers that
12
+ intentionally over-sum the position (1 + 2 = 3 > entry qty 2). tier1 (@90) reduces the
13
+ position to 1; when tier2 (@80, stated qty 2) later fires, reduce_only caps the actual
14
+ fill to the remaining 1.
15
+ """
16
+
17
+ def should_long(self):
18
+ return self.price == 100
19
+
20
+ def go_long(self):
21
+ if self.price == 100:
22
+ self.buy = 2, self.price
23
+
24
+ def on_open_position(self, order):
25
+ # stated qtys sum to 3 while the position is only 2 -> the @80 tier is oversized
26
+ # once the @90 tier has reduced the position.
27
+ self.stop_loss = [(1, 90), (2, 80)]
28
+
29
+ def on_close_position(self, order, closed_trade) -> None:
30
+ assert closed_trade.type == 'long'
31
+ assert closed_trade.entry_price == 100
32
+ assert closed_trade.qty == 2
33
+
34
+ # exit VWAP must weight the second leg by the ACTUAL filled 1, not the stated 2:
35
+ # correct: (1*90 + 1*80) / (1 + 1) = 85
36
+ # buggy: (1*90 + 2*80) / (1 + 2) = 83.333...
37
+ assert round(closed_trade.exit_price, 8) == 85
38
+
39
+ # headline invariant: per-trade pnl must equal the real wallet balance change.
40
+ # this fails if either the exit_price VWAP or the fee is computed on the stated qty.
41
+ e = store.exchanges.get_exchange(self.exchange)
42
+ wallet_delta = e.wallet_balance - 10_000
43
+ assert round(closed_trade.pnl, 8) == round(wallet_delta, 8)
@@ -0,0 +1 @@
1
+ __version__ = "2.2.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jesse
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: A trading framework for cryptocurrencies
5
5
  Home-page: https://jesse.trade
6
6
  Author: Saleh Mir
@@ -944,6 +944,7 @@ jesse/strategies/TestAfterMethod/__init__.py
944
944
  jesse/strategies/TestAverageEntryPriceProperty/__init__.py
945
945
  jesse/strategies/TestBalanceAndFeeReductionWorksCorrectlyInSpotModeInBothBuyAndSellOrders/__init__.py
946
946
  jesse/strategies/TestBalancesAreHandledCorrectlyForCancellingOrdersInSpot/__init__.py
947
+ jesse/strategies/TestBaseAndQuoteAssetProperties/__init__.py
947
948
  jesse/strategies/TestBeforeMethod/__init__.py
948
949
  jesse/strategies/TestBeforeTerminate/__init__.py
949
950
  jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong1/__init__.py
@@ -1005,6 +1006,7 @@ jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py
1005
1006
  jesse/strategies/TestOrderPriceCannotBeGreaterThanZero/__init__.py
1006
1007
  jesse/strategies/TestOrderValueProperty/__init__.py
1007
1008
  jesse/strategies/TestOrdersAreSortedBeforeExecution/__init__.py
1009
+ jesse/strategies/TestOversizedReduceOnlyExitAccounting/__init__.py
1008
1010
  jesse/strategies/TestPortfolioValue/__init__.py
1009
1011
  jesse/strategies/TestPortfolioValueIncludesPositionValueAndOpenOrdersValue/__init__.py
1010
1012
  jesse/strategies/TestPositionExchangeTypeProperty1/__init__.py
@@ -1032,6 +1034,7 @@ tests/__init__.py
1032
1034
  tests/test_backtest.py
1033
1035
  tests/test_broker.py
1034
1036
  tests/test_candle_service.py
1037
+ tests/test_chart_data_serialization.py
1035
1038
  tests/test_completed_trade.py
1036
1039
  tests/test_conflicting_orders.py
1037
1040
  tests/test_dynamic_numpy_array.py
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
  from setuptools import setup, find_packages
4
4
 
5
5
  # also change in version.py
6
- VERSION = "2.2.0"
6
+ VERSION = "2.2.2"
7
7
  DESCRIPTION = "A trading framework for cryptocurrencies"
8
8
  BASE_DIR = Path(__file__).resolve().parent
9
9
 
@@ -211,3 +211,63 @@ def test_should_not_submit_reduce_only_orders_when_position_is_closed():
211
211
 
212
212
  with pytest.raises(OrderNotAllowed):
213
213
  broker.reduce_position_at(1, 20, 20)
214
+
215
+
216
+ def test_oversized_reduce_only_order_uses_actual_filled_qty():
217
+ """
218
+ Regression: when a reduce_only stop-loss is left with a stated qty larger than the
219
+ remaining position (e.g. a stop-loss not resized after a partial take-profit), the
220
+ engine caps the actual fill via reduce_only. The trade's exit_price VWAP and fee must
221
+ use that capped (actual) qty, not the stated qty — otherwise net_profit drifts below
222
+ the real wallet balance change.
223
+ """
224
+ set_up_with_fee(is_futures_trading=True)
225
+
226
+ starting_balance = exchange.wallet_balance
227
+ assert starting_balance == 1000
228
+
229
+ # open a long position of qty 1 @ 50
230
+ broker.buy_at_market(1)
231
+ for o in store.orders.to_execute:
232
+ order_service.execute_order(o)
233
+ store.orders.to_execute = []
234
+ assert position.qty == 1
235
+ assert position.entry_price == 50
236
+
237
+ # take partial profit: sell 0.7 @ 80 (limit), position -> 0.3
238
+ position.current_price = 50
239
+ tp_order = broker.reduce_position_at(0.7, 80, 50)
240
+ order_service.execute_order(tp_order)
241
+ position.current_price = 80
242
+ assert round(position.qty, 8) == 0.3
243
+
244
+ # submit an OVERSIZED stop-loss: stated qty 1 (full) while only 0.3 remains, @ 40
245
+ sl_order = broker.reduce_position_at(1, 40, 80)
246
+ assert sl_order.reduce_only is True
247
+ assert sl_order.qty == -1 # stated qty is oversized vs the remaining 0.3
248
+
249
+ # execute the stop -> reduce_only caps the actual fill to the remaining 0.3
250
+ order_service.execute_order(sl_order)
251
+ position.current_price = 40
252
+ assert position.is_close is True
253
+
254
+ # the actual fill is capped to the remaining position, not the stated qty
255
+ assert round(sl_order.filled_qty, 8) == -0.3
256
+
257
+ trade = store.closed_trades.trades[-1]
258
+
259
+ # exit_price VWAP must weight the SL leg by the ACTUAL 0.3, not the stated 1.0:
260
+ # (0.7*80 + 0.3*40) / (0.7+0.3) = 68, NOT (0.7*80 + 1.0*40) / 1.7 = 56.47
261
+ assert round(trade.exit_price, 8) == 68
262
+
263
+ # fee must be charged on the actual filled qty across all legs
264
+ expected_fee = (1 * 50 + 0.7 * 80 + 0.3 * 40) * 0.002
265
+ assert round(trade.fee, 8) == round(expected_fee, 8)
266
+
267
+ # headline check: per-trade net profit equals the real wallet balance change
268
+ wallet_delta = exchange.wallet_balance - starting_balance
269
+ assert round(trade.pnl, 8) == round(wallet_delta, 8)
270
+
271
+ # this test closes a position, so clean up the shared store to avoid leaking the
272
+ # closed trade into tests that assume an empty store at their start
273
+ store.reset()
@@ -0,0 +1,84 @@
1
+ import json
2
+ import math
3
+
4
+ import numpy as np
5
+ import pytest
6
+
7
+ import jesse.helpers as jh
8
+
9
+
10
+ # This mirrors what Starlette's JSONResponse does internally: it renders with
11
+ # `allow_nan=False`, which raises `ValueError: Out of range float values are not
12
+ # JSON compliant` if NaN / Infinity / -Infinity reach the encoder. The
13
+ # `/backtest/sessions/{id}/chart-data` endpoint hit exactly this when a strategy's
14
+ # `after()` produced NaN values for a custom chart line (GitHub issue #563).
15
+ def _render_like_jsonresponse(content):
16
+ return json.dumps(content, ensure_ascii=False, allow_nan=False)
17
+
18
+
19
+ def _sample_chart_data():
20
+ """
21
+ Approximates the structure assembled in backtest_mode for the frontend:
22
+ custom lines added from a strategy's `after()` hook may legitimately contain
23
+ NaN (e.g. an indicator that is not warmed up yet) or +/-inf (e.g. division
24
+ by zero).
25
+ """
26
+ return {
27
+ 'add_line_to_candle_chart': {
28
+ 'my_line': [
29
+ {'time': 1, 'value': 10.0},
30
+ {'time': 2, 'value': float('nan')},
31
+ {'time': 3, 'value': float('inf')},
32
+ {'time': 4, 'value': float('-inf')},
33
+ {'time': 5, 'value': np.float64('nan')},
34
+ {'time': 6, 'value': 20.5},
35
+ ]
36
+ },
37
+ 'add_extra_line_chart': [np.float64('nan'), 1.0, np.int64(3)],
38
+ 'flag': True,
39
+ }
40
+
41
+
42
+ def test_raw_chart_data_with_nan_is_not_json_compliant():
43
+ """Without sanitizing, the data reproduces the issue #563 failure."""
44
+ raw = _sample_chart_data()
45
+ with pytest.raises(ValueError):
46
+ _render_like_jsonresponse(raw)
47
+
48
+
49
+ def test_cleaned_chart_data_is_json_compliant():
50
+ """
51
+ The chart-data endpoint must strip BOTH NaN and infinite values before
52
+ handing the payload to JSONResponse. `clean_infinite_values` alone leaves
53
+ NaN behind, which was the root cause of issue #563.
54
+ """
55
+ raw = _sample_chart_data()
56
+
57
+ # Exactly the composition the controller now applies.
58
+ cleaned = jh.clean_nan_values(jh.clean_infinite_values(raw))
59
+
60
+ # Must not raise anymore.
61
+ serialized = _render_like_jsonresponse(cleaned)
62
+ reloaded = json.loads(serialized)
63
+
64
+ line = reloaded['add_line_to_candle_chart']['my_line']
65
+ assert line[0]['value'] == 10.0 # untouched valid float
66
+ assert line[1]['value'] is None # NaN -> None
67
+ assert line[2]['value'] is None # +inf -> None
68
+ assert line[3]['value'] is None # -inf -> None
69
+ assert line[4]['value'] is None # numpy NaN -> None
70
+ assert line[5]['value'] == 20.5 # untouched valid float
71
+
72
+ extra = reloaded['add_extra_line_chart']
73
+ assert extra[0] is None # numpy NaN -> None
74
+ assert extra[1] == 1.0
75
+ assert extra[2] == 3 # numpy int preserved
76
+ assert reloaded['flag'] is True # bool preserved (not coerced to int)
77
+
78
+
79
+ def test_clean_infinite_values_alone_leaves_nan():
80
+ """Regression guard documenting why both cleaners are required."""
81
+ only_inf_cleaned = jh.clean_infinite_values({'v': float('nan')})
82
+ assert math.isnan(only_inf_cleaned['v'])
83
+ with pytest.raises(ValueError):
84
+ _render_like_jsonresponse(only_inf_cleaned)
@@ -0,0 +1,254 @@
1
+ import numpy as np
2
+ import pytest
3
+
4
+ from jesse.libs import DynamicNumpyArray
5
+
6
+
7
+ def test_append():
8
+ a = DynamicNumpyArray((10, 6))
9
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
10
+ assert a.index == 0
11
+ assert a.array[0][0] == 1
12
+ assert a.array[0][1] == 2
13
+ assert a.array[0][2] == 3
14
+ assert a.array[0][3] == 4
15
+ assert a.array[0][4] == 5
16
+ assert a.array[0][5] == 6
17
+
18
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
19
+ assert a.index == 1
20
+ assert a.array[1][0] == 7
21
+ assert a.array[1][1] == 8
22
+ assert a.array[1][2] == 9
23
+ assert a.array[1][3] == 10
24
+ assert a.array[1][4] == 11
25
+ assert a.array[1][5] == 12
26
+
27
+
28
+ def test_flush():
29
+ a = DynamicNumpyArray((10, 6))
30
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
31
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
32
+ assert a.index == 1
33
+ assert a.array[0][0] == 1
34
+ assert a.array[1][0] == 7
35
+
36
+ a.flush()
37
+
38
+ assert a.index == -1
39
+ assert a.array[0][0] == 0
40
+ assert a.array[1][0] == 0
41
+
42
+
43
+ def test_get_last_item():
44
+ a = DynamicNumpyArray((10, 6))
45
+
46
+ with pytest.raises(IndexError):
47
+ a.get_last_item()
48
+
49
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
50
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
51
+ assert a.index == 1
52
+ assert a.array[0][0] == 1
53
+ assert a.array[1][0] == 7
54
+
55
+ np.testing.assert_array_equal(a.get_last_item(), np.array([7, 8, 9, 10, 11, 12]))
56
+
57
+
58
+ def test_get_past_item():
59
+ a = DynamicNumpyArray((10, 6))
60
+
61
+ with pytest.raises(IndexError):
62
+ a.get_past_item(1)
63
+
64
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
65
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
66
+ assert a.index == 1
67
+ assert a.array[0][0] == 1
68
+ assert a.array[1][0] == 7
69
+
70
+ np.testing.assert_array_equal(a.get_past_item(1), np.array([1, 2, 3, 4, 5, 6]))
71
+
72
+ with pytest.raises(IndexError):
73
+ a.get_past_item(2)
74
+
75
+
76
+ def test_get_item():
77
+ a = DynamicNumpyArray((10, 6))
78
+
79
+ # test getting while array is empty
80
+ with pytest.raises(IndexError):
81
+ var = a[0]
82
+
83
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
84
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
85
+ assert a.index == 1
86
+ assert a.array[0][0] == 1
87
+ assert a.array[1][0] == 7
88
+
89
+ np.testing.assert_array_equal(a[0], np.array([1, 2, 3, 4, 5, 6]))
90
+ np.testing.assert_array_equal(a[1], np.array([7, 8, 9, 10, 11, 12]))
91
+
92
+ # test with an index that is out of range
93
+ with pytest.raises(IndexError):
94
+ var = a[2]
95
+
96
+
97
+ def test_array_size_increases():
98
+ """Verify the buffer grows to accommodate appends.
99
+
100
+ The exact post-grow shape is an implementation detail (linear-bucket vs
101
+ geometric); what matters behaviorally is that all appended values are
102
+ retained correctly and the buffer has at least enough capacity.
103
+ """
104
+ a = DynamicNumpyArray((3, 6))
105
+
106
+ assert a.array.shape == (3, 6)
107
+
108
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
109
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
110
+ a.append(np.array([13, 14, 15, 16, 17, 18]))
111
+ assert a.array.shape[0] >= 3
112
+ assert a.array.shape[1] == 6
113
+ assert a.index == 2
114
+ np.testing.assert_array_equal(a[0], np.array([1, 2, 3, 4, 5, 6]))
115
+ np.testing.assert_array_equal(a[2], np.array([13, 14, 15, 16, 17, 18]))
116
+
117
+ a.append(np.array([19, 20, 21, 22, 23, 24]))
118
+ a.append(np.array([25, 26, 27, 28, 29, 30]))
119
+ a.append(np.array([31, 32, 33, 34, 35, 36]))
120
+ assert a.array.shape[0] >= 6
121
+ assert a.array.shape[1] == 6
122
+ assert a.index == 5
123
+ np.testing.assert_array_equal(a[5], np.array([31, 32, 33, 34, 35, 36]))
124
+
125
+
126
+ def test_geometric_growth_pattern():
127
+ """The number of buffer reallocations across N appends should be O(log N),
128
+ not O(N/bucket_size). This guards against accidental regression to linear
129
+ growth (which produces O(N^2) total memcpy on long backtests)."""
130
+ a = DynamicNumpyArray((4, 6))
131
+ n_appends = 5000
132
+
133
+ sizes_seen = [a.array.shape[0]]
134
+ for i in range(n_appends):
135
+ a.append(np.array([i, i + 1, i + 2, i + 3, i + 4, i + 5]))
136
+ if a.array.shape[0] != sizes_seen[-1]:
137
+ sizes_seen.append(a.array.shape[0])
138
+
139
+ # log2(5000/4) ≈ 10.3 — we should see at most ~12 distinct sizes.
140
+ assert len(sizes_seen) <= 14, (
141
+ f"too many growths ({len(sizes_seen)}): {sizes_seen}"
142
+ )
143
+ # Each growth at least 1.5× the prior — prevents accidental linear growth
144
+ for prev, nxt in zip(sizes_seen, sizes_seen[1:]):
145
+ assert nxt >= prev * 1.5, (
146
+ f"growth from {prev} to {nxt} is sub-geometric"
147
+ )
148
+
149
+ # Spot-check correctness — appends should be intact in order
150
+ np.testing.assert_array_equal(a[0], np.array([0, 1, 2, 3, 4, 5]))
151
+ np.testing.assert_array_equal(a[2500], np.array([2500, 2501, 2502, 2503, 2504, 2505]))
152
+ np.testing.assert_array_equal(a[n_appends - 1], np.array([4999, 5000, 5001, 5002, 5003, 5004]))
153
+
154
+
155
+ def test_append_multiple_grows_geometrically():
156
+ """append_multiple should also use geometric growth and produce identical
157
+ final state to the equivalent sequence of append() calls."""
158
+ via_multiple = DynamicNumpyArray((10, 6))
159
+ via_single = DynamicNumpyArray((10, 6))
160
+
161
+ rng = np.random.default_rng(seed=42)
162
+ n_batches = 30
163
+ batch_size = 25
164
+ for _ in range(n_batches):
165
+ batch = rng.standard_normal((batch_size, 6))
166
+ via_multiple.append_multiple(batch)
167
+ for row in batch:
168
+ via_single.append(row)
169
+
170
+ assert via_multiple.index == via_single.index
171
+ np.testing.assert_array_equal(
172
+ via_multiple.array[:via_multiple.index + 1],
173
+ via_single.array[:via_single.index + 1],
174
+ )
175
+
176
+
177
+ def test_append_multiple_varied_batch_sizes():
178
+ """append_multiple must hold the correct valid data regardless of batch
179
+ sizes relative to the bucket size (small, equal, and much larger batches),
180
+ including a single batch larger than the current capacity."""
181
+ a = DynamicNumpyArray((10, 6))
182
+ expected = []
183
+ rng = np.random.default_rng(seed=7)
184
+ for bs in [1, 5, 10, 23, 100, 3, 50, 7, 200]:
185
+ batch = rng.standard_normal((bs, 6))
186
+ a.append_multiple(batch)
187
+ expected.extend(batch.tolist())
188
+
189
+ assert a.index == len(expected) - 1
190
+ np.testing.assert_array_equal(a.array[:a.index + 1], np.array(expected))
191
+ # capacity must always be large enough to hold the valid region
192
+ assert a.array.shape[0] >= a.index + 1
193
+
194
+
195
+ def test_geometric_growth_never_overflows():
196
+ """After every append the write index must remain within capacity — guards
197
+ against an off-by-one in the doubling condition."""
198
+ a = DynamicNumpyArray((4, 6))
199
+ for i in range(3000):
200
+ a.append(np.arange(6, dtype=float) + i)
201
+ assert a.index < a.array.shape[0]
202
+ np.testing.assert_array_equal(a[2999], np.arange(6, dtype=float) + 2999)
203
+
204
+
205
+ def test_append_multiple_then_append_no_overflow():
206
+ """Mirror the real backtest flow: candles are warmed up in chunks via
207
+ append_multiple() and then streamed in one-by-one via append() on the SAME
208
+ storage (see candle_service.add_multiple_1m_candles -> add_candle).
209
+
210
+ The previous linear-bucket implementation assumed capacity stayed a
211
+ multiple of bucket_size, an invariant append_multiple could break, so a
212
+ chunked warmup (e.g. 1500 + 800 into a bucket_size=1000 array) followed by
213
+ single appends overflowed with an IndexError. Geometric growth keys off the
214
+ actual capacity, so it must keep correct data without ever overflowing.
215
+ """
216
+ a = DynamicNumpyArray((1000, 6))
217
+ expected = []
218
+
219
+ # chunked warmup via append_multiple
220
+ for chunk in (1500, 800):
221
+ batch = np.arange(len(expected) * 6, (len(expected) + chunk) * 6, dtype=float).reshape(chunk, 6)
222
+ a.append_multiple(batch)
223
+ expected.extend(batch.tolist())
224
+
225
+ # then stream single candles in, well past the warmed-up capacity
226
+ for i in range(5000):
227
+ row = np.full(6, 1_000_000.0 + i)
228
+ a.append(row)
229
+ expected.append(row.tolist())
230
+ # the write index must always stay within the allocated buffer
231
+ assert a.index < a.array.shape[0]
232
+
233
+ assert a.index == len(expected) - 1
234
+ np.testing.assert_array_equal(a.array[:a.index + 1], np.array(expected))
235
+ np.testing.assert_array_equal(a[0], np.array([0, 1, 2, 3, 4, 5], dtype=float))
236
+ np.testing.assert_array_equal(a[-1], np.full(6, 1_000_000.0 + 4999))
237
+
238
+
239
+ def test_drop_at():
240
+ a = DynamicNumpyArray((100, 6), drop_at=6)
241
+
242
+ # add 5 items
243
+ a.append(np.array([1, 2, 3, 4, 5, 6]))
244
+ a.append(np.array([7, 8, 9, 10, 11, 12]))
245
+ a.append(np.array([13, 14, 15, 16, 17, 18]))
246
+ a.append(np.array([19, 20, 21, 22, 23, 24]))
247
+ a.append(np.array([25, 26, 27, 28, 29, 30]))
248
+ assert a.get_last_item()[0] == 25
249
+ assert a[0][0] == 1
250
+
251
+ # add 6th item. when it reaches the drop_at limit, it should drop drop_at/2 items
252
+ a.append(np.array([31, 32, 33, 34, 35, 36]))
253
+ assert a[0][0] == 19
254
+