lumibot 4.0.23__py3-none-any.whl → 4.1.1__py3-none-any.whl
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.
- lumibot/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/__pycache__/constants.cpython-312.pyc +0 -0
- lumibot/__pycache__/credentials.cpython-312.pyc +0 -0
- lumibot/backtesting/__init__.py +6 -5
- lumibot/backtesting/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/alpaca_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/alpha_vantage_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/backtesting_broker.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/ccxt_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/databento_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/interactive_brokers_rest_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/pandas_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/polygon_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/thetadata_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/__pycache__/yahoo_backtesting.cpython-312.pyc +0 -0
- lumibot/backtesting/backtesting_broker.py +209 -9
- lumibot/backtesting/databento_backtesting.py +145 -24
- lumibot/backtesting/thetadata_backtesting.py +63 -42
- lumibot/brokers/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/alpaca.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/bitunix.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/broker.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/ccxt.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/example_broker.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/interactive_brokers.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/interactive_brokers_rest.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/projectx.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/schwab.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/tradier.cpython-312.pyc +0 -0
- lumibot/brokers/__pycache__/tradovate.cpython-312.pyc +0 -0
- lumibot/brokers/alpaca.py +11 -1
- lumibot/brokers/tradeovate.py +475 -0
- lumibot/components/grok_news_helper.py +284 -0
- lumibot/components/options_helper.py +90 -34
- lumibot/credentials.py +3 -0
- lumibot/data_sources/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/alpaca_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/alpha_vantage_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/bitunix_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/ccxt_backtesting_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/ccxt_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/data_source.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/data_source_backtesting.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/databento_data_polars_backtesting.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/databento_data_polars_live.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/example_broker_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/exceptions.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/interactive_brokers_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/interactive_brokers_rest_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/pandas_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/polars_mixin.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/polygon_data_polars.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/projectx_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/schwab_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/tradier_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/tradovate_data.cpython-312.pyc +0 -0
- lumibot/data_sources/__pycache__/yahoo_data_polars.cpython-312.pyc +0 -0
- lumibot/data_sources/data_source_backtesting.py +3 -5
- lumibot/data_sources/databento_data_polars_backtesting.py +194 -48
- lumibot/data_sources/pandas_data.py +6 -3
- lumibot/data_sources/polars_mixin.py +126 -21
- lumibot/data_sources/tradeovate_data.py +80 -0
- lumibot/data_sources/tradier_data.py +2 -1
- lumibot/entities/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/asset.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/bar.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/bars.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/chains.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/data.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/dataline.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/order.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/position.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/quote.cpython-312.pyc +0 -0
- lumibot/entities/__pycache__/trading_fee.cpython-312.pyc +0 -0
- lumibot/entities/asset.py +8 -0
- lumibot/entities/order.py +1 -1
- lumibot/entities/quote.py +14 -0
- lumibot/example_strategies/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/example_strategies/__pycache__/test_broker_functions.cpython-312-pytest-8.4.1.pyc +0 -0
- lumibot/strategies/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/strategies/__pycache__/_strategy.cpython-312.pyc +0 -0
- lumibot/strategies/__pycache__/strategy.cpython-312.pyc +0 -0
- lumibot/strategies/__pycache__/strategy_executor.cpython-312.pyc +0 -0
- lumibot/strategies/_strategy.py +95 -27
- lumibot/strategies/strategy.py +5 -6
- lumibot/strategies/strategy_executor.py +2 -2
- lumibot/tools/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/alpaca_helpers.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/bitunix_helpers.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/black_scholes.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/ccxt_data_store.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/databento_helper.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/databento_helper_polars.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/debugers.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/decorators.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/helpers.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/indicators.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/lumibot_logger.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/pandas.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/polygon_helper.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/polygon_helper_async.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/polygon_helper_polars_optimized.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/projectx_helpers.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/schwab_helper.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/thetadata_helper.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/types.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/yahoo_helper.cpython-312.pyc +0 -0
- lumibot/tools/__pycache__/yahoo_helper_polars_optimized.cpython-312.pyc +0 -0
- lumibot/tools/databento_helper.py +384 -133
- lumibot/tools/databento_helper_polars.py +218 -156
- lumibot/tools/databento_roll.py +216 -0
- lumibot/tools/lumibot_logger.py +32 -17
- lumibot/tools/polygon_helper.py +65 -0
- lumibot/tools/thetadata_helper.py +588 -70
- lumibot/traders/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/traders/__pycache__/trader.cpython-312.pyc +0 -0
- lumibot/traders/trader.py +1 -1
- lumibot/trading_builtins/__pycache__/__init__.cpython-312.pyc +0 -0
- lumibot/trading_builtins/__pycache__/custom_stream.cpython-312.pyc +0 -0
- lumibot/trading_builtins/__pycache__/safe_list.cpython-312.pyc +0 -0
- lumibot-4.1.1.data/data/ThetaTerminal.jar +0 -0
- {lumibot-4.0.23.dist-info → lumibot-4.1.1.dist-info}/METADATA +1 -2
- {lumibot-4.0.23.dist-info → lumibot-4.1.1.dist-info}/RECORD +161 -44
- tests/backtest/check_timing_offset.py +198 -0
- tests/backtest/check_volume_spike.py +112 -0
- tests/backtest/comprehensive_comparison.py +166 -0
- tests/backtest/debug_comparison.py +91 -0
- tests/backtest/diagnose_price_difference.py +97 -0
- tests/backtest/direct_api_comparison.py +203 -0
- tests/backtest/profile_thetadata_vs_polygon.py +255 -0
- tests/backtest/root_cause_analysis.py +109 -0
- tests/backtest/test_accuracy_verification.py +244 -0
- tests/backtest/test_daily_data_timestamp_comparison.py +801 -0
- tests/backtest/test_databento.py +4 -0
- tests/backtest/test_databento_comprehensive_trading.py +564 -0
- tests/backtest/test_debug_avg_fill_price.py +112 -0
- tests/backtest/test_dividends.py +8 -3
- tests/backtest/test_example_strategies.py +54 -47
- tests/backtest/test_futures_edge_cases.py +451 -0
- tests/backtest/test_futures_single_trade.py +270 -0
- tests/backtest/test_futures_ultra_simple.py +191 -0
- tests/backtest/test_index_data_verification.py +348 -0
- tests/backtest/test_polygon.py +45 -24
- tests/backtest/test_thetadata.py +246 -60
- tests/backtest/test_thetadata_comprehensive.py +729 -0
- tests/backtest/test_thetadata_vs_polygon.py +557 -0
- tests/backtest/test_yahoo.py +1 -2
- tests/conftest.py +20 -0
- tests/test_backtesting_data_source_env.py +249 -0
- tests/test_backtesting_quiet_logs_complete.py +10 -11
- tests/test_databento_helper.py +76 -90
- tests/test_databento_timezone_fixes.py +21 -4
- tests/test_get_historical_prices.py +6 -6
- tests/test_options_helper.py +162 -40
- tests/test_polygon_helper.py +21 -13
- tests/test_quiet_logs_requirements.py +5 -5
- tests/test_thetadata_helper.py +487 -171
- tests/test_yahoo_data.py +125 -0
- {lumibot-4.0.23.dist-info → lumibot-4.1.1.dist-info}/LICENSE +0 -0
- {lumibot-4.0.23.dist-info → lumibot-4.1.1.dist-info}/WHEEL +0 -0
- {lumibot-4.0.23.dist-info → lumibot-4.1.1.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
lumibot/traders/trader.py
CHANGED
|
@@ -191,7 +191,7 @@ class Trader:
|
|
|
191
191
|
set_log_level("ERROR")
|
|
192
192
|
else:
|
|
193
193
|
set_log_level("INFO")
|
|
194
|
-
|
|
194
|
+
# When quiet_logs=False, allow INFO logs to console (respects BACKTESTING_QUIET_LOGS)
|
|
195
195
|
else:
|
|
196
196
|
# Live trades should always have full logging for both console and file
|
|
197
197
|
set_log_level("INFO")
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lumibot
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.1.1
|
|
4
4
|
Summary: Backtesting and Trading Library, Made by Lumiwealth
|
|
5
5
|
Home-page: https://github.com/Lumiwealth/lumibot
|
|
6
6
|
Author: Robert Grzesik
|
|
@@ -43,7 +43,6 @@ Requires-Dist: psycopg2-binary
|
|
|
43
43
|
Requires-Dist: exchange-calendars>=4.6.0
|
|
44
44
|
Requires-Dist: duckdb
|
|
45
45
|
Requires-Dist: tabulate
|
|
46
|
-
Requires-Dist: thetadata==0.9.11
|
|
47
46
|
Requires-Dist: databento>=0.42.0
|
|
48
47
|
Requires-Dist: holidays
|
|
49
48
|
Requires-Dist: psutil
|
|
@@ -1,20 +1,34 @@
|
|
|
1
1
|
lumibot/__init__.py,sha256=fHJI9tgI2gk8n7Z8v8bopekW7oXIa8Rm3nYKwhQkYxo,4378
|
|
2
2
|
lumibot/constants.py,sha256=aQT0_QR7sCQuNPizeo2lQNhF0xd5g_H2_gr_-kG2AXM,629
|
|
3
|
-
lumibot/credentials.py,sha256=
|
|
4
|
-
lumibot/
|
|
3
|
+
lumibot/credentials.py,sha256=es7sXNnOmo6-jXuLQG_P9U-GEOmUZG0rXe1YS2Lqp_k,31354
|
|
4
|
+
lumibot/__pycache__/__init__.cpython-312.pyc,sha256=EFyN3QSJKQNZNQgz2UawwgLzTQzWkxlPYjbltXzeoA8,3391
|
|
5
|
+
lumibot/__pycache__/constants.cpython-312.pyc,sha256=YMXHvscXtrYUQ55e8EB-NI_aW3RajDEmrkeow8q8h-Y,1043
|
|
6
|
+
lumibot/__pycache__/credentials.cpython-312.pyc,sha256=VQXXJYzZk4EztCTTFqXFDu2jNg84Xwmj6C6zXyl_TPE,27608
|
|
7
|
+
lumibot/backtesting/__init__.py,sha256=GZMu-_u9rg5l9z-7QvHJptyklpXObIPDRr9dKseXjmQ,874
|
|
5
8
|
lumibot/backtesting/alpaca_backtesting.py,sha256=56vnBwKjwZ-8QW92I_dlJd1AO752_WV5Mhwt8jd7x5o,31258
|
|
6
9
|
lumibot/backtesting/alpha_vantage_backtesting.py,sha256=LR3UNhJrdAKdvadiThVKdKrMZYQ_xcHzAISKPe0yqS0,417
|
|
7
|
-
lumibot/backtesting/backtesting_broker.py,sha256=
|
|
10
|
+
lumibot/backtesting/backtesting_broker.py,sha256=btn-uPXLU3iaaioiuKph-OI5Qy0lBb7G9hoWM6wXx3E,71962
|
|
8
11
|
lumibot/backtesting/ccxt_backtesting.py,sha256=O-RjuNpx5y4f-hKKwwUbrU7hAVkGEegmnvH_9nQWhAo,246
|
|
9
|
-
lumibot/backtesting/databento_backtesting.py,sha256=
|
|
12
|
+
lumibot/backtesting/databento_backtesting.py,sha256=pEM12DzUC6388lTyRv4WTvdZEhs4Ofp4E2VOjD3Azek,27998
|
|
10
13
|
lumibot/backtesting/databento_backtesting_polars.py,sha256=duWr5VfLEAyCbZJQVsJ0iftH-8SACWvuRINSlpOEHpM,26128
|
|
11
14
|
lumibot/backtesting/interactive_brokers_rest_backtesting.py,sha256=5HJ_sPX0uOUg-rbfOKDjwYVCLiXevlwtdK_3BcUwqXc,6602
|
|
12
15
|
lumibot/backtesting/pandas_backtesting.py,sha256=m-NvT4o-wFQjaZft6TXULzeZBrskO_7Z-jfy9AIkyAY,388
|
|
13
16
|
lumibot/backtesting/polygon_backtesting.py,sha256=u9kif_2_7k0P4-KDvbHhaMfSoBVejUUX7fh9H3PCVE0,12350
|
|
14
|
-
lumibot/backtesting/thetadata_backtesting.py,sha256=
|
|
17
|
+
lumibot/backtesting/thetadata_backtesting.py,sha256=BL70M2DpQqKjjwVfr7hkATQDcG9LVJxW_Vo7adPzAdM,13773
|
|
15
18
|
lumibot/backtesting/yahoo_backtesting.py,sha256=LT2524mGlrUSq1YSRnUqGW4-Xcq4USgRv2EhnV_zfs4,502
|
|
19
|
+
lumibot/backtesting/__pycache__/__init__.cpython-312.pyc,sha256=hauIeSrYJulZelhymVBuuqMIGoWAWqrkQn5Zblku1Aw,1062
|
|
20
|
+
lumibot/backtesting/__pycache__/alpaca_backtesting.cpython-312.pyc,sha256=g_JuOAKCEtPiPyIdPZv8V02xhgYtjCUB7qrpMgRJVPo,27759
|
|
21
|
+
lumibot/backtesting/__pycache__/alpha_vantage_backtesting.cpython-312.pyc,sha256=DC6KxajzVQ5HAMxVEh-uUwu_jAE9LbkjkU3Y-wOskB0,814
|
|
22
|
+
lumibot/backtesting/__pycache__/backtesting_broker.cpython-312.pyc,sha256=X-4ZtuIz2UipTYmGBBqYUkQdVyrB9YRyVkScPVZY0Iw,61264
|
|
23
|
+
lumibot/backtesting/__pycache__/ccxt_backtesting.cpython-312.pyc,sha256=l0SCIDJpuLS9XXvpoEYLKvbR6HUSnoKDSZgdhZWRmLw,724
|
|
24
|
+
lumibot/backtesting/__pycache__/databento_backtesting.cpython-312.pyc,sha256=N5DBMvnIP065iuknF56qD5FLh1HbWNMOuZhNktWmVqU,18919
|
|
25
|
+
lumibot/backtesting/__pycache__/interactive_brokers_rest_backtesting.cpython-312.pyc,sha256=sMhctHR4iu231rXJTH9P0xZZ8ctCIGQ02RVshYl8fkE,7562
|
|
26
|
+
lumibot/backtesting/__pycache__/pandas_backtesting.cpython-312.pyc,sha256=H7sUPgTAVvMli9uFWUddJ9LVRlZpvaqRUEdqjf-9yNE,963
|
|
27
|
+
lumibot/backtesting/__pycache__/polygon_backtesting.cpython-312.pyc,sha256=-_5VWqMHR9GrI-_hkBp50L_09DQl2OUQJKguMlevCwY,12494
|
|
28
|
+
lumibot/backtesting/__pycache__/thetadata_backtesting.cpython-312.pyc,sha256=QJ1LFWPm-nEc5o2XGaH-DQf2tJGaeZMQI-MALZgzocs,12080
|
|
29
|
+
lumibot/backtesting/__pycache__/yahoo_backtesting.cpython-312.pyc,sha256=j78lUPeuqMvHav76cmj-zBWmYl_U8Sj5-SGMSF1iPEE,916
|
|
16
30
|
lumibot/brokers/__init__.py,sha256=MGWKHeH3mqseYRL7u-KX1Jp2x9EaFO4Ol8sfNSxzu1M,404
|
|
17
|
-
lumibot/brokers/alpaca.py,sha256=
|
|
31
|
+
lumibot/brokers/alpaca.py,sha256=qbmjKCAmMU9Nu9ceOkSNA-CAxewHpkExSWK_P6b8T_w,61115
|
|
18
32
|
lumibot/brokers/bitunix.py,sha256=hwcYC4goXsukSHSevb9W5irJz2lJt5tSgK2X5S0VyUs,34555
|
|
19
33
|
lumibot/brokers/broker.py,sha256=01cBrBjeiQGT9LMdZ2EgrSYT-xyoKz9JhVZkQQr1QxU,71951
|
|
20
34
|
lumibot/brokers/ccxt.py,sha256=9F8YeEF9HBRGgcwJ9WTSb2pKRXlh_zUj-CeA1j4K77w,31434
|
|
@@ -23,13 +37,27 @@ lumibot/brokers/interactive_brokers.py,sha256=qOTvOLOk01_LnF7B-t_5gtmuDtXitqV_WU
|
|
|
23
37
|
lumibot/brokers/interactive_brokers_rest.py,sha256=CT6L2NZE2jMuSreRSiR6iQbcTLa55SlLduIxSSM2QDM,54161
|
|
24
38
|
lumibot/brokers/projectx.py,sha256=JT7ysIQ4ek-yZdNrmuZYA6aKZMinSh1GnraetDrsjh0,78055
|
|
25
39
|
lumibot/brokers/schwab.py,sha256=yo0hz_mzey7egUt0akx58JQkfycA2VV5zsaDg0jFEuI,90865
|
|
40
|
+
lumibot/brokers/tradeovate.py,sha256=NBGw79aWWL0JlNF34EAJQ5dfB3HkiGuWhuSVQ5yg1ZI,22091
|
|
26
41
|
lumibot/brokers/tradier.py,sha256=E45lj4LV-lrF3mKgtZtoYDXoetgbnFlsmYb5HI7bgbM,50863
|
|
27
42
|
lumibot/brokers/tradovate.py,sha256=8YaadpvoJyA-IkK6BCENLvCRfYSMnG-uTxkvDB2Sd94,38668
|
|
43
|
+
lumibot/brokers/__pycache__/__init__.cpython-312.pyc,sha256=jaM9qF-rAlxhkFo8M7tPr9mAqWIrpH32Jx-rBkXLRoY,752
|
|
44
|
+
lumibot/brokers/__pycache__/alpaca.cpython-312.pyc,sha256=qraNX7CCjBcu17YXU23IMfs3x81yi4Cu6a8crpVTxUg,60648
|
|
45
|
+
lumibot/brokers/__pycache__/bitunix.cpython-312.pyc,sha256=p6p1uSRbXh6zwLjGuQzvaAotlLXSPtLLxGFuUFrBIU4,41059
|
|
46
|
+
lumibot/brokers/__pycache__/broker.cpython-312.pyc,sha256=OPPAizwXEbms5IcinLkN9iA9R-CWYHnZ3Jeof5kLU0k,78800
|
|
47
|
+
lumibot/brokers/__pycache__/ccxt.cpython-312.pyc,sha256=o0YJxaAA3P_rqj58WY7HzddoBwwcnXz2F4Q_zNwjHsk,32670
|
|
48
|
+
lumibot/brokers/__pycache__/example_broker.cpython-312.pyc,sha256=0BL0vaPVeoKYOeZeMB-sJDBTCMp-X7owCYJa1BOOe_M,10540
|
|
49
|
+
lumibot/brokers/__pycache__/interactive_brokers.cpython-312.pyc,sha256=bXfGQL8b1AWabOw02od4cAoZ7AQjwATmzQpnjN6D72Q,72169
|
|
50
|
+
lumibot/brokers/__pycache__/interactive_brokers_rest.cpython-312.pyc,sha256=m5IF5xE_cA_C2DZIEx7haqFCKm7NI5kt6OJQ47EQZYk,51086
|
|
51
|
+
lumibot/brokers/__pycache__/projectx.cpython-312.pyc,sha256=5iNIXUBRrEpfNLJxD30Sp5abppPeLQAuK1ZRE0NSxqI,74400
|
|
52
|
+
lumibot/brokers/__pycache__/schwab.cpython-312.pyc,sha256=24U83vt_fINpxL1SyXvr1nDYzgscOljfI7hsLDlj7Ow,85129
|
|
53
|
+
lumibot/brokers/__pycache__/tradier.cpython-312.pyc,sha256=eEsMhoV8_TsA_cB8n1H0BToMuRmnS_URNCchC9l5WKs,47681
|
|
54
|
+
lumibot/brokers/__pycache__/tradovate.cpython-312.pyc,sha256=PdM1Q-6emm0IFNlKOUUX5f4YWAu0Au2sfdOi-11127k,41509
|
|
28
55
|
lumibot/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
56
|
lumibot/components/configs_helper.py,sha256=e4-2jBmjsIDeMQ9fbQ9j2U6WlHCe2z9bIQtJNlP_iEs,3066
|
|
30
57
|
lumibot/components/drift_rebalancer_logic.py,sha256=KL1S9Su5gxibGzl2fw_DH8StzXvjFfFl23sOFGHgIZI,28653
|
|
31
58
|
lumibot/components/grok_helper.py,sha256=vgyPAs63VoNsfZojMoHYRLckb-CFiZkHIlY8HSYZLQs,15382
|
|
32
|
-
lumibot/components/
|
|
59
|
+
lumibot/components/grok_news_helper.py,sha256=7GFtSuRkBo4-3IcUmC6qhuf7iekoVyyP7q5jyUjAWTc,11007
|
|
60
|
+
lumibot/components/options_helper.py,sha256=pUihHFEv5w17pXACE3xw0Tq6tHb9s05fzttlg4hmD7E,64931
|
|
33
61
|
lumibot/components/perplexity_helper.py,sha256=0dhAIXunvUnTKIFFdYbFt8adnSIavKRqXkQ91fjsDPI,31432
|
|
34
62
|
lumibot/components/quiver_helper.py,sha256=s0Y-tL1y2S1mYlbtlRTcL5R4WV0HYOgiSJ9hT41Hzrw,14380
|
|
35
63
|
lumibot/components/vix_helper.py,sha256=tsWHFQzOJCjdmSGgmnYIty0K5ua-iAgBiRlyRIpGli0,61940
|
|
@@ -40,35 +68,69 @@ lumibot/data_sources/bitunix_data.py,sha256=H2u4fJVEJqmNrqJnYs1hucZyg4N3dEtCB9JZ
|
|
|
40
68
|
lumibot/data_sources/ccxt_backtesting_data.py,sha256=FgVVMgA0WLF1RYlSNENN7jkppUj9hwYccsyPLadTJuA,10791
|
|
41
69
|
lumibot/data_sources/ccxt_data.py,sha256=kvLtfcXfS_V6yILzUATdQMa07lZdspMtDez0boFE4DE,7766
|
|
42
70
|
lumibot/data_sources/data_source.py,sha256=oOZ9hdg2OUAFT5yCQ8uExDEoNYqqeswDoHdVxHhJACs,28225
|
|
43
|
-
lumibot/data_sources/data_source_backtesting.py,sha256=
|
|
71
|
+
lumibot/data_sources/data_source_backtesting.py,sha256=hamqm1uHS34tS7kVslqcJxllHxUS4szgzKTngYsMc4o,8610
|
|
44
72
|
lumibot/data_sources/databento_data.py,sha256=GdD9UwLhRkbWwVpqssO6hT_pALh_V3t1aIO_j90FJFk,14210
|
|
45
73
|
lumibot/data_sources/databento_data_polars.py,sha256=7Nl6TDfP4piUSiZs3KqFuZkdseEu3-7F37mWUC6P76U,36479
|
|
46
|
-
lumibot/data_sources/databento_data_polars_backtesting.py,sha256=
|
|
74
|
+
lumibot/data_sources/databento_data_polars_backtesting.py,sha256=0YA8O7qe8aTxdFcc9ALhUZSHUJH70PnNG0eK1ZpLZt0,25864
|
|
47
75
|
lumibot/data_sources/databento_data_polars_live.py,sha256=NJc1nHU6P94uUZQWtQ0z5-bi1SRKCkW4-yCFmwZ5FDI,36479
|
|
48
76
|
lumibot/data_sources/example_broker_data.py,sha256=WkCc3rLyOOI4GzLptUwhqeFRkEWQsM4y3tdzUbHPfik,2066
|
|
49
77
|
lumibot/data_sources/exceptions.py,sha256=fYS44FgrzyDAuPqZRo3RiZKijjcurcG81HkL2dWURX0,557
|
|
50
78
|
lumibot/data_sources/interactive_brokers_data.py,sha256=2e0cqOHaveL9XdlZ_N98vehUuoKaHqhV4BelMIScUqQ,13894
|
|
51
79
|
lumibot/data_sources/interactive_brokers_rest_data.py,sha256=QaODbhFteB4rT-ssTu1nA006bPXu1srYR_Hm1RSWEvQ,45873
|
|
52
|
-
lumibot/data_sources/pandas_data.py,sha256=
|
|
53
|
-
lumibot/data_sources/polars_mixin.py,sha256=
|
|
80
|
+
lumibot/data_sources/pandas_data.py,sha256=yDJJHnXrCzSrR6-EZlTbtNrzBiOD4w9UVZEwW1-Q2SA,21067
|
|
81
|
+
lumibot/data_sources/polars_mixin.py,sha256=oWPIWaHVYWQJIFAH-WC1vrLA7ZNo9HMGO490JNT2UUc,17294
|
|
54
82
|
lumibot/data_sources/polygon_data_polars.py,sha256=fvXeS9kghITbQ0mM8ocyyusAMJmUBArkK-MZrRXnBKs,26952
|
|
55
83
|
lumibot/data_sources/projectx_data.py,sha256=WXCyPptehR2r3Fg9ou6r9ISNb3p5OaHfqPgVyi6q_Ws,24953
|
|
56
84
|
lumibot/data_sources/schwab_data.py,sha256=Z4NOcO3UZj8fy7Jp2ZqeE9PyRPj2SNGTjuR7l8nQmlg,29472
|
|
57
|
-
lumibot/data_sources/
|
|
85
|
+
lumibot/data_sources/tradeovate_data.py,sha256=4MGOa0slp1uhXTceLnjT0nx6Qd3zg6C84vd2KXUdZKE,3475
|
|
86
|
+
lumibot/data_sources/tradier_data.py,sha256=DZNg-4xQ3GsLMEmfa-8Cjc-vIKjZqZdf45QDwY5opSk,17051
|
|
58
87
|
lumibot/data_sources/tradovate_data.py,sha256=TY1MCXVTqiJTAYKN_5oinFHuvn4q6P5Re1e8brnGpkk,3533
|
|
59
88
|
lumibot/data_sources/yahoo_data.py,sha256=Po7SCSYA1xIMmvK914IcqrY0NQJHTUxQtde6Nnie1G8,18802
|
|
60
89
|
lumibot/data_sources/yahoo_data_polars.py,sha256=xXzvDqO_3hT_lrp4S8w1WWDVLqjR6FAiLpCFpcY6dr8,13955
|
|
90
|
+
lumibot/data_sources/__pycache__/__init__.cpython-312.pyc,sha256=GgkwSu-sXW18J1PTVh_4-V67RdhmR-aSRrZUNAhNExw,1506
|
|
91
|
+
lumibot/data_sources/__pycache__/alpaca_data.cpython-312.pyc,sha256=IpdhX0lcIkd0g9CkeiHf98dHND59C0Et2BovXfnYQlQ,45204
|
|
92
|
+
lumibot/data_sources/__pycache__/alpha_vantage_data.cpython-312.pyc,sha256=ELJtQediKt7pAOfT291zx4PbIAcdP7FCjhRiHAo9FT0,6011
|
|
93
|
+
lumibot/data_sources/__pycache__/bitunix_data.cpython-312.pyc,sha256=bEql3t9DeGbVPI2aggtLG0qzTr_hoNGueQORlJDUcd0,10112
|
|
94
|
+
lumibot/data_sources/__pycache__/ccxt_backtesting_data.cpython-312.pyc,sha256=XOyJb978JCu9bZtRwvgFC_CByXFLP24BZ-qvmI-nBe8,12615
|
|
95
|
+
lumibot/data_sources/__pycache__/ccxt_data.cpython-312.pyc,sha256=6DIpOY6wIQoyDJUa0fKtptP3vU2FoS5oy4blsmLgmho,9092
|
|
96
|
+
lumibot/data_sources/__pycache__/data_source.cpython-312.pyc,sha256=TlXGkd2Lc2z89_nnuJZQtVBT57s1VTA-V34zM-fRkJY,28639
|
|
97
|
+
lumibot/data_sources/__pycache__/data_source_backtesting.cpython-312.pyc,sha256=UljOjipy2PXAHCmR2mXlFNuOkuQm1s0u5NvhoniWt4g,9048
|
|
98
|
+
lumibot/data_sources/__pycache__/databento_data_polars_backtesting.cpython-312.pyc,sha256=o45ZHrBVxm9iMzxfBP8FAnpM-nOMTnTtgcQvN9sIfto,17896
|
|
99
|
+
lumibot/data_sources/__pycache__/databento_data_polars_live.cpython-312.pyc,sha256=vRcL0q9r89D2RUfrrnO4FU_WrqVT9Ncdl7u2I7gSfJo,37988
|
|
100
|
+
lumibot/data_sources/__pycache__/example_broker_data.cpython-312.pyc,sha256=1VCXHZ2O_NPs4-_ZlgYa0zIZYH7UuCBP4VGCZrln5Vg,3222
|
|
101
|
+
lumibot/data_sources/__pycache__/exceptions.cpython-312.pyc,sha256=CWH4LO6epPD58gqmHv4wY4oMCx2tDjpPirCBNJQqE9s,1283
|
|
102
|
+
lumibot/data_sources/__pycache__/interactive_brokers_data.cpython-312.pyc,sha256=GehJopS9q7QTKunZxgXIreX_Oie6PIq7GeEeLK-JbUY,13418
|
|
103
|
+
lumibot/data_sources/__pycache__/interactive_brokers_rest_data.cpython-312.pyc,sha256=Xo3IdB6jj51k4ysOHFvMOPBrJRhicjXR0sX2l-sBpwo,48111
|
|
104
|
+
lumibot/data_sources/__pycache__/pandas_data.cpython-312.pyc,sha256=-5yL7QjAZlu9nYuzejkDY6vmSa2BRVarShyEBAYvxZE,22368
|
|
105
|
+
lumibot/data_sources/__pycache__/polars_mixin.cpython-312.pyc,sha256=E8Oym2yFCqxFjZFYnZ8U7YO3-zoTQguId8a9Pheb_o8,14168
|
|
106
|
+
lumibot/data_sources/__pycache__/polygon_data_polars.cpython-312.pyc,sha256=wiKlGfn1B77kTfQOgur2z9w3iMX7IOst8h_5ZEuQE2U,26873
|
|
107
|
+
lumibot/data_sources/__pycache__/projectx_data.cpython-312.pyc,sha256=Ry4NQxBG0Y40uBwzzjb2q1WoVaepNdxXePaqQ_YoFDs,25784
|
|
108
|
+
lumibot/data_sources/__pycache__/schwab_data.cpython-312.pyc,sha256=CGuPWiynAa87lQfBET-M3rd7Mt5vYTpEkwYLz2zZVys,29111
|
|
109
|
+
lumibot/data_sources/__pycache__/tradier_data.cpython-312.pyc,sha256=gC2bUXi0qreXScJBnOXU0IrqnHv680N71I_qCib3fl4,18316
|
|
110
|
+
lumibot/data_sources/__pycache__/tradovate_data.cpython-312.pyc,sha256=kc02HAag5Xla3bBulm1fn9KRD7f0yp6hxwW05kXcq_Q,4342
|
|
111
|
+
lumibot/data_sources/__pycache__/yahoo_data_polars.cpython-312.pyc,sha256=RvcWAwuiNMuuxlK0pfoay38zw9oRmf8hTVuypGUYEJc,14988
|
|
61
112
|
lumibot/entities/__init__.py,sha256=PvY1km9u_HtKXI0f3w1ZooHwMMWqYA8gBeKVapJk4Qg,410
|
|
62
|
-
lumibot/entities/asset.py,sha256=
|
|
113
|
+
lumibot/entities/asset.py,sha256=_yq8oas_NwkAtbQDDOLVmI9FoqYkT6YKYVZ0aHAXGkk,29547
|
|
63
114
|
lumibot/entities/bar.py,sha256=_2gFtBzdbNPassLf1SU9J1mYKCZDner2h52qHl8e0oA,6003
|
|
64
115
|
lumibot/entities/bars.py,sha256=F0DeTVzgrJohvA4yXUvcK8plSukW-LisoWNm9AD2b4c,21270
|
|
65
116
|
lumibot/entities/chains.py,sha256=4P42AUtoPrRQHnPVj-g6mJ5W2nVf17ju3gXdavZcVyk,6281
|
|
66
117
|
lumibot/entities/data.py,sha256=4vZDi9owGNX-JctqDn4_XvtH5eoCP7eL3lqapQG7ktk,26856
|
|
67
118
|
lumibot/entities/dataline.py,sha256=G9XP8K1IvChvHLs5bEfSQLwCaGvWZXe3oEsBwsqysqQ,182
|
|
68
|
-
lumibot/entities/order.py,sha256
|
|
119
|
+
lumibot/entities/order.py,sha256=XMtMXrN4gqsTOZ5FfDbwpvhyKEKN93wYFukXwZi_fHQ,55046
|
|
69
120
|
lumibot/entities/position.py,sha256=62jrKGKG2CspLWdZJ3Bo3mJxOFD-sOPKVCPbcvhJw1Q,8994
|
|
70
|
-
lumibot/entities/quote.py,sha256=
|
|
121
|
+
lumibot/entities/quote.py,sha256=p8FvJfVZhWaZD5aFaslbYnUOgwK2Kbv4l-GLZU7ekAM,3746
|
|
71
122
|
lumibot/entities/trading_fee.py,sha256=ESVgJD-AlIFeWdmsC4tXQ42PfWhRGX88lGkwnlTSXOg,1920
|
|
123
|
+
lumibot/entities/__pycache__/__init__.cpython-312.pyc,sha256=JW6tqdaA9vkUnEHjYJT2yNjXJXG1q-pma4k7fDv4myU,664
|
|
124
|
+
lumibot/entities/__pycache__/asset.cpython-312.pyc,sha256=P5DVp2iHhOqW727rDCM3eRDUxSF9JIS4YRRJuO4T93E,30767
|
|
125
|
+
lumibot/entities/__pycache__/bar.cpython-312.pyc,sha256=kdMRKaH-zuJPyDttdmVjGEmWBAjzPESH2eVZqBJ-L9U,8915
|
|
126
|
+
lumibot/entities/__pycache__/bars.cpython-312.pyc,sha256=oClUE4OdXKD1VHeUI5wckirgy9DWEe-3WDngOdrqWWg,26667
|
|
127
|
+
lumibot/entities/__pycache__/chains.cpython-312.pyc,sha256=kGvtUnC7Ldw4u4AB1jDDMuVcZEmaHOeDdeDoIuvrIzg,9466
|
|
128
|
+
lumibot/entities/__pycache__/data.cpython-312.pyc,sha256=yyeOJm9N6hzJSw-26i7BSuN764gOR8Dvp2hpE688t2Q,27994
|
|
129
|
+
lumibot/entities/__pycache__/dataline.cpython-312.pyc,sha256=-ZEV4BGQT_oL-_0dK845vFeIDQ7b2SRLO6HcY9El3Ow,637
|
|
130
|
+
lumibot/entities/__pycache__/order.cpython-312.pyc,sha256=b_Vfji4nBLsfnYKcKCaqCnLYi70FrzYzBPoNr67ilPI,51950
|
|
131
|
+
lumibot/entities/__pycache__/position.cpython-312.pyc,sha256=him2imuHAqfBnB2GhmS8JAdOMrFsCEAXHnK5oL0qFfA,11002
|
|
132
|
+
lumibot/entities/__pycache__/quote.cpython-312.pyc,sha256=6prQDmk1uLzLXvSiAQOIMcRszhnUZajm-ummviUZ4LY,4232
|
|
133
|
+
lumibot/entities/__pycache__/trading_fee.cpython-312.pyc,sha256=mc73RYA6dNjD9HpcvBF-3dJaz_wsFytuvU2igd0xrLU,2416
|
|
72
134
|
lumibot/example_strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
135
|
lumibot/example_strategies/bitunix_futures_example.py,sha256=SaOpQ2SQA8K2ZlTkbJ05eZLE8dXdMyXX5M9fyXGmzaI,3006
|
|
74
136
|
lumibot/example_strategies/ccxt_backtesting_example.py,sha256=e-stFvUcWgjxbT3E1jwvipN7XSXatw1Di27Jj-wV_NU,5549
|
|
@@ -92,44 +154,79 @@ lumibot/example_strategies/stock_momentum.py,sha256=ln1qNafk1IwQjeJsFxunJSxiPItF
|
|
|
92
154
|
lumibot/example_strategies/stock_oco.py,sha256=Lm-VNDjREPkGfbsVpH7dS2OrIw5g8NL_AcMYXSwzwXU,2482
|
|
93
155
|
lumibot/example_strategies/strangle.py,sha256=naYiJLcjKu9yb_06WOMAUg8t-mFEo_F0BS62eY-5v20,12838
|
|
94
156
|
lumibot/example_strategies/test_broker_functions.py,sha256=wnVS-M_OtzMgaXVBgshVEqXKGEnHVzVL_O4x5qR86cM,4443
|
|
157
|
+
lumibot/example_strategies/__pycache__/__init__.cpython-312.pyc,sha256=vawGE5mjtFUCyn6dqWSmZM2ij5pVT6YF4Cjn3KE0N-s,227
|
|
158
|
+
lumibot/example_strategies/__pycache__/test_broker_functions.cpython-312-pytest-8.4.1.pyc,sha256=Jvch4BJBA5IYmQx86yf8dDpWYFtV5ETkzrLFSxQoGkc,5452
|
|
95
159
|
lumibot/resources/conf.yaml,sha256=rjB9-10JP7saZ_edjX5bQDGfuc3amOQTUUUr-UiMpNA,597
|
|
96
160
|
lumibot/strategies/__init__.py,sha256=jEZ95K5hG0f595EXYKWwL2_UsnWWk5Pug361PK2My2E,79
|
|
97
|
-
lumibot/strategies/_strategy.py,sha256=
|
|
161
|
+
lumibot/strategies/_strategy.py,sha256=QCrrZQzTZ0GjsNyNNxHNI3WaNZ98yvxT-E0dbOBETMg,109685
|
|
98
162
|
lumibot/strategies/session_manager.py,sha256=Nze6UYNSPlCsf-tyHvtFqUeL44WSNHjwsKrIepvsyCY,12956
|
|
99
|
-
lumibot/strategies/strategy.py,sha256=
|
|
100
|
-
lumibot/strategies/strategy_executor.py,sha256=
|
|
163
|
+
lumibot/strategies/strategy.py,sha256=i-jAt2a1DXSiKT1gMQ5vXkbLb29x9vAFZl9zehbfJ1s,169301
|
|
164
|
+
lumibot/strategies/strategy_executor.py,sha256=IrHwDOu5s3gG65dz7FL-0kllWy7COci7JFyB4iiPUrg,70801
|
|
165
|
+
lumibot/strategies/__pycache__/__init__.cpython-312.pyc,sha256=3By3e_Y9aa3NI5-Kj6qhaVMRddkQnK6QQDnnykt0vu4,322
|
|
166
|
+
lumibot/strategies/__pycache__/_strategy.cpython-312.pyc,sha256=x1oUZN1UlKakcUxM14hynmV3-iErPP3j0F_qyEBL-ws,96783
|
|
167
|
+
lumibot/strategies/__pycache__/strategy.cpython-312.pyc,sha256=0IWVs5G4s_N4zh-rxGNak-ilexFLFrMfy-a8UXFppus,177262
|
|
168
|
+
lumibot/strategies/__pycache__/strategy_executor.cpython-312.pyc,sha256=1Nh3xpSJnu3-w-nV05jEyFObmYBhaE87q8Ajeundfyc,65836
|
|
101
169
|
lumibot/tools/__init__.py,sha256=oRRoK2NBkfnc0kueAfY0HrWVKgzRBO1hlglVMR4jr5M,1501
|
|
102
170
|
lumibot/tools/alpaca_helpers.py,sha256=nhBS-sv28lZfIQ85szC9El8VHLrCw5a5KbsGOOEjm6w,3147
|
|
103
171
|
lumibot/tools/bitunix_helpers.py,sha256=-UzrN3w_Y-Ckvhl7ZBoAcx7sgb6tH0KcpVph1Ovm3gw,25780
|
|
104
172
|
lumibot/tools/black_scholes.py,sha256=TBjJuDTudvqsbwqSb7-zb4gXsJBCStQFaym8xvePAjw,25428
|
|
105
173
|
lumibot/tools/ccxt_data_store.py,sha256=VXLSs0sWcwjRPZzbuEeVPS-3V6D10YnYMfIyoTPTG0U,21225
|
|
106
|
-
lumibot/tools/databento_helper.py,sha256=
|
|
107
|
-
lumibot/tools/databento_helper_polars.py,sha256=
|
|
174
|
+
lumibot/tools/databento_helper.py,sha256=cbeMTrJOTu2E_Z9s021V_RGa4xrQ1LYI03SRi29pnQA,42976
|
|
175
|
+
lumibot/tools/databento_helper_polars.py,sha256=yQN4nIWg-WNXKoW8s1x8GUoq3rtmf6-NWNPnjFSZz2Q,53153
|
|
176
|
+
lumibot/tools/databento_roll.py,sha256=48HAw3h6OngCK4UTl9ifpjo-ki8qmB6OoJUrHp0gRmE,6767
|
|
108
177
|
lumibot/tools/debugers.py,sha256=ga6npFsS9cpKtTXaygh9t2_txCElg3bfzfeqDBvSL8k,485
|
|
109
178
|
lumibot/tools/decorators.py,sha256=gokLv6s37C1cnbnFSVOUc4RaVJ5aMTU2C344Vvi3ycs,2275
|
|
110
179
|
lumibot/tools/futures_symbols.py,sha256=hFV02dk9cKucdaFOQAiQrlS15AJzdZ0qCuzVn7PfoPg,7851
|
|
111
180
|
lumibot/tools/helpers.py,sha256=Q459K0aQGUME2CfwBCXmKbUQwiGR9FKSjUN2yLbBMIE,17873
|
|
112
181
|
lumibot/tools/indicators.py,sha256=OnqVMDOFnymbZFobp6Dm8zBzTA4Lt2lZtK8S2ldkAa0,37998
|
|
113
|
-
lumibot/tools/lumibot_logger.py,sha256=
|
|
182
|
+
lumibot/tools/lumibot_logger.py,sha256=8Crm8XaZx4d4bjprpcR584i4PbqQHqEg2in9sJfiZbU,39267
|
|
114
183
|
lumibot/tools/lumibot_time.py,sha256=gWgq6CAYds-btXRb5YbqXH2jcgwdH1JhR5roSYgWjbo,1085
|
|
115
184
|
lumibot/tools/pandas.py,sha256=fRhCbtff5EcXjuhc5gaPSUeZvk9qomVGexAQl8YwgNs,2191
|
|
116
|
-
lumibot/tools/polygon_helper.py,sha256=
|
|
185
|
+
lumibot/tools/polygon_helper.py,sha256=Gw_4pjln-7P4ZzZGESeaJQmoryZHI4oS8flFpOjEROM,40477
|
|
117
186
|
lumibot/tools/polygon_helper_async.py,sha256=YHDXa9kmkkn8jh7hToY6GP5etyXS9Tj-ukyHZuoDon4,10080
|
|
118
187
|
lumibot/tools/polygon_helper_polars_optimized.py,sha256=NaIZ-5Av-G2McPEKHyJ-x65W72W_Agnz4lRgvXfQp8c,30415
|
|
119
188
|
lumibot/tools/projectx_helpers.py,sha256=EIemLfbG923T_RBV_i6s6A9xgs7dt0et0oCnhFwdWfA,58299
|
|
120
189
|
lumibot/tools/schwab_helper.py,sha256=CXnYhgsXOIb5MgmIYOp86aLxsBF9oeVrMGrjwl_GEv0,11768
|
|
121
|
-
lumibot/tools/thetadata_helper.py,sha256=
|
|
190
|
+
lumibot/tools/thetadata_helper.py,sha256=mQKTQ_QO97IOetFJLD79NORU2yQpLKe12QwVl7mHUFk,42704
|
|
122
191
|
lumibot/tools/types.py,sha256=x-aQBeC6ZTN2-pUyxyo69Q0j5e0c_swdfe06kfrWSVc,1978
|
|
123
192
|
lumibot/tools/yahoo_helper.py,sha256=htcKKkuktatIckVKfLc_ms0X75mXColysQhrZW244z8,19497
|
|
124
193
|
lumibot/tools/yahoo_helper_polars_optimized.py,sha256=g9xBN-ReHSW4Aj9EMU_OncBXVS1HpfL8LTHit9ZxFY4,7417
|
|
194
|
+
lumibot/tools/__pycache__/__init__.cpython-312.pyc,sha256=ZJz-PqTtkp03u6hSftIwdQHSyHlHE0GzOBIMCUu7li0,1133
|
|
195
|
+
lumibot/tools/__pycache__/alpaca_helpers.cpython-312.pyc,sha256=XudHieySE48xcgoOjvZRha3q-Z9zTuGlTVxGnE1R940,3668
|
|
196
|
+
lumibot/tools/__pycache__/bitunix_helpers.cpython-312.pyc,sha256=ySI8EwpWihEQFU7aiTFb3Z8ulHpExgYTo-FfMcq87Wc,26515
|
|
197
|
+
lumibot/tools/__pycache__/black_scholes.cpython-312.pyc,sha256=Ob4i4z-9C6okf6Pc9vRRakgmQD39hZ_M0E2W2PLIqC4,33744
|
|
198
|
+
lumibot/tools/__pycache__/ccxt_data_store.cpython-312.pyc,sha256=8k6crHbKZ1uZavaHqMijf4IE1YN7oX2T4Hov45jlx_E,25063
|
|
199
|
+
lumibot/tools/__pycache__/databento_helper.cpython-312.pyc,sha256=ennub9ZPxQxjEYUbcoU2Nr1DRTwL7WNv8BYoBPjjxDY,32832
|
|
200
|
+
lumibot/tools/__pycache__/databento_helper_polars.cpython-312.pyc,sha256=1DPgJobRPcAeD2oVmM-YulrvueKgE_H0D8uPUSmBp5s,50874
|
|
201
|
+
lumibot/tools/__pycache__/debugers.cpython-312.pyc,sha256=xchf2IOO-vkKaZmHJUqqSC00rn1EvFYoDFUDtNTFSCM,1371
|
|
202
|
+
lumibot/tools/__pycache__/decorators.cpython-312.pyc,sha256=jBWNB2uN4kcPVp9BbJHn4ma5GwZsTA9BG_Dwc-r3P2w,3569
|
|
203
|
+
lumibot/tools/__pycache__/helpers.cpython-312.pyc,sha256=EhjvGYmeCP9muJleXLunetMKMbyLlFLVQ21vtXQiEW4,23615
|
|
204
|
+
lumibot/tools/__pycache__/indicators.cpython-312.pyc,sha256=f7jyP5KyYY7HfFWCEHyzwUAFtyWPrXJPghfoyu4FpNs,36381
|
|
205
|
+
lumibot/tools/__pycache__/lumibot_logger.cpython-312.pyc,sha256=Oofui32VTyLT7LuDdu_xZX1xm75ooWDAjq567hIPw2o,41943
|
|
206
|
+
lumibot/tools/__pycache__/pandas.cpython-312.pyc,sha256=ocPN_aR7-T6Gxs4QTsijpvv3-ggPCuOJ9V6M4nZPAYo,4440
|
|
207
|
+
lumibot/tools/__pycache__/polygon_helper.cpython-312.pyc,sha256=ofOf3sHL3BPbqxX_Xfin3kO86QiSC-oyVf7c_bRRxwQ,37603
|
|
208
|
+
lumibot/tools/__pycache__/polygon_helper_async.cpython-312.pyc,sha256=fj1a-6B9NL4eoQzd3L_23V3nxseJOGvi2bDJ6o6HuZc,13845
|
|
209
|
+
lumibot/tools/__pycache__/polygon_helper_polars_optimized.cpython-312.pyc,sha256=PM27AFv6X-ZAEYY2rm72XenZ6nIzqYauhcL0O8Mo8oY,31630
|
|
210
|
+
lumibot/tools/__pycache__/projectx_helpers.cpython-312.pyc,sha256=oKHoJEvCl0Pi6Gs_pVsGgkzlOA2YE6NTzvm2DdRLAOA,65464
|
|
211
|
+
lumibot/tools/__pycache__/schwab_helper.cpython-312.pyc,sha256=OqHKnUVJ76-PY4Fx-9koqwx3jMziKrT_YSputXORqu0,13856
|
|
212
|
+
lumibot/tools/__pycache__/thetadata_helper.cpython-312.pyc,sha256=FJ4_nh9UAUEmGLk9WGxCoN6q4fTf6FZ9eHHBg6vjvjw,21403
|
|
213
|
+
lumibot/tools/__pycache__/types.cpython-312.pyc,sha256=YyCgEWf3wWf5o_kRbUGsv0qvhFySCP5Lzxz5aYIVzcw,1987
|
|
214
|
+
lumibot/tools/__pycache__/yahoo_helper.cpython-312.pyc,sha256=GvFRnaYFOhFj9lQ5oAF-gkBB3HyrL1h2HEBS6Y869Zg,22579
|
|
215
|
+
lumibot/tools/__pycache__/yahoo_helper_polars_optimized.cpython-312.pyc,sha256=MI8TI9AA-kA_9B5rZ87jWZvxJp3EzVOi4-MHqWbAcRI,8592
|
|
125
216
|
lumibot/traders/__init__.py,sha256=JgpSuhNCl1OFoVFTQzQpPOpg6fZ-QbT7-3NsV9Yb89c,27
|
|
126
217
|
lumibot/traders/debug_log_trader.py,sha256=Kzh0RFg_CthADULLXCLq_PMNrWSpuH2UhQnQBoH3Ybw,364
|
|
127
|
-
lumibot/traders/trader.py,sha256=
|
|
218
|
+
lumibot/traders/trader.py,sha256=KMif3WoZtnSxA0BzoK3kvkTITNELrDFIortx1BYBv8s,9677
|
|
219
|
+
lumibot/traders/__pycache__/__init__.cpython-312.pyc,sha256=Vt8BsEU8iZRAR-ghKPfJxr_jA4mGyq6vKXkLgpGZJMM,256
|
|
220
|
+
lumibot/traders/__pycache__/trader.cpython-312.pyc,sha256=WJNSarXaQ1stfIEdAowUjP0Z1mk8FpJMO_awbrVhD0c,10991
|
|
128
221
|
lumibot/trading_builtins/__init__.py,sha256=vH2QL5zLjL3slfEV1YW-BvQHtEYLCFkIWTZDfh3y8LE,87
|
|
129
222
|
lumibot/trading_builtins/custom_stream.py,sha256=8_XiPT0JzyXrgnXCXoovGGUrWEfnG4ohIYMPfB_Nook,5264
|
|
130
223
|
lumibot/trading_builtins/safe_list.py,sha256=IIjZOHSiZYK25A4WBts0oJaZNOJDsjZL65MOSHhE3Ig,1975
|
|
224
|
+
lumibot/trading_builtins/__pycache__/__init__.cpython-312.pyc,sha256=ksqDHG5HzxBeh3sDNn2NjEhYtj3dI6TvuQoe03VAItg,345
|
|
225
|
+
lumibot/trading_builtins/__pycache__/custom_stream.cpython-312.pyc,sha256=w9EEoPd4LTBKmS8x6x-umicO1GwzaHlZnAv7MC2A78o,7397
|
|
226
|
+
lumibot/trading_builtins/__pycache__/safe_list.cpython-312.pyc,sha256=2MQnqSCnMHHVu_gMK-3xBVSdHFyhxGR7_UrNdOvb4So,4875
|
|
227
|
+
lumibot-4.1.1.data/data/ThetaTerminal.jar,sha256=K6GeeFcN8-gvyL2x5iq5pzD79KfPJvMK8iiezi3TmNQ,11834389
|
|
131
228
|
tests/__init__.py,sha256=3-VoT-nAuqMfwufd4ceN6fXaHl_zCfDCSXJOTp1ywYQ,393
|
|
132
|
-
tests/conftest.py,sha256=
|
|
229
|
+
tests/conftest.py,sha256=UBw_2fx7r6TZPKus2b1Qxrzmd4bg8EEBnX1vCHUuSVA,3311
|
|
133
230
|
tests/fixtures.py,sha256=wOHQsh1SGHnXe_PGi6kDWI30CS_Righi7Ig7vwSEKT4,9082
|
|
134
231
|
tests/test_alpaca.py,sha256=VffTh_T04QwMEBUFfxS0ujK1tm5joft4N7972m6mJdM,18607
|
|
135
232
|
tests/test_alpaca_auth_fix.py,sha256=wkvdxmLs4I-4ys-bOg_hFaC-hDha5aOaQNebr3NxxUQ,5924
|
|
@@ -146,9 +243,10 @@ tests/test_backtesting_broker.py,sha256=rxZGH5cgiWLmNGdI3k9fti3Fp9IOSohq8xD2E3L2
|
|
|
146
243
|
tests/test_backtesting_broker_await_close.py,sha256=WbehY7E4Qet3_Mo7lpfgjmhtI9pnJPIt9mkFI15Dzho,7545
|
|
147
244
|
tests/test_backtesting_broker_time_advance.py,sha256=FCv0nKG8BQlEjNft7kmQYm9M2CsLIZ0b7mWCllOHQxc,6378
|
|
148
245
|
tests/test_backtesting_crypto_cash_unit.py,sha256=4EO9jVajdZNV0M7zSyp4gpR_msZFoM4x5tb-6g-mHO8,11399
|
|
246
|
+
tests/test_backtesting_data_source_env.py,sha256=Y36G2f0z_BsYkNA7zxKXwlbyQxKDXYbLDV_E4qjEem0,10671
|
|
149
247
|
tests/test_backtesting_flow_control.py,sha256=pBqW-fa-HnZq0apUBltalGMM-vNJ_2A5W2SoJzMK8Mg,7208
|
|
150
248
|
tests/test_backtesting_multileg_unit.py,sha256=h1DPfVuYXXx-uq6KtUjr6_nasZuXPm_5gFat1XxCKIo,6456
|
|
151
|
-
tests/test_backtesting_quiet_logs_complete.py,sha256
|
|
249
|
+
tests/test_backtesting_quiet_logs_complete.py,sha256=x-GfOiqkiUu8pYKCzB0UUacn13Nx_cPRth7_jmPY2Y8,14155
|
|
152
250
|
tests/test_bars_aggregate_frequency_normalization.py,sha256=F9iPmijhUET2QuVnjuNImomE_NoKm3BDemF_mssZKQQ,1788
|
|
153
251
|
tests/test_bars_aggregation_timeunits.py,sha256=q4eKz4GacfgoIer-liFuV_yroTaDZ20ttlFKd2ZbCpY,2581
|
|
154
252
|
tests/test_bars_frequency_flex.py,sha256=eLkkzt2IqGBkaCfcf62WvvlPnLmlXMqP2Is_8RVke8s,3157
|
|
@@ -171,12 +269,12 @@ tests/test_databento_auto_expiry_integration.py,sha256=uPAyYTMTzEqppUUZx99G8pvnv
|
|
|
171
269
|
tests/test_databento_backtesting.py,sha256=5uGiKxQIY8eYVvgQEO6kA4GWUP4k2MCHi_S5h40gqH8,19150
|
|
172
270
|
tests/test_databento_backtesting_polars.py,sha256=V9Z7-WG2TNKpHQVF5vGJSIdgUsuhJwlopZV66FREWA0,8097
|
|
173
271
|
tests/test_databento_data.py,sha256=HakjDileGpicQc_OXeX7l8ncIDn3FtxP8ymKA6TQp8o,18860
|
|
174
|
-
tests/test_databento_helper.py,sha256=
|
|
272
|
+
tests/test_databento_helper.py,sha256=C2FRkD3341FFHc09bObEYYN7eqUsO9aewyaLX9hCdvU,43465
|
|
175
273
|
tests/test_databento_live.py,sha256=tbg2C9cyW45OYY7dKYlPMNZpgsN_sjs4yk1GR23OL6o,15648
|
|
176
|
-
tests/test_databento_timezone_fixes.py,sha256=
|
|
274
|
+
tests/test_databento_timezone_fixes.py,sha256=NsfND7yTdKH2ddiYYhO6kU3m41V7se7C4_zTvqKOGv0,11562
|
|
177
275
|
tests/test_drift_rebalancer.py,sha256=AUuEd3WIunfx3gwVdLVtq8jOHlz65UeqpO4adY1xfcs,105289
|
|
178
276
|
tests/test_futures_integration.py,sha256=3Ut0M8d5xPwHd4WcTSmP4HLC7VG_xSUXeJPX0-c0Fe8,9179
|
|
179
|
-
tests/test_get_historical_prices.py,sha256=
|
|
277
|
+
tests/test_get_historical_prices.py,sha256=0JGlFuDyQFltKRpaFp2CLKEyleD2xMmgINVzLjrTdl8,15540
|
|
180
278
|
tests/test_helpers.py,sha256=8Ay1B6I8yn3trZKrYjOs6Kbda7jmM20-TFh8LfIWpmY,11659
|
|
181
279
|
tests/test_indicator_subplots.py,sha256=5gD5EX4KbGGk9FPwkT4m230U2nkgAT6t5nbgVo-2idc,10333
|
|
182
280
|
tests/test_integration_tests.py,sha256=FJhWEJNF0OM6fAIsADnzB7EX61EvNiZBXH2Afmnd888,3071
|
|
@@ -188,12 +286,12 @@ tests/test_lumibot_logger.py,sha256=76e5yl86NWk4OYtM_be-7yaHnPA-1bO2rBNH-piX8Dk,
|
|
|
188
286
|
tests/test_market_infinite_loop_bug.py,sha256=x9O5la9FgSyeza9V6QPUoY24BeZfGySYsioqWqDUYSo,13715
|
|
189
287
|
tests/test_mes_symbols.py,sha256=Av5AM-pogp1STfWZ4A3bA2NmbaA3E9b0Dg449mfk-Ss,3106
|
|
190
288
|
tests/test_momentum.py,sha256=oakKjgnz5pNQkw0CagbbKKSux0HkOxP_iLW8-Yk0XOo,8492
|
|
191
|
-
tests/test_options_helper.py,sha256=
|
|
289
|
+
tests/test_options_helper.py,sha256=NizH8E9ZnzVWsShsHp5X6qBE8FWJ3sS2eE9bCko7y9U,27352
|
|
192
290
|
tests/test_options_helper_enhancements.py,sha256=3Ei-vy9IQfg1AnlBqofLNc-kuiQ64vouhJyIuVj3KIg,7324
|
|
193
291
|
tests/test_order.py,sha256=qN_sqsItl8L-WqSQTF0PUN0s2nxm4HKYOA6gYQ6EBJA,12110
|
|
194
292
|
tests/test_order_serialization.py,sha256=zcX5fgcYeo0jm6dlIQnUfuH56svTnKRFPtYCSI7xCJw,3710
|
|
195
293
|
tests/test_pandas_data.py,sha256=VCDhPwAuOO6twR8a5B8dmBv3wfnOENw_1Pxr9N3x9iQ,2098
|
|
196
|
-
tests/test_polygon_helper.py,sha256=
|
|
294
|
+
tests/test_polygon_helper.py,sha256=JQCRHYgdiEzZQS_8j5kChg77S-xBpLQU6ZFN73Kfz4g,26230
|
|
197
295
|
tests/test_position_serialization.py,sha256=QtBPKnGdmULLT_hKrfFzvbWWG3kfqWPW-Jv_r3theuM,4293
|
|
198
296
|
tests/test_projectx.py,sha256=jyyX9ZEOCiF557MzG1sGQYk-v6JZYZ-LVIkLlURhMhQ,18327
|
|
199
297
|
tests/test_projectx_bracket_helpers.py,sha256=Lnt-qA_6H0JcHeQaR5XNuc0O7uUCggksvYdIa3RVFEs,5554
|
|
@@ -210,35 +308,54 @@ tests/test_projectx_url_mappings.py,sha256=1E0xZe_cZtGiU-fPIfohbvsrrPjawkblR8F2M
|
|
|
210
308
|
tests/test_quiet_logs_buy_and_hold.py,sha256=GjXGeHBcNrRJoHGWLuc_LkrzcpNVzshiiBkQACczIxI,2681
|
|
211
309
|
tests/test_quiet_logs_comprehensive.py,sha256=QVkZWLAUnPEb04Ec8qKXvLzdDUkp8alez2mU_Y1Umm0,6068
|
|
212
310
|
tests/test_quiet_logs_functionality.py,sha256=MlOBUICuTy1OXCDifOW05uD7hjnZRsQ2xxQlcLkGebQ,3811
|
|
213
|
-
tests/test_quiet_logs_requirements.py,sha256=
|
|
311
|
+
tests/test_quiet_logs_requirements.py,sha256=YoUooSVLrFL8TlWPfxEiqxvSj4d8z6-qg58ja4dtOc0,7856
|
|
214
312
|
tests/test_session_manager.py,sha256=1qygN3aQ2Xe2uh4BMPm0E3V8KXLFNGq5qdL8KkZjef4,11632
|
|
215
313
|
tests/test_strategy_methods.py,sha256=j9Mhr6nnG1fkiVQXnx7gLjzGbeQmwt0UbJr_4plD36o,12539
|
|
216
|
-
tests/test_thetadata_helper.py,sha256=
|
|
314
|
+
tests/test_thetadata_helper.py,sha256=fFLUfLlucUzHc4zAFY84lwWYZ-U79moU-a8z3rkRzcI,50631
|
|
217
315
|
tests/test_tradier.py,sha256=iCEM2FTxJSzJ2oLNaRqSx05XaX_DCiMzLx1aEYPANko,33280
|
|
218
316
|
tests/test_tradier_data.py,sha256=1jTxDzQtzaC42CQJVXMRMElBwExy1mVci3NFfKjjVH0,13363
|
|
219
317
|
tests/test_tradingfee.py,sha256=2CBJgdU-73Ae4xuys-QkbCtpDTL9hwOUkRnCgLm4OmE,163
|
|
220
318
|
tests/test_tradovate.py,sha256=XW0ZyiMbRYr16hqGJIa8C1Wg5O0V0tpiUMHvejIAnEg,37436
|
|
221
319
|
tests/test_unified_logger.py,sha256=Y2rhLk6GoUs9Vj-qRvGThRUTdNohxmH2yFbb3j8Yq3g,10849
|
|
222
320
|
tests/test_vix_helper.py,sha256=jE6TZ4ufVU_0W4Jx3zJ295srsy4Xjw9qU3KwfujjZ_s,8476
|
|
321
|
+
tests/test_yahoo_data.py,sha256=84R2jCl9z2U5qKZhR68tFJou2Rfwno0Qomc8yxPfvAs,4578
|
|
223
322
|
tests/backtest/__init__.py,sha256=5hgvfU4Y_lOGEzArAzk-ng4m_elcSm7gpdnmGooJsbc,400
|
|
323
|
+
tests/backtest/check_timing_offset.py,sha256=NbzDTgJr8y0w1oz4d4HNeNTQe-o0z0hXwrnL92b2_GY,7493
|
|
324
|
+
tests/backtest/check_volume_spike.py,sha256=obMBw3SnaGFRQzXvvIEnDvZCqx7QovZ5oOUun1BKNNg,3959
|
|
325
|
+
tests/backtest/comprehensive_comparison.py,sha256=59ZMjLUMQQIKxj4H7YqtKJ9irOEjX6HQtAgqzn4widY,6599
|
|
224
326
|
tests/backtest/conftest.py,sha256=yaZ2fYmi_BI8Wr6t0eB-Su_Coq9JxtyGPvIcCPW-JRs,2451
|
|
327
|
+
tests/backtest/debug_comparison.py,sha256=y2jmwp4E2ztBCcRpSs4meBj0hsx1qyCSdBwYt1xkX70,2898
|
|
328
|
+
tests/backtest/diagnose_price_difference.py,sha256=itJADngYkztSgMtDn1aJnK_5uUtsVclGQuoneTM3Bfo,3465
|
|
329
|
+
tests/backtest/direct_api_comparison.py,sha256=4YbJIlqfqWbg_v_B1OXhKyU_8mViDfWV3y3u2d7CfaI,7225
|
|
225
330
|
tests/backtest/performance_tracker.py,sha256=oyaDvte66HveBAiU6fOsk5Z5FJaKulKN67IMnr5YTBU,4800
|
|
331
|
+
tests/backtest/profile_thetadata_vs_polygon.py,sha256=93kkcg6TaFk5N1A6GWN6wNSDBJWPsE0Hq3DdDgz1KLY,7870
|
|
332
|
+
tests/backtest/root_cause_analysis.py,sha256=L9VJUI4Dt8OpaAtTsOpYri_F75FAb-wtnkLuZKMl2pQ,3805
|
|
333
|
+
tests/backtest/test_accuracy_verification.py,sha256=NCvcmO0n6gmjsIfV06ZlpnEDwifsVM15xE_SLy5kAJg,9073
|
|
226
334
|
tests/backtest/test_backtesting_broker_processing.py,sha256=JbTKZvcMq3l4AgIGhsvVWvhw3_NXQwql2ImztNKbziw,22145
|
|
227
335
|
tests/backtest/test_buy_hold_quiet_logs_full_run.py,sha256=LDiR8wsEwIASPnO_bUMide6re0Jb-rzFG3hccD9OGJM,4998
|
|
228
336
|
tests/backtest/test_crypto_cash_regressions.py,sha256=-f0wjb-9nXpggS30N4zomYl098Qu-tfvfWwhlkoxPMM,6077
|
|
229
|
-
tests/backtest/
|
|
230
|
-
tests/backtest/
|
|
231
|
-
tests/backtest/
|
|
337
|
+
tests/backtest/test_daily_data_timestamp_comparison.py,sha256=DeMLH0hwl0zEybJF0YTyBgfO8p96DGLahiBCwVQKjA4,35910
|
|
338
|
+
tests/backtest/test_databento.py,sha256=L7UIN0IjxdVzE65ujBvsoKyQhY4KHTctIOeOeWvVNBY,7485
|
|
339
|
+
tests/backtest/test_databento_comprehensive_trading.py,sha256=M7M2YHVkYRi5xBXifUESCnX5BFdtUDXy-HAhgazBAC4,23615
|
|
340
|
+
tests/backtest/test_debug_avg_fill_price.py,sha256=W4pgvCkAwmqlK82yzlw7u-s8VXe-dIQjPu-BVQkwJvg,3520
|
|
341
|
+
tests/backtest/test_dividends.py,sha256=tDEnK4IcqHPHYPXAfUlApEBOf-iMROSl3aCap0BX1nI,9970
|
|
342
|
+
tests/backtest/test_example_strategies.py,sha256=mSRRONtKdd7x0DUiuqCZD3YXLiPS8kAGn5wT1f_gDlk,15482
|
|
232
343
|
tests/backtest/test_failing_backtest.py,sha256=jBkm_3Yq-TrzezAQM7XEAn3424lzG6Mu5agnTJQCo6E,5460
|
|
344
|
+
tests/backtest/test_futures_edge_cases.py,sha256=87j1WQ3ywE1FkusZGlW9IXFlqFhf776EXHd-yQmySZY,15422
|
|
345
|
+
tests/backtest/test_futures_single_trade.py,sha256=seGe-mOkoFnCY58HT-iaWktPo76-WG0xgxPkOiL6BOg,10838
|
|
346
|
+
tests/backtest/test_futures_ultra_simple.py,sha256=UWGhuhwALCpez-yJxmbke5pfW6vHLDsHbsezwezU934,6875
|
|
347
|
+
tests/backtest/test_index_data_verification.py,sha256=oCM_xRMylyDkUS0uDXCyj4KVKs_GG24lcqCvQq1Exvw,13737
|
|
233
348
|
tests/backtest/test_multileg_backtest.py,sha256=XqvwMtyvlo59ZV3yqnZZ_nC_9cqnLozS4MRtKdFFY-U,4981
|
|
234
349
|
tests/backtest/test_pandas_backtest.py,sha256=GSkhMY4wK1pFDe1Hscu7YxZG36RGdM1PtkLeq7u0caI,5433
|
|
235
350
|
tests/backtest/test_passing_trader_into_backtest.py,sha256=KttDS3x1Dv686GBWjt520v_ampK2MIUyPfzl7HLVlwE,3163
|
|
236
|
-
tests/backtest/test_polygon.py,sha256
|
|
351
|
+
tests/backtest/test_polygon.py,sha256=-KMvCX8bioSm-2QrNDPBo8Ff0geHkdBLeOl6i5wFlWc,26095
|
|
237
352
|
tests/backtest/test_strategy_executor.py,sha256=r-QNPCNJnisxQyIAxPGO-BQ-l3qtZMChOUWCVX-b4ls,1289
|
|
238
|
-
tests/backtest/test_thetadata.py,sha256
|
|
239
|
-
tests/backtest/
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
lumibot-4.
|
|
243
|
-
lumibot-4.
|
|
244
|
-
lumibot-4.
|
|
353
|
+
tests/backtest/test_thetadata.py,sha256=xWYfC9C4EhbMDb29qyZWHO3sSWaLIPzzvcMbHCt5H0w,23306
|
|
354
|
+
tests/backtest/test_thetadata_comprehensive.py,sha256=-gN3xLJcJtlB-k4vlaK82DCZDGDmr0LNZZDzn-aN3l4,26120
|
|
355
|
+
tests/backtest/test_thetadata_vs_polygon.py,sha256=dZqsrOx3u3cz-1onIO6o5BDRjI1ey7U9vIkZupfXoig,22831
|
|
356
|
+
tests/backtest/test_yahoo.py,sha256=uHb9aK3uHYEvA7MI_y1dbKm7mjHrErlxU7TJOgVdzs8,1966
|
|
357
|
+
lumibot-4.1.1.dist-info/LICENSE,sha256=fYhGIyxjyNXACgpNQS3xxpxDOaVOWRVxZMCRbsDv8k0,35130
|
|
358
|
+
lumibot-4.1.1.dist-info/METADATA,sha256=lRxs-rWEYAAcbpGVP5TtgWLyOM6VjNVBZJYyo0DXqh0,11485
|
|
359
|
+
lumibot-4.1.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
360
|
+
lumibot-4.1.1.dist-info/top_level.txt,sha256=otUnUjDFVASauEDiTiAzNgMyqQ1B6jjS3QqqP-WSx38,14
|
|
361
|
+
lumibot-4.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Check for timing offsets between ThetaData and Polygon.
|
|
3
|
+
Test if bars are offset by 1-3 minutes.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import datetime
|
|
8
|
+
import pandas as pd
|
|
9
|
+
import requests
|
|
10
|
+
from polygon import RESTClient
|
|
11
|
+
from lumibot.credentials import POLYGON_API_KEY
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_thetadata_bars(symbol, date_str):
|
|
15
|
+
"""Get minute bars from ThetaData API directly."""
|
|
16
|
+
url = "http://127.0.0.1:25510/hist/stock/ohlc"
|
|
17
|
+
params = {
|
|
18
|
+
"root": symbol,
|
|
19
|
+
"start_date": date_str,
|
|
20
|
+
"end_date": date_str,
|
|
21
|
+
"ivl": 60000,
|
|
22
|
+
"rth": "true"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
response = requests.get(url, params=params)
|
|
26
|
+
data = response.json()
|
|
27
|
+
|
|
28
|
+
if data and "response" in data:
|
|
29
|
+
df = pd.DataFrame(data["response"], columns=data["header"]["format"])
|
|
30
|
+
df["datetime"] = pd.to_datetime(df["date"].astype(str), format="%Y%m%d") + pd.to_timedelta(df["ms_of_day"], unit="ms")
|
|
31
|
+
df = df.set_index("datetime")
|
|
32
|
+
df.index = df.index.tz_localize("America/New_York")
|
|
33
|
+
df = df[["open", "high", "low", "close", "volume"]]
|
|
34
|
+
return df
|
|
35
|
+
return None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_polygon_bars(symbol, date):
|
|
39
|
+
"""Get minute bars from Polygon API directly."""
|
|
40
|
+
client = RESTClient(POLYGON_API_KEY)
|
|
41
|
+
aggs = client.get_aggs(ticker=symbol, multiplier=1, timespan="minute", from_=date, to=date, limit=50000)
|
|
42
|
+
|
|
43
|
+
bars = []
|
|
44
|
+
for agg in aggs:
|
|
45
|
+
dt = datetime.datetime.fromtimestamp(agg.timestamp/1000, tz=datetime.timezone.utc)
|
|
46
|
+
bars.append({
|
|
47
|
+
"datetime": dt,
|
|
48
|
+
"open": agg.open,
|
|
49
|
+
"high": agg.high,
|
|
50
|
+
"low": agg.low,
|
|
51
|
+
"close": agg.close,
|
|
52
|
+
"volume": agg.volume,
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
if bars:
|
|
56
|
+
df = pd.DataFrame(bars)
|
|
57
|
+
df = df.set_index("datetime")
|
|
58
|
+
return df
|
|
59
|
+
return None
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_timing_offset(symbol, date, date_str):
|
|
63
|
+
"""Test different timing offsets to find best match."""
|
|
64
|
+
print(f"\n{'='*120}")
|
|
65
|
+
print(f"Testing Timing Offsets for {symbol}")
|
|
66
|
+
print(f"{'='*120}")
|
|
67
|
+
|
|
68
|
+
# Get data
|
|
69
|
+
theta_df = get_thetadata_bars(symbol, date_str)
|
|
70
|
+
polygon_df = get_polygon_bars(symbol, date)
|
|
71
|
+
|
|
72
|
+
if theta_df is None or polygon_df is None:
|
|
73
|
+
print(f"Missing data for {symbol}")
|
|
74
|
+
return
|
|
75
|
+
|
|
76
|
+
polygon_df.index = polygon_df.index.tz_convert("America/New_York")
|
|
77
|
+
|
|
78
|
+
# Show first 10 bars from each to examine timestamps
|
|
79
|
+
print(f"\nFirst 10 ThetaData bars:")
|
|
80
|
+
print(theta_df.head(10)[["open", "close", "volume"]])
|
|
81
|
+
|
|
82
|
+
print(f"\nFirst 10 Polygon bars:")
|
|
83
|
+
print(polygon_df.head(10)[["open", "close", "volume"]])
|
|
84
|
+
|
|
85
|
+
# Test offsets from -3 minutes to +3 minutes
|
|
86
|
+
print(f"\n{'='*120}")
|
|
87
|
+
print(f"Testing Different Time Offsets")
|
|
88
|
+
print(f"{'='*120}")
|
|
89
|
+
|
|
90
|
+
best_offset = None
|
|
91
|
+
best_score = float('inf')
|
|
92
|
+
|
|
93
|
+
for offset_minutes in range(-3, 4):
|
|
94
|
+
# Shift ThetaData bars by offset
|
|
95
|
+
theta_shifted = theta_df.copy()
|
|
96
|
+
theta_shifted.index = theta_shifted.index + pd.Timedelta(minutes=offset_minutes)
|
|
97
|
+
|
|
98
|
+
# Find matching times around market open (9:30-9:35)
|
|
99
|
+
matches = []
|
|
100
|
+
for hour in [9, 10]:
|
|
101
|
+
for minute in range(0 if hour == 10 else 30, 60 if hour == 9 else 5):
|
|
102
|
+
time_str = f"{hour:02d}:{minute:02d}"
|
|
103
|
+
|
|
104
|
+
theta_matches = theta_shifted[(theta_shifted.index.hour == hour) & (theta_shifted.index.minute == minute)]
|
|
105
|
+
polygon_matches = polygon_df[(polygon_df.index.hour == hour) & (polygon_df.index.minute == minute)]
|
|
106
|
+
|
|
107
|
+
if not theta_matches.empty and not polygon_matches.empty:
|
|
108
|
+
theta_bar = theta_matches.iloc[0]
|
|
109
|
+
polygon_bar = polygon_matches.iloc[0]
|
|
110
|
+
|
|
111
|
+
open_diff = abs(theta_bar["open"] - polygon_bar["open"])
|
|
112
|
+
close_diff = abs(theta_bar["close"] - polygon_bar["close"])
|
|
113
|
+
volume_diff = abs(theta_bar["volume"] - polygon_bar["volume"])
|
|
114
|
+
volume_pct_diff = abs(volume_diff / polygon_bar["volume"] * 100) if polygon_bar["volume"] > 0 else 0
|
|
115
|
+
|
|
116
|
+
matches.append({
|
|
117
|
+
"time": time_str,
|
|
118
|
+
"open_diff": open_diff,
|
|
119
|
+
"close_diff": close_diff,
|
|
120
|
+
"volume_pct_diff": volume_pct_diff,
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
if matches:
|
|
124
|
+
avg_open_diff = sum(m["open_diff"] for m in matches) / len(matches)
|
|
125
|
+
avg_close_diff = sum(m["close_diff"] for m in matches) / len(matches)
|
|
126
|
+
avg_volume_pct_diff = sum(m["volume_pct_diff"] for m in matches) / len(matches)
|
|
127
|
+
|
|
128
|
+
# Score based on price and volume differences
|
|
129
|
+
score = avg_open_diff + avg_close_diff + (avg_volume_pct_diff / 100)
|
|
130
|
+
|
|
131
|
+
print(f"\nOffset: {offset_minutes:+2d} minutes | Avg Open Diff: ${avg_open_diff:.3f} | Avg Close Diff: ${avg_close_diff:.3f} | Avg Vol Diff: {avg_volume_pct_diff:.1f}% | Score: {score:.3f}")
|
|
132
|
+
|
|
133
|
+
if score < best_score:
|
|
134
|
+
best_score = score
|
|
135
|
+
best_offset = offset_minutes
|
|
136
|
+
|
|
137
|
+
print(f"\n{'='*120}")
|
|
138
|
+
print(f"BEST OFFSET: {best_offset:+d} minutes (Score: {best_score:.3f})")
|
|
139
|
+
print(f"{'='*120}")
|
|
140
|
+
|
|
141
|
+
# Show detailed comparison at best offset
|
|
142
|
+
if best_offset is not None:
|
|
143
|
+
theta_shifted = theta_df.copy()
|
|
144
|
+
theta_shifted.index = theta_shifted.index + pd.Timedelta(minutes=best_offset)
|
|
145
|
+
|
|
146
|
+
print(f"\nDetailed Comparison at Market Open with {best_offset:+d} minute offset:")
|
|
147
|
+
print("-" * 120)
|
|
148
|
+
|
|
149
|
+
for minute in range(30, 35):
|
|
150
|
+
theta_matches = theta_shifted[(theta_shifted.index.hour == 9) & (theta_shifted.index.minute == minute)]
|
|
151
|
+
polygon_matches = polygon_df[(polygon_df.index.hour == 9) & (polygon_df.index.minute == minute)]
|
|
152
|
+
|
|
153
|
+
if not theta_matches.empty and not polygon_matches.empty:
|
|
154
|
+
theta_bar = theta_matches.iloc[0]
|
|
155
|
+
polygon_bar = polygon_matches.iloc[0]
|
|
156
|
+
|
|
157
|
+
open_diff = theta_bar["open"] - polygon_bar["open"]
|
|
158
|
+
close_diff = theta_bar["close"] - polygon_bar["close"]
|
|
159
|
+
volume_diff = theta_bar["volume"] - polygon_bar["volume"]
|
|
160
|
+
volume_pct = (volume_diff / polygon_bar["volume"] * 100) if polygon_bar["volume"] > 0 else 0
|
|
161
|
+
|
|
162
|
+
print(f"\n 9:{minute:02d} AM:")
|
|
163
|
+
print(f" ThetaData : O=${theta_bar['open']:.3f} C=${theta_bar['close']:.3f} V={theta_bar['volume']:,.0f}")
|
|
164
|
+
print(f" Polygon : O=${polygon_bar['open']:.3f} C=${polygon_bar['close']:.3f} V={polygon_bar['volume']:,.0f}")
|
|
165
|
+
print(f" Difference: O=${open_diff:+.3f} C=${close_diff:+.3f} V={volume_diff:+,.0f} ({volume_pct:+.1f}%)")
|
|
166
|
+
|
|
167
|
+
return best_offset
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def main():
|
|
171
|
+
date = datetime.date(2024, 8, 1)
|
|
172
|
+
date_str = "20240801"
|
|
173
|
+
|
|
174
|
+
symbols = ["AMZN", "AAPL", "SPY"]
|
|
175
|
+
|
|
176
|
+
offsets = {}
|
|
177
|
+
for symbol in symbols:
|
|
178
|
+
offset = test_timing_offset(symbol, date, date_str)
|
|
179
|
+
if offset is not None:
|
|
180
|
+
offsets[symbol] = offset
|
|
181
|
+
|
|
182
|
+
print(f"\n{'='*120}")
|
|
183
|
+
print(f"SUMMARY")
|
|
184
|
+
print(f"{'='*120}")
|
|
185
|
+
for symbol, offset in offsets.items():
|
|
186
|
+
print(f"{symbol}: {offset:+d} minutes")
|
|
187
|
+
|
|
188
|
+
if offsets:
|
|
189
|
+
all_same = len(set(offsets.values())) == 1
|
|
190
|
+
if all_same:
|
|
191
|
+
print(f"\n✓ All symbols have the same offset: {list(offsets.values())[0]:+d} minutes")
|
|
192
|
+
print(f" This indicates a systematic timing issue in ThetaData!")
|
|
193
|
+
else:
|
|
194
|
+
print(f"\n⚠ Different offsets detected - issue may be more complex")
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
if __name__ == "__main__":
|
|
198
|
+
main()
|