pfeed 0.0.2.dev3__tar.gz → 0.0.3__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 (154) hide show
  1. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/PKG-INFO +80 -77
  2. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/README.md +41 -39
  3. pfeed-0.0.3/docker-compose.yml +29 -0
  4. pfeed-0.0.3/logging.yml +56 -0
  5. pfeed-0.0.3/pfeed/__init__.py +70 -0
  6. pfeed-0.0.3/pfeed/_etl/base.py +92 -0
  7. pfeed-0.0.3/pfeed/_etl/market.py +128 -0
  8. pfeed-0.0.3/pfeed/_etl/news.py +40 -0
  9. pfeed-0.0.3/pfeed/_io/base_io.py +38 -0
  10. pfeed-0.0.3/pfeed/_io/tabular_io.py +127 -0
  11. pfeed-0.0.3/pfeed/bytewax_connectors/sources/exchange_source.py +6 -0
  12. pfeed-0.0.3/pfeed/cli/commands/clear.py +74 -0
  13. pfeed-0.0.3/pfeed/cli/commands/config.py +137 -0
  14. pfeed-0.0.3/pfeed/cli/commands/deltalake.py +72 -0
  15. pfeed-0.0.3/pfeed/cli/commands/doc.py +64 -0
  16. pfeed-0.0.3/pfeed/cli/commands/docker_compose.py +27 -0
  17. pfeed-0.0.3/pfeed/cli/commands/download.py +63 -0
  18. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/cli/main.py +9 -4
  19. pfeed-0.0.3/pfeed/cli/utils.py +23 -0
  20. pfeed-0.0.3/pfeed/config.py +215 -0
  21. pfeed-0.0.3/pfeed/const/aliases.py +7 -0
  22. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/const/paths.py +4 -3
  23. pfeed-0.0.3/pfeed/data_handlers/__init__.py +2 -0
  24. pfeed-0.0.3/pfeed/data_handlers/base_data_handler.py +30 -0
  25. pfeed-0.0.3/pfeed/data_handlers/market_data_handler.py +25 -0
  26. pfeed-0.0.3/pfeed/data_handlers/news_data_handler.py +27 -0
  27. pfeed-0.0.3/pfeed/data_handlers/time_based_data_handler.py +75 -0
  28. pfeed-0.0.3/pfeed/data_models/__init__.py +2 -0
  29. pfeed-0.0.3/pfeed/data_models/base_data_model.py +72 -0
  30. pfeed-0.0.3/pfeed/data_models/market_data_model.py +88 -0
  31. pfeed-0.0.3/pfeed/data_models/news_data_model.py +71 -0
  32. pfeed-0.0.3/pfeed/data_models/time_based_data_model.py +62 -0
  33. pfeed-0.0.3/pfeed/data_tools/data_tool_dask.py +72 -0
  34. pfeed-0.0.3/pfeed/data_tools/data_tool_pandas.py +88 -0
  35. pfeed-0.0.3/pfeed/data_tools/data_tool_polars.py +68 -0
  36. pfeed-0.0.3/pfeed/data_tools/data_tool_spark.py +61 -0
  37. pfeed-0.0.3/pfeed/enums/__init__.py +10 -0
  38. pfeed-0.0.3/pfeed/enums/data_access_type.py +11 -0
  39. pfeed-0.0.3/pfeed/enums/data_layer.py +8 -0
  40. pfeed-0.0.3/pfeed/enums/data_provider_type.py +9 -0
  41. pfeed-0.0.3/pfeed/enums/data_source.py +27 -0
  42. pfeed-0.0.3/pfeed/enums/data_storage.py +33 -0
  43. pfeed-0.0.3/pfeed/enums/data_tool.py +8 -0
  44. pfeed-0.0.3/pfeed/enums/data_type.py +28 -0
  45. pfeed-0.0.3/pfeed/enums/env.py +8 -0
  46. pfeed-0.0.3/pfeed/enums/extract_type.py +8 -0
  47. pfeed-0.0.3/pfeed/feeds/analyst_feed.py +8 -0
  48. pfeed-0.0.3/pfeed/feeds/base_feed.py +458 -0
  49. pfeed-0.0.2.dev3/pfeed/feeds/binance_feed.py → pfeed-0.0.3/pfeed/feeds/binance/binance.py +5 -5
  50. pfeed-0.0.3/pfeed/feeds/bybit/bybit.py +144 -0
  51. pfeed-0.0.3/pfeed/feeds/calendar_feed.py +8 -0
  52. pfeed-0.0.3/pfeed/feeds/company_feed.py +6 -0
  53. pfeed-0.0.3/pfeed/feeds/crypto_market_feed.py +11 -0
  54. pfeed-0.0.3/pfeed/feeds/databento/databento.py +13 -0
  55. pfeed-0.0.3/pfeed/feeds/economics_feed.py +8 -0
  56. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/__init__.py +16 -0
  57. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/analyst_feed.py +9 -0
  58. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/economics_feed.py +5 -0
  59. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/financial_modeling_prep.py +71 -0
  60. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/market_feed.py +7 -0
  61. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/news_feed.py +101 -0
  62. pfeed-0.0.3/pfeed/feeds/financial_modeling_prep/statements_feed.py +7 -0
  63. pfeed-0.0.3/pfeed/feeds/market_feed.py +386 -0
  64. pfeed-0.0.3/pfeed/feeds/news_feed.py +197 -0
  65. pfeed-0.0.3/pfeed/feeds/pfund/backtest_engine_feed.py +8 -0
  66. pfeed-0.0.3/pfeed/feeds/pfund/trade_engine_feed.py +6 -0
  67. pfeed-0.0.3/pfeed/feeds/pfund/train_engine_feed.py +6 -0
  68. pfeed-0.0.3/pfeed/feeds/statements_feed.py +8 -0
  69. pfeed-0.0.3/pfeed/feeds/time_based_feed.py +320 -0
  70. pfeed-0.0.3/pfeed/feeds/yahoo_finance/market_feed.py +312 -0
  71. pfeed-0.0.3/pfeed/feeds/yahoo_finance/news_feed.py +55 -0
  72. pfeed-0.0.3/pfeed/feeds/yahoo_finance/yahoo_finance.py +47 -0
  73. pfeed-0.0.3/pfeed/flows/dataflow.py +201 -0
  74. pfeed-0.0.3/pfeed/flows/faucet.py +62 -0
  75. pfeed-0.0.3/pfeed/flows/result.py +34 -0
  76. pfeed-0.0.3/pfeed/schemas/__init__.py +4 -0
  77. pfeed-0.0.3/pfeed/schemas/bar_data_schema.py +50 -0
  78. pfeed-0.0.3/pfeed/schemas/market_data_schema.py +40 -0
  79. pfeed-0.0.3/pfeed/schemas/news_data_schema.py +16 -0
  80. pfeed-0.0.3/pfeed/schemas/tick_data_schema.py +14 -0
  81. pfeed-0.0.3/pfeed/sources/__init__.py +13 -0
  82. pfeed-0.0.3/pfeed/sources/base_source.py +62 -0
  83. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/sources/binance/__init__.py +1 -1
  84. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/sources/binance/api.py +2 -2
  85. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/sources/binance/const.py +2 -2
  86. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/sources/binance/download.py +9 -10
  87. pfeed-0.0.3/pfeed/sources/bybit/api.py +100 -0
  88. pfeed-0.0.3/pfeed/sources/bybit/metadata.yml +19 -0
  89. pfeed-0.0.3/pfeed/sources/bybit/source.py +44 -0
  90. pfeed-0.0.3/pfeed/sources/databento/const.py +14 -0
  91. pfeed-0.0.3/pfeed/sources/databento/metadata.yml +31 -0
  92. pfeed-0.0.3/pfeed/sources/databento/source.py +193 -0
  93. pfeed-0.0.3/pfeed/sources/financial_modeling_prep/metadata.yml +43 -0
  94. pfeed-0.0.3/pfeed/sources/financial_modeling_prep/source.py +22 -0
  95. pfeed-0.0.3/pfeed/sources/firstrate_data/metadata.yml +27 -0
  96. pfeed-0.0.3/pfeed/sources/polygon/metadata.yml +18 -0
  97. pfeed-0.0.3/pfeed/sources/tradfi_source.py +47 -0
  98. pfeed-0.0.3/pfeed/sources/yahoo_finance/metadata.yml +37 -0
  99. pfeed-0.0.3/pfeed/sources/yahoo_finance/source.py +46 -0
  100. pfeed-0.0.3/pfeed/storages/__init__.py +5 -0
  101. pfeed-0.0.3/pfeed/storages/azure_storage.py +6 -0
  102. pfeed-0.0.3/pfeed/storages/base_storage.py +168 -0
  103. pfeed-0.0.3/pfeed/storages/cache_storage.py +54 -0
  104. pfeed-0.0.3/pfeed/storages/delta_lake_storage_mixin.py +65 -0
  105. pfeed-0.0.3/pfeed/storages/duckdb_storage.py +335 -0
  106. pfeed-0.0.3/pfeed/storages/gcp_storage.py +5 -0
  107. pfeed-0.0.3/pfeed/storages/huggingface_storage.py +5 -0
  108. pfeed-0.0.3/pfeed/storages/local_storage.py +21 -0
  109. pfeed-0.0.3/pfeed/storages/minio_storage.py +143 -0
  110. pfeed-0.0.3/pfeed/storages/s3_storage.py +41 -0
  111. pfeed-0.0.3/pfeed/typing.py +42 -0
  112. pfeed-0.0.3/pfeed/utils/dataframe.py +44 -0
  113. pfeed-0.0.3/pfeed/utils/file_formats.py +156 -0
  114. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/utils/monitor.py +6 -4
  115. pfeed-0.0.3/pfeed/utils/utils.py +192 -0
  116. pfeed-0.0.3/pyproject.toml +92 -0
  117. pfeed-0.0.2.dev3/pfeed/__init__.py +0 -62
  118. pfeed-0.0.2.dev3/pfeed/cli/commands/config.py +0 -66
  119. pfeed-0.0.2.dev3/pfeed/cli/commands/docker_compose.py +0 -33
  120. pfeed-0.0.2.dev3/pfeed/cli/commands/download.py +0 -47
  121. pfeed-0.0.2.dev3/pfeed/cli/commands/open.py +0 -47
  122. pfeed-0.0.2.dev3/pfeed/config_handler.py +0 -153
  123. pfeed-0.0.2.dev3/pfeed/const/common.py +0 -32
  124. pfeed-0.0.2.dev3/pfeed/data_tools/data_tool_pandas.py +0 -61
  125. pfeed-0.0.2.dev3/pfeed/data_tools/data_tool_polars.py +0 -68
  126. pfeed-0.0.2.dev3/pfeed/datastore.py +0 -156
  127. pfeed-0.0.2.dev3/pfeed/etl.py +0 -377
  128. pfeed-0.0.2.dev3/pfeed/feeds/__init__.py +0 -3
  129. pfeed-0.0.2.dev3/pfeed/feeds/base_feed.py +0 -232
  130. pfeed-0.0.2.dev3/pfeed/feeds/bybit_feed.py +0 -51
  131. pfeed-0.0.2.dev3/pfeed/feeds/yahoo_finance_feed.py +0 -186
  132. pfeed-0.0.2.dev3/pfeed/filepath.py +0 -103
  133. pfeed-0.0.2.dev3/pfeed/resolution.py +0 -62
  134. pfeed-0.0.2.dev3/pfeed/sources/binance/stream.py +0 -3
  135. pfeed-0.0.2.dev3/pfeed/sources/bybit/__init__.py +0 -4
  136. pfeed-0.0.2.dev3/pfeed/sources/bybit/api.py +0 -76
  137. pfeed-0.0.2.dev3/pfeed/sources/bybit/const.py +0 -26
  138. pfeed-0.0.2.dev3/pfeed/sources/bybit/download.py +0 -201
  139. pfeed-0.0.2.dev3/pfeed/sources/bybit/stream.py +0 -3
  140. pfeed-0.0.2.dev3/pfeed/sources/bybit/types.py +0 -4
  141. pfeed-0.0.2.dev3/pfeed/sources/bybit/utils.py +0 -46
  142. pfeed-0.0.2.dev3/pfeed/types/common_literals.py +0 -15
  143. pfeed-0.0.2.dev3/pfeed/types/core.py +0 -11
  144. pfeed-0.0.2.dev3/pfeed/utils/file_formats.py +0 -76
  145. pfeed-0.0.2.dev3/pfeed/utils/utils.py +0 -137
  146. pfeed-0.0.2.dev3/pfeed/utils/validate.py +0 -39
  147. pfeed-0.0.2.dev3/pyproject.toml +0 -93
  148. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/LICENSE +0 -0
  149. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/cli/__init__.py +0 -0
  150. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/cli/commands/__init__.py +0 -0
  151. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/cli/commands/stream.py +0 -0
  152. /pfeed-0.0.2.dev3/pfeed/cli/commands/doc.py → /pfeed-0.0.3/pfeed/data_models/economics_data_model.py +0 -0
  153. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/feeds/custom_csv_feed.py +0 -0
  154. {pfeed-0.0.2.dev3 → pfeed-0.0.3}/pfeed/main.py +0 -0
@@ -1,58 +1,59 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: pfeed
3
- Version: 0.0.2.dev3
3
+ Version: 0.0.3
4
4
  Summary: Data pipeline for algo-trading, getting and storing both real-time and historical data made easy.
5
- Home-page: https://pfund.ai
6
5
  License: Apache-2.0
7
- Keywords: trading,algo-trading,data pipeline,ETL,data lake,data warehouse,data integration,historical data,live data,data streaming
6
+ Keywords: trading,algo-trading,data pipeline,ETL,data lake,data warehouse,data integration,historical data,live data,data streaming,data engineering
8
7
  Author: Stephen Yau
9
8
  Author-email: softwareentrepreneer+pfeed@gmail.com
10
- Requires-Python: >=3.10,<4.0
11
- Classifier: License :: OSI Approved :: Apache Software License
12
- Classifier: Programming Language :: Python :: 3
9
+ Requires-Python: >=3.10
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Intended Audience :: Financial and Insurance Industry
14
+ Classifier: Intended Audience :: Information Technology
15
+ Classifier: Topic :: Office/Business :: Financial
16
+ Classifier: Topic :: Office/Business :: Financial :: Investment
17
+ Classifier: Topic :: Software Development :: Libraries
13
18
  Classifier: Programming Language :: Python :: 3.10
14
19
  Classifier: Programming Language :: Python :: 3.11
15
20
  Classifier: Programming Language :: Python :: 3.12
16
- Provides-Extra: all
21
+ Classifier: Programming Language :: Python :: 3.13
17
22
  Provides-Extra: core
18
23
  Provides-Extra: dask
19
- Provides-Extra: dataops
20
- Provides-Extra: dfs
21
- Provides-Extra: polars
24
+ Provides-Extra: databento
25
+ Provides-Extra: financial-modeling-prep
26
+ Provides-Extra: fmp
22
27
  Provides-Extra: spark
23
- Provides-Extra: storage
24
- Requires-Dist: adlfs (>=2024.7.0,<2025.0.0) ; extra == "storage" or extra == "all"
25
28
  Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
26
- Requires-Dist: bytewax (>=0.21.0,<0.22.0) ; extra == "dataops" or extra == "all"
27
- Requires-Dist: coiled (>=1.54.0,<2.0.0) ; extra == "dask" or extra == "dfs" or extra == "all"
28
- Requires-Dist: confluent-kafka (>=2.5.3,<3.0.0) ; extra == "dataops" or extra == "all"
29
- Requires-Dist: connectorx (>=0.3.3,<0.4.0) ; extra == "storage" or extra == "all"
30
- Requires-Dist: dask[complete] (>=2024.9.1,<2025.0.0) ; extra == "dask" or extra == "dfs" or extra == "all"
31
- Requires-Dist: databento (>=0.42.0,<0.43.0) ; extra == "core" or extra == "all"
32
- Requires-Dist: databricks-connect (>=15.4.2,<16.0.0) ; extra == "spark" or extra == "dfs" or extra == "all"
33
- Requires-Dist: fastparquet (>=2024.2.0,<2025.0.0)
34
- Requires-Dist: gcsfs (>=2024.9.0,<2025.0.0) ; extra == "storage" or extra == "all"
35
- Requires-Dist: minio (>=7.2.8,<8.0.0) ; extra == "core" or extra == "all"
36
- Requires-Dist: modin[all] (>=0.32.0,<0.33.0) ; extra == "core" or extra == "all"
37
- Requires-Dist: pandas (>=2.2.0,<3.0.0)
38
- Requires-Dist: pfund (>=0.0.2.dev2,<0.0.3)
39
- Requires-Dist: polars (>=1.7.1,<2.0.0) ; extra == "polars" or extra == "dfs" or extra == "all"
40
- Requires-Dist: polars-xdt (>=0.16.0,<0.17.0) ; extra == "polars" or extra == "dfs" or extra == "all"
41
- Requires-Dist: polygon-api-client (>=1.14.2,<2.0.0) ; extra == "core" or extra == "all"
42
- Requires-Dist: prefect (>=3.0.5,<4.0.0) ; extra == "dataops" or extra == "all"
43
- Requires-Dist: psutil (>=6.0.0,<7.0.0) ; extra == "core" or extra == "all"
44
- Requires-Dist: psycopg2 (>=2.9.9,<3.0.0) ; extra == "storage" or extra == "all"
45
- Requires-Dist: pyarrow (>=17.0.0,<18.0.0) ; extra == "core" or extra == "all"
46
- Requires-Dist: pydantic (>=2.7.0,<3.0.0)
47
- Requires-Dist: pyspark (>=3.5.3,<4.0.0) ; extra == "spark" or extra == "dfs" or extra == "all"
48
- Requires-Dist: ray (>=2.35.0,<3.0.0) ; extra == "core" or extra == "all"
49
- Requires-Dist: s3fs (>=2024.9.0,<2025.0.0) ; extra == "storage" or extra == "all"
50
- Requires-Dist: yfinance (>=0.2.43,<0.3.0)
29
+ Requires-Dist: bytewax (>=0.21.1,<0.22.0) ; extra == "core"
30
+ Requires-Dist: coiled (>=1.89.0,<2.0.0) ; extra == "dask"
31
+ Requires-Dist: confluent-kafka (>=2.8.2,<3.0.0) ; extra == "core"
32
+ Requires-Dist: dask[complete,dataframe] (>=2025.3.0,<2026.0.0) ; extra == "dask"
33
+ Requires-Dist: databento (>=0.50.0,<0.51.0) ; (python_version < "4.0.0") and (extra == "databento")
34
+ Requires-Dist: deltalake (>=0.25.4,<0.26.0) ; extra == "core"
35
+ Requires-Dist: duckdb (>=1.2.1,<2.0.0)
36
+ Requires-Dist: fmp-api-client (>=0.0.1,<0.1.0) ; extra == "financial-modeling-prep"
37
+ Requires-Dist: fmp-api-client (>=0.0.1,<0.1.0) ; extra == "fmp"
38
+ Requires-Dist: minio (>=7.2.15,<8.0.0) ; extra == "core"
39
+ Requires-Dist: narwhals (>=1.32.0,<2.0.0)
40
+ Requires-Dist: pandas (>=2.2.3,<3.0.0)
41
+ Requires-Dist: pandera (>=0.23.1,<0.24.0)
42
+ Requires-Dist: pfund (>=0.0.2,<0.1.0)
43
+ Requires-Dist: polars[polars-cloud] (>=1.26.0,<2.0.0)
44
+ Requires-Dist: prefect (>=3.2.2,<4.0.0) ; extra == "core"
45
+ Requires-Dist: pyarrow (>=18.0.0,<19.0.0)
46
+ Requires-Dist: pydantic (>=2.10.6,<3.0.0)
47
+ Requires-Dist: pyspark[connect,pandas-on-spark,sql] (>=3.5.3,<4.0.0) ; extra == "spark"
48
+ Requires-Dist: ray (>=2.44.0,<3.0.0) ; extra == "core"
49
+ Requires-Dist: yfinance (>=0.2.55,<0.3.0)
50
+ Requires-Dist: zstandard (>=0.23.0,<0.24.0)
51
51
  Project-URL: Documentation, https://pfeed-docs.pfund.ai
52
+ Project-URL: Homepage, https://pfund.ai
52
53
  Project-URL: Repository, https://github.com/PFund-Software-Ltd/pfeed
53
54
  Description-Content-Type: text/markdown
54
55
 
55
- # PFeed: Data Pipeline for Algo-Trading, Getting and Storing Real-Time and Historical Data Made Easy.
56
+ # PFeed: The Single Source of Truth for Algo-Trading Data. Uniting Traders to Clean Once & Share with All.
56
57
 
57
58
  [![Twitter Follow](https://img.shields.io/twitter/follow/pfund_ai?style=social)](https://x.com/pfund_ai)
58
59
  ![GitHub stars](https://img.shields.io/github/stars/PFund-Software-Ltd/pfeed?style=social)
@@ -60,9 +61,10 @@ Description-Content-Type: text/markdown
60
61
  [![PyPI](https://img.shields.io/pypi/v/pfeed.svg)](https://pypi.org/project/pfeed)
61
62
  ![PyPI - Support Python Versions](https://img.shields.io/pypi/pyversions/pfeed)
62
63
  <!-- [![Jupyter Book Badge](https://raw.githubusercontent.com/PFund-Software-Ltd/pfeed/main/docs/images/jupyterbook.svg)](https://jupyterbook.org) -->
63
- [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/)
64
+ <!-- [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/) -->
64
65
 
65
66
  [MinIO]: https://min.io/
67
+ [Deltalake]: https://github.com/delta-io/delta-rs
66
68
  [PFund]: https://github.com/PFund-Software-Ltd/pfund
67
69
  [Polars]: https://github.com/pola-rs/polars
68
70
  [Dask]: https://www.dask.org/
@@ -75,21 +77,26 @@ Description-Content-Type: text/markdown
75
77
  [Databento]: https://databento.com/
76
78
  [Polygon]: https://polygon.io/
77
79
  [FirstRate Data]: https://firstratedata.com
80
+ [Prefect]: https://www.prefect.io/
81
+ [Bytewax]: https://www.bytewax.io
82
+
83
+ > **This library is NOT ready for use, please wait for 0.1.0 release.**
78
84
 
79
85
  ## Problem
80
- Starting algo-trading requires reliable, clean data. However, the time-consuming and mundane tasks of data cleaning and storage often discourage traders from embarking on their algo-trading journey.
86
+ Starting algo-trading requires reliable and clean data, but traders often **work in silos**, each writing **duplicated code** to clean the same datasets—wasting time and effort. Accessing clean, ready-to-use data is a challenge, forcing traders to handle tedious data tasks before they can even start trading.
81
87
 
82
88
  ## Solution
83
- By leveraging modern data engineering tools, `pfeed` handles the tedious data work and **outputs backtesting-ready data**, allowing traders to focus on strategy development.
89
+ `pfeed` leverages modern data engineering tools to centralize data cleaning efforts, automate ETL/ELT, store data in a **data lake with Delta Lake** support, and output **backtesting-ready data**, allowing traders to focus on strategy development.
84
90
 
85
91
  ---
86
- PFeed (/piː fiːd/) is a data pipeline for algorithmic trading, serving as a bridge between raw data sources and traders. It enables you to **download historical data**, **stream real-time data**, and **store cleaned data** in a **local data lake for quantitative analysis**, by automating the processes of data collection, cleaning, transformation, and storage.
92
+ PFeed (/piː fiːd/) is the data engine for trading, serving as a pipeline between raw data sources and traders. It enables you to **download historical data**, **stream real-time data**, and **store cleaned data** in a **local data lake for quantitative analysis**, supporting both **batch processing** and **streaming** workflows through streamlined data collection, cleaning, transformation, and storage.
87
93
 
88
94
  ## Core Features
89
95
  - [x] Download or stream reliable, validated and **clean data** for research, backtesting, or live trading
90
96
  - [x] Get historical data (**dataframe**) or live data in standardized formats by just calling a **single** function
91
- - [x] **Own your data** by storing them locally using [MinIO], with the option to connect to the cloud
97
+ - [x] **Own your data** by storing them locally using [MinIO] + [Deltalake], or in the cloud
92
98
  - [x] Interact with different kinds of data (including TradFi, CeFi and DeFi) using a **unified interface**
99
+ - [x] Scale using modern data tools (e.g. [Polars], [Dask]) and workflow orchestration frameworks ([Prefect] for batch processing, [Bytewax] for streaming)
93
100
 
94
101
  ---
95
102
 
@@ -98,7 +105,7 @@ PFeed (/piː fiːd/) is a data pipeline for algorithmic trading, serving as a br
98
105
 
99
106
  - [Installation](#installation)
100
107
  - [Quick Start](#quick-start)
101
- - [Get Historical Data in Dataframe](#1-get-historical-data-in-dataframe-no-storage)
108
+ - [Get Historical Data in Dataframe](#1-get-historical-data-in-dataframe)
102
109
  - [Download Historical Data on Command Line](#2-download-historical-data-on-the-command-line-interface-cli)
103
110
  - [Download Historical Data in Python](#3-download-historical-data-in-python)
104
111
  - [Supported Data Sources](#supported-data-sources)
@@ -112,67 +119,63 @@ PFeed (/piː fiːd/) is a data pipeline for algorithmic trading, serving as a br
112
119
  ## Installation
113
120
  > For more installation options, please refer to the [documentation](https://pfeed-docs.pfund.ai/installation).
114
121
  ```bash
115
- # [RECOMMENDED]: Full Features, choose this if you do not care about the package size
116
- pip install -U "pfeed[all]"
122
+ # [RECOMMENDED]: Core Features, including Minio, Deltalake, Ray, etc.
123
+ pip install -U "pfeed[core,prefect,bytewax]"
124
+
125
+ # add your desired data sources, e.g. databento, polygon, etc.
126
+ pip install -U "pfeed[core,databento,polygon]"
117
127
 
118
- # Minimal Features, only supports getting, downloading and streaming data
119
- pip install -U "pfeed[core]"
128
+ # Minimal Features
129
+ pip install -U "pfeed"
120
130
  ```
121
131
 
122
132
 
123
133
 
124
134
  ## Quick Start
125
- ### 1. Get Historical Data in Dataframe (No storage)
126
- Get [Bybit]'s data in dataframe, e.g. 1-minute data (data is downloaded on the fly if not stored locally)
135
+ ### 1. Get Historical Data in Dataframe
136
+ Get [Bybit]'s data in dataframe, e.g. 1-minute data (data is downloaded on the fly if not found in storage)
127
137
 
128
138
  ```python
129
139
  import pfeed as pe
130
140
 
131
- feed = pe.BybitFeed(data_tool='polars')
141
+ bybit = pe.Bybit(data_tool='polars')
132
142
 
133
- df = feed.get_historical_data(
143
+ df = bybit.get_historical_data(
134
144
  'BTC_USDT_PERP',
135
145
  resolution='1minute', # 'raw' or '1tick'/'1t' or '2second'/'2s' etc.
136
- start_date='2024-03-01',
137
- end_date='2024-03-01',
146
+ start_date='2025-01-01',
147
+ end_date='2025-01-01',
138
148
  )
139
149
  ```
140
150
 
141
151
  Printing the first few rows of `df`:
142
- | | ts | product | resolution | open | high | low | close | volume |
143
- |---:|:--------------------|:--------------|:-------------|--------:|--------:|--------:|--------:|---------:|
144
- | 0 | 2024-03-01 00:00:00 | BTC_USDT_PERP | 1m | 61184.1 | 61244.5 | 61175.8 | 61244.5 | 159.142 |
145
- | 1 | 2024-03-01 00:01:00 | BTC_USDT_PERP | 1m | 61245.3 | 61276.5 | 61200.7 | 61232.2 | 227.242 |
146
- | 2 | 2024-03-01 00:02:00 | BTC_USDT_PERP | 1m | 61232.2 | 61249 | 61180 | 61184.2 | 91.446 |
152
+ | date | resolution | product | symbol | open | high | low | close | volume |
153
+ |:--------------------|:-------------|:--------------|:---------|--------:|--------:|--------:|--------:|---------:|
154
+ | 2025-01-01 00:00:00 | 1m | BTC_USDT_PERP | BTCUSDT | 93530 | 93590.8 | 93501.3 | 93590.5 | 30.284 |
155
+ | 2025-01-01 00:01:00 | 1m | BTC_USDT_PERP | BTCUSDT | 93590.5 | 93627.7 | 93571.8 | 93625 | 30.334 |
147
156
 
148
- > By using pfeed, you are just a few lines of code away from getting a standardized dataframe, how convenient!
157
+ > By using pfeed, you are just **one function call** away from getting a standardized dataframe
149
158
 
150
159
  ### 2. Download Historical Data on the Command Line Interface (CLI)
151
160
  > For more CLI commands, please refer to the [documentation](https://pfeed-docs.pfund.ai/cli-commands).
152
161
  ```bash
153
- # download data, default data type (dtype) is 'raw' data
154
- pfeed download -d BYBIT -p BTC_USDT_PERP --start-date 2024-03-01 --end-date 2024-03-08
162
+ # download BTC tick data
163
+ pfeed download -d BYBIT -p BTC_USDT_PERP -r tick --start-date 2025-01-01 --end-date 2025-02-01
155
164
 
156
- # download multiple products BTC_USDT_PERP and ETH_USDT_PERP as minute data and store them locally
157
- pfeed download -d BYBIT -p BTC_USDT_PERP -p ETH_USDT_PERP --dtypes minute --use-minio
165
+ # download data and store it in MinIO
166
+ pfeed download -d BYBIT -p BTC_USDT_PERP --storage minio
158
167
  ```
159
168
 
160
169
  ### 3. Download Historical Data in Python
161
170
  ```python
162
171
  import pfeed as pe
163
172
 
164
- # compared to the CLI approach, this approach is more convenient for downloading multiple products
165
- pe.download(
166
- data_source='bybit',
167
- pdts=[
168
- 'BTC_USDT_PERP',
169
- 'ETH_USDT_PERP',
170
- 'BCH_USDT_PERP',
171
- ],
172
- dtypes=['raw'], # data types, e.g. 'raw', 'tick', 'second', 'minute' etc.
173
- start_date='2024-03-01',
174
- end_date='2024-03-08',
175
- use_minio=False,
173
+ bybit = pe.Bybit()
174
+ bybit.download(
175
+ product='BTC_USDT_PERP',
176
+ resolution='1s', # 1-second data
177
+ rollback_period='1w', # rollback 1 week
178
+ to_storage='local',
176
179
  )
177
180
  ```
178
181
 
@@ -1,4 +1,4 @@
1
- # PFeed: Data Pipeline for Algo-Trading, Getting and Storing Real-Time and Historical Data Made Easy.
1
+ # PFeed: The Single Source of Truth for Algo-Trading Data. Uniting Traders to Clean Once & Share with All.
2
2
 
3
3
  [![Twitter Follow](https://img.shields.io/twitter/follow/pfund_ai?style=social)](https://x.com/pfund_ai)
4
4
  ![GitHub stars](https://img.shields.io/github/stars/PFund-Software-Ltd/pfeed?style=social)
@@ -6,9 +6,10 @@
6
6
  [![PyPI](https://img.shields.io/pypi/v/pfeed.svg)](https://pypi.org/project/pfeed)
7
7
  ![PyPI - Support Python Versions](https://img.shields.io/pypi/pyversions/pfeed)
8
8
  <!-- [![Jupyter Book Badge](https://raw.githubusercontent.com/PFund-Software-Ltd/pfeed/main/docs/images/jupyterbook.svg)](https://jupyterbook.org) -->
9
- [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/)
9
+ <!-- [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/) -->
10
10
 
11
11
  [MinIO]: https://min.io/
12
+ [Deltalake]: https://github.com/delta-io/delta-rs
12
13
  [PFund]: https://github.com/PFund-Software-Ltd/pfund
13
14
  [Polars]: https://github.com/pola-rs/polars
14
15
  [Dask]: https://www.dask.org/
@@ -21,21 +22,26 @@
21
22
  [Databento]: https://databento.com/
22
23
  [Polygon]: https://polygon.io/
23
24
  [FirstRate Data]: https://firstratedata.com
25
+ [Prefect]: https://www.prefect.io/
26
+ [Bytewax]: https://www.bytewax.io
27
+
28
+ > **This library is NOT ready for use, please wait for 0.1.0 release.**
24
29
 
25
30
  ## Problem
26
- Starting algo-trading requires reliable, clean data. However, the time-consuming and mundane tasks of data cleaning and storage often discourage traders from embarking on their algo-trading journey.
31
+ Starting algo-trading requires reliable and clean data, but traders often **work in silos**, each writing **duplicated code** to clean the same datasets—wasting time and effort. Accessing clean, ready-to-use data is a challenge, forcing traders to handle tedious data tasks before they can even start trading.
27
32
 
28
33
  ## Solution
29
- By leveraging modern data engineering tools, `pfeed` handles the tedious data work and **outputs backtesting-ready data**, allowing traders to focus on strategy development.
34
+ `pfeed` leverages modern data engineering tools to centralize data cleaning efforts, automate ETL/ELT, store data in a **data lake with Delta Lake** support, and output **backtesting-ready data**, allowing traders to focus on strategy development.
30
35
 
31
36
  ---
32
- PFeed (/piː fiːd/) is a data pipeline for algorithmic trading, serving as a bridge between raw data sources and traders. It enables you to **download historical data**, **stream real-time data**, and **store cleaned data** in a **local data lake for quantitative analysis**, by automating the processes of data collection, cleaning, transformation, and storage.
37
+ PFeed (/piː fiːd/) is the data engine for trading, serving as a pipeline between raw data sources and traders. It enables you to **download historical data**, **stream real-time data**, and **store cleaned data** in a **local data lake for quantitative analysis**, supporting both **batch processing** and **streaming** workflows through streamlined data collection, cleaning, transformation, and storage.
33
38
 
34
39
  ## Core Features
35
40
  - [x] Download or stream reliable, validated and **clean data** for research, backtesting, or live trading
36
41
  - [x] Get historical data (**dataframe**) or live data in standardized formats by just calling a **single** function
37
- - [x] **Own your data** by storing them locally using [MinIO], with the option to connect to the cloud
42
+ - [x] **Own your data** by storing them locally using [MinIO] + [Deltalake], or in the cloud
38
43
  - [x] Interact with different kinds of data (including TradFi, CeFi and DeFi) using a **unified interface**
44
+ - [x] Scale using modern data tools (e.g. [Polars], [Dask]) and workflow orchestration frameworks ([Prefect] for batch processing, [Bytewax] for streaming)
39
45
 
40
46
  ---
41
47
 
@@ -44,7 +50,7 @@ PFeed (/piː fiːd/) is a data pipeline for algorithmic trading, serving as a br
44
50
 
45
51
  - [Installation](#installation)
46
52
  - [Quick Start](#quick-start)
47
- - [Get Historical Data in Dataframe](#1-get-historical-data-in-dataframe-no-storage)
53
+ - [Get Historical Data in Dataframe](#1-get-historical-data-in-dataframe)
48
54
  - [Download Historical Data on Command Line](#2-download-historical-data-on-the-command-line-interface-cli)
49
55
  - [Download Historical Data in Python](#3-download-historical-data-in-python)
50
56
  - [Supported Data Sources](#supported-data-sources)
@@ -58,67 +64,63 @@ PFeed (/piː fiːd/) is a data pipeline for algorithmic trading, serving as a br
58
64
  ## Installation
59
65
  > For more installation options, please refer to the [documentation](https://pfeed-docs.pfund.ai/installation).
60
66
  ```bash
61
- # [RECOMMENDED]: Full Features, choose this if you do not care about the package size
62
- pip install -U "pfeed[all]"
67
+ # [RECOMMENDED]: Core Features, including Minio, Deltalake, Ray, etc.
68
+ pip install -U "pfeed[core,prefect,bytewax]"
69
+
70
+ # add your desired data sources, e.g. databento, polygon, etc.
71
+ pip install -U "pfeed[core,databento,polygon]"
63
72
 
64
- # Minimal Features, only supports getting, downloading and streaming data
65
- pip install -U "pfeed[core]"
73
+ # Minimal Features
74
+ pip install -U "pfeed"
66
75
  ```
67
76
 
68
77
 
69
78
 
70
79
  ## Quick Start
71
- ### 1. Get Historical Data in Dataframe (No storage)
72
- Get [Bybit]'s data in dataframe, e.g. 1-minute data (data is downloaded on the fly if not stored locally)
80
+ ### 1. Get Historical Data in Dataframe
81
+ Get [Bybit]'s data in dataframe, e.g. 1-minute data (data is downloaded on the fly if not found in storage)
73
82
 
74
83
  ```python
75
84
  import pfeed as pe
76
85
 
77
- feed = pe.BybitFeed(data_tool='polars')
86
+ bybit = pe.Bybit(data_tool='polars')
78
87
 
79
- df = feed.get_historical_data(
88
+ df = bybit.get_historical_data(
80
89
  'BTC_USDT_PERP',
81
90
  resolution='1minute', # 'raw' or '1tick'/'1t' or '2second'/'2s' etc.
82
- start_date='2024-03-01',
83
- end_date='2024-03-01',
91
+ start_date='2025-01-01',
92
+ end_date='2025-01-01',
84
93
  )
85
94
  ```
86
95
 
87
96
  Printing the first few rows of `df`:
88
- | | ts | product | resolution | open | high | low | close | volume |
89
- |---:|:--------------------|:--------------|:-------------|--------:|--------:|--------:|--------:|---------:|
90
- | 0 | 2024-03-01 00:00:00 | BTC_USDT_PERP | 1m | 61184.1 | 61244.5 | 61175.8 | 61244.5 | 159.142 |
91
- | 1 | 2024-03-01 00:01:00 | BTC_USDT_PERP | 1m | 61245.3 | 61276.5 | 61200.7 | 61232.2 | 227.242 |
92
- | 2 | 2024-03-01 00:02:00 | BTC_USDT_PERP | 1m | 61232.2 | 61249 | 61180 | 61184.2 | 91.446 |
97
+ | date | resolution | product | symbol | open | high | low | close | volume |
98
+ |:--------------------|:-------------|:--------------|:---------|--------:|--------:|--------:|--------:|---------:|
99
+ | 2025-01-01 00:00:00 | 1m | BTC_USDT_PERP | BTCUSDT | 93530 | 93590.8 | 93501.3 | 93590.5 | 30.284 |
100
+ | 2025-01-01 00:01:00 | 1m | BTC_USDT_PERP | BTCUSDT | 93590.5 | 93627.7 | 93571.8 | 93625 | 30.334 |
93
101
 
94
- > By using pfeed, you are just a few lines of code away from getting a standardized dataframe, how convenient!
102
+ > By using pfeed, you are just **one function call** away from getting a standardized dataframe
95
103
 
96
104
  ### 2. Download Historical Data on the Command Line Interface (CLI)
97
105
  > For more CLI commands, please refer to the [documentation](https://pfeed-docs.pfund.ai/cli-commands).
98
106
  ```bash
99
- # download data, default data type (dtype) is 'raw' data
100
- pfeed download -d BYBIT -p BTC_USDT_PERP --start-date 2024-03-01 --end-date 2024-03-08
107
+ # download BTC tick data
108
+ pfeed download -d BYBIT -p BTC_USDT_PERP -r tick --start-date 2025-01-01 --end-date 2025-02-01
101
109
 
102
- # download multiple products BTC_USDT_PERP and ETH_USDT_PERP as minute data and store them locally
103
- pfeed download -d BYBIT -p BTC_USDT_PERP -p ETH_USDT_PERP --dtypes minute --use-minio
110
+ # download data and store it in MinIO
111
+ pfeed download -d BYBIT -p BTC_USDT_PERP --storage minio
104
112
  ```
105
113
 
106
114
  ### 3. Download Historical Data in Python
107
115
  ```python
108
116
  import pfeed as pe
109
117
 
110
- # compared to the CLI approach, this approach is more convenient for downloading multiple products
111
- pe.download(
112
- data_source='bybit',
113
- pdts=[
114
- 'BTC_USDT_PERP',
115
- 'ETH_USDT_PERP',
116
- 'BCH_USDT_PERP',
117
- ],
118
- dtypes=['raw'], # data types, e.g. 'raw', 'tick', 'second', 'minute' etc.
119
- start_date='2024-03-01',
120
- end_date='2024-03-08',
121
- use_minio=False,
118
+ bybit = pe.Bybit()
119
+ bybit.download(
120
+ product='BTC_USDT_PERP',
121
+ resolution='1s', # 1-second data
122
+ rollback_period='1w', # rollback 1 week
123
+ to_storage='local',
122
124
  )
123
125
  ```
124
126
 
@@ -0,0 +1,29 @@
1
+ name: pfeed
2
+ services:
3
+ minio:
4
+ container_name: pe-minio
5
+ image: minio/minio:RELEASE.2025-01-20T14-49-07Z
6
+ ports:
7
+ - "${MINIO_PORT:-9000}:9000"
8
+ - "${MINIO_CONSOLE_PORT:-9001}:9001"
9
+ volumes:
10
+ - ${MINIO_DATA_PATH}:/data
11
+ environment:
12
+ MINIO_ROOT_USER: ${MINIO_ROOT_USER:-pfunder}
13
+ MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-password}
14
+ command: server /data --console-address ":9001"
15
+ profiles:
16
+ - minio
17
+ # timescaledb:
18
+ # container_name: pe-timescaledb
19
+ # image: timescaledev/timescaledb-ha:pg17.2-ts2.17.2-all-oss
20
+ # ports:
21
+ # - "${TIMESCALEDB_PORT:-5432}:5432"
22
+ # volumes:
23
+ # - ${TIMESCALEDB_DATA_PATH}/timescaledb:/var/lib/postgresql/data
24
+ # environment:
25
+ # POSTGRES_DB: ${TIMESCALEDB_DB:-pfeed}
26
+ # POSTGRES_USER: ${TIMESCALEDB_USER:-pfunder}
27
+ # POSTGRES_PASSWORD: ${TIMESCALEDB_PASSWORD:-password}
28
+ # profiles:
29
+ # - timescaledb
@@ -0,0 +1,56 @@
1
+ version: 1
2
+ # filename_format: '%Y-%m-%d_UTC%z'
3
+ # incremental False = replaces the existing configuration
4
+ incremental: False
5
+ # disable_existing_loggers will be ignored if incremental is True
6
+ disable_existing_loggers: False
7
+ loggers:
8
+ root:
9
+ level: 'WARNING'
10
+ handlers: ['compressed_timed_rotating_file_handler', 'stream_path_handler']
11
+ propagate: False
12
+ pfeed:
13
+ level: 'DEBUG'
14
+ handlers: ['compressed_timed_rotating_file_handler', 'stream_handler']
15
+ propagate: False
16
+ # NOTE: avoid name conflict with pfund, add "_data" suffix to e.g. bybit
17
+ yahoo_finance_data:
18
+ level: 'DEBUG'
19
+ handlers: ['compressed_timed_rotating_file_handler', 'stream_handler']
20
+ propagate: False
21
+ bybit_data:
22
+ level: 'DEBUG'
23
+ handlers: ['compressed_timed_rotating_file_handler', 'stream_handler']
24
+ propagate: False
25
+ databento_data:
26
+ level: 'DEBUG'
27
+ handlers: ['compressed_timed_rotating_file_handler', 'stream_handler']
28
+ propagate: False
29
+ handlers:
30
+ file_handler:
31
+ class: 'logging.FileHandler'
32
+ level: 'DEBUG'
33
+ formatter: 'file'
34
+ compressed_timed_rotating_file_handler:
35
+ class: 'pfund.plogging.handlers.CompressedTimedRotatingFileHandler'
36
+ level: 'DEBUG'
37
+ formatter: 'file'
38
+ kwargs: {'when': 'midnight', 'backupCount': 7, 'utc': True, 'encoding': 'utf-8'}
39
+ stream_handler:
40
+ class: 'logging.StreamHandler'
41
+ level: 'INFO'
42
+ formatter: 'console'
43
+ stream_path_handler:
44
+ class: 'logging.StreamHandler'
45
+ level: 'INFO'
46
+ formatter: 'path'
47
+ formatters:
48
+ path:
49
+ format: '%(asctime)s.%(msecs)03d | %(levelname)s | %(name)s | %(message)s | %(shortpath)s fn:%(funcName)s ln:%(lineno)d'
50
+ datefmt: '%Y-%m-%dT%H:%M:%S%z'
51
+ file:
52
+ format: '%(asctime)s.%(msecs)03d | %(levelname)s | %(message)s | %(filename)s fn:%(funcName)s ln:%(lineno)d'
53
+ datefmt: '%H:%M:%S%z'
54
+ console:
55
+ format: '%(asctime)s.%(msecs)03d | %(levelname)s | %(name)s | %(message)s | %(filename)s fn:%(funcName)s ln:%(lineno)d'
56
+ datefmt: '%Y-%m-%dT%H:%M:%S%z'
@@ -0,0 +1,70 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+ if TYPE_CHECKING:
4
+ from pfund_plugins.base_plugin import BasePlugin
5
+ # need these imports to support IDE hints:
6
+ aliases = ...
7
+ from pfeed.feeds.yahoo_finance.yahoo_finance import (
8
+ YahooFinance,
9
+ YahooFinance as YF,
10
+ )
11
+ from pfeed.feeds.bybit.bybit import (
12
+ BybitMarketFeed as Bybit,
13
+ )
14
+ from pfeed.feeds.financial_modeling_prep.financial_modeling_prep import (
15
+ FinancialModelingPrep,
16
+ FinancialModelingPrep as FMP,
17
+ )
18
+
19
+ from importlib.metadata import version
20
+ from pfeed.config import configure, get_config
21
+
22
+
23
+
24
+ plugins = {}
25
+ def add_plugin(plugin: BasePlugin):
26
+ plugins[plugin.name] = plugin
27
+
28
+
29
+
30
+ def __getattr__(name: str):
31
+ if name == 'aliases':
32
+ from pfeed.const.aliases import ALIASES
33
+ from pfund.const.aliases import ALIASES as PFUND_ALIASES
34
+ return {**ALIASES, **PFUND_ALIASES}
35
+ elif name in ('YahooFinance', 'YF'):
36
+ from pfeed.feeds.yahoo_finance.yahoo_finance import YahooFinance
37
+ return YahooFinance
38
+ elif name in ('Bybit',):
39
+ from pfeed.feeds.bybit.bybit import BybitMarketFeed as Bybit
40
+ return Bybit
41
+ elif name in ('FinancialModelingPrep', 'FMP'):
42
+ from pfeed.feeds.financial_modeling_prep.financial_modeling_prep import FinancialModelingPrep
43
+ return FinancialModelingPrep
44
+ elif name in plugins:
45
+ return plugins[name]
46
+ raise AttributeError(f"'{__name__}' object has no attribute '{name}'")
47
+
48
+
49
+ # TODO: add llm plugin to explain "what is xxx?"
50
+ def what_is(alias: str) -> str | None:
51
+ from pfeed.const.aliases import ALIASES
52
+ from pfund.const.aliases import ALIASES as PFUND_ALIASES
53
+ if alias in PFUND_ALIASES or alias.upper() in PFUND_ALIASES:
54
+ return PFUND_ALIASES.get(alias, PFUND_ALIASES.get(alias.upper(), None))
55
+ elif alias in ALIASES or alias.upper() in ALIASES:
56
+ return aliases.get(alias, aliases.get(alias.upper(), None))
57
+
58
+
59
+ __version__ = version("pfeed")
60
+ __all__ = (
61
+ "__version__",
62
+ "configure",
63
+ "get_config",
64
+ "add_plugin",
65
+ "aliases",
66
+ "what_is",
67
+ "YahooFinance", "YF",
68
+ "Bybit",
69
+ "FinancialModelingPrep", "FMP",
70
+ )