lumibot 4.2.6__tar.gz → 4.2.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lumibot might be problematic. Click here for more details.

Files changed (280) hide show
  1. {lumibot-4.2.6/lumibot.egg-info → lumibot-4.2.7}/PKG-INFO +1 -1
  2. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/databento_backtesting_pandas.py +29 -4
  3. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/databento_helper.py +14 -6
  4. {lumibot-4.2.6 → lumibot-4.2.7/lumibot.egg-info}/PKG-INFO +1 -1
  5. {lumibot-4.2.6 → lumibot-4.2.7}/setup.py +1 -1
  6. {lumibot-4.2.6 → lumibot-4.2.7}/LICENSE +0 -0
  7. {lumibot-4.2.6 → lumibot-4.2.7}/MANIFEST.in +0 -0
  8. {lumibot-4.2.6 → lumibot-4.2.7}/README.md +0 -0
  9. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/__init__.py +0 -0
  10. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/__init__.py +0 -0
  11. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/alpaca_backtesting.py +0 -0
  12. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/alpha_vantage_backtesting.py +0 -0
  13. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/backtesting_broker.py +0 -0
  14. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/ccxt_backtesting.py +0 -0
  15. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/databento_backtesting.py +0 -0
  16. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/databento_backtesting_polars.py +0 -0
  17. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/fix_debug.py +0 -0
  18. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/interactive_brokers_rest_backtesting.py +0 -0
  19. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/pandas_backtesting.py +0 -0
  20. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/polygon_backtesting.py +0 -0
  21. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/thetadata_backtesting.py +0 -0
  22. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/thetadata_backtesting_pandas.py +0 -0
  23. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/backtesting/yahoo_backtesting.py +0 -0
  24. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/__init__.py +0 -0
  25. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/alpaca.py +0 -0
  26. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/bitunix.py +0 -0
  27. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/broker.py +0 -0
  28. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/ccxt.py +0 -0
  29. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/example_broker.py +0 -0
  30. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/interactive_brokers.py +0 -0
  31. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/interactive_brokers_rest.py +0 -0
  32. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/projectx.py +0 -0
  33. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/schwab.py +0 -0
  34. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/tradier.py +0 -0
  35. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/brokers/tradovate.py +0 -0
  36. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/__init__.py +0 -0
  37. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/configs_helper.py +0 -0
  38. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/drift_rebalancer_logic.py +0 -0
  39. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/grok_helper.py +0 -0
  40. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/options_helper.py +0 -0
  41. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/perplexity_helper.py +0 -0
  42. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/quiver_helper.py +0 -0
  43. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/components/vix_helper.py +0 -0
  44. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/constants.py +0 -0
  45. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/credentials.py +0 -0
  46. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/__init__.py +0 -0
  47. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/alpaca_data.py +0 -0
  48. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/alpha_vantage_data.py +0 -0
  49. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/bitunix_data.py +0 -0
  50. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/ccxt_backtesting_data.py +0 -0
  51. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/ccxt_data.py +0 -0
  52. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/data_source.py +0 -0
  53. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/data_source_backtesting.py +0 -0
  54. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/databento_data.py +0 -0
  55. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/databento_data_pandas.py +0 -0
  56. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/databento_data_polars.py +0 -0
  57. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/example_broker_data.py +0 -0
  58. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/exceptions.py +0 -0
  59. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/interactive_brokers_data.py +0 -0
  60. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/interactive_brokers_rest_data.py +0 -0
  61. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/pandas_data.py +0 -0
  62. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/polars_data.py +0 -0
  63. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/polars_mixin.py +0 -0
  64. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/polygon_data_polars.py +0 -0
  65. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/projectx_data.py +0 -0
  66. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/schwab_data.py +0 -0
  67. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/tradier_data.py +0 -0
  68. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/tradovate_data.py +0 -0
  69. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/yahoo_data.py +0 -0
  70. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/data_sources/yahoo_data_polars.py +0 -0
  71. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/__init__.py +0 -0
  72. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/asset.py +0 -0
  73. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/bar.py +0 -0
  74. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/bars.py +0 -0
  75. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/chains.py +0 -0
  76. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/data.py +0 -0
  77. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/data_polars.py +0 -0
  78. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/dataline.py +0 -0
  79. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/order.py +0 -0
  80. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/position.py +0 -0
  81. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/quote.py +0 -0
  82. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/entities/trading_fee.py +0 -0
  83. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/__init__.py +0 -0
  84. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/bitunix_futures_example.py +0 -0
  85. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/ccxt_backtesting_example.py +0 -0
  86. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/classic_60_40.py +0 -0
  87. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/classic_60_40_config.py +0 -0
  88. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/crypto_50_50.py +0 -0
  89. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/crypto_50_50_config.py +0 -0
  90. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/crypto_important_functions.py +0 -0
  91. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/drift_rebalancer.py +0 -0
  92. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/forex_hold_to_expiry.py +0 -0
  93. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/futures_hold_to_expiry.py +0 -0
  94. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/lifecycle_logger.py +0 -0
  95. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/options_hold_to_expiry.py +0 -0
  96. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/schedule_function.py +0 -0
  97. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/simple_start_single_file.py +0 -0
  98. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/stock_bracket.py +0 -0
  99. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/stock_buy_and_hold.py +0 -0
  100. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/stock_diversified_leverage.py +0 -0
  101. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/stock_limit_and_trailing_stops.py +0 -0
  102. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/stock_momentum.py +0 -0
  103. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/stock_oco.py +0 -0
  104. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/strangle.py +0 -0
  105. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/example_strategies/test_broker_functions.py +0 -0
  106. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/resources/ThetaTerminal.jar +0 -0
  107. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/resources/conf.yaml +0 -0
  108. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/strategies/__init__.py +0 -0
  109. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/strategies/_strategy.py +0 -0
  110. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/strategies/session_manager.py +0 -0
  111. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/strategies/strategy.py +0 -0
  112. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/strategies/strategy_executor.py +0 -0
  113. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/__init__.py +0 -0
  114. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/alpaca_helpers.py +0 -0
  115. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/backtest_cache.py +0 -0
  116. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/bitunix_helpers.py +0 -0
  117. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/black_scholes.py +0 -0
  118. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/ccxt_data_store.py +0 -0
  119. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/databento_helper_polars.py +0 -0
  120. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/debugers.py +0 -0
  121. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/decorators.py +0 -0
  122. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/futures_roll.py +0 -0
  123. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/futures_symbols.py +0 -0
  124. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/helpers.py +0 -0
  125. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/indicators.py +0 -0
  126. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/lumibot_logger.py +0 -0
  127. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/lumibot_time.py +0 -0
  128. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/pandas.py +0 -0
  129. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/polars_utils.py +0 -0
  130. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/polygon_helper.py +0 -0
  131. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/polygon_helper_async.py +0 -0
  132. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/polygon_helper_polars_optimized.py +0 -0
  133. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/projectx_helpers.py +0 -0
  134. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/schwab_helper.py +0 -0
  135. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/thetadata_helper.py +0 -0
  136. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/types.py +0 -0
  137. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/yahoo_helper.py +0 -0
  138. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/tools/yahoo_helper_polars_optimized.py +0 -0
  139. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/traders/__init__.py +0 -0
  140. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/traders/debug_log_trader.py +0 -0
  141. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/traders/trader.py +0 -0
  142. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/trading_builtins/__init__.py +0 -0
  143. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/trading_builtins/custom_stream.py +0 -0
  144. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot/trading_builtins/safe_list.py +0 -0
  145. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot.egg-info/SOURCES.txt +0 -0
  146. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot.egg-info/dependency_links.txt +0 -0
  147. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot.egg-info/requires.txt +0 -0
  148. {lumibot-4.2.6 → lumibot-4.2.7}/lumibot.egg-info/top_level.txt +0 -0
  149. {lumibot-4.2.6 → lumibot-4.2.7}/pyproject.toml +0 -0
  150. {lumibot-4.2.6 → lumibot-4.2.7}/setup.cfg +0 -0
  151. {lumibot-4.2.6 → lumibot-4.2.7}/tests/__init__.py +0 -0
  152. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/__init__.py +0 -0
  153. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/conftest.py +0 -0
  154. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/performance_tracker.py +0 -0
  155. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/profile_thetadata_vs_polygon.py +0 -0
  156. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_accuracy_verification.py +0 -0
  157. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_backtesting_broker_processing.py +0 -0
  158. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_buy_hold_quiet_logs_full_run.py +0 -0
  159. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_crypto_cash_regressions.py +0 -0
  160. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_daily_data_timestamp_comparison.py +0 -0
  161. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_databento.py +0 -0
  162. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_databento_comprehensive_trading.py +0 -0
  163. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_databento_parity.py +0 -0
  164. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_debug_avg_fill_price.py +0 -0
  165. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_dividends.py +0 -0
  166. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_example_strategies.py +0 -0
  167. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_failing_backtest.py +0 -0
  168. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_futures_edge_cases.py +0 -0
  169. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_futures_single_trade.py +0 -0
  170. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_futures_ultra_simple.py +0 -0
  171. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_index_data_verification.py +0 -0
  172. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_multileg_backtest.py +0 -0
  173. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_pandas_backtest.py +0 -0
  174. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_passing_trader_into_backtest.py +0 -0
  175. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_polars_lru_eviction.py +0 -0
  176. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_polygon.py +0 -0
  177. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_strategy_executor.py +0 -0
  178. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_thetadata.py +0 -0
  179. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_thetadata_comprehensive.py +0 -0
  180. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_thetadata_vs_polygon.py +0 -0
  181. {lumibot-4.2.6 → lumibot-4.2.7}/tests/backtest/test_yahoo.py +0 -0
  182. {lumibot-4.2.6 → lumibot-4.2.7}/tests/conftest.py +0 -0
  183. {lumibot-4.2.6 → lumibot-4.2.7}/tests/fixtures.py +0 -0
  184. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca.py +0 -0
  185. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca_auth_fix.py +0 -0
  186. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca_backtesting.py +0 -0
  187. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca_data.py +0 -0
  188. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca_helpers.py +0 -0
  189. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca_multileg_fix.py +0 -0
  190. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_alpaca_oauth.py +0 -0
  191. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_apscheduler_warnings.py +0 -0
  192. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_asset.py +0 -0
  193. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_asset_auto_expiry.py +0 -0
  194. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_auto_market_inference.py +0 -0
  195. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtest_cache_manager.py +0 -0
  196. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_broker.py +0 -0
  197. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_broker_await_close.py +0 -0
  198. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_broker_time_advance.py +0 -0
  199. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_crypto_cash_unit.py +0 -0
  200. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_data_source_env.py +0 -0
  201. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_datetime_normalization.py +0 -0
  202. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_flow_control.py +0 -0
  203. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_multileg_unit.py +0 -0
  204. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_backtesting_quiet_logs_complete.py +0 -0
  205. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_bars_aggregate_frequency_normalization.py +0 -0
  206. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_bars_aggregation_timeunits.py +0 -0
  207. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_bars_frequency_flex.py +0 -0
  208. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_botspot_handler.py +0 -0
  209. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_botspot_logger.py +0 -0
  210. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_broker_bitunix.py +0 -0
  211. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_broker_cleanup.py +0 -0
  212. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_broker_initialization.py +0 -0
  213. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_brokers_handle_crypto.py +0 -0
  214. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_cash.py +0 -0
  215. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_ccxt.py +0 -0
  216. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_ccxt_store.py +0 -0
  217. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_configs_helper.py +0 -0
  218. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_continuous_futures.py +0 -0
  219. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_continuous_futures_integration.py +0 -0
  220. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_continuous_futures_resolution.py +0 -0
  221. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_data_polars_parity.py +0 -0
  222. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_data_source.py +0 -0
  223. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_asset_validation.py +0 -0
  224. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_auto_expiry_integration.py +0 -0
  225. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_backtesting.py +0 -0
  226. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_backtesting_polars.py +0 -0
  227. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_data.py +0 -0
  228. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_helper.py +0 -0
  229. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_live.py +0 -0
  230. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_databento_timezone_fixes.py +0 -0
  231. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_drift_rebalancer.py +0 -0
  232. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_futures_integration.py +0 -0
  233. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_futures_roll.py +0 -0
  234. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_get_historical_prices.py +0 -0
  235. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_helpers.py +0 -0
  236. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_indicator_subplots.py +0 -0
  237. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_integration_tests.py +0 -0
  238. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_interactive_brokers.py +0 -0
  239. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_live_trading_resilience.py +0 -0
  240. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_logger_env_vars.py +0 -0
  241. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_logging.py +0 -0
  242. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_lumibot_logger.py +0 -0
  243. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_market_infinite_loop_bug.py +0 -0
  244. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_mes_symbols.py +0 -0
  245. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_momentum.py +0 -0
  246. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_options_helper.py +0 -0
  247. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_order.py +0 -0
  248. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_order_serialization.py +0 -0
  249. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_pandas_data.py +0 -0
  250. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_polars_resample.py +0 -0
  251. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_polygon_helper.py +0 -0
  252. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_position_serialization.py +0 -0
  253. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx.py +0 -0
  254. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_bracket_helpers.py +0 -0
  255. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_bracket_lifecycle_unit.py +0 -0
  256. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_data.py +0 -0
  257. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_datetime_columns.py +0 -0
  258. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_datetime_index.py +0 -0
  259. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_helpers.py +0 -0
  260. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_lifecycle.py +0 -0
  261. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_lifecycle_unit.py +0 -0
  262. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_live_flow.py +0 -0
  263. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_timestep_alias.py +0 -0
  264. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_projectx_url_mappings.py +0 -0
  265. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_quiet_logs_buy_and_hold.py +0 -0
  266. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_quiet_logs_comprehensive.py +0 -0
  267. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_quiet_logs_functionality.py +0 -0
  268. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_quiet_logs_requirements.py +0 -0
  269. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_session_manager.py +0 -0
  270. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_strategy_methods.py +0 -0
  271. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_strategy_price_guard.py +0 -0
  272. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_thetadata_backwards_compat.py +0 -0
  273. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_thetadata_helper.py +0 -0
  274. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_thetadata_pandas_verification.py +0 -0
  275. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_tradier.py +0 -0
  276. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_tradier_data.py +0 -0
  277. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_tradingfee.py +0 -0
  278. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_tradovate.py +0 -0
  279. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_unified_logger.py +0 -0
  280. {lumibot-4.2.6 → lumibot-4.2.7}/tests/test_vix_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lumibot
3
- Version: 4.2.6
3
+ Version: 4.2.7
4
4
  Summary: Backtesting and Trading Library, Made by Lumiwealth
5
5
  Home-page: https://github.com/Lumiwealth/lumibot
6
6
  Author: Robert Grzesik
@@ -410,6 +410,7 @@ class DataBentoDataBacktestingPandas(PandasData):
410
410
  # OPTIMIZATION: Check cache first
411
411
  self._check_and_clear_cache()
412
412
  current_dt = self.get_datetime()
413
+ current_dt_aware = to_datetime_aware(current_dt)
413
414
 
414
415
  # Try to get data from our cached pandas_data first
415
416
  search_asset = asset
@@ -435,8 +436,6 @@ class DataBentoDataBacktestingPandas(PandasData):
435
436
 
436
437
  if not df.empty and 'close' in df.columns:
437
438
  # Ensure current_dt is timezone-aware for comparison
438
- current_dt_aware = to_datetime_aware(current_dt)
439
-
440
439
  # Step back one bar so only fully closed bars are visible
441
440
  bar_delta = timedelta(minutes=1)
442
441
  if asset_data.timestep == "hour":
@@ -461,12 +460,38 @@ class DataBentoDataBacktestingPandas(PandasData):
461
460
  self._last_price_cache[cache_key] = price
462
461
  return price
463
462
 
464
- # If no cached data, try to get recent data
463
+ # If no cached data, try to load it for the backtest window
464
+ try:
465
+ fetched_bars = self.get_historical_prices(
466
+ asset_separated,
467
+ length=1,
468
+ quote=quote_asset,
469
+ timestep="minute",
470
+ )
471
+ if fetched_bars is not None:
472
+ asset_data = self.pandas_data.get(search_asset)
473
+ if asset_data is not None:
474
+ df = asset_data.df
475
+ if not df.empty and 'close' in df.columns:
476
+ valid_closes = df[df.index <= current_dt_aware]['close'].dropna()
477
+ if not valid_closes.empty:
478
+ price = float(valid_closes.iloc[-1])
479
+ self._last_price_cache[cache_key] = price
480
+ return price
481
+ except Exception as exc:
482
+ logger.debug(
483
+ "Attempted to hydrate Databento cache for %s but hit error: %s",
484
+ asset.symbol,
485
+ exc,
486
+ )
487
+
488
+ # If still no data, fall back to direct fetch (live-style)
465
489
  logger.warning(f"No cached data for {asset.symbol}, attempting direct fetch")
466
490
  return databento_helper.get_last_price_from_databento(
467
491
  api_key=self._api_key,
468
492
  asset=asset_separated,
469
- venue=exchange
493
+ venue=exchange,
494
+ reference_date=current_dt_aware
470
495
  )
471
496
 
472
497
  except DataBentoAuthenticationError as e:
@@ -947,6 +947,7 @@ def get_last_price_from_databento(
947
947
  api_key: str,
948
948
  asset: Asset,
949
949
  venue: Optional[str] = None,
950
+ reference_date: Optional[datetime] = None,
950
951
  **kwargs
951
952
  ) -> Optional[Union[float, Decimal]]:
952
953
  """
@@ -978,12 +979,14 @@ def get_last_price_from_databento(
978
979
 
979
980
  # For continuous futures, resolve to the current active contract
980
981
  if asset.asset_type == Asset.AssetType.CONT_FUTURE:
981
- # Use Asset class method to resolve continuous futures to actual contract (returns string)
982
- resolved_symbol = asset.resolve_continuous_futures_contract(year_digits=1)
982
+ # Resolve based on reference date when backtesting so we match the contract in use
983
+ resolved_symbol = _format_futures_symbol_for_databento(
984
+ asset,
985
+ reference_date=reference_date,
986
+ )
983
987
  if resolved_symbol is None:
984
988
  logger.error(f"Could not resolve continuous futures contract for {asset.symbol}")
985
989
  return None
986
- # Generate the correct DataBento symbol format (should be single result)
987
990
  symbols_to_try = _generate_databento_symbol_alternatives(asset.symbol, resolved_symbol)
988
991
  logger.info(f"Resolved continuous future {asset.symbol} to specific contract: {resolved_symbol}")
989
992
  logger.info(f"DataBento symbol format for last price: {symbols_to_try[0]}")
@@ -1000,12 +1003,17 @@ def get_last_price_from_databento(
1000
1003
  if hasattr(range_result, 'end') and range_result.end:
1001
1004
  if hasattr(range_result.end, 'tz_localize'):
1002
1005
  # Already a pandas Timestamp
1003
- available_end = range_result.end if range_result.end.tz else range_result.end.tz_localize('UTC')
1006
+ if range_result.end.tz is not None:
1007
+ available_end = range_result.end.tz_convert('UTC')
1008
+ else:
1009
+ available_end = range_result.end.tz_localize('UTC')
1004
1010
  else:
1005
1011
  # Convert to pandas Timestamp
1006
- available_end = pd.to_datetime(range_result.end).tz_localize('UTC')
1012
+ ts = pd.to_datetime(range_result.end)
1013
+ available_end = ts if ts.tz is not None else ts.tz_localize('UTC')
1007
1014
  elif isinstance(range_result, dict) and 'end' in range_result:
1008
- available_end = pd.to_datetime(range_result['end']).tz_localize('UTC')
1015
+ ts = pd.to_datetime(range_result['end'])
1016
+ available_end = ts if ts.tz is not None else ts.tz_localize('UTC')
1009
1017
  else:
1010
1018
  logger.warning(f"Could not parse dataset range for {dataset}: {range_result}")
1011
1019
  # Fallback: use a recent date that's likely to have data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lumibot
3
- Version: 4.2.6
3
+ Version: 4.2.7
4
4
  Summary: Backtesting and Trading Library, Made by Lumiwealth
5
5
  Home-page: https://github.com/Lumiwealth/lumibot
6
6
  Author: Robert Grzesik
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="lumibot",
8
- version="4.2.6",
8
+ version="4.2.7",
9
9
  author="Robert Grzesik",
10
10
  author_email="rob@lumiwealth.com",
11
11
  description="Backtesting and Trading Library, Made by Lumiwealth",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes