diff --git a/02_activities/assignments/assignment_1.ipynb b/02_activities/assignments/assignment_1.ipynb index 45cfc9cd7..2a50e33d4 100644 --- a/02_activities/assignments/assignment_1.ipynb +++ b/02_activities/assignments/assignment_1.ipynb @@ -26,23 +26,30 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 54, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The dotenv extension is already loaded. To reload it, use:\n", + " %reload_ext dotenv\n" + ] + } + ], "source": [ "# Write your code below.\n", + "# Load the dotenv extension in Jupyter Notebook\n", + "%load_ext dotenv\n", + "\n", + "# Load variables from the .env file\n", + "%dotenv\n", + "\n", + "%reload_ext dotenv\n", "\n" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import dask.dataframe as dd" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -55,15 +62,25 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 55, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], "source": [ "import os\n", "from glob import glob\n", "\n", - "# Write your code below.\n", - "\n" + "PRICE_DATA = os.getenv(\"PRICE_DATA\")\n", + "parquet_files = glob(os.path.join(PRICE_DATA, \"**/*.parquet\"), recursive=True)\n", + "\n", + "print(parquet_files)\n" ] }, { @@ -88,12 +105,39 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\marie\\AppData\\Local\\Temp\\ipykernel_46376\\3412446780.py:19: FutureWarning: The default fill_method='pad' in Series.pct_change is deprecated and will be removed in a future version. Either fill in any non-leading NA values prior to calling pct_change or specify 'fill_method=None' to not fill NA values.\n", + " pdf['returns'] = pdf['Close'].pct_change()\n" + ] + } + ], "source": [ - "# Write your code below.\n", - "\n" + "import os, pandas as pd, dask.dataframe as dd\n", + "from glob import glob\n", + "\n", + "csv_path = r\"D:\\dsi\\production\\05_src\\data\\temp\\csv\"\n", + "parquet_path = r\"D:\\dsi\\production\\05_src\\data\\temp\\parquet\"\n", + "os.makedirs(parquet_path, exist_ok=True)\n", + "\n", + "# Convert CSV → Parquet\n", + "for f in glob(os.path.join(csv_path, \"*.csv\")):\n", + " pd.read_csv(f).to_parquet(os.path.join(parquet_path, os.path.basename(f).replace('.csv','.parquet')), index=False)\n", + "\n", + "# Load Parquet\n", + "ddf = dd.read_parquet(os.path.join(parquet_path, \"*.parquet\"))\n", + "\n", + "# Convert to pandas\n", + "pdf = ddf.compute()\n", + "\n", + "# Calculate returns and 10-day moving average\n", + "pdf['returns'] = pdf['Close'].pct_change()\n", + "pdf['returns_ma10'] = pdf['returns'].rolling(10).mean()\n" ] }, { @@ -108,11 +152,44 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ - "# Write your code below.\n", + "#pdf = dd_feat.compute()\n", + "#Pdf['returns_ma10'] = pdf['returns'].rolling(10).mean()\n", + "import dask.dataframe as dd\n", + "import pandas as pd\n", + "\n", + "# Example Dask DataFrame\n", + "ddf = dd.from_pandas(pd.DataFrame({\n", + " 'ticker': ['A', 'A', 'B', 'B'],\n", + " 'Close': [100, 102, 200, 198],\n", + " 'Adj Close': [100, 101, 200, 197],\n", + " 'High': [101, 103, 201, 199],\n", + " 'Low': [99, 101, 198, 196]\n", + "}), npartitions=2)\n", + "\n", + "# Using groupby + apply with meta\n", + "dd_feat = ddf.groupby('ticker').apply(\n", + " lambda x: x.assign(\n", + " Close_lag_1 = x['Close'].shift(1),\n", + " Adj_Close_lag_1 = x['Adj Close'].shift(1),\n", + " returns = x['Close'] / x['Close'].shift(1) - 1,\n", + " hi_lo_range = x['High'] - x['Low']\n", + " ),\n", + " meta={\n", + " 'ticker': 'object',\n", + " 'Close': 'float64',\n", + " 'Adj Close': 'float64',\n", + " 'High': 'float64',\n", + " 'Low': 'float64',\n", + " 'Close_lag_1': 'float64',\n", + " 'Adj_Close_lag_1': 'float64',\n", + " 'returns': 'float64',\n", + " 'hi_lo_range': 'float64'\n", + " }\n", + ")\n", "\n" ] }, @@ -128,6 +205,4852 @@ "(1 pt)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "1-No, converting to pandas wasn’t required; Dask can handle it\n", + "2-Using Dask is better for large datasets because it computes in parallel and avoids loading everything into memory." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# What are we doing?\n", + "\n", + "## Objectives \n", + "\n", + "\n", + "* Build a data pipeline that downloads price data from the internet, stores it locally, transforms it into return data, and stores the feature set.\n", + " - Getting the data.\n", + " - Schemas and index in Dask.\n", + "\n", + "* Explore the parquet format.\n", + " - Reading and writing parquet files.\n", + " - Read datasets that are stored in distributed files.\n", + " - Discuss Dask vs. Pandas as a small example of big vs small data.\n", + " \n", + "* Discuss the use of environment variables for settings.\n", + "* Discuss how to use Jupyter notebooks and source code concurrently. \n", + "* Logging and using a standard logger.\n", + "\n", + "## About the Data\n", + "\n", + "+ We will download the prices for a list of stocks.\n", + "+ The source is Yahoo Finance, and the data, along with its description, is available via [Kaggle](https://www.kaggle.com/datasets/jacksoncrow/stock-market-dataset).\n", + "\n", + "\n", + "## Medallion Architecture\n", + "\n", + "+ The architecture that we are thinking about is called Medallion by [DataBricks](https://www.databricks.com/glossary/medallion-architecture). It is an ELT type of thinking, although our data is well-structured.\n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "+ In our case, we would like to optimize the number of times that we download data from the internet. \n", + "+ Ultimately, we will build a pipeline manager class to control the process of obtaining and transforming our data.\n", + "\n", + "
\n", + "\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Download Data\n", + "\n", + "Download the [Stock Market Dataset from Kaggle](https://www.kaggle.com/datasets/jacksoncrow/stock-market-dataset). Note that you may be required to register for a free account. Alternatively, download the file from [this location](https://drive.google.com/drive/folders/1AA4gapDLpI194TGce1bY25sd91Km-tU3?usp=drive_link).\n", + "\n", + "+ Extract stock prices (not ETFs) into the directory: `./05_src/data/prices_csv/`. \n", + "+ To be clear, your folder structure should include the path `05_src/data/prices_csv/stocks`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The command `%run update_path.py` runs a local script that adds the repository's `./05_src/` directory to the Notebook's kernel path. This way, we can use our modules within the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [], + "source": [ + "import sys, os\n", + "sys.path.append(os.path.abspath(\"./05_src\"))\n", + "%run update_path.py\n", + "from glob import glob\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To load the historical price data for stocks and ETFs, use the code below. Notice the following:\n", + "\n", + "+ Libraries are ordered from high-level to low-level libraries from the package manager. Local modules are imported at the end. \n", + "+ The function `get_logger()` is called with `__name__` as recommended by [Python's documentation](https://docs.python.org/2/howto/logging.html#logging-advanced-tutorial).\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [], + "source": [ + "from glob import glob\n", + "import os\n", + "import pandas as pd\n", + "import random\n", + "\n", + "from utils.logger import get_logger\n", + "_logs = get_logger(__name__)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "+ The [`glob` module](https://docs.python.org/3/library/glob.html) is used for finding path names that match specified patterns using Unix shell-style rules.\n", + "\n", + "+ Notice that the module `glob` contains a function called `glob`; therefore, we used `from glob import glob` above.\n", + "\n", + "+ The path in which we are searching for our csv files is produced by joining two strings:\n", + "\n", + "\n", + "\n", + " - The value of the environment variable 'SRC_DIR' that we obtain with `os.getenv('SRC_DIR')` (this variable points to ./05_src).\n", + "\n", + " - Another string given by \"data/prices_csv/stocks/*.csv\".\n", + "\n", + " - Both strings are combined into an OS-consistent path using `os.path.join(...)`.\n", + "\n", + "+ After we know the location of all our files, we sample a subset of them." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:56:25,386, 647190820.py, 2, INFO, Found 5884 stock price files.\n", + "2026-01-19 21:56:25,389, 647190820.py, 7, INFO, Sampled 60 stock price files for processing. The files are: ['D:/dsi/production/dataset/stocks\\\\TNC.csv', 'D:/dsi/production/dataset/stocks\\\\CBB.csv', 'D:/dsi/production/dataset/stocks\\\\ALDX.csv', 'D:/dsi/production/dataset/stocks\\\\GLADD.csv', 'D:/dsi/production/dataset/stocks\\\\FIXX.csv', 'D:/dsi/production/dataset/stocks\\\\ETJ.csv', 'D:/dsi/production/dataset/stocks\\\\CMCTP.csv', 'D:/dsi/production/dataset/stocks\\\\BWG.csv', 'D:/dsi/production/dataset/stocks\\\\VIAC.csv', 'D:/dsi/production/dataset/stocks\\\\REI.csv', 'D:/dsi/production/dataset/stocks\\\\BLPH.csv', 'D:/dsi/production/dataset/stocks\\\\SMG.csv', 'D:/dsi/production/dataset/stocks\\\\MOH.csv', 'D:/dsi/production/dataset/stocks\\\\AMH.csv', 'D:/dsi/production/dataset/stocks\\\\AMAL.csv', 'D:/dsi/production/dataset/stocks\\\\BPYPN.csv', 'D:/dsi/production/dataset/stocks\\\\ERH.csv', 'D:/dsi/production/dataset/stocks\\\\FAMI.csv', 'D:/dsi/production/dataset/stocks\\\\PFG.csv', 'D:/dsi/production/dataset/stocks\\\\SPXC.csv', 'D:/dsi/production/dataset/stocks\\\\ALL.csv', 'D:/dsi/production/dataset/stocks\\\\RTTR.csv', 'D:/dsi/production/dataset/stocks\\\\EARN.csv', 'D:/dsi/production/dataset/stocks\\\\ZIXI.csv', 'D:/dsi/production/dataset/stocks\\\\TSN.csv', 'D:/dsi/production/dataset/stocks\\\\WST.csv', 'D:/dsi/production/dataset/stocks\\\\REG.csv', 'D:/dsi/production/dataset/stocks\\\\MNK.csv', 'D:/dsi/production/dataset/stocks\\\\ESGR.csv', 'D:/dsi/production/dataset/stocks\\\\NGD.csv', 'D:/dsi/production/dataset/stocks\\\\SLRX.csv', 'D:/dsi/production/dataset/stocks\\\\GLW.csv', 'D:/dsi/production/dataset/stocks\\\\ACN.csv', 'D:/dsi/production/dataset/stocks\\\\CSSE.csv', 'D:/dsi/production/dataset/stocks\\\\WORK.csv', 'D:/dsi/production/dataset/stocks\\\\MOS.csv', 'D:/dsi/production/dataset/stocks\\\\IPWR.csv', 'D:/dsi/production/dataset/stocks\\\\GLUU.csv', 'D:/dsi/production/dataset/stocks\\\\CRMT.csv', 'D:/dsi/production/dataset/stocks\\\\EOLS.csv', 'D:/dsi/production/dataset/stocks\\\\INSU.csv', 'D:/dsi/production/dataset/stocks\\\\BWEN.csv', 'D:/dsi/production/dataset/stocks\\\\BPMX.csv', 'D:/dsi/production/dataset/stocks\\\\LH.csv', 'D:/dsi/production/dataset/stocks\\\\BRQS.csv', 'D:/dsi/production/dataset/stocks\\\\KALU.csv', 'D:/dsi/production/dataset/stocks\\\\ITCB.csv', 'D:/dsi/production/dataset/stocks\\\\SRE.csv', 'D:/dsi/production/dataset/stocks\\\\GAZ.csv', 'D:/dsi/production/dataset/stocks\\\\AQMS.csv', 'D:/dsi/production/dataset/stocks\\\\NPK.csv', 'D:/dsi/production/dataset/stocks\\\\QRHC.csv', 'D:/dsi/production/dataset/stocks\\\\CGEN.csv', 'D:/dsi/production/dataset/stocks\\\\LEVL.csv', 'D:/dsi/production/dataset/stocks\\\\BGS.csv', 'D:/dsi/production/dataset/stocks\\\\RIV.csv', 'D:/dsi/production/dataset/stocks\\\\GURE.csv', 'D:/dsi/production/dataset/stocks\\\\TEF.csv', 'D:/dsi/production/dataset/stocks\\\\SYNH.csv', 'D:/dsi/production/dataset/stocks\\\\KEY.csv']\n" + ] + } + ], + "source": [ + "stock_files = glob(\"D:/dsi/production/dataset/stocks/*.csv\") \n", + "_logs.info(f'Found {len(stock_files)} stock price files.')\n", + "\n", + "random.seed(42)\n", + "n_sample = 60\n", + "stock_files = random.sample(stock_files, n_sample)\n", + "_logs.info(f'Sampled {n_sample} stock price files for processing. The files are: {stock_files }')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We load the sampled files into dataframes and concatenate them:\n", + "\n", + "+ Start with an empty list.\n", + "+ Read each file into a dataframe and [`append()` it to the list](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists). Notice that `append()` is an in-place operation (it does not return a list, it modifies the list in place).\n", + "+ Finally, we concatenate all dataframes along the vertical axis (`axis=0`) using [`pd.concat()`](https://pandas.pydata.org/docs/user_guide/merging.html#concat). \n", + "+ Notice that we do not concatenate each time that we load a dataframe. According to [Panda's documentation](https://pandas.pydata.org/docs/user_guide/merging.html#concat): \n", + "\n", + "> \"`concat()` makes a full copy of the data, and iteratively reusing `concat()` can create unnecessary copies. Collect all DataFrame or Series objects in a list before using `concat()`.\"" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:56:30,171, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\TNC.csv\n", + "2026-01-19 21:56:30,241, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CBB.csv\n", + "2026-01-19 21:56:30,289, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ALDX.csv\n", + "2026-01-19 21:56:30,324, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GLADD.csv\n", + "2026-01-19 21:56:30,353, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\FIXX.csv\n", + "2026-01-19 21:56:30,388, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ETJ.csv\n", + "2026-01-19 21:56:30,456, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CMCTP.csv\n", + "2026-01-19 21:56:30,486, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BWG.csv\n", + "2026-01-19 21:56:30,553, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\VIAC.csv\n", + "2026-01-19 21:56:30,590, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\REI.csv\n", + "2026-01-19 21:56:30,618, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BLPH.csv\n", + "2026-01-19 21:56:30,648, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SMG.csv\n", + "2026-01-19 21:56:30,694, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\MOH.csv\n", + "2026-01-19 21:56:30,739, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\AMH.csv\n", + "2026-01-19 21:56:30,773, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\AMAL.csv\n", + "2026-01-19 21:56:30,800, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BPYPN.csv\n", + "2026-01-19 21:56:30,820, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ERH.csv\n", + "2026-01-19 21:56:30,872, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\FAMI.csv\n", + "2026-01-19 21:56:30,897, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\PFG.csv\n", + "2026-01-19 21:56:30,944, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SPXC.csv\n", + "2026-01-19 21:56:30,988, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ALL.csv\n", + "2026-01-19 21:56:31,034, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\RTTR.csv\n", + "2026-01-19 21:56:31,059, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\EARN.csv\n", + "2026-01-19 21:56:31,088, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ZIXI.csv\n", + "2026-01-19 21:56:31,128, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\TSN.csv\n", + "2026-01-19 21:56:31,170, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\WST.csv\n", + "2026-01-19 21:56:31,207, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\REG.csv\n", + "2026-01-19 21:56:31,237, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\MNK.csv\n", + "2026-01-19 21:56:31,262, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ESGR.csv\n", + "2026-01-19 21:56:31,308, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\NGD.csv\n", + "2026-01-19 21:56:31,336, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SLRX.csv\n", + "2026-01-19 21:56:31,363, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GLW.csv\n", + "2026-01-19 21:56:31,400, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ACN.csv\n", + "2026-01-19 21:56:31,431, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CSSE.csv\n", + "2026-01-19 21:56:31,450, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\WORK.csv\n", + "2026-01-19 21:56:31,470, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\MOS.csv\n", + "2026-01-19 21:56:31,501, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\IPWR.csv\n", + "2026-01-19 21:56:31,524, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GLUU.csv\n", + "2026-01-19 21:56:31,559, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CRMT.csv\n", + "2026-01-19 21:56:31,592, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\EOLS.csv\n", + "2026-01-19 21:56:31,615, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\INSU.csv\n", + "2026-01-19 21:56:31,634, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BWEN.csv\n", + "2026-01-19 21:56:31,662, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BPMX.csv\n", + "2026-01-19 21:56:31,699, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\LH.csv\n", + "2026-01-19 21:56:31,728, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BRQS.csv\n", + "2026-01-19 21:56:31,751, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\KALU.csv\n", + "2026-01-19 21:56:31,780, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ITCB.csv\n", + "2026-01-19 21:56:31,807, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SRE.csv\n", + "2026-01-19 21:56:31,835, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GAZ.csv\n", + "2026-01-19 21:56:31,866, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\AQMS.csv\n", + "2026-01-19 21:56:31,886, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\NPK.csv\n", + "2026-01-19 21:56:31,921, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\QRHC.csv\n", + "2026-01-19 21:56:31,948, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CGEN.csv\n", + "2026-01-19 21:56:32,032, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\LEVL.csv\n", + "2026-01-19 21:56:32,057, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BGS.csv\n", + "2026-01-19 21:56:32,101, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\RIV.csv\n", + "2026-01-19 21:56:32,121, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GURE.csv\n", + "2026-01-19 21:56:32,153, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\TEF.csv\n", + "2026-01-19 21:56:32,189, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SYNH.csv\n", + "2026-01-19 21:56:32,218, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\KEY.csv\n" + ] + } + ], + "source": [ + "dt_list = []\n", + "for s_file in stock_files:\n", + " _logs.info(f\"Reading file: {s_file}\")\n", + " dt = pd.read_csv(s_file).assign(\n", + " source = os.path.basename(s_file),\n", + " ticker = os.path.basename(s_file).replace('.csv', ''),\n", + " Date = lambda x: pd.to_datetime(x['Date'])\n", + " )\n", + " dt_list.append(dt)\n", + "stock_prices = pd.concat(dt_list, axis = 0, ignore_index = True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Verify the structure of the `stock_prices` data using the [`info()` dataframe method](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.info.html):" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 239659 entries, 0 to 239658\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Date 239659 non-null datetime64[ns]\n", + " 1 Open 239656 non-null float64 \n", + " 2 High 239656 non-null float64 \n", + " 3 Low 239656 non-null float64 \n", + " 4 Close 239656 non-null float64 \n", + " 5 Adj Close 239656 non-null float64 \n", + " 6 Volume 239656 non-null float64 \n", + " 7 source 239659 non-null object \n", + " 8 ticker 239659 non-null object \n", + "dtypes: datetime64[ns](1), float64(6), object(2)\n", + "memory usage: 16.5+ MB\n" + ] + } + ], + "source": [ + "stock_prices.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can subset our ticker data set using standard indexing techniques. Good references for this type of data manipulation are:\n", + "\n", + "+ [Panda's Documentation](https://pandas.pydata.org/docs/user_guide/indexing.html#indexing-and-selecting-data). \n", + "+ [Panda's Cookbook](https://pandas.pydata.org/docs/user_guide/cookbook.html#cookbook-selection)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the subset data frame, select one column and convert to list." + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['TNC',\n", + " 'CBB',\n", + " 'ALDX',\n", + " 'GLADD',\n", + " 'FIXX',\n", + " 'ETJ',\n", + " 'CMCTP',\n", + " 'BWG',\n", + " 'VIAC',\n", + " 'REI',\n", + " 'BLPH',\n", + " 'SMG',\n", + " 'MOH',\n", + " 'AMH',\n", + " 'AMAL',\n", + " 'BPYPN',\n", + " 'ERH',\n", + " 'FAMI',\n", + " 'PFG',\n", + " 'SPXC',\n", + " 'ALL',\n", + " 'RTTR',\n", + " 'EARN',\n", + " 'ZIXI',\n", + " 'TSN',\n", + " 'WST',\n", + " 'REG',\n", + " 'MNK',\n", + " 'ESGR',\n", + " 'NGD',\n", + " 'SLRX',\n", + " 'GLW',\n", + " 'ACN',\n", + " 'CSSE',\n", + " 'WORK',\n", + " 'MOS',\n", + " 'IPWR',\n", + " 'GLUU',\n", + " 'CRMT',\n", + " 'EOLS',\n", + " 'INSU',\n", + " 'BWEN',\n", + " 'BPMX',\n", + " 'LH',\n", + " 'BRQS',\n", + " 'KALU',\n", + " 'ITCB',\n", + " 'SRE',\n", + " 'GAZ',\n", + " 'AQMS',\n", + " 'NPK',\n", + " 'QRHC',\n", + " 'CGEN',\n", + " 'LEVL',\n", + " 'BGS',\n", + " 'RIV',\n", + " 'GURE',\n", + " 'TEF',\n", + " 'SYNH',\n", + " 'KEY']" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "select_tickers = stock_prices['ticker'].unique().tolist()\n", + "select_tickers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Storing Data in CSV\n", + "\n", + "+ We have some data. How do we store it?\n", + "+ We can compare two options, CSV and Parquet, by measuring their performance:\n", + "\n", + " - Time to save: We will measure time by using the `time` library.\n", + " - Space required on drive: We will use the custom function below." + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [], + "source": [ + "def get_dir_size(path='.'):\n", + " '''Returns the total size of files contained in path.'''\n", + " total = 0\n", + " with os.scandir(path) as it:\n", + " for entry in it:\n", + " if entry.is_file():\n", + " total += entry.stat().st_size\n", + " elif entry.is_dir():\n", + " total += get_dir_size(entry.path)\n", + " return total" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Load the specification of a temporary directory from the environment and create a subdirectory in it called \"csv\":\n", + "\n", + "+ Use `os.getenv(\"TEMP_DATA\")` to obtain the desired location of the temporary folder from an environment variable.\n", + "+ If the subdirectory exists, delete it using `shutil.rmtree()`; the flag `ignore_errors=True` helps us in case the subdirectory does not exist (for instance, in the first run).\n", + "+ Create a directory with path given by `csv_dir` using `os.makedirs()`; the flag `exist_ok=True` indicates that if the directory already exists, then the function will do nothing.\n", + "+ Finally, create the stock price file location, `stock_csv`, which will be used to create the csv file." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "\n", + "temp = os.getenv(\"TEMP_DATA\")\n", + "csv_dir = os.path.join(temp, \"csv\")\n", + "\n", + "shutil.rmtree(csv_dir, ignore_errors=True)\n", + "os.makedirs(csv_dir, exist_ok=True)\n", + "stock_csv = os.path.join(csv_dir, \"stock_px.csv\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Save the concatenated dataframe to a CSV file. We measure the time elapsed by storing the start and end times, then we calculate their difference in seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:56:54,464, 807204384.py, 7, INFO, Writing data ((239659, 9)) to csv took 2.19250226020813 seconds.\n", + "2026-01-19 21:56:54,464, 807204384.py, 8, INFO, CSV file size 26.618403999999998 MB\n" + ] + } + ], + "source": [ + "import time\n", + "\n", + "start = time.time()\n", + "stock_prices.to_csv(stock_csv, index = False)\n", + "end = time.time()\n", + "\n", + "_logs.info(f'Writing data ({stock_prices.shape}) to csv took {end - start} seconds.')\n", + "_logs.info(f'CSV file size { os.path.getsize(stock_csv)*1e-6 } MB')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save Data to Parquet\n", + "\n", + "### Notes on Dask \n", + "\n", + "We could use Pandas to save the data directly into Parquet files. However, we will use a different approach by applying the [Dask framework](https://www.dask.org/). Dask provides functionality for working with datasets that do not fit in memory and parallelization to speed up computation. A few notes on Dask and Pandas:\n", + "\n", + "- Pandas, Parquet, and Arrow:\n", + "\n", + " + We can work with large datasets and Parquet files in Pandas, but we will generally be limited by the amount of data that can fit in our computer's memory.\n", + " + Pandas can write Parquet files using a PyArrow backend. In fact, recent versions of Pandas support PyArrow data types, and future versions will require a PyArrow backend. \n", + " + The PyArrow library is an interface between Python and the Apache Arrow project. In particular, the [Parquet data format](https://parquet.apache.org/) and [Arrow](https://arrow.apache.org/docs/python/parquet.html) are Apache projects.\n", + "\n", + "- Dask \n", + "\n", + " + Dask is much more than an interface to Arrow: Dask provides parallel and distributed computing on Pandas-like dataframes. \n", + " + Dask is also relatively easy to use as it mimics Pandas' API.\n", + " + Dask allows us to work with larger datasets than Pandas. In a sense, it is an intermediate step between Pandas and big-data frameworks like Spark (or Databricks).\n", + " + If you are familiar with Pandas, a good introduction is [10 Minutes to Dask](https://docs.dask.org/en/stable/10-minutes-to-dask.html)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import dask.dataframe as dd\n", + "\n", + "parquet_dir = os.path.join(temp, \"parquet\")\n", + "shutil.rmtree(parquet_dir, ignore_errors=True)\n", + "\n", + "os.makedirs(parquet_dir, exist_ok=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:57:03,672, 647190820.py, 2, INFO, Found 5884 stock price files.\n", + "2026-01-19 21:57:03,674, 647190820.py, 7, INFO, Sampled 60 stock price files for processing. The files are: ['D:/dsi/production/dataset/stocks\\\\TNC.csv', 'D:/dsi/production/dataset/stocks\\\\CBB.csv', 'D:/dsi/production/dataset/stocks\\\\ALDX.csv', 'D:/dsi/production/dataset/stocks\\\\GLADD.csv', 'D:/dsi/production/dataset/stocks\\\\FIXX.csv', 'D:/dsi/production/dataset/stocks\\\\ETJ.csv', 'D:/dsi/production/dataset/stocks\\\\CMCTP.csv', 'D:/dsi/production/dataset/stocks\\\\BWG.csv', 'D:/dsi/production/dataset/stocks\\\\VIAC.csv', 'D:/dsi/production/dataset/stocks\\\\REI.csv', 'D:/dsi/production/dataset/stocks\\\\BLPH.csv', 'D:/dsi/production/dataset/stocks\\\\SMG.csv', 'D:/dsi/production/dataset/stocks\\\\MOH.csv', 'D:/dsi/production/dataset/stocks\\\\AMH.csv', 'D:/dsi/production/dataset/stocks\\\\AMAL.csv', 'D:/dsi/production/dataset/stocks\\\\BPYPN.csv', 'D:/dsi/production/dataset/stocks\\\\ERH.csv', 'D:/dsi/production/dataset/stocks\\\\FAMI.csv', 'D:/dsi/production/dataset/stocks\\\\PFG.csv', 'D:/dsi/production/dataset/stocks\\\\SPXC.csv', 'D:/dsi/production/dataset/stocks\\\\ALL.csv', 'D:/dsi/production/dataset/stocks\\\\RTTR.csv', 'D:/dsi/production/dataset/stocks\\\\EARN.csv', 'D:/dsi/production/dataset/stocks\\\\ZIXI.csv', 'D:/dsi/production/dataset/stocks\\\\TSN.csv', 'D:/dsi/production/dataset/stocks\\\\WST.csv', 'D:/dsi/production/dataset/stocks\\\\REG.csv', 'D:/dsi/production/dataset/stocks\\\\MNK.csv', 'D:/dsi/production/dataset/stocks\\\\ESGR.csv', 'D:/dsi/production/dataset/stocks\\\\NGD.csv', 'D:/dsi/production/dataset/stocks\\\\SLRX.csv', 'D:/dsi/production/dataset/stocks\\\\GLW.csv', 'D:/dsi/production/dataset/stocks\\\\ACN.csv', 'D:/dsi/production/dataset/stocks\\\\CSSE.csv', 'D:/dsi/production/dataset/stocks\\\\WORK.csv', 'D:/dsi/production/dataset/stocks\\\\MOS.csv', 'D:/dsi/production/dataset/stocks\\\\IPWR.csv', 'D:/dsi/production/dataset/stocks\\\\GLUU.csv', 'D:/dsi/production/dataset/stocks\\\\CRMT.csv', 'D:/dsi/production/dataset/stocks\\\\EOLS.csv', 'D:/dsi/production/dataset/stocks\\\\INSU.csv', 'D:/dsi/production/dataset/stocks\\\\BWEN.csv', 'D:/dsi/production/dataset/stocks\\\\BPMX.csv', 'D:/dsi/production/dataset/stocks\\\\LH.csv', 'D:/dsi/production/dataset/stocks\\\\BRQS.csv', 'D:/dsi/production/dataset/stocks\\\\KALU.csv', 'D:/dsi/production/dataset/stocks\\\\ITCB.csv', 'D:/dsi/production/dataset/stocks\\\\SRE.csv', 'D:/dsi/production/dataset/stocks\\\\GAZ.csv', 'D:/dsi/production/dataset/stocks\\\\AQMS.csv', 'D:/dsi/production/dataset/stocks\\\\NPK.csv', 'D:/dsi/production/dataset/stocks\\\\QRHC.csv', 'D:/dsi/production/dataset/stocks\\\\CGEN.csv', 'D:/dsi/production/dataset/stocks\\\\LEVL.csv', 'D:/dsi/production/dataset/stocks\\\\BGS.csv', 'D:/dsi/production/dataset/stocks\\\\RIV.csv', 'D:/dsi/production/dataset/stocks\\\\GURE.csv', 'D:/dsi/production/dataset/stocks\\\\TEF.csv', 'D:/dsi/production/dataset/stocks\\\\SYNH.csv', 'D:/dsi/production/dataset/stocks\\\\KEY.csv']\n" + ] + } + ], + "source": [ + "stock_files = glob(\"D:/dsi/production/dataset/stocks/*.csv\") \n", + "_logs.info(f'Found {len(stock_files)} stock price files.')\n", + "\n", + "random.seed(42)\n", + "n_sample = 60\n", + "stock_files = random.sample(stock_files, n_sample)\n", + "_logs.info(f'Sampled {n_sample} stock price files for processing. The files are: {stock_files }')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We load the sampled files into dataframes and concatenate them:\n", + "\n", + "+ Start with an empty list.\n", + "+ Read each file into a dataframe and [`append()` it to the list](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists). Notice that `append()` is an in-place operation (it does not return a list, it modifies the list in place).\n", + "+ Finally, we concatenate all dataframes along the vertical axis (`axis=0`) using [`pd.concat()`](https://pandas.pydata.org/docs/user_guide/merging.html#concat). \n", + "+ Notice that we do not concatenate each time that we load a dataframe. According to [Panda's documentation](https://pandas.pydata.org/docs/user_guide/merging.html#concat): \n", + "\n", + "> \"`concat()` makes a full copy of the data, and iteratively reusing `concat()` can create unnecessary copies. Collect all DataFrame or Series objects in a list before using `concat()`.\"" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:57:07,579, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\TNC.csv\n", + "2026-01-19 21:57:07,610, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CBB.csv\n", + "2026-01-19 21:57:07,632, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ALDX.csv\n", + "2026-01-19 21:57:07,641, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GLADD.csv\n", + "2026-01-19 21:57:07,645, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\FIXX.csv\n", + "2026-01-19 21:57:07,657, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ETJ.csv\n", + "2026-01-19 21:57:07,670, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CMCTP.csv\n", + "2026-01-19 21:57:07,677, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BWG.csv\n", + "2026-01-19 21:57:07,677, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\VIAC.csv\n", + "2026-01-19 21:57:07,697, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\REI.csv\n", + "2026-01-19 21:57:07,714, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BLPH.csv\n", + "2026-01-19 21:57:07,717, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SMG.csv\n", + "2026-01-19 21:57:07,743, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\MOH.csv\n", + "2026-01-19 21:57:07,761, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\AMH.csv\n", + "2026-01-19 21:57:07,763, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\AMAL.csv\n", + "2026-01-19 21:57:07,775, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BPYPN.csv\n", + "2026-01-19 21:57:07,781, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ERH.csv\n", + "2026-01-19 21:57:07,794, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\FAMI.csv\n", + "2026-01-19 21:57:07,800, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\PFG.csv\n", + "2026-01-19 21:57:07,814, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SPXC.csv\n", + "2026-01-19 21:57:07,838, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ALL.csv\n", + "2026-01-19 21:57:07,845, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\RTTR.csv\n", + "2026-01-19 21:57:07,862, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\EARN.csv\n", + "2026-01-19 21:57:07,870, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ZIXI.csv\n", + "2026-01-19 21:57:07,882, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\TSN.csv\n", + "2026-01-19 21:57:07,911, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\WST.csv\n", + "2026-01-19 21:57:07,933, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\REG.csv\n", + "2026-01-19 21:57:07,963, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\MNK.csv\n", + "2026-01-19 21:57:07,982, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ESGR.csv\n", + "2026-01-19 21:57:07,995, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\NGD.csv\n", + "2026-01-19 21:57:08,011, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SLRX.csv\n", + "2026-01-19 21:57:08,016, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GLW.csv\n", + "2026-01-19 21:57:08,036, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ACN.csv\n", + "2026-01-19 21:57:08,044, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CSSE.csv\n", + "2026-01-19 21:57:08,054, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\WORK.csv\n", + "2026-01-19 21:57:08,061, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\MOS.csv\n", + "2026-01-19 21:57:08,081, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\IPWR.csv\n", + "2026-01-19 21:57:08,089, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GLUU.csv\n", + "2026-01-19 21:57:08,099, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CRMT.csv\n", + "2026-01-19 21:57:08,115, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\EOLS.csv\n", + "2026-01-19 21:57:08,127, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\INSU.csv\n", + "2026-01-19 21:57:08,133, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BWEN.csv\n", + "2026-01-19 21:57:08,145, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BPMX.csv\n", + "2026-01-19 21:57:08,153, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\LH.csv\n", + "2026-01-19 21:57:08,171, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BRQS.csv\n", + "2026-01-19 21:57:08,180, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\KALU.csv\n", + "2026-01-19 21:57:08,190, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\ITCB.csv\n", + "2026-01-19 21:57:08,193, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SRE.csv\n", + "2026-01-19 21:57:08,211, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GAZ.csv\n", + "2026-01-19 21:57:08,230, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\AQMS.csv\n", + "2026-01-19 21:57:08,242, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\NPK.csv\n", + "2026-01-19 21:57:08,263, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\QRHC.csv\n", + "2026-01-19 21:57:08,276, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\CGEN.csv\n", + "2026-01-19 21:57:08,292, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\LEVL.csv\n", + "2026-01-19 21:57:08,298, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\BGS.csv\n", + "2026-01-19 21:57:08,308, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\RIV.csv\n", + "2026-01-19 21:57:08,312, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\GURE.csv\n", + "2026-01-19 21:57:08,329, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\TEF.csv\n", + "2026-01-19 21:57:08,345, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\SYNH.csv\n", + "2026-01-19 21:57:08,359, 2577063914.py, 3, INFO, Reading file: D:/dsi/production/dataset/stocks\\KEY.csv\n" + ] + } + ], + "source": [ + "dt_list = []\n", + "for s_file in stock_files:\n", + " _logs.info(f\"Reading file: {s_file}\")\n", + " dt = pd.read_csv(s_file).assign(\n", + " source = os.path.basename(s_file),\n", + " ticker = os.path.basename(s_file).replace('.csv', ''),\n", + " Date = lambda x: pd.to_datetime(x['Date'])\n", + " )\n", + " dt_list.append(dt)\n", + "stock_prices = pd.concat(dt_list, axis = 0, ignore_index = True)" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:57:13,360, 3847057699.py, 8, INFO, Writing dd ((239659, 9)) to parquet took 0.996516227722168 seconds.\n", + "2026-01-19 21:57:13,360, 3847057699.py, 9, INFO, Parquet file size 9.721594 MB\n" + ] + } + ], + "source": [ + "\n", + "px_dd = dd.from_pandas(stock_prices, npartitions = len(select_tickers))\n", + "\n", + "start = time.time()\n", + "px_dd.to_parquet(parquet_dir, engine = \"pyarrow\")\n", + "end = time.time()\n", + "\n", + "_logs.info(f'Writing dd ({stock_prices.shape}) to parquet took {end - start} seconds.')\n", + "_logs.info(f'Parquet file size { get_dir_size(parquet_dir)*1e-6 } MB')" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22.0.0\n" + ] + } + ], + "source": [ + "import pyarrow\n", + "print(pyarrow.__version__)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pandas, Dask, and Parquet\n", + "\n", + "The distinction of Pandas Dataframes, Dask Dataframes, and Parquet files is important:\n", + "\n", + "+ Pandas dataframes combine the functionality of [NumPy](https://numpy.org/) (efficient vector operations, especially vector algebra) with a concise data manipulation framework that allows us to create columns of different data types (NumPy only allows single-type matrices), database-like operations (such as filtering rows, subsetting columns, and joining different dataframes).\n", + "+ Dask dataframes extend the functionality of Pandas dataframes beyond the confines of available memory and implement parallelized operations, among other benefits.\n", + "+ Parquet files are a file format. Parquet files can be created by Pandas and Dask, but Dask offers a superior interface. Parquet files are immutable: once written, they cannot be modified.\n", + "+ Parquet and Dask are not the same: Parquet is a file format that can be accessed by many applications and programming languages (Python, R, Power BI, etc.), while Dask is a Python package for working with large datasets using distributed computation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dask is Powerful, but not Infallible\n", + "\n", + "It is tempting to think of Dask as a super-Pandas, but each package has its advantages and disadvantages. \n", + "\n", + "+ Dask is not good at everything (see [Dask DataFrames Best Practices](https://docs.dask.org/en/stable/dataframe-best-practices.html)). \n", + "+ A useful and somewhat idiosyncratic comparison of various data manipulation frameworks is shown below (from [DataFrames at Scale Comparison: TPC-H](https://docs.coiled.io/blog/tpch.html#when-to-use-duckdb-vs-polars-vs-dask-vs-spark)) \n", + "\n", + "Concept | Spark | Dask | DuckDB | Polars\n", + "---------------------|-------|------|--------|--------\n", + "Fast Locally | ❌ | 🤔 | ✅ | ✅\n", + "Fast on Cloud (1 TB) | ✅ | ✅ | ✅ | ❌\n", + "Fast on Cloud (10 TB)| ❌ | ✅ | ✅ | ❌\n", + "Scales Out | ✅ | ✅ | ❌ | ❌\n", + "SQL | ✅ | 🤔 | ✅ | 🤔\n", + "More than SQL | ✅ | ✅ | ❌ | ✅\n", + "Sensible Defaults | ❌ | ✅ | ✅ | ✅\n", + "\n", + "\n", + "### Dask Best Practices\n", + "\n", + "Parallelism brings extra complexity and overhead. Here are a few ideas to help you decide when to use Dask (from [Dask's Best Practices](https://docs.dask.org/en/stable/best-practices.html)):\n", + "\n", + "#### Small is Better\n", + "\n", + "+ Start small: if possible, use Pandas. Also, try to reduce your data using aggregation, then use Pandas.\n", + "+ More generally, NumPy, Pandas, and Scikit-Learn may have faster functions for what you need. Consult the relevant documentation, experiment, and/or consult with a colleague or expert.\n", + "\n", + "#### Index with Care\n", + "\n", + "+ Use the index: it is beneficial to have a well-defined index in Dask DataFrames, as it may speed up searching (filtering) the data. A one-dimensional index is allowed.\n", + "+ Minimize full-data shuffling as much as possible: indexing is an expensive operation. \n", + "\n", + "### Consider the Cost of Joins\n", + "\n", + "+ Consider cases such as small-to-large joins, where the small dataframe fits in memory, but the large one does not. The small dataframe can be Pandas, while the larger one is a Dask dataframe.\n", + "+ Some joins are more expensive than others. \n", + "\n", + " * Not expensive:\n", + "\n", + " - Join a Dask DataFrame with a Pandas DataFrame.\n", + " - Join a Dask DataFrame with another Dask DataFrame of a single partition.\n", + " - Join Dask DataFrames along their indexes.\n", + "\n", + " * Expensive:\n", + "\n", + " - Join Dask DataFrames along columns that are not their index." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How Do We Store Prices?\n", + "\n", + "+ We can store our data as a single blob. \n", + "\n", + " - This can be difficult to maintain, especially because parquet files are immutable.\n", + " - Using a single file, we would need to recreate the complete file any time that we update it.\n", + "\n", + "+ An alternative strategy is to organize data files by ticker and date: \n", + "\n", + " - We can create one file per ticker and month (or any other suitable frequency). \n", + " - Under this approach, we would only need to recreate the latest month's file at any update. " + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [], + "source": [ + "# CLean up before start\n", + "PRICE_DATA = os.getenv(\"PRICE_DATA\")\n", + "import shutil\n", + "if os.path.exists(PRICE_DATA):\n", + " shutil.rmtree(PRICE_DATA)" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume', 'source',\n", + " 'ticker'],\n", + " dtype='object')" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stock_prices.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:57:31,910, 2113979629.py, 4, INFO, Processing ticker: TNC\n", + "2026-01-19 21:57:31,935, 2113979629.py, 8, INFO, Processing year 1973 for ticker TNC.\n", + "2026-01-19 21:57:31,951, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1973\n", + "2026-01-19 21:57:32,002, 2113979629.py, 8, INFO, Processing year 1974 for ticker TNC.\n", + "2026-01-19 21:57:32,015, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1974\n", + "2026-01-19 21:57:32,061, 2113979629.py, 8, INFO, Processing year 1975 for ticker TNC.\n", + "2026-01-19 21:57:32,061, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1975\n", + "2026-01-19 21:57:32,119, 2113979629.py, 8, INFO, Processing year 1976 for ticker TNC.\n", + "2026-01-19 21:57:32,131, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1976\n", + "2026-01-19 21:57:32,170, 2113979629.py, 8, INFO, Processing year 1977 for ticker TNC.\n", + "2026-01-19 21:57:32,196, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1977\n", + "2026-01-19 21:57:32,246, 2113979629.py, 8, INFO, Processing year 1978 for ticker TNC.\n", + "2026-01-19 21:57:32,256, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1978\n", + "2026-01-19 21:57:32,297, 2113979629.py, 8, INFO, Processing year 1979 for ticker TNC.\n", + "2026-01-19 21:57:32,315, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1979\n", + "2026-01-19 21:57:32,372, 2113979629.py, 8, INFO, Processing year 1980 for ticker TNC.\n", + "2026-01-19 21:57:32,384, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1980\n", + "2026-01-19 21:57:32,431, 2113979629.py, 8, INFO, Processing year 1981 for ticker TNC.\n", + "2026-01-19 21:57:32,447, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1981\n", + "2026-01-19 21:57:32,494, 2113979629.py, 8, INFO, Processing year 1982 for ticker TNC.\n", + "2026-01-19 21:57:32,505, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1982\n", + "2026-01-19 21:57:32,550, 2113979629.py, 8, INFO, Processing year 1983 for ticker TNC.\n", + "2026-01-19 21:57:32,566, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1983\n", + "2026-01-19 21:57:32,633, 2113979629.py, 8, INFO, Processing year 1984 for ticker TNC.\n", + "2026-01-19 21:57:32,644, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1984\n", + "2026-01-19 21:57:32,694, 2113979629.py, 8, INFO, Processing year 1985 for ticker TNC.\n", + "2026-01-19 21:57:32,709, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1985\n", + "2026-01-19 21:57:32,758, 2113979629.py, 8, INFO, Processing year 1986 for ticker TNC.\n", + "2026-01-19 21:57:32,760, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1986\n", + "2026-01-19 21:57:32,808, 2113979629.py, 8, INFO, Processing year 1987 for ticker TNC.\n", + "2026-01-19 21:57:32,816, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1987\n", + "2026-01-19 21:57:32,850, 2113979629.py, 8, INFO, Processing year 1988 for ticker TNC.\n", + "2026-01-19 21:57:32,865, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1988\n", + "2026-01-19 21:57:32,908, 2113979629.py, 8, INFO, Processing year 1989 for ticker TNC.\n", + "2026-01-19 21:57:32,913, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1989\n", + "2026-01-19 21:57:32,960, 2113979629.py, 8, INFO, Processing year 1990 for ticker TNC.\n", + "2026-01-19 21:57:32,964, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1990\n", + "2026-01-19 21:57:33,008, 2113979629.py, 8, INFO, Processing year 1991 for ticker TNC.\n", + "2026-01-19 21:57:33,008, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1991\n", + "2026-01-19 21:57:33,065, 2113979629.py, 8, INFO, Processing year 1992 for ticker TNC.\n", + "2026-01-19 21:57:33,078, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1992\n", + "2026-01-19 21:57:33,129, 2113979629.py, 8, INFO, Processing year 1993 for ticker TNC.\n", + "2026-01-19 21:57:33,137, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1993\n", + "2026-01-19 21:57:33,176, 2113979629.py, 8, INFO, Processing year 1994 for ticker TNC.\n", + "2026-01-19 21:57:33,176, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1994\n", + "2026-01-19 21:57:33,226, 2113979629.py, 8, INFO, Processing year 1995 for ticker TNC.\n", + "2026-01-19 21:57:33,237, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1995\n", + "2026-01-19 21:57:33,265, 2113979629.py, 8, INFO, Processing year 1996 for ticker TNC.\n", + "2026-01-19 21:57:33,284, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1996\n", + "2026-01-19 21:57:33,309, 2113979629.py, 8, INFO, Processing year 1997 for ticker TNC.\n", + "2026-01-19 21:57:33,325, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1997\n", + "2026-01-19 21:57:33,362, 2113979629.py, 8, INFO, Processing year 1998 for ticker TNC.\n", + "2026-01-19 21:57:33,384, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1998\n", + "2026-01-19 21:57:33,414, 2113979629.py, 8, INFO, Processing year 1999 for ticker TNC.\n", + "2026-01-19 21:57:33,432, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_1999\n", + "2026-01-19 21:57:33,469, 2113979629.py, 8, INFO, Processing year 2000 for ticker TNC.\n", + "2026-01-19 21:57:33,479, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2000\n", + "2026-01-19 21:57:33,520, 2113979629.py, 8, INFO, Processing year 2001 for ticker TNC.\n", + "2026-01-19 21:57:33,526, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2001\n", + "2026-01-19 21:57:33,572, 2113979629.py, 8, INFO, Processing year 2002 for ticker TNC.\n", + "2026-01-19 21:57:33,586, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2002\n", + "2026-01-19 21:57:33,646, 2113979629.py, 8, INFO, Processing year 2003 for ticker TNC.\n", + "2026-01-19 21:57:33,664, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2003\n", + "2026-01-19 21:57:33,723, 2113979629.py, 8, INFO, Processing year 2004 for ticker TNC.\n", + "2026-01-19 21:57:33,738, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2004\n", + "2026-01-19 21:57:33,782, 2113979629.py, 8, INFO, Processing year 2005 for ticker TNC.\n", + "2026-01-19 21:57:33,799, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2005\n", + "2026-01-19 21:57:33,847, 2113979629.py, 8, INFO, Processing year 2006 for ticker TNC.\n", + "2026-01-19 21:57:33,863, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2006\n", + "2026-01-19 21:57:33,909, 2113979629.py, 8, INFO, Processing year 2007 for ticker TNC.\n", + "2026-01-19 21:57:33,931, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2007\n", + "2026-01-19 21:57:33,988, 2113979629.py, 8, INFO, Processing year 2008 for ticker TNC.\n", + "2026-01-19 21:57:33,995, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2008\n", + "2026-01-19 21:57:34,059, 2113979629.py, 8, INFO, Processing year 2009 for ticker TNC.\n", + "2026-01-19 21:57:34,075, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2009\n", + "2026-01-19 21:57:34,125, 2113979629.py, 8, INFO, Processing year 2010 for ticker TNC.\n", + "2026-01-19 21:57:34,143, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2010\n", + "2026-01-19 21:57:34,192, 2113979629.py, 8, INFO, Processing year 2011 for ticker TNC.\n", + "2026-01-19 21:57:34,207, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2011\n", + "2026-01-19 21:57:34,244, 2113979629.py, 8, INFO, Processing year 2012 for ticker TNC.\n", + "2026-01-19 21:57:34,268, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2012\n", + "2026-01-19 21:57:34,310, 2113979629.py, 8, INFO, Processing year 2013 for ticker TNC.\n", + "2026-01-19 21:57:34,312, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2013\n", + "2026-01-19 21:57:34,363, 2113979629.py, 8, INFO, Processing year 2014 for ticker TNC.\n", + "2026-01-19 21:57:34,375, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2014\n", + "2026-01-19 21:57:34,413, 2113979629.py, 8, INFO, Processing year 2015 for ticker TNC.\n", + "2026-01-19 21:57:34,427, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2015\n", + "2026-01-19 21:57:34,468, 2113979629.py, 8, INFO, Processing year 2016 for ticker TNC.\n", + "2026-01-19 21:57:34,479, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2016\n", + "2026-01-19 21:57:34,528, 2113979629.py, 8, INFO, Processing year 2017 for ticker TNC.\n", + "2026-01-19 21:57:34,540, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2017\n", + "2026-01-19 21:57:34,575, 2113979629.py, 8, INFO, Processing year 2018 for ticker TNC.\n", + "2026-01-19 21:57:34,595, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2018\n", + "2026-01-19 21:57:34,641, 2113979629.py, 8, INFO, Processing year 2019 for ticker TNC.\n", + "2026-01-19 21:57:34,644, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2019\n", + "2026-01-19 21:57:34,695, 2113979629.py, 8, INFO, Processing year 2020 for ticker TNC.\n", + "2026-01-19 21:57:34,715, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TNC\\TNC_2020\n", + "2026-01-19 21:57:34,754, 2113979629.py, 4, INFO, Processing ticker: CBB\n", + "2026-01-19 21:57:34,771, 2113979629.py, 8, INFO, Processing year 1980 for ticker CBB.\n", + "2026-01-19 21:57:34,787, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1980\n", + "2026-01-19 21:57:34,826, 2113979629.py, 8, INFO, Processing year 1981 for ticker CBB.\n", + "2026-01-19 21:57:34,830, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1981\n", + "2026-01-19 21:57:34,880, 2113979629.py, 8, INFO, Processing year 1982 for ticker CBB.\n", + "2026-01-19 21:57:34,889, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1982\n", + "2026-01-19 21:57:34,935, 2113979629.py, 8, INFO, Processing year 1983 for ticker CBB.\n", + "2026-01-19 21:57:34,941, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1983\n", + "2026-01-19 21:57:34,986, 2113979629.py, 8, INFO, Processing year 1984 for ticker CBB.\n", + "2026-01-19 21:57:34,996, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1984\n", + "2026-01-19 21:57:35,037, 2113979629.py, 8, INFO, Processing year 1985 for ticker CBB.\n", + "2026-01-19 21:57:35,041, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1985\n", + "2026-01-19 21:57:35,082, 2113979629.py, 8, INFO, Processing year 1986 for ticker CBB.\n", + "2026-01-19 21:57:35,103, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1986\n", + "2026-01-19 21:57:35,147, 2113979629.py, 8, INFO, Processing year 1987 for ticker CBB.\n", + "2026-01-19 21:57:35,154, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1987\n", + "2026-01-19 21:57:35,196, 2113979629.py, 8, INFO, Processing year 1988 for ticker CBB.\n", + "2026-01-19 21:57:35,205, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1988\n", + "2026-01-19 21:57:35,251, 2113979629.py, 8, INFO, Processing year 1989 for ticker CBB.\n", + "2026-01-19 21:57:35,259, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1989\n", + "2026-01-19 21:57:35,297, 2113979629.py, 8, INFO, Processing year 1990 for ticker CBB.\n", + "2026-01-19 21:57:35,319, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1990\n", + "2026-01-19 21:57:35,362, 2113979629.py, 8, INFO, Processing year 1991 for ticker CBB.\n", + "2026-01-19 21:57:35,372, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1991\n", + "2026-01-19 21:57:35,412, 2113979629.py, 8, INFO, Processing year 1992 for ticker CBB.\n", + "2026-01-19 21:57:35,422, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1992\n", + "2026-01-19 21:57:35,466, 2113979629.py, 8, INFO, Processing year 1993 for ticker CBB.\n", + "2026-01-19 21:57:35,474, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1993\n", + "2026-01-19 21:57:35,514, 2113979629.py, 8, INFO, Processing year 1994 for ticker CBB.\n", + "2026-01-19 21:57:35,527, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1994\n", + "2026-01-19 21:57:35,567, 2113979629.py, 8, INFO, Processing year 1995 for ticker CBB.\n", + "2026-01-19 21:57:35,582, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1995\n", + "2026-01-19 21:57:35,619, 2113979629.py, 8, INFO, Processing year 1996 for ticker CBB.\n", + "2026-01-19 21:57:35,627, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1996\n", + "2026-01-19 21:57:35,673, 2113979629.py, 8, INFO, Processing year 1997 for ticker CBB.\n", + "2026-01-19 21:57:35,685, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1997\n", + "2026-01-19 21:57:35,729, 2113979629.py, 8, INFO, Processing year 1998 for ticker CBB.\n", + "2026-01-19 21:57:35,739, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1998\n", + "2026-01-19 21:57:35,778, 2113979629.py, 8, INFO, Processing year 1999 for ticker CBB.\n", + "2026-01-19 21:57:35,778, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_1999\n", + "2026-01-19 21:57:35,837, 2113979629.py, 8, INFO, Processing year 2000 for ticker CBB.\n", + "2026-01-19 21:57:35,853, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2000\n", + "2026-01-19 21:57:35,901, 2113979629.py, 8, INFO, Processing year 2001 for ticker CBB.\n", + "2026-01-19 21:57:35,913, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2001\n", + "2026-01-19 21:57:35,955, 2113979629.py, 8, INFO, Processing year 2002 for ticker CBB.\n", + "2026-01-19 21:57:35,965, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2002\n", + "2026-01-19 21:57:36,006, 2113979629.py, 8, INFO, Processing year 2003 for ticker CBB.\n", + "2026-01-19 21:57:36,021, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2003\n", + "2026-01-19 21:57:36,057, 2113979629.py, 8, INFO, Processing year 2004 for ticker CBB.\n", + "2026-01-19 21:57:36,074, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2004\n", + "2026-01-19 21:57:36,115, 2113979629.py, 8, INFO, Processing year 2005 for ticker CBB.\n", + "2026-01-19 21:57:36,134, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2005\n", + "2026-01-19 21:57:36,166, 2113979629.py, 8, INFO, Processing year 2006 for ticker CBB.\n", + "2026-01-19 21:57:36,184, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2006\n", + "2026-01-19 21:57:36,225, 2113979629.py, 8, INFO, Processing year 2007 for ticker CBB.\n", + "2026-01-19 21:57:36,225, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2007\n", + "2026-01-19 21:57:36,282, 2113979629.py, 8, INFO, Processing year 2008 for ticker CBB.\n", + "2026-01-19 21:57:36,295, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2008\n", + "2026-01-19 21:57:36,339, 2113979629.py, 8, INFO, Processing year 2009 for ticker CBB.\n", + "2026-01-19 21:57:36,347, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2009\n", + "2026-01-19 21:57:36,390, 2113979629.py, 8, INFO, Processing year 2010 for ticker CBB.\n", + "2026-01-19 21:57:36,391, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2010\n", + "2026-01-19 21:57:36,458, 2113979629.py, 8, INFO, Processing year 2011 for ticker CBB.\n", + "2026-01-19 21:57:36,482, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2011\n", + "2026-01-19 21:57:36,530, 2113979629.py, 8, INFO, Processing year 2012 for ticker CBB.\n", + "2026-01-19 21:57:36,540, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2012\n", + "2026-01-19 21:57:36,574, 2113979629.py, 8, INFO, Processing year 2013 for ticker CBB.\n", + "2026-01-19 21:57:36,595, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2013\n", + "2026-01-19 21:57:36,637, 2113979629.py, 8, INFO, Processing year 2014 for ticker CBB.\n", + "2026-01-19 21:57:36,648, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2014\n", + "2026-01-19 21:57:36,691, 2113979629.py, 8, INFO, Processing year 2015 for ticker CBB.\n", + "2026-01-19 21:57:36,696, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2015\n", + "2026-01-19 21:57:36,744, 2113979629.py, 8, INFO, Processing year 2016 for ticker CBB.\n", + "2026-01-19 21:57:36,746, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2016\n", + "2026-01-19 21:57:36,799, 2113979629.py, 8, INFO, Processing year 2017 for ticker CBB.\n", + "2026-01-19 21:57:36,811, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2017\n", + "2026-01-19 21:57:36,843, 2113979629.py, 8, INFO, Processing year 2018 for ticker CBB.\n", + "2026-01-19 21:57:36,859, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2018\n", + "2026-01-19 21:57:36,902, 2113979629.py, 8, INFO, Processing year 2019 for ticker CBB.\n", + "2026-01-19 21:57:36,912, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2019\n", + "2026-01-19 21:57:36,953, 2113979629.py, 8, INFO, Processing year 2020 for ticker CBB.\n", + "2026-01-19 21:57:36,964, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CBB\\CBB_2020\n", + "2026-01-19 21:57:37,007, 2113979629.py, 4, INFO, Processing ticker: ALDX\n", + "2026-01-19 21:57:37,023, 2113979629.py, 8, INFO, Processing year 2014 for ticker ALDX.\n", + "2026-01-19 21:57:37,026, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2014\n", + "2026-01-19 21:57:37,080, 2113979629.py, 8, INFO, Processing year 2015 for ticker ALDX.\n", + "2026-01-19 21:57:37,099, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2015\n", + "2026-01-19 21:57:37,129, 2113979629.py, 8, INFO, Processing year 2016 for ticker ALDX.\n", + "2026-01-19 21:57:37,152, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2016\n", + "2026-01-19 21:57:37,193, 2113979629.py, 8, INFO, Processing year 2017 for ticker ALDX.\n", + "2026-01-19 21:57:37,193, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2017\n", + "2026-01-19 21:57:37,248, 2113979629.py, 8, INFO, Processing year 2018 for ticker ALDX.\n", + "2026-01-19 21:57:37,258, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2018\n", + "2026-01-19 21:57:37,301, 2113979629.py, 8, INFO, Processing year 2019 for ticker ALDX.\n", + "2026-01-19 21:57:37,314, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2019\n", + "2026-01-19 21:57:37,383, 2113979629.py, 8, INFO, Processing year 2020 for ticker ALDX.\n", + "2026-01-19 21:57:37,408, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALDX\\ALDX_2020\n", + "2026-01-19 21:57:37,477, 2113979629.py, 4, INFO, Processing ticker: GLADD\n", + "2026-01-19 21:57:37,489, 2113979629.py, 8, INFO, Processing year 2018 for ticker GLADD.\n", + "2026-01-19 21:57:37,500, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLADD\\GLADD_2018\n", + "2026-01-19 21:57:37,542, 2113979629.py, 8, INFO, Processing year 2019 for ticker GLADD.\n", + "2026-01-19 21:57:37,557, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLADD\\GLADD_2019\n", + "2026-01-19 21:57:37,597, 2113979629.py, 8, INFO, Processing year 2020 for ticker GLADD.\n", + "2026-01-19 21:57:37,620, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLADD\\GLADD_2020\n", + "2026-01-19 21:57:37,661, 2113979629.py, 4, INFO, Processing ticker: FIXX\n", + "2026-01-19 21:57:37,675, 2113979629.py, 8, INFO, Processing year 2018 for ticker FIXX.\n", + "2026-01-19 21:57:37,675, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/FIXX\\FIXX_2018\n", + "2026-01-19 21:57:37,729, 2113979629.py, 8, INFO, Processing year 2019 for ticker FIXX.\n", + "2026-01-19 21:57:37,738, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/FIXX\\FIXX_2019\n", + "2026-01-19 21:57:37,784, 2113979629.py, 8, INFO, Processing year 2020 for ticker FIXX.\n", + "2026-01-19 21:57:37,795, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/FIXX\\FIXX_2020\n", + "2026-01-19 21:57:37,834, 2113979629.py, 4, INFO, Processing ticker: ETJ\n", + "2026-01-19 21:57:37,846, 2113979629.py, 8, INFO, Processing year 2007 for ticker ETJ.\n", + "2026-01-19 21:57:37,864, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2007\n", + "2026-01-19 21:57:37,908, 2113979629.py, 8, INFO, Processing year 2008 for ticker ETJ.\n", + "2026-01-19 21:57:37,913, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2008\n", + "2026-01-19 21:57:37,963, 2113979629.py, 8, INFO, Processing year 2009 for ticker ETJ.\n", + "2026-01-19 21:57:37,963, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2009\n", + "2026-01-19 21:57:38,008, 2113979629.py, 8, INFO, Processing year 2010 for ticker ETJ.\n", + "2026-01-19 21:57:38,026, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2010\n", + "2026-01-19 21:57:38,072, 2113979629.py, 8, INFO, Processing year 2011 for ticker ETJ.\n", + "2026-01-19 21:57:38,079, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2011\n", + "2026-01-19 21:57:38,132, 2113979629.py, 8, INFO, Processing year 2012 for ticker ETJ.\n", + "2026-01-19 21:57:38,142, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2012\n", + "2026-01-19 21:57:38,185, 2113979629.py, 8, INFO, Processing year 2013 for ticker ETJ.\n", + "2026-01-19 21:57:38,191, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2013\n", + "2026-01-19 21:57:38,237, 2113979629.py, 8, INFO, Processing year 2014 for ticker ETJ.\n", + "2026-01-19 21:57:38,241, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2014\n", + "2026-01-19 21:57:38,291, 2113979629.py, 8, INFO, Processing year 2015 for ticker ETJ.\n", + "2026-01-19 21:57:38,301, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2015\n", + "2026-01-19 21:57:38,341, 2113979629.py, 8, INFO, Processing year 2016 for ticker ETJ.\n", + "2026-01-19 21:57:38,341, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2016\n", + "2026-01-19 21:57:38,401, 2113979629.py, 8, INFO, Processing year 2017 for ticker ETJ.\n", + "2026-01-19 21:57:38,412, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2017\n", + "2026-01-19 21:57:38,446, 2113979629.py, 8, INFO, Processing year 2018 for ticker ETJ.\n", + "2026-01-19 21:57:38,466, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2018\n", + "2026-01-19 21:57:38,514, 2113979629.py, 8, INFO, Processing year 2019 for ticker ETJ.\n", + "2026-01-19 21:57:38,522, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2019\n", + "2026-01-19 21:57:38,566, 2113979629.py, 8, INFO, Processing year 2020 for ticker ETJ.\n", + "2026-01-19 21:57:38,577, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ETJ\\ETJ_2020\n", + "2026-01-19 21:57:38,625, 2113979629.py, 4, INFO, Processing ticker: CMCTP\n", + "2026-01-19 21:57:38,638, 2113979629.py, 8, INFO, Processing year 2018 for ticker CMCTP.\n", + "2026-01-19 21:57:38,647, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CMCTP\\CMCTP_2018\n", + "2026-01-19 21:57:38,695, 2113979629.py, 8, INFO, Processing year 2019 for ticker CMCTP.\n", + "2026-01-19 21:57:38,704, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CMCTP\\CMCTP_2019\n", + "2026-01-19 21:57:38,753, 2113979629.py, 8, INFO, Processing year 2020 for ticker CMCTP.\n", + "2026-01-19 21:57:38,764, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CMCTP\\CMCTP_2020\n", + "2026-01-19 21:57:38,804, 2113979629.py, 4, INFO, Processing ticker: BWG\n", + "2026-01-19 21:57:38,813, 2113979629.py, 8, INFO, Processing year 2012 for ticker BWG.\n", + "2026-01-19 21:57:38,829, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2012\n", + "2026-01-19 21:57:38,885, 2113979629.py, 8, INFO, Processing year 2013 for ticker BWG.\n", + "2026-01-19 21:57:38,891, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2013\n", + "2026-01-19 21:57:38,932, 2113979629.py, 8, INFO, Processing year 2014 for ticker BWG.\n", + "2026-01-19 21:57:38,950, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2014\n", + "2026-01-19 21:57:38,991, 2113979629.py, 8, INFO, Processing year 2015 for ticker BWG.\n", + "2026-01-19 21:57:38,991, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2015\n", + "2026-01-19 21:57:39,047, 2113979629.py, 8, INFO, Processing year 2016 for ticker BWG.\n", + "2026-01-19 21:57:39,047, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2016\n", + "2026-01-19 21:57:39,101, 2113979629.py, 8, INFO, Processing year 2017 for ticker BWG.\n", + "2026-01-19 21:57:39,108, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2017\n", + "2026-01-19 21:57:39,153, 2113979629.py, 8, INFO, Processing year 2018 for ticker BWG.\n", + "2026-01-19 21:57:39,158, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2018\n", + "2026-01-19 21:57:39,204, 2113979629.py, 8, INFO, Processing year 2019 for ticker BWG.\n", + "2026-01-19 21:57:39,209, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2019\n", + "2026-01-19 21:57:39,262, 2113979629.py, 8, INFO, Processing year 2020 for ticker BWG.\n", + "2026-01-19 21:57:39,271, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWG\\BWG_2020\n", + "2026-01-19 21:57:39,312, 2113979629.py, 4, INFO, Processing ticker: VIAC\n", + "2026-01-19 21:57:39,328, 2113979629.py, 8, INFO, Processing year 2005 for ticker VIAC.\n", + "2026-01-19 21:57:39,333, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2005\n", + "2026-01-19 21:57:39,379, 2113979629.py, 8, INFO, Processing year 2006 for ticker VIAC.\n", + "2026-01-19 21:57:39,393, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2006\n", + "2026-01-19 21:57:39,441, 2113979629.py, 8, INFO, Processing year 2007 for ticker VIAC.\n", + "2026-01-19 21:57:39,453, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2007\n", + "2026-01-19 21:57:39,492, 2113979629.py, 8, INFO, Processing year 2008 for ticker VIAC.\n", + "2026-01-19 21:57:39,509, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2008\n", + "2026-01-19 21:57:39,582, 2113979629.py, 8, INFO, Processing year 2009 for ticker VIAC.\n", + "2026-01-19 21:57:39,594, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2009\n", + "2026-01-19 21:57:39,629, 2113979629.py, 8, INFO, Processing year 2010 for ticker VIAC.\n", + "2026-01-19 21:57:39,651, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2010\n", + "2026-01-19 21:57:39,691, 2113979629.py, 8, INFO, Processing year 2011 for ticker VIAC.\n", + "2026-01-19 21:57:39,702, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2011\n", + "2026-01-19 21:57:39,744, 2113979629.py, 8, INFO, Processing year 2012 for ticker VIAC.\n", + "2026-01-19 21:57:39,767, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2012\n", + "2026-01-19 21:57:39,807, 2113979629.py, 8, INFO, Processing year 2013 for ticker VIAC.\n", + "2026-01-19 21:57:39,820, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2013\n", + "2026-01-19 21:57:39,859, 2113979629.py, 8, INFO, Processing year 2014 for ticker VIAC.\n", + "2026-01-19 21:57:39,863, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2014\n", + "2026-01-19 21:57:39,917, 2113979629.py, 8, INFO, Processing year 2015 for ticker VIAC.\n", + "2026-01-19 21:57:39,924, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2015\n", + "2026-01-19 21:57:39,971, 2113979629.py, 8, INFO, Processing year 2016 for ticker VIAC.\n", + "2026-01-19 21:57:39,979, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2016\n", + "2026-01-19 21:57:40,022, 2113979629.py, 8, INFO, Processing year 2017 for ticker VIAC.\n", + "2026-01-19 21:57:40,025, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2017\n", + "2026-01-19 21:57:40,080, 2113979629.py, 8, INFO, Processing year 2018 for ticker VIAC.\n", + "2026-01-19 21:57:40,089, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2018\n", + "2026-01-19 21:57:40,126, 2113979629.py, 8, INFO, Processing year 2019 for ticker VIAC.\n", + "2026-01-19 21:57:40,141, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2019\n", + "2026-01-19 21:57:40,184, 2113979629.py, 8, INFO, Processing year 2020 for ticker VIAC.\n", + "2026-01-19 21:57:40,195, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/VIAC\\VIAC_2020\n", + "2026-01-19 21:57:40,230, 2113979629.py, 4, INFO, Processing ticker: REI\n", + "2026-01-19 21:57:40,250, 2113979629.py, 8, INFO, Processing year 2007 for ticker REI.\n", + "2026-01-19 21:57:40,258, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2007\n", + "2026-01-19 21:57:40,315, 2113979629.py, 8, INFO, Processing year 2008 for ticker REI.\n", + "2026-01-19 21:57:40,323, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2008\n", + "2026-01-19 21:57:40,366, 2113979629.py, 8, INFO, Processing year 2009 for ticker REI.\n", + "2026-01-19 21:57:40,384, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2009\n", + "2026-01-19 21:57:40,431, 2113979629.py, 8, INFO, Processing year 2010 for ticker REI.\n", + "2026-01-19 21:57:40,445, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2010\n", + "2026-01-19 21:57:40,487, 2113979629.py, 8, INFO, Processing year 2011 for ticker REI.\n", + "2026-01-19 21:57:40,495, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2011\n", + "2026-01-19 21:57:40,543, 2113979629.py, 8, INFO, Processing year 2012 for ticker REI.\n", + "2026-01-19 21:57:40,554, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2012\n", + "2026-01-19 21:57:40,598, 2113979629.py, 8, INFO, Processing year 2013 for ticker REI.\n", + "2026-01-19 21:57:40,609, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2013\n", + "2026-01-19 21:57:40,654, 2113979629.py, 8, INFO, Processing year 2014 for ticker REI.\n", + "2026-01-19 21:57:40,658, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2014\n", + "2026-01-19 21:57:40,705, 2113979629.py, 8, INFO, Processing year 2015 for ticker REI.\n", + "2026-01-19 21:57:40,717, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2015\n", + "2026-01-19 21:57:40,757, 2113979629.py, 8, INFO, Processing year 2016 for ticker REI.\n", + "2026-01-19 21:57:40,767, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2016\n", + "2026-01-19 21:57:40,808, 2113979629.py, 8, INFO, Processing year 2017 for ticker REI.\n", + "2026-01-19 21:57:40,819, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2017\n", + "2026-01-19 21:57:40,860, 2113979629.py, 8, INFO, Processing year 2018 for ticker REI.\n", + "2026-01-19 21:57:40,863, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2018\n", + "2026-01-19 21:57:40,921, 2113979629.py, 8, INFO, Processing year 2019 for ticker REI.\n", + "2026-01-19 21:57:40,930, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2019\n", + "2026-01-19 21:57:40,978, 2113979629.py, 8, INFO, Processing year 2020 for ticker REI.\n", + "2026-01-19 21:57:40,988, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REI\\REI_2020\n", + "2026-01-19 21:57:41,028, 2113979629.py, 4, INFO, Processing ticker: BLPH\n", + "2026-01-19 21:57:41,047, 2113979629.py, 8, INFO, Processing year 2015 for ticker BLPH.\n", + "2026-01-19 21:57:41,056, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BLPH\\BLPH_2015\n", + "2026-01-19 21:57:41,095, 2113979629.py, 8, INFO, Processing year 2016 for ticker BLPH.\n", + "2026-01-19 21:57:41,112, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BLPH\\BLPH_2016\n", + "2026-01-19 21:57:41,145, 2113979629.py, 8, INFO, Processing year 2017 for ticker BLPH.\n", + "2026-01-19 21:57:41,164, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BLPH\\BLPH_2017\n", + "2026-01-19 21:57:41,206, 2113979629.py, 8, INFO, Processing year 2018 for ticker BLPH.\n", + "2026-01-19 21:57:41,218, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BLPH\\BLPH_2018\n", + "2026-01-19 21:57:41,265, 2113979629.py, 8, INFO, Processing year 2019 for ticker BLPH.\n", + "2026-01-19 21:57:41,273, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BLPH\\BLPH_2019\n", + "2026-01-19 21:57:41,316, 2113979629.py, 8, INFO, Processing year 2020 for ticker BLPH.\n", + "2026-01-19 21:57:41,327, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BLPH\\BLPH_2020\n", + "2026-01-19 21:57:41,369, 2113979629.py, 4, INFO, Processing ticker: SMG\n", + "2026-01-19 21:57:41,379, 2113979629.py, 8, INFO, Processing year 1992 for ticker SMG.\n", + "2026-01-19 21:57:41,393, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1992\n", + "2026-01-19 21:57:41,443, 2113979629.py, 8, INFO, Processing year 1993 for ticker SMG.\n", + "2026-01-19 21:57:41,454, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1993\n", + "2026-01-19 21:57:41,499, 2113979629.py, 8, INFO, Processing year 1994 for ticker SMG.\n", + "2026-01-19 21:57:41,508, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1994\n", + "2026-01-19 21:57:41,550, 2113979629.py, 8, INFO, Processing year 1995 for ticker SMG.\n", + "2026-01-19 21:57:41,561, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1995\n", + "2026-01-19 21:57:41,591, 2113979629.py, 8, INFO, Processing year 1996 for ticker SMG.\n", + "2026-01-19 21:57:41,615, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1996\n", + "2026-01-19 21:57:41,661, 2113979629.py, 8, INFO, Processing year 1997 for ticker SMG.\n", + "2026-01-19 21:57:41,670, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1997\n", + "2026-01-19 21:57:41,712, 2113979629.py, 8, INFO, Processing year 1998 for ticker SMG.\n", + "2026-01-19 21:57:41,725, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1998\n", + "2026-01-19 21:57:41,757, 2113979629.py, 8, INFO, Processing year 1999 for ticker SMG.\n", + "2026-01-19 21:57:41,774, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_1999\n", + "2026-01-19 21:57:41,819, 2113979629.py, 8, INFO, Processing year 2000 for ticker SMG.\n", + "2026-01-19 21:57:41,826, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2000\n", + "2026-01-19 21:57:41,872, 2113979629.py, 8, INFO, Processing year 2001 for ticker SMG.\n", + "2026-01-19 21:57:41,883, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2001\n", + "2026-01-19 21:57:41,929, 2113979629.py, 8, INFO, Processing year 2002 for ticker SMG.\n", + "2026-01-19 21:57:41,946, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2002\n", + "2026-01-19 21:57:41,989, 2113979629.py, 8, INFO, Processing year 2003 for ticker SMG.\n", + "2026-01-19 21:57:41,992, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2003\n", + "2026-01-19 21:57:42,039, 2113979629.py, 8, INFO, Processing year 2004 for ticker SMG.\n", + "2026-01-19 21:57:42,048, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2004\n", + "2026-01-19 21:57:42,091, 2113979629.py, 8, INFO, Processing year 2005 for ticker SMG.\n", + "2026-01-19 21:57:42,091, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2005\n", + "2026-01-19 21:57:42,149, 2113979629.py, 8, INFO, Processing year 2006 for ticker SMG.\n", + "2026-01-19 21:57:42,160, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2006\n", + "2026-01-19 21:57:42,201, 2113979629.py, 8, INFO, Processing year 2007 for ticker SMG.\n", + "2026-01-19 21:57:42,215, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2007\n", + "2026-01-19 21:57:42,256, 2113979629.py, 8, INFO, Processing year 2008 for ticker SMG.\n", + "2026-01-19 21:57:42,265, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2008\n", + "2026-01-19 21:57:42,308, 2113979629.py, 8, INFO, Processing year 2009 for ticker SMG.\n", + "2026-01-19 21:57:42,320, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2009\n", + "2026-01-19 21:57:42,365, 2113979629.py, 8, INFO, Processing year 2010 for ticker SMG.\n", + "2026-01-19 21:57:42,376, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2010\n", + "2026-01-19 21:57:42,407, 2113979629.py, 8, INFO, Processing year 2011 for ticker SMG.\n", + "2026-01-19 21:57:42,424, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2011\n", + "2026-01-19 21:57:42,474, 2113979629.py, 8, INFO, Processing year 2012 for ticker SMG.\n", + "2026-01-19 21:57:42,474, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2012\n", + "2026-01-19 21:57:42,533, 2113979629.py, 8, INFO, Processing year 2013 for ticker SMG.\n", + "2026-01-19 21:57:42,544, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2013\n", + "2026-01-19 21:57:42,582, 2113979629.py, 8, INFO, Processing year 2014 for ticker SMG.\n", + "2026-01-19 21:57:42,595, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2014\n", + "2026-01-19 21:57:42,639, 2113979629.py, 8, INFO, Processing year 2015 for ticker SMG.\n", + "2026-01-19 21:57:42,645, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2015\n", + "2026-01-19 21:57:42,695, 2113979629.py, 8, INFO, Processing year 2016 for ticker SMG.\n", + "2026-01-19 21:57:42,696, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2016\n", + "2026-01-19 21:57:42,751, 2113979629.py, 8, INFO, Processing year 2017 for ticker SMG.\n", + "2026-01-19 21:57:42,757, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2017\n", + "2026-01-19 21:57:42,802, 2113979629.py, 8, INFO, Processing year 2018 for ticker SMG.\n", + "2026-01-19 21:57:42,807, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2018\n", + "2026-01-19 21:57:42,844, 2113979629.py, 8, INFO, Processing year 2019 for ticker SMG.\n", + "2026-01-19 21:57:42,866, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2019\n", + "2026-01-19 21:57:42,907, 2113979629.py, 8, INFO, Processing year 2020 for ticker SMG.\n", + "2026-01-19 21:57:42,907, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SMG\\SMG_2020\n", + "2026-01-19 21:57:42,960, 2113979629.py, 4, INFO, Processing ticker: MOH\n", + "2026-01-19 21:57:42,973, 2113979629.py, 8, INFO, Processing year 2003 for ticker MOH.\n", + "2026-01-19 21:57:42,996, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2003\n", + "2026-01-19 21:57:43,044, 2113979629.py, 8, INFO, Processing year 2004 for ticker MOH.\n", + "2026-01-19 21:57:43,053, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2004\n", + "2026-01-19 21:57:43,095, 2113979629.py, 8, INFO, Processing year 2005 for ticker MOH.\n", + "2026-01-19 21:57:43,104, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2005\n", + "2026-01-19 21:57:43,137, 2113979629.py, 8, INFO, Processing year 2006 for ticker MOH.\n", + "2026-01-19 21:57:43,153, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2006\n", + "2026-01-19 21:57:43,195, 2113979629.py, 8, INFO, Processing year 2007 for ticker MOH.\n", + "2026-01-19 21:57:43,205, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2007\n", + "2026-01-19 21:57:43,244, 2113979629.py, 8, INFO, Processing year 2008 for ticker MOH.\n", + "2026-01-19 21:57:43,258, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2008\n", + "2026-01-19 21:57:43,299, 2113979629.py, 8, INFO, Processing year 2009 for ticker MOH.\n", + "2026-01-19 21:57:43,310, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2009\n", + "2026-01-19 21:57:43,354, 2113979629.py, 8, INFO, Processing year 2010 for ticker MOH.\n", + "2026-01-19 21:57:43,364, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2010\n", + "2026-01-19 21:57:43,401, 2113979629.py, 8, INFO, Processing year 2011 for ticker MOH.\n", + "2026-01-19 21:57:43,414, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2011\n", + "2026-01-19 21:57:43,458, 2113979629.py, 8, INFO, Processing year 2012 for ticker MOH.\n", + "2026-01-19 21:57:43,466, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2012\n", + "2026-01-19 21:57:43,516, 2113979629.py, 8, INFO, Processing year 2013 for ticker MOH.\n", + "2026-01-19 21:57:43,526, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2013\n", + "2026-01-19 21:57:43,565, 2113979629.py, 8, INFO, Processing year 2014 for ticker MOH.\n", + "2026-01-19 21:57:43,575, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2014\n", + "2026-01-19 21:57:43,654, 2113979629.py, 8, INFO, Processing year 2015 for ticker MOH.\n", + "2026-01-19 21:57:43,678, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2015\n", + "2026-01-19 21:57:43,737, 2113979629.py, 8, INFO, Processing year 2016 for ticker MOH.\n", + "2026-01-19 21:57:43,741, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2016\n", + "2026-01-19 21:57:43,778, 2113979629.py, 8, INFO, Processing year 2017 for ticker MOH.\n", + "2026-01-19 21:57:43,796, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2017\n", + "2026-01-19 21:57:43,841, 2113979629.py, 8, INFO, Processing year 2018 for ticker MOH.\n", + "2026-01-19 21:57:43,851, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2018\n", + "2026-01-19 21:57:43,912, 2113979629.py, 8, INFO, Processing year 2019 for ticker MOH.\n", + "2026-01-19 21:57:43,931, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2019\n", + "2026-01-19 21:57:43,972, 2113979629.py, 8, INFO, Processing year 2020 for ticker MOH.\n", + "2026-01-19 21:57:43,983, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOH\\MOH_2020\n", + "2026-01-19 21:57:44,034, 2113979629.py, 4, INFO, Processing ticker: AMH\n", + "2026-01-19 21:57:44,048, 2113979629.py, 8, INFO, Processing year 2013 for ticker AMH.\n", + "2026-01-19 21:57:44,065, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2013\n", + "2026-01-19 21:57:44,106, 2113979629.py, 8, INFO, Processing year 2014 for ticker AMH.\n", + "2026-01-19 21:57:44,112, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2014\n", + "2026-01-19 21:57:44,164, 2113979629.py, 8, INFO, Processing year 2015 for ticker AMH.\n", + "2026-01-19 21:57:44,175, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2015\n", + "2026-01-19 21:57:44,208, 2113979629.py, 8, INFO, Processing year 2016 for ticker AMH.\n", + "2026-01-19 21:57:44,228, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2016\n", + "2026-01-19 21:57:44,274, 2113979629.py, 8, INFO, Processing year 2017 for ticker AMH.\n", + "2026-01-19 21:57:44,274, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2017\n", + "2026-01-19 21:57:44,327, 2113979629.py, 8, INFO, Processing year 2018 for ticker AMH.\n", + "2026-01-19 21:57:44,337, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2018\n", + "2026-01-19 21:57:44,379, 2113979629.py, 8, INFO, Processing year 2019 for ticker AMH.\n", + "2026-01-19 21:57:44,388, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2019\n", + "2026-01-19 21:57:44,429, 2113979629.py, 8, INFO, Processing year 2020 for ticker AMH.\n", + "2026-01-19 21:57:44,437, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMH\\AMH_2020\n", + "2026-01-19 21:57:44,481, 2113979629.py, 4, INFO, Processing ticker: AMAL\n", + "2026-01-19 21:57:44,494, 2113979629.py, 8, INFO, Processing year 2018 for ticker AMAL.\n", + "2026-01-19 21:57:44,504, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMAL\\AMAL_2018\n", + "2026-01-19 21:57:44,546, 2113979629.py, 8, INFO, Processing year 2019 for ticker AMAL.\n", + "2026-01-19 21:57:44,561, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMAL\\AMAL_2019\n", + "2026-01-19 21:57:44,596, 2113979629.py, 8, INFO, Processing year 2020 for ticker AMAL.\n", + "2026-01-19 21:57:44,608, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AMAL\\AMAL_2020\n", + "2026-01-19 21:57:44,655, 2113979629.py, 4, INFO, Processing ticker: BPYPN\n", + "2026-01-19 21:57:44,667, 2113979629.py, 8, INFO, Processing year 2020 for ticker BPYPN.\n", + "2026-01-19 21:57:44,680, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPYPN\\BPYPN_2020\n", + "2026-01-19 21:57:44,721, 2113979629.py, 4, INFO, Processing ticker: ERH\n", + "2026-01-19 21:57:44,724, 2113979629.py, 8, INFO, Processing year 2004 for ticker ERH.\n", + "2026-01-19 21:57:44,741, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2004\n", + "2026-01-19 21:57:44,804, 2113979629.py, 8, INFO, Processing year 2005 for ticker ERH.\n", + "2026-01-19 21:57:44,818, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2005\n", + "2026-01-19 21:57:44,863, 2113979629.py, 8, INFO, Processing year 2006 for ticker ERH.\n", + "2026-01-19 21:57:44,872, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2006\n", + "2026-01-19 21:57:44,916, 2113979629.py, 8, INFO, Processing year 2007 for ticker ERH.\n", + "2026-01-19 21:57:44,925, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2007\n", + "2026-01-19 21:57:44,969, 2113979629.py, 8, INFO, Processing year 2008 for ticker ERH.\n", + "2026-01-19 21:57:44,981, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2008\n", + "2026-01-19 21:57:45,028, 2113979629.py, 8, INFO, Processing year 2009 for ticker ERH.\n", + "2026-01-19 21:57:45,038, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2009\n", + "2026-01-19 21:57:45,074, 2113979629.py, 8, INFO, Processing year 2010 for ticker ERH.\n", + "2026-01-19 21:57:45,091, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2010\n", + "2026-01-19 21:57:45,134, 2113979629.py, 8, INFO, Processing year 2011 for ticker ERH.\n", + "2026-01-19 21:57:45,145, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2011\n", + "2026-01-19 21:57:45,181, 2113979629.py, 8, INFO, Processing year 2012 for ticker ERH.\n", + "2026-01-19 21:57:45,190, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2012\n", + "2026-01-19 21:57:45,235, 2113979629.py, 8, INFO, Processing year 2013 for ticker ERH.\n", + "2026-01-19 21:57:45,251, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2013\n", + "2026-01-19 21:57:45,295, 2113979629.py, 8, INFO, Processing year 2014 for ticker ERH.\n", + "2026-01-19 21:57:45,310, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2014\n", + "2026-01-19 21:57:45,345, 2113979629.py, 8, INFO, Processing year 2015 for ticker ERH.\n", + "2026-01-19 21:57:45,368, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2015\n", + "2026-01-19 21:57:45,409, 2113979629.py, 8, INFO, Processing year 2016 for ticker ERH.\n", + "2026-01-19 21:57:45,412, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2016\n", + "2026-01-19 21:57:45,463, 2113979629.py, 8, INFO, Processing year 2017 for ticker ERH.\n", + "2026-01-19 21:57:45,474, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2017\n", + "2026-01-19 21:57:45,528, 2113979629.py, 8, INFO, Processing year 2018 for ticker ERH.\n", + "2026-01-19 21:57:45,539, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2018\n", + "2026-01-19 21:57:45,585, 2113979629.py, 8, INFO, Processing year 2019 for ticker ERH.\n", + "2026-01-19 21:57:45,599, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2019\n", + "2026-01-19 21:57:45,641, 2113979629.py, 8, INFO, Processing year 2020 for ticker ERH.\n", + "2026-01-19 21:57:45,641, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ERH\\ERH_2020\n", + "2026-01-19 21:57:45,675, 2113979629.py, 4, INFO, Processing ticker: FAMI\n", + "2026-01-19 21:57:45,698, 2113979629.py, 8, INFO, Processing year 2018 for ticker FAMI.\n", + "2026-01-19 21:57:45,711, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/FAMI\\FAMI_2018\n", + "2026-01-19 21:57:45,757, 2113979629.py, 8, INFO, Processing year 2019 for ticker FAMI.\n", + "2026-01-19 21:57:45,757, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/FAMI\\FAMI_2019\n", + "2026-01-19 21:57:45,817, 2113979629.py, 8, INFO, Processing year 2020 for ticker FAMI.\n", + "2026-01-19 21:57:45,831, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/FAMI\\FAMI_2020\n", + "2026-01-19 21:57:45,873, 2113979629.py, 4, INFO, Processing ticker: PFG\n", + "2026-01-19 21:57:45,874, 2113979629.py, 8, INFO, Processing year 2001 for ticker PFG.\n", + "2026-01-19 21:57:45,897, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2001\n", + "2026-01-19 21:57:45,942, 2113979629.py, 8, INFO, Processing year 2002 for ticker PFG.\n", + "2026-01-19 21:57:45,942, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2002\n", + "2026-01-19 21:57:45,992, 2113979629.py, 8, INFO, Processing year 2003 for ticker PFG.\n", + "2026-01-19 21:57:45,997, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2003\n", + "2026-01-19 21:57:46,050, 2113979629.py, 8, INFO, Processing year 2004 for ticker PFG.\n", + "2026-01-19 21:57:46,057, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2004\n", + "2026-01-19 21:57:46,101, 2113979629.py, 8, INFO, Processing year 2005 for ticker PFG.\n", + "2026-01-19 21:57:46,111, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2005\n", + "2026-01-19 21:57:46,149, 2113979629.py, 8, INFO, Processing year 2006 for ticker PFG.\n", + "2026-01-19 21:57:46,163, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2006\n", + "2026-01-19 21:57:46,195, 2113979629.py, 8, INFO, Processing year 2007 for ticker PFG.\n", + "2026-01-19 21:57:46,215, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2007\n", + "2026-01-19 21:57:46,257, 2113979629.py, 8, INFO, Processing year 2008 for ticker PFG.\n", + "2026-01-19 21:57:46,274, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2008\n", + "2026-01-19 21:57:46,327, 2113979629.py, 8, INFO, Processing year 2009 for ticker PFG.\n", + "2026-01-19 21:57:46,337, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2009\n", + "2026-01-19 21:57:46,374, 2113979629.py, 8, INFO, Processing year 2010 for ticker PFG.\n", + "2026-01-19 21:57:46,391, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2010\n", + "2026-01-19 21:57:46,436, 2113979629.py, 8, INFO, Processing year 2011 for ticker PFG.\n", + "2026-01-19 21:57:46,445, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2011\n", + "2026-01-19 21:57:46,479, 2113979629.py, 8, INFO, Processing year 2012 for ticker PFG.\n", + "2026-01-19 21:57:46,500, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2012\n", + "2026-01-19 21:57:46,546, 2113979629.py, 8, INFO, Processing year 2013 for ticker PFG.\n", + "2026-01-19 21:57:46,557, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2013\n", + "2026-01-19 21:57:46,599, 2113979629.py, 8, INFO, Processing year 2014 for ticker PFG.\n", + "2026-01-19 21:57:46,607, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2014\n", + "2026-01-19 21:57:46,648, 2113979629.py, 8, INFO, Processing year 2015 for ticker PFG.\n", + "2026-01-19 21:57:46,658, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2015\n", + "2026-01-19 21:57:46,702, 2113979629.py, 8, INFO, Processing year 2016 for ticker PFG.\n", + "2026-01-19 21:57:46,707, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2016\n", + "2026-01-19 21:57:46,756, 2113979629.py, 8, INFO, Processing year 2017 for ticker PFG.\n", + "2026-01-19 21:57:46,761, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2017\n", + "2026-01-19 21:57:46,817, 2113979629.py, 8, INFO, Processing year 2018 for ticker PFG.\n", + "2026-01-19 21:57:46,829, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2018\n", + "2026-01-19 21:57:46,874, 2113979629.py, 8, INFO, Processing year 2019 for ticker PFG.\n", + "2026-01-19 21:57:46,874, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2019\n", + "2026-01-19 21:57:46,920, 2113979629.py, 8, INFO, Processing year 2020 for ticker PFG.\n", + "2026-01-19 21:57:46,934, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/PFG\\PFG_2020\n", + "2026-01-19 21:57:47,001, 2113979629.py, 4, INFO, Processing ticker: SPXC\n", + "2026-01-19 21:57:47,007, 2113979629.py, 8, INFO, Processing year 1980 for ticker SPXC.\n", + "2026-01-19 21:57:47,025, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1980\n", + "2026-01-19 21:57:47,074, 2113979629.py, 8, INFO, Processing year 1981 for ticker SPXC.\n", + "2026-01-19 21:57:47,091, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1981\n", + "2026-01-19 21:57:47,138, 2113979629.py, 8, INFO, Processing year 1982 for ticker SPXC.\n", + "2026-01-19 21:57:47,149, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1982\n", + "2026-01-19 21:57:47,197, 2113979629.py, 8, INFO, Processing year 1983 for ticker SPXC.\n", + "2026-01-19 21:57:47,197, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1983\n", + "2026-01-19 21:57:47,244, 2113979629.py, 8, INFO, Processing year 1984 for ticker SPXC.\n", + "2026-01-19 21:57:47,260, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1984\n", + "2026-01-19 21:57:47,303, 2113979629.py, 8, INFO, Processing year 1985 for ticker SPXC.\n", + "2026-01-19 21:57:47,307, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1985\n", + "2026-01-19 21:57:47,357, 2113979629.py, 8, INFO, Processing year 1986 for ticker SPXC.\n", + "2026-01-19 21:57:47,370, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1986\n", + "2026-01-19 21:57:47,424, 2113979629.py, 8, INFO, Processing year 1987 for ticker SPXC.\n", + "2026-01-19 21:57:47,435, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1987\n", + "2026-01-19 21:57:47,479, 2113979629.py, 8, INFO, Processing year 1988 for ticker SPXC.\n", + "2026-01-19 21:57:47,487, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1988\n", + "2026-01-19 21:57:47,531, 2113979629.py, 8, INFO, Processing year 1989 for ticker SPXC.\n", + "2026-01-19 21:57:47,539, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1989\n", + "2026-01-19 21:57:47,587, 2113979629.py, 8, INFO, Processing year 1990 for ticker SPXC.\n", + "2026-01-19 21:57:47,591, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1990\n", + "2026-01-19 21:57:47,652, 2113979629.py, 8, INFO, Processing year 1991 for ticker SPXC.\n", + "2026-01-19 21:57:47,659, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1991\n", + "2026-01-19 21:57:47,706, 2113979629.py, 8, INFO, Processing year 1992 for ticker SPXC.\n", + "2026-01-19 21:57:47,717, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1992\n", + "2026-01-19 21:57:47,764, 2113979629.py, 8, INFO, Processing year 1993 for ticker SPXC.\n", + "2026-01-19 21:57:47,772, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1993\n", + "2026-01-19 21:57:47,812, 2113979629.py, 8, INFO, Processing year 1994 for ticker SPXC.\n", + "2026-01-19 21:57:47,829, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1994\n", + "2026-01-19 21:57:47,867, 2113979629.py, 8, INFO, Processing year 1995 for ticker SPXC.\n", + "2026-01-19 21:57:47,875, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1995\n", + "2026-01-19 21:57:47,929, 2113979629.py, 8, INFO, Processing year 1996 for ticker SPXC.\n", + "2026-01-19 21:57:47,938, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1996\n", + "2026-01-19 21:57:47,981, 2113979629.py, 8, INFO, Processing year 1997 for ticker SPXC.\n", + "2026-01-19 21:57:47,990, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1997\n", + "2026-01-19 21:57:48,027, 2113979629.py, 8, INFO, Processing year 1998 for ticker SPXC.\n", + "2026-01-19 21:57:48,042, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1998\n", + "2026-01-19 21:57:48,087, 2113979629.py, 8, INFO, Processing year 1999 for ticker SPXC.\n", + "2026-01-19 21:57:48,097, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_1999\n", + "2026-01-19 21:57:48,143, 2113979629.py, 8, INFO, Processing year 2000 for ticker SPXC.\n", + "2026-01-19 21:57:48,145, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2000\n", + "2026-01-19 21:57:48,199, 2113979629.py, 8, INFO, Processing year 2001 for ticker SPXC.\n", + "2026-01-19 21:57:48,209, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2001\n", + "2026-01-19 21:57:48,266, 2113979629.py, 8, INFO, Processing year 2002 for ticker SPXC.\n", + "2026-01-19 21:57:48,278, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2002\n", + "2026-01-19 21:57:48,320, 2113979629.py, 8, INFO, Processing year 2003 for ticker SPXC.\n", + "2026-01-19 21:57:48,330, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2003\n", + "2026-01-19 21:57:48,362, 2113979629.py, 8, INFO, Processing year 2004 for ticker SPXC.\n", + "2026-01-19 21:57:48,384, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2004\n", + "2026-01-19 21:57:48,424, 2113979629.py, 8, INFO, Processing year 2005 for ticker SPXC.\n", + "2026-01-19 21:57:48,434, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2005\n", + "2026-01-19 21:57:48,479, 2113979629.py, 8, INFO, Processing year 2006 for ticker SPXC.\n", + "2026-01-19 21:57:48,491, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2006\n", + "2026-01-19 21:57:48,529, 2113979629.py, 8, INFO, Processing year 2007 for ticker SPXC.\n", + "2026-01-19 21:57:48,552, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2007\n", + "2026-01-19 21:57:48,597, 2113979629.py, 8, INFO, Processing year 2008 for ticker SPXC.\n", + "2026-01-19 21:57:48,607, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2008\n", + "2026-01-19 21:57:48,657, 2113979629.py, 8, INFO, Processing year 2009 for ticker SPXC.\n", + "2026-01-19 21:57:48,673, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2009\n", + "2026-01-19 21:57:48,720, 2113979629.py, 8, INFO, Processing year 2010 for ticker SPXC.\n", + "2026-01-19 21:57:48,724, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2010\n", + "2026-01-19 21:57:48,772, 2113979629.py, 8, INFO, Processing year 2011 for ticker SPXC.\n", + "2026-01-19 21:57:48,785, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2011\n", + "2026-01-19 21:57:48,830, 2113979629.py, 8, INFO, Processing year 2012 for ticker SPXC.\n", + "2026-01-19 21:57:48,840, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2012\n", + "2026-01-19 21:57:48,885, 2113979629.py, 8, INFO, Processing year 2013 for ticker SPXC.\n", + "2026-01-19 21:57:48,891, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2013\n", + "2026-01-19 21:57:48,938, 2113979629.py, 8, INFO, Processing year 2014 for ticker SPXC.\n", + "2026-01-19 21:57:48,951, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2014\n", + "2026-01-19 21:57:49,000, 2113979629.py, 8, INFO, Processing year 2015 for ticker SPXC.\n", + "2026-01-19 21:57:49,017, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2015\n", + "2026-01-19 21:57:49,069, 2113979629.py, 8, INFO, Processing year 2016 for ticker SPXC.\n", + "2026-01-19 21:57:49,082, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2016\n", + "2026-01-19 21:57:49,128, 2113979629.py, 8, INFO, Processing year 2017 for ticker SPXC.\n", + "2026-01-19 21:57:49,155, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2017\n", + "2026-01-19 21:57:49,233, 2113979629.py, 8, INFO, Processing year 2018 for ticker SPXC.\n", + "2026-01-19 21:57:49,250, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2018\n", + "2026-01-19 21:57:49,347, 2113979629.py, 8, INFO, Processing year 2019 for ticker SPXC.\n", + "2026-01-19 21:57:49,358, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2019\n", + "2026-01-19 21:57:49,428, 2113979629.py, 8, INFO, Processing year 2020 for ticker SPXC.\n", + "2026-01-19 21:57:49,437, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SPXC\\SPXC_2020\n", + "2026-01-19 21:57:49,478, 2113979629.py, 4, INFO, Processing ticker: ALL\n", + "2026-01-19 21:57:49,493, 2113979629.py, 8, INFO, Processing year 1993 for ticker ALL.\n", + "2026-01-19 21:57:49,494, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1993\n", + "2026-01-19 21:57:49,557, 2113979629.py, 8, INFO, Processing year 1994 for ticker ALL.\n", + "2026-01-19 21:57:49,565, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1994\n", + "2026-01-19 21:57:49,607, 2113979629.py, 8, INFO, Processing year 1995 for ticker ALL.\n", + "2026-01-19 21:57:49,617, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1995\n", + "2026-01-19 21:57:49,682, 2113979629.py, 8, INFO, Processing year 1996 for ticker ALL.\n", + "2026-01-19 21:57:49,695, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1996\n", + "2026-01-19 21:57:49,747, 2113979629.py, 8, INFO, Processing year 1997 for ticker ALL.\n", + "2026-01-19 21:57:49,763, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1997\n", + "2026-01-19 21:57:49,813, 2113979629.py, 8, INFO, Processing year 1998 for ticker ALL.\n", + "2026-01-19 21:57:49,831, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1998\n", + "2026-01-19 21:57:49,947, 2113979629.py, 8, INFO, Processing year 1999 for ticker ALL.\n", + "2026-01-19 21:57:49,968, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_1999\n", + "2026-01-19 21:57:50,057, 2113979629.py, 8, INFO, Processing year 2000 for ticker ALL.\n", + "2026-01-19 21:57:50,061, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2000\n", + "2026-01-19 21:57:50,120, 2113979629.py, 8, INFO, Processing year 2001 for ticker ALL.\n", + "2026-01-19 21:57:50,131, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2001\n", + "2026-01-19 21:57:50,180, 2113979629.py, 8, INFO, Processing year 2002 for ticker ALL.\n", + "2026-01-19 21:57:50,189, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2002\n", + "2026-01-19 21:57:50,232, 2113979629.py, 8, INFO, Processing year 2003 for ticker ALL.\n", + "2026-01-19 21:57:50,245, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2003\n", + "2026-01-19 21:57:50,284, 2113979629.py, 8, INFO, Processing year 2004 for ticker ALL.\n", + "2026-01-19 21:57:50,298, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2004\n", + "2026-01-19 21:57:50,343, 2113979629.py, 8, INFO, Processing year 2005 for ticker ALL.\n", + "2026-01-19 21:57:50,354, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2005\n", + "2026-01-19 21:57:50,400, 2113979629.py, 8, INFO, Processing year 2006 for ticker ALL.\n", + "2026-01-19 21:57:50,413, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2006\n", + "2026-01-19 21:57:50,447, 2113979629.py, 8, INFO, Processing year 2007 for ticker ALL.\n", + "2026-01-19 21:57:50,466, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2007\n", + "2026-01-19 21:57:50,519, 2113979629.py, 8, INFO, Processing year 2008 for ticker ALL.\n", + "2026-01-19 21:57:50,535, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2008\n", + "2026-01-19 21:57:50,590, 2113979629.py, 8, INFO, Processing year 2009 for ticker ALL.\n", + "2026-01-19 21:57:50,604, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2009\n", + "2026-01-19 21:57:50,660, 2113979629.py, 8, INFO, Processing year 2010 for ticker ALL.\n", + "2026-01-19 21:57:50,673, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2010\n", + "2026-01-19 21:57:50,718, 2113979629.py, 8, INFO, Processing year 2011 for ticker ALL.\n", + "2026-01-19 21:57:50,729, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2011\n", + "2026-01-19 21:57:50,777, 2113979629.py, 8, INFO, Processing year 2012 for ticker ALL.\n", + "2026-01-19 21:57:50,790, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2012\n", + "2026-01-19 21:57:50,829, 2113979629.py, 8, INFO, Processing year 2013 for ticker ALL.\n", + "2026-01-19 21:57:50,846, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2013\n", + "2026-01-19 21:57:50,923, 2113979629.py, 8, INFO, Processing year 2014 for ticker ALL.\n", + "2026-01-19 21:57:50,931, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2014\n", + "2026-01-19 21:57:50,979, 2113979629.py, 8, INFO, Processing year 2015 for ticker ALL.\n", + "2026-01-19 21:57:50,996, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2015\n", + "2026-01-19 21:57:51,046, 2113979629.py, 8, INFO, Processing year 2016 for ticker ALL.\n", + "2026-01-19 21:57:51,062, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2016\n", + "2026-01-19 21:57:51,096, 2113979629.py, 8, INFO, Processing year 2017 for ticker ALL.\n", + "2026-01-19 21:57:51,113, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2017\n", + "2026-01-19 21:57:51,163, 2113979629.py, 8, INFO, Processing year 2018 for ticker ALL.\n", + "2026-01-19 21:57:51,178, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2018\n", + "2026-01-19 21:57:51,225, 2113979629.py, 8, INFO, Processing year 2019 for ticker ALL.\n", + "2026-01-19 21:57:51,229, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2019\n", + "2026-01-19 21:57:51,280, 2113979629.py, 8, INFO, Processing year 2020 for ticker ALL.\n", + "2026-01-19 21:57:51,300, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ALL\\ALL_2020\n", + "2026-01-19 21:57:51,345, 2113979629.py, 4, INFO, Processing ticker: RTTR\n", + "2026-01-19 21:57:51,358, 2113979629.py, 8, INFO, Processing year 2015 for ticker RTTR.\n", + "2026-01-19 21:57:51,363, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RTTR\\RTTR_2015\n", + "2026-01-19 21:57:51,412, 2113979629.py, 8, INFO, Processing year 2016 for ticker RTTR.\n", + "2026-01-19 21:57:51,430, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RTTR\\RTTR_2016\n", + "2026-01-19 21:57:51,476, 2113979629.py, 8, INFO, Processing year 2017 for ticker RTTR.\n", + "2026-01-19 21:57:51,479, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RTTR\\RTTR_2017\n", + "2026-01-19 21:57:51,530, 2113979629.py, 8, INFO, Processing year 2018 for ticker RTTR.\n", + "2026-01-19 21:57:51,546, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RTTR\\RTTR_2018\n", + "2026-01-19 21:57:51,595, 2113979629.py, 8, INFO, Processing year 2019 for ticker RTTR.\n", + "2026-01-19 21:57:51,596, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RTTR\\RTTR_2019\n", + "2026-01-19 21:57:51,646, 2113979629.py, 8, INFO, Processing year 2020 for ticker RTTR.\n", + "2026-01-19 21:57:51,663, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RTTR\\RTTR_2020\n", + "2026-01-19 21:57:51,696, 2113979629.py, 4, INFO, Processing ticker: EARN\n", + "2026-01-19 21:57:51,713, 2113979629.py, 8, INFO, Processing year 2013 for ticker EARN.\n", + "2026-01-19 21:57:51,729, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2013\n", + "2026-01-19 21:57:51,775, 2113979629.py, 8, INFO, Processing year 2014 for ticker EARN.\n", + "2026-01-19 21:57:51,779, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2014\n", + "2026-01-19 21:57:51,832, 2113979629.py, 8, INFO, Processing year 2015 for ticker EARN.\n", + "2026-01-19 21:57:51,843, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2015\n", + "2026-01-19 21:57:51,915, 2113979629.py, 8, INFO, Processing year 2016 for ticker EARN.\n", + "2026-01-19 21:57:51,929, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2016\n", + "2026-01-19 21:57:52,040, 2113979629.py, 8, INFO, Processing year 2017 for ticker EARN.\n", + "2026-01-19 21:57:52,063, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2017\n", + "2026-01-19 21:57:52,112, 2113979629.py, 8, INFO, Processing year 2018 for ticker EARN.\n", + "2026-01-19 21:57:52,128, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2018\n", + "2026-01-19 21:57:52,204, 2113979629.py, 8, INFO, Processing year 2019 for ticker EARN.\n", + "2026-01-19 21:57:52,217, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2019\n", + "2026-01-19 21:57:52,269, 2113979629.py, 8, INFO, Processing year 2020 for ticker EARN.\n", + "2026-01-19 21:57:52,281, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EARN\\EARN_2020\n", + "2026-01-19 21:57:52,324, 2113979629.py, 4, INFO, Processing ticker: ZIXI\n", + "2026-01-19 21:57:52,329, 2113979629.py, 8, INFO, Processing year 1989 for ticker ZIXI.\n", + "2026-01-19 21:57:52,346, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1989\n", + "2026-01-19 21:57:52,396, 2113979629.py, 8, INFO, Processing year 1990 for ticker ZIXI.\n", + "2026-01-19 21:57:52,408, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1990\n", + "2026-01-19 21:57:52,446, 2113979629.py, 8, INFO, Processing year 1991 for ticker ZIXI.\n", + "2026-01-19 21:57:52,463, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1991\n", + "2026-01-19 21:57:52,510, 2113979629.py, 8, INFO, Processing year 1992 for ticker ZIXI.\n", + "2026-01-19 21:57:52,526, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1992\n", + "2026-01-19 21:57:52,570, 2113979629.py, 8, INFO, Processing year 1993 for ticker ZIXI.\n", + "2026-01-19 21:57:52,583, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1993\n", + "2026-01-19 21:57:52,626, 2113979629.py, 8, INFO, Processing year 1994 for ticker ZIXI.\n", + "2026-01-19 21:57:52,646, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1994\n", + "2026-01-19 21:57:52,694, 2113979629.py, 8, INFO, Processing year 1995 for ticker ZIXI.\n", + "2026-01-19 21:57:52,711, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1995\n", + "2026-01-19 21:57:52,765, 2113979629.py, 8, INFO, Processing year 1996 for ticker ZIXI.\n", + "2026-01-19 21:57:52,779, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1996\n", + "2026-01-19 21:57:52,911, 2113979629.py, 8, INFO, Processing year 1997 for ticker ZIXI.\n", + "2026-01-19 21:57:52,939, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1997\n", + "2026-01-19 21:57:52,995, 2113979629.py, 8, INFO, Processing year 1998 for ticker ZIXI.\n", + "2026-01-19 21:57:53,008, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1998\n", + "2026-01-19 21:57:53,046, 2113979629.py, 8, INFO, Processing year 1999 for ticker ZIXI.\n", + "2026-01-19 21:57:53,062, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_1999\n", + "2026-01-19 21:57:53,096, 2113979629.py, 8, INFO, Processing year 2000 for ticker ZIXI.\n", + "2026-01-19 21:57:53,113, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2000\n", + "2026-01-19 21:57:53,159, 2113979629.py, 8, INFO, Processing year 2001 for ticker ZIXI.\n", + "2026-01-19 21:57:53,162, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2001\n", + "2026-01-19 21:57:53,214, 2113979629.py, 8, INFO, Processing year 2002 for ticker ZIXI.\n", + "2026-01-19 21:57:53,229, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2002\n", + "2026-01-19 21:57:53,274, 2113979629.py, 8, INFO, Processing year 2003 for ticker ZIXI.\n", + "2026-01-19 21:57:53,279, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2003\n", + "2026-01-19 21:57:53,326, 2113979629.py, 8, INFO, Processing year 2004 for ticker ZIXI.\n", + "2026-01-19 21:57:53,329, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2004\n", + "2026-01-19 21:57:53,378, 2113979629.py, 8, INFO, Processing year 2005 for ticker ZIXI.\n", + "2026-01-19 21:57:53,387, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2005\n", + "2026-01-19 21:57:53,447, 2113979629.py, 8, INFO, Processing year 2006 for ticker ZIXI.\n", + "2026-01-19 21:57:53,463, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2006\n", + "2026-01-19 21:57:53,496, 2113979629.py, 8, INFO, Processing year 2007 for ticker ZIXI.\n", + "2026-01-19 21:57:53,518, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2007\n", + "2026-01-19 21:57:53,561, 2113979629.py, 8, INFO, Processing year 2008 for ticker ZIXI.\n", + "2026-01-19 21:57:53,571, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2008\n", + "2026-01-19 21:57:53,614, 2113979629.py, 8, INFO, Processing year 2009 for ticker ZIXI.\n", + "2026-01-19 21:57:53,622, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2009\n", + "2026-01-19 21:57:53,662, 2113979629.py, 8, INFO, Processing year 2010 for ticker ZIXI.\n", + "2026-01-19 21:57:53,671, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2010\n", + "2026-01-19 21:57:53,714, 2113979629.py, 8, INFO, Processing year 2011 for ticker ZIXI.\n", + "2026-01-19 21:57:53,727, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2011\n", + "2026-01-19 21:57:53,761, 2113979629.py, 8, INFO, Processing year 2012 for ticker ZIXI.\n", + "2026-01-19 21:57:53,779, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2012\n", + "2026-01-19 21:57:54,479, 2113979629.py, 8, INFO, Processing year 2013 for ticker ZIXI.\n", + "2026-01-19 21:57:54,494, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2013\n", + "2026-01-19 21:57:54,539, 2113979629.py, 8, INFO, Processing year 2014 for ticker ZIXI.\n", + "2026-01-19 21:57:54,550, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2014\n", + "2026-01-19 21:57:54,596, 2113979629.py, 8, INFO, Processing year 2015 for ticker ZIXI.\n", + "2026-01-19 21:57:54,607, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2015\n", + "2026-01-19 21:57:54,647, 2113979629.py, 8, INFO, Processing year 2016 for ticker ZIXI.\n", + "2026-01-19 21:57:54,657, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2016\n", + "2026-01-19 21:57:54,697, 2113979629.py, 8, INFO, Processing year 2017 for ticker ZIXI.\n", + "2026-01-19 21:57:54,709, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2017\n", + "2026-01-19 21:57:54,742, 2113979629.py, 8, INFO, Processing year 2018 for ticker ZIXI.\n", + "2026-01-19 21:57:54,762, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2018\n", + "2026-01-19 21:57:54,807, 2113979629.py, 8, INFO, Processing year 2019 for ticker ZIXI.\n", + "2026-01-19 21:57:54,823, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2019\n", + "2026-01-19 21:57:54,862, 2113979629.py, 8, INFO, Processing year 2020 for ticker ZIXI.\n", + "2026-01-19 21:57:54,883, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ZIXI\\ZIXI_2020\n", + "2026-01-19 21:57:54,923, 2113979629.py, 4, INFO, Processing ticker: TSN\n", + "2026-01-19 21:57:54,941, 2113979629.py, 8, INFO, Processing year 1980 for ticker TSN.\n", + "2026-01-19 21:57:54,951, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1980\n", + "2026-01-19 21:57:55,007, 2113979629.py, 8, INFO, Processing year 1981 for ticker TSN.\n", + "2026-01-19 21:57:55,031, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1981\n", + "2026-01-19 21:57:55,073, 2113979629.py, 8, INFO, Processing year 1982 for ticker TSN.\n", + "2026-01-19 21:57:55,076, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1982\n", + "2026-01-19 21:57:55,124, 2113979629.py, 8, INFO, Processing year 1983 for ticker TSN.\n", + "2026-01-19 21:57:55,124, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1983\n", + "2026-01-19 21:57:55,251, 2113979629.py, 8, INFO, Processing year 1984 for ticker TSN.\n", + "2026-01-19 21:57:55,263, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1984\n", + "2026-01-19 21:57:55,335, 2113979629.py, 8, INFO, Processing year 1985 for ticker TSN.\n", + "2026-01-19 21:57:55,346, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1985\n", + "2026-01-19 21:57:55,398, 2113979629.py, 8, INFO, Processing year 1986 for ticker TSN.\n", + "2026-01-19 21:57:55,411, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1986\n", + "2026-01-19 21:57:55,446, 2113979629.py, 8, INFO, Processing year 1987 for ticker TSN.\n", + "2026-01-19 21:57:55,469, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1987\n", + "2026-01-19 21:57:55,523, 2113979629.py, 8, INFO, Processing year 1988 for ticker TSN.\n", + "2026-01-19 21:57:55,534, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1988\n", + "2026-01-19 21:57:55,579, 2113979629.py, 8, INFO, Processing year 1989 for ticker TSN.\n", + "2026-01-19 21:57:55,596, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1989\n", + "2026-01-19 21:57:55,650, 2113979629.py, 8, INFO, Processing year 1990 for ticker TSN.\n", + "2026-01-19 21:57:55,661, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1990\n", + "2026-01-19 21:57:55,701, 2113979629.py, 8, INFO, Processing year 1991 for ticker TSN.\n", + "2026-01-19 21:57:55,713, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1991\n", + "2026-01-19 21:57:55,752, 2113979629.py, 8, INFO, Processing year 1992 for ticker TSN.\n", + "2026-01-19 21:57:55,768, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1992\n", + "2026-01-19 21:57:55,808, 2113979629.py, 8, INFO, Processing year 1993 for ticker TSN.\n", + "2026-01-19 21:57:55,813, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1993\n", + "2026-01-19 21:57:55,864, 2113979629.py, 8, INFO, Processing year 1994 for ticker TSN.\n", + "2026-01-19 21:57:55,874, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1994\n", + "2026-01-19 21:57:55,918, 2113979629.py, 8, INFO, Processing year 1995 for ticker TSN.\n", + "2026-01-19 21:57:55,924, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1995\n", + "2026-01-19 21:57:55,972, 2113979629.py, 8, INFO, Processing year 1996 for ticker TSN.\n", + "2026-01-19 21:57:55,979, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1996\n", + "2026-01-19 21:57:56,059, 2113979629.py, 8, INFO, Processing year 1997 for ticker TSN.\n", + "2026-01-19 21:57:56,059, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1997\n", + "2026-01-19 21:57:56,126, 2113979629.py, 8, INFO, Processing year 1998 for ticker TSN.\n", + "2026-01-19 21:57:56,135, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1998\n", + "2026-01-19 21:57:56,194, 2113979629.py, 8, INFO, Processing year 1999 for ticker TSN.\n", + "2026-01-19 21:57:56,206, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_1999\n", + "2026-01-19 21:57:56,248, 2113979629.py, 8, INFO, Processing year 2000 for ticker TSN.\n", + "2026-01-19 21:57:56,266, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2000\n", + "2026-01-19 21:57:56,326, 2113979629.py, 8, INFO, Processing year 2001 for ticker TSN.\n", + "2026-01-19 21:57:56,363, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2001\n", + "2026-01-19 21:57:56,483, 2113979629.py, 8, INFO, Processing year 2002 for ticker TSN.\n", + "2026-01-19 21:57:56,494, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2002\n", + "2026-01-19 21:57:56,525, 2113979629.py, 8, INFO, Processing year 2003 for ticker TSN.\n", + "2026-01-19 21:57:56,539, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2003\n", + "2026-01-19 21:57:56,573, 2113979629.py, 8, INFO, Processing year 2004 for ticker TSN.\n", + "2026-01-19 21:57:56,589, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2004\n", + "2026-01-19 21:57:56,626, 2113979629.py, 8, INFO, Processing year 2005 for ticker TSN.\n", + "2026-01-19 21:57:56,646, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2005\n", + "2026-01-19 21:57:56,749, 2113979629.py, 8, INFO, Processing year 2006 for ticker TSN.\n", + "2026-01-19 21:57:56,769, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2006\n", + "2026-01-19 21:57:56,844, 2113979629.py, 8, INFO, Processing year 2007 for ticker TSN.\n", + "2026-01-19 21:57:56,849, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2007\n", + "2026-01-19 21:57:56,893, 2113979629.py, 8, INFO, Processing year 2008 for ticker TSN.\n", + "2026-01-19 21:57:56,893, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2008\n", + "2026-01-19 21:57:56,956, 2113979629.py, 8, INFO, Processing year 2009 for ticker TSN.\n", + "2026-01-19 21:57:56,963, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2009\n", + "2026-01-19 21:57:57,014, 2113979629.py, 8, INFO, Processing year 2010 for ticker TSN.\n", + "2026-01-19 21:57:57,028, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2010\n", + "2026-01-19 21:57:57,063, 2113979629.py, 8, INFO, Processing year 2011 for ticker TSN.\n", + "2026-01-19 21:57:57,079, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2011\n", + "2026-01-19 21:57:57,129, 2113979629.py, 8, INFO, Processing year 2012 for ticker TSN.\n", + "2026-01-19 21:57:57,146, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2012\n", + "2026-01-19 21:57:57,190, 2113979629.py, 8, INFO, Processing year 2013 for ticker TSN.\n", + "2026-01-19 21:57:57,196, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2013\n", + "2026-01-19 21:57:57,246, 2113979629.py, 8, INFO, Processing year 2014 for ticker TSN.\n", + "2026-01-19 21:57:57,246, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2014\n", + "2026-01-19 21:57:57,302, 2113979629.py, 8, INFO, Processing year 2015 for ticker TSN.\n", + "2026-01-19 21:57:57,307, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2015\n", + "2026-01-19 21:57:57,355, 2113979629.py, 8, INFO, Processing year 2016 for ticker TSN.\n", + "2026-01-19 21:57:57,357, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2016\n", + "2026-01-19 21:57:57,408, 2113979629.py, 8, INFO, Processing year 2017 for ticker TSN.\n", + "2026-01-19 21:57:57,418, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2017\n", + "2026-01-19 21:57:57,462, 2113979629.py, 8, INFO, Processing year 2018 for ticker TSN.\n", + "2026-01-19 21:57:57,472, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2018\n", + "2026-01-19 21:57:57,521, 2113979629.py, 8, INFO, Processing year 2019 for ticker TSN.\n", + "2026-01-19 21:57:57,530, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2019\n", + "2026-01-19 21:57:57,572, 2113979629.py, 8, INFO, Processing year 2020 for ticker TSN.\n", + "2026-01-19 21:57:57,576, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TSN\\TSN_2020\n", + "2026-01-19 21:57:57,626, 2113979629.py, 4, INFO, Processing ticker: WST\n", + "2026-01-19 21:57:57,641, 2113979629.py, 8, INFO, Processing year 1980 for ticker WST.\n", + "2026-01-19 21:57:57,641, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1980\n", + "2026-01-19 21:57:57,690, 2113979629.py, 8, INFO, Processing year 1981 for ticker WST.\n", + "2026-01-19 21:57:57,705, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1981\n", + "2026-01-19 21:57:57,749, 2113979629.py, 8, INFO, Processing year 1982 for ticker WST.\n", + "2026-01-19 21:57:57,761, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1982\n", + "2026-01-19 21:57:57,883, 2113979629.py, 8, INFO, Processing year 1983 for ticker WST.\n", + "2026-01-19 21:57:57,889, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1983\n", + "2026-01-19 21:57:58,010, 2113979629.py, 8, INFO, Processing year 1984 for ticker WST.\n", + "2026-01-19 21:57:58,047, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1984\n", + "2026-01-19 21:57:58,103, 2113979629.py, 8, INFO, Processing year 1985 for ticker WST.\n", + "2026-01-19 21:57:58,113, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1985\n", + "2026-01-19 21:57:58,141, 2113979629.py, 8, INFO, Processing year 1986 for ticker WST.\n", + "2026-01-19 21:57:58,157, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1986\n", + "2026-01-19 21:57:58,207, 2113979629.py, 8, INFO, Processing year 1987 for ticker WST.\n", + "2026-01-19 21:57:58,226, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1987\n", + "2026-01-19 21:57:58,269, 2113979629.py, 8, INFO, Processing year 1988 for ticker WST.\n", + "2026-01-19 21:57:58,281, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1988\n", + "2026-01-19 21:57:58,320, 2113979629.py, 8, INFO, Processing year 1989 for ticker WST.\n", + "2026-01-19 21:57:58,323, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1989\n", + "2026-01-19 21:57:58,375, 2113979629.py, 8, INFO, Processing year 1990 for ticker WST.\n", + "2026-01-19 21:57:58,394, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1990\n", + "2026-01-19 21:57:58,425, 2113979629.py, 8, INFO, Processing year 1991 for ticker WST.\n", + "2026-01-19 21:57:58,444, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1991\n", + "2026-01-19 21:57:58,499, 2113979629.py, 8, INFO, Processing year 1992 for ticker WST.\n", + "2026-01-19 21:57:58,515, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1992\n", + "2026-01-19 21:57:58,565, 2113979629.py, 8, INFO, Processing year 1993 for ticker WST.\n", + "2026-01-19 21:57:58,577, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1993\n", + "2026-01-19 21:57:58,625, 2113979629.py, 8, INFO, Processing year 1994 for ticker WST.\n", + "2026-01-19 21:57:58,640, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1994\n", + "2026-01-19 21:57:58,685, 2113979629.py, 8, INFO, Processing year 1995 for ticker WST.\n", + "2026-01-19 21:57:58,698, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1995\n", + "2026-01-19 21:57:58,746, 2113979629.py, 8, INFO, Processing year 1996 for ticker WST.\n", + "2026-01-19 21:57:58,747, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1996\n", + "2026-01-19 21:57:58,795, 2113979629.py, 8, INFO, Processing year 1997 for ticker WST.\n", + "2026-01-19 21:57:58,804, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1997\n", + "2026-01-19 21:57:58,846, 2113979629.py, 8, INFO, Processing year 1998 for ticker WST.\n", + "2026-01-19 21:57:58,854, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1998\n", + "2026-01-19 21:57:58,906, 2113979629.py, 8, INFO, Processing year 1999 for ticker WST.\n", + "2026-01-19 21:57:58,921, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_1999\n", + "2026-01-19 21:57:58,974, 2113979629.py, 8, INFO, Processing year 2000 for ticker WST.\n", + "2026-01-19 21:57:59,015, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2000\n", + "2026-01-19 21:57:59,109, 2113979629.py, 8, INFO, Processing year 2001 for ticker WST.\n", + "2026-01-19 21:57:59,122, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2001\n", + "2026-01-19 21:57:59,155, 2113979629.py, 8, INFO, Processing year 2002 for ticker WST.\n", + "2026-01-19 21:57:59,173, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2002\n", + "2026-01-19 21:57:59,208, 2113979629.py, 8, INFO, Processing year 2003 for ticker WST.\n", + "2026-01-19 21:57:59,225, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2003\n", + "2026-01-19 21:57:59,269, 2113979629.py, 8, INFO, Processing year 2004 for ticker WST.\n", + "2026-01-19 21:57:59,280, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2004\n", + "2026-01-19 21:57:59,328, 2113979629.py, 8, INFO, Processing year 2005 for ticker WST.\n", + "2026-01-19 21:57:59,329, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2005\n", + "2026-01-19 21:57:59,382, 2113979629.py, 8, INFO, Processing year 2006 for ticker WST.\n", + "2026-01-19 21:57:59,396, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2006\n", + "2026-01-19 21:57:59,446, 2113979629.py, 8, INFO, Processing year 2007 for ticker WST.\n", + "2026-01-19 21:57:59,458, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2007\n", + "2026-01-19 21:57:59,495, 2113979629.py, 8, INFO, Processing year 2008 for ticker WST.\n", + "2026-01-19 21:57:59,512, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2008\n", + "2026-01-19 21:57:59,561, 2113979629.py, 8, INFO, Processing year 2009 for ticker WST.\n", + "2026-01-19 21:57:59,563, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2009\n", + "2026-01-19 21:57:59,614, 2113979629.py, 8, INFO, Processing year 2010 for ticker WST.\n", + "2026-01-19 21:57:59,625, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2010\n", + "2026-01-19 21:57:59,657, 2113979629.py, 8, INFO, Processing year 2011 for ticker WST.\n", + "2026-01-19 21:57:59,678, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2011\n", + "2026-01-19 21:57:59,722, 2113979629.py, 8, INFO, Processing year 2012 for ticker WST.\n", + "2026-01-19 21:57:59,722, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2012\n", + "2026-01-19 21:57:59,770, 2113979629.py, 8, INFO, Processing year 2013 for ticker WST.\n", + "2026-01-19 21:57:59,788, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2013\n", + "2026-01-19 21:57:59,829, 2113979629.py, 8, INFO, Processing year 2014 for ticker WST.\n", + "2026-01-19 21:57:59,838, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2014\n", + "2026-01-19 21:57:59,875, 2113979629.py, 8, INFO, Processing year 2015 for ticker WST.\n", + "2026-01-19 21:57:59,875, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2015\n", + "2026-01-19 21:57:59,922, 2113979629.py, 8, INFO, Processing year 2016 for ticker WST.\n", + "2026-01-19 21:57:59,922, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2016\n", + "2026-01-19 21:57:59,973, 2113979629.py, 8, INFO, Processing year 2017 for ticker WST.\n", + "2026-01-19 21:57:59,973, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2017\n", + "2026-01-19 21:58:00,032, 2113979629.py, 8, INFO, Processing year 2018 for ticker WST.\n", + "2026-01-19 21:58:00,042, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2018\n", + "2026-01-19 21:58:00,098, 2113979629.py, 8, INFO, Processing year 2019 for ticker WST.\n", + "2026-01-19 21:58:00,106, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2019\n", + "2026-01-19 21:58:00,177, 2113979629.py, 8, INFO, Processing year 2020 for ticker WST.\n", + "2026-01-19 21:58:00,206, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WST\\WST_2020\n", + "2026-01-19 21:58:00,328, 2113979629.py, 4, INFO, Processing ticker: REG\n", + "2026-01-19 21:58:00,350, 2113979629.py, 8, INFO, Processing year 1993 for ticker REG.\n", + "2026-01-19 21:58:00,360, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1993\n", + "2026-01-19 21:58:00,391, 2113979629.py, 8, INFO, Processing year 1994 for ticker REG.\n", + "2026-01-19 21:58:00,413, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1994\n", + "2026-01-19 21:58:00,443, 2113979629.py, 8, INFO, Processing year 1995 for ticker REG.\n", + "2026-01-19 21:58:00,461, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1995\n", + "2026-01-19 21:58:00,507, 2113979629.py, 8, INFO, Processing year 1996 for ticker REG.\n", + "2026-01-19 21:58:00,526, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1996\n", + "2026-01-19 21:58:00,577, 2113979629.py, 8, INFO, Processing year 1997 for ticker REG.\n", + "2026-01-19 21:58:00,590, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1997\n", + "2026-01-19 21:58:00,624, 2113979629.py, 8, INFO, Processing year 1998 for ticker REG.\n", + "2026-01-19 21:58:00,638, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1998\n", + "2026-01-19 21:58:00,673, 2113979629.py, 8, INFO, Processing year 1999 for ticker REG.\n", + "2026-01-19 21:58:00,692, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_1999\n", + "2026-01-19 21:58:00,724, 2113979629.py, 8, INFO, Processing year 2000 for ticker REG.\n", + "2026-01-19 21:58:00,739, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2000\n", + "2026-01-19 21:58:00,787, 2113979629.py, 8, INFO, Processing year 2001 for ticker REG.\n", + "2026-01-19 21:58:00,804, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2001\n", + "2026-01-19 21:58:00,840, 2113979629.py, 8, INFO, Processing year 2002 for ticker REG.\n", + "2026-01-19 21:58:00,853, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2002\n", + "2026-01-19 21:58:00,890, 2113979629.py, 8, INFO, Processing year 2003 for ticker REG.\n", + "2026-01-19 21:58:00,905, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2003\n", + "2026-01-19 21:58:00,940, 2113979629.py, 8, INFO, Processing year 2004 for ticker REG.\n", + "2026-01-19 21:58:00,956, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2004\n", + "2026-01-19 21:58:00,990, 2113979629.py, 8, INFO, Processing year 2005 for ticker REG.\n", + "2026-01-19 21:58:01,008, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2005\n", + "2026-01-19 21:58:01,062, 2113979629.py, 8, INFO, Processing year 2006 for ticker REG.\n", + "2026-01-19 21:58:01,081, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2006\n", + "2026-01-19 21:58:01,133, 2113979629.py, 8, INFO, Processing year 2007 for ticker REG.\n", + "2026-01-19 21:58:01,139, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2007\n", + "2026-01-19 21:58:01,191, 2113979629.py, 8, INFO, Processing year 2008 for ticker REG.\n", + "2026-01-19 21:58:01,192, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2008\n", + "2026-01-19 21:58:01,240, 2113979629.py, 8, INFO, Processing year 2009 for ticker REG.\n", + "2026-01-19 21:58:01,252, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2009\n", + "2026-01-19 21:58:01,289, 2113979629.py, 8, INFO, Processing year 2010 for ticker REG.\n", + "2026-01-19 21:58:01,319, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2010\n", + "2026-01-19 21:58:01,460, 2113979629.py, 8, INFO, Processing year 2011 for ticker REG.\n", + "2026-01-19 21:58:01,479, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2011\n", + "2026-01-19 21:58:01,620, 2113979629.py, 8, INFO, Processing year 2012 for ticker REG.\n", + "2026-01-19 21:58:01,636, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2012\n", + "2026-01-19 21:58:01,690, 2113979629.py, 8, INFO, Processing year 2013 for ticker REG.\n", + "2026-01-19 21:58:01,695, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2013\n", + "2026-01-19 21:58:01,755, 2113979629.py, 8, INFO, Processing year 2014 for ticker REG.\n", + "2026-01-19 21:58:01,762, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2014\n", + "2026-01-19 21:58:01,812, 2113979629.py, 8, INFO, Processing year 2015 for ticker REG.\n", + "2026-01-19 21:58:01,827, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2015\n", + "2026-01-19 21:58:01,879, 2113979629.py, 8, INFO, Processing year 2016 for ticker REG.\n", + "2026-01-19 21:58:01,896, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2016\n", + "2026-01-19 21:58:01,942, 2113979629.py, 8, INFO, Processing year 2017 for ticker REG.\n", + "2026-01-19 21:58:01,969, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2017\n", + "2026-01-19 21:58:02,034, 2113979629.py, 8, INFO, Processing year 2018 for ticker REG.\n", + "2026-01-19 21:58:02,055, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2018\n", + "2026-01-19 21:58:02,112, 2113979629.py, 8, INFO, Processing year 2019 for ticker REG.\n", + "2026-01-19 21:58:02,129, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2019\n", + "2026-01-19 21:58:02,175, 2113979629.py, 8, INFO, Processing year 2020 for ticker REG.\n", + "2026-01-19 21:58:02,179, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/REG\\REG_2020\n", + "2026-01-19 21:58:02,229, 2113979629.py, 4, INFO, Processing ticker: MNK\n", + "2026-01-19 21:58:02,246, 2113979629.py, 8, INFO, Processing year 2013 for ticker MNK.\n", + "2026-01-19 21:58:02,262, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2013\n", + "2026-01-19 21:58:02,345, 2113979629.py, 8, INFO, Processing year 2014 for ticker MNK.\n", + "2026-01-19 21:58:02,357, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2014\n", + "2026-01-19 21:58:02,396, 2113979629.py, 8, INFO, Processing year 2015 for ticker MNK.\n", + "2026-01-19 21:58:02,412, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2015\n", + "2026-01-19 21:58:02,462, 2113979629.py, 8, INFO, Processing year 2016 for ticker MNK.\n", + "2026-01-19 21:58:02,475, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2016\n", + "2026-01-19 21:58:02,545, 2113979629.py, 8, INFO, Processing year 2017 for ticker MNK.\n", + "2026-01-19 21:58:02,562, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2017\n", + "2026-01-19 21:58:02,609, 2113979629.py, 8, INFO, Processing year 2018 for ticker MNK.\n", + "2026-01-19 21:58:02,610, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2018\n", + "2026-01-19 21:58:02,670, 2113979629.py, 8, INFO, Processing year 2019 for ticker MNK.\n", + "2026-01-19 21:58:02,682, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2019\n", + "2026-01-19 21:58:02,744, 2113979629.py, 8, INFO, Processing year 2020 for ticker MNK.\n", + "2026-01-19 21:58:02,759, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MNK\\MNK_2020\n", + "2026-01-19 21:58:02,807, 2113979629.py, 4, INFO, Processing ticker: ESGR\n", + "2026-01-19 21:58:02,812, 2113979629.py, 8, INFO, Processing year 1997 for ticker ESGR.\n", + "2026-01-19 21:58:02,829, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_1997\n", + "2026-01-19 21:58:02,886, 2113979629.py, 8, INFO, Processing year 1998 for ticker ESGR.\n", + "2026-01-19 21:58:02,896, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_1998\n", + "2026-01-19 21:58:02,958, 2113979629.py, 8, INFO, Processing year 1999 for ticker ESGR.\n", + "2026-01-19 21:58:02,962, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_1999\n", + "2026-01-19 21:58:03,012, 2113979629.py, 8, INFO, Processing year 2000 for ticker ESGR.\n", + "2026-01-19 21:58:03,026, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2000\n", + "2026-01-19 21:58:03,062, 2113979629.py, 8, INFO, Processing year 2001 for ticker ESGR.\n", + "2026-01-19 21:58:03,078, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2001\n", + "2026-01-19 21:58:03,124, 2113979629.py, 8, INFO, Processing year 2002 for ticker ESGR.\n", + "2026-01-19 21:58:03,129, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2002\n", + "2026-01-19 21:58:03,179, 2113979629.py, 8, INFO, Processing year 2003 for ticker ESGR.\n", + "2026-01-19 21:58:03,196, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2003\n", + "2026-01-19 21:58:03,245, 2113979629.py, 8, INFO, Processing year 2004 for ticker ESGR.\n", + "2026-01-19 21:58:03,262, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2004\n", + "2026-01-19 21:58:03,312, 2113979629.py, 8, INFO, Processing year 2005 for ticker ESGR.\n", + "2026-01-19 21:58:03,313, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2005\n", + "2026-01-19 21:58:03,362, 2113979629.py, 8, INFO, Processing year 2006 for ticker ESGR.\n", + "2026-01-19 21:58:03,379, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2006\n", + "2026-01-19 21:58:03,428, 2113979629.py, 8, INFO, Processing year 2007 for ticker ESGR.\n", + "2026-01-19 21:58:03,429, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2007\n", + "2026-01-19 21:58:03,484, 2113979629.py, 8, INFO, Processing year 2008 for ticker ESGR.\n", + "2026-01-19 21:58:03,495, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2008\n", + "2026-01-19 21:58:03,540, 2113979629.py, 8, INFO, Processing year 2009 for ticker ESGR.\n", + "2026-01-19 21:58:03,552, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2009\n", + "2026-01-19 21:58:03,593, 2113979629.py, 8, INFO, Processing year 2010 for ticker ESGR.\n", + "2026-01-19 21:58:03,603, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2010\n", + "2026-01-19 21:58:03,648, 2113979629.py, 8, INFO, Processing year 2011 for ticker ESGR.\n", + "2026-01-19 21:58:03,659, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2011\n", + "2026-01-19 21:58:03,704, 2113979629.py, 8, INFO, Processing year 2012 for ticker ESGR.\n", + "2026-01-19 21:58:03,715, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2012\n", + "2026-01-19 21:58:03,778, 2113979629.py, 8, INFO, Processing year 2013 for ticker ESGR.\n", + "2026-01-19 21:58:03,794, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2013\n", + "2026-01-19 21:58:03,832, 2113979629.py, 8, INFO, Processing year 2014 for ticker ESGR.\n", + "2026-01-19 21:58:03,847, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2014\n", + "2026-01-19 21:58:03,886, 2113979629.py, 8, INFO, Processing year 2015 for ticker ESGR.\n", + "2026-01-19 21:58:03,892, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2015\n", + "2026-01-19 21:58:03,937, 2113979629.py, 8, INFO, Processing year 2016 for ticker ESGR.\n", + "2026-01-19 21:58:03,946, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2016\n", + "2026-01-19 21:58:03,992, 2113979629.py, 8, INFO, Processing year 2017 for ticker ESGR.\n", + "2026-01-19 21:58:03,994, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2017\n", + "2026-01-19 21:58:04,042, 2113979629.py, 8, INFO, Processing year 2018 for ticker ESGR.\n", + "2026-01-19 21:58:04,047, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2018\n", + "2026-01-19 21:58:04,090, 2113979629.py, 8, INFO, Processing year 2019 for ticker ESGR.\n", + "2026-01-19 21:58:04,099, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2019\n", + "2026-01-19 21:58:04,141, 2113979629.py, 8, INFO, Processing year 2020 for ticker ESGR.\n", + "2026-01-19 21:58:04,148, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ESGR\\ESGR_2020\n", + "2026-01-19 21:58:04,194, 2113979629.py, 4, INFO, Processing ticker: NGD\n", + "2026-01-19 21:58:04,209, 2113979629.py, 8, INFO, Processing year 2004 for ticker NGD.\n", + "2026-01-19 21:58:04,231, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2004\n", + "2026-01-19 21:58:04,273, 2113979629.py, 8, INFO, Processing year 2005 for ticker NGD.\n", + "2026-01-19 21:58:04,274, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2005\n", + "2026-01-19 21:58:04,312, 2113979629.py, 8, INFO, Processing year 2006 for ticker NGD.\n", + "2026-01-19 21:58:04,335, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2006\n", + "2026-01-19 21:58:04,446, 2113979629.py, 8, INFO, Processing year 2007 for ticker NGD.\n", + "2026-01-19 21:58:04,480, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2007\n", + "2026-01-19 21:58:04,530, 2113979629.py, 8, INFO, Processing year 2008 for ticker NGD.\n", + "2026-01-19 21:58:04,541, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2008\n", + "2026-01-19 21:58:04,592, 2113979629.py, 8, INFO, Processing year 2009 for ticker NGD.\n", + "2026-01-19 21:58:04,608, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2009\n", + "2026-01-19 21:58:04,646, 2113979629.py, 8, INFO, Processing year 2010 for ticker NGD.\n", + "2026-01-19 21:58:04,665, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2010\n", + "2026-01-19 21:58:04,712, 2113979629.py, 8, INFO, Processing year 2011 for ticker NGD.\n", + "2026-01-19 21:58:04,730, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2011\n", + "2026-01-19 21:58:04,779, 2113979629.py, 8, INFO, Processing year 2012 for ticker NGD.\n", + "2026-01-19 21:58:04,795, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2012\n", + "2026-01-19 21:58:04,841, 2113979629.py, 8, INFO, Processing year 2013 for ticker NGD.\n", + "2026-01-19 21:58:04,845, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2013\n", + "2026-01-19 21:58:04,898, 2113979629.py, 8, INFO, Processing year 2014 for ticker NGD.\n", + "2026-01-19 21:58:04,909, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2014\n", + "2026-01-19 21:58:04,945, 2113979629.py, 8, INFO, Processing year 2015 for ticker NGD.\n", + "2026-01-19 21:58:04,963, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2015\n", + "2026-01-19 21:58:05,009, 2113979629.py, 8, INFO, Processing year 2016 for ticker NGD.\n", + "2026-01-19 21:58:05,012, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2016\n", + "2026-01-19 21:58:05,062, 2113979629.py, 8, INFO, Processing year 2017 for ticker NGD.\n", + "2026-01-19 21:58:05,075, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2017\n", + "2026-01-19 21:58:05,109, 2113979629.py, 8, INFO, Processing year 2018 for ticker NGD.\n", + "2026-01-19 21:58:05,134, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2018\n", + "2026-01-19 21:58:05,179, 2113979629.py, 8, INFO, Processing year 2019 for ticker NGD.\n", + "2026-01-19 21:58:05,195, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2019\n", + "2026-01-19 21:58:05,290, 2113979629.py, 8, INFO, Processing year 2020 for ticker NGD.\n", + "2026-01-19 21:58:05,305, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NGD\\NGD_2020\n", + "2026-01-19 21:58:05,354, 2113979629.py, 4, INFO, Processing ticker: SLRX\n", + "2026-01-19 21:58:05,366, 2113979629.py, 8, INFO, Processing year 2015 for ticker SLRX.\n", + "2026-01-19 21:58:05,383, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SLRX\\SLRX_2015\n", + "2026-01-19 21:58:05,433, 2113979629.py, 8, INFO, Processing year 2016 for ticker SLRX.\n", + "2026-01-19 21:58:05,446, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SLRX\\SLRX_2016\n", + "2026-01-19 21:58:05,497, 2113979629.py, 8, INFO, Processing year 2017 for ticker SLRX.\n", + "2026-01-19 21:58:05,512, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SLRX\\SLRX_2017\n", + "2026-01-19 21:58:05,577, 2113979629.py, 8, INFO, Processing year 2018 for ticker SLRX.\n", + "2026-01-19 21:58:05,589, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SLRX\\SLRX_2018\n", + "2026-01-19 21:58:05,648, 2113979629.py, 8, INFO, Processing year 2019 for ticker SLRX.\n", + "2026-01-19 21:58:05,662, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SLRX\\SLRX_2019\n", + "2026-01-19 21:58:05,712, 2113979629.py, 8, INFO, Processing year 2020 for ticker SLRX.\n", + "2026-01-19 21:58:05,726, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SLRX\\SLRX_2020\n", + "2026-01-19 21:58:05,772, 2113979629.py, 4, INFO, Processing ticker: GLW\n", + "2026-01-19 21:58:05,788, 2113979629.py, 8, INFO, Processing year 1981 for ticker GLW.\n", + "2026-01-19 21:58:05,795, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1981\n", + "2026-01-19 21:58:05,833, 2113979629.py, 8, INFO, Processing year 1982 for ticker GLW.\n", + "2026-01-19 21:58:05,849, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1982\n", + "2026-01-19 21:58:05,894, 2113979629.py, 8, INFO, Processing year 1983 for ticker GLW.\n", + "2026-01-19 21:58:05,905, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1983\n", + "2026-01-19 21:58:05,955, 2113979629.py, 8, INFO, Processing year 1984 for ticker GLW.\n", + "2026-01-19 21:58:05,969, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1984\n", + "2026-01-19 21:58:06,041, 2113979629.py, 8, INFO, Processing year 1985 for ticker GLW.\n", + "2026-01-19 21:58:06,065, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1985\n", + "2026-01-19 21:58:06,111, 2113979629.py, 8, INFO, Processing year 1986 for ticker GLW.\n", + "2026-01-19 21:58:06,124, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1986\n", + "2026-01-19 21:58:06,183, 2113979629.py, 8, INFO, Processing year 1987 for ticker GLW.\n", + "2026-01-19 21:58:06,198, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1987\n", + "2026-01-19 21:58:06,254, 2113979629.py, 8, INFO, Processing year 1988 for ticker GLW.\n", + "2026-01-19 21:58:06,268, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1988\n", + "2026-01-19 21:58:06,320, 2113979629.py, 8, INFO, Processing year 1989 for ticker GLW.\n", + "2026-01-19 21:58:06,325, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1989\n", + "2026-01-19 21:58:06,372, 2113979629.py, 8, INFO, Processing year 1990 for ticker GLW.\n", + "2026-01-19 21:58:06,386, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1990\n", + "2026-01-19 21:58:06,431, 2113979629.py, 8, INFO, Processing year 1991 for ticker GLW.\n", + "2026-01-19 21:58:06,446, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1991\n", + "2026-01-19 21:58:06,489, 2113979629.py, 8, INFO, Processing year 1992 for ticker GLW.\n", + "2026-01-19 21:58:06,496, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1992\n", + "2026-01-19 21:58:06,566, 2113979629.py, 8, INFO, Processing year 1993 for ticker GLW.\n", + "2026-01-19 21:58:06,573, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1993\n", + "2026-01-19 21:58:06,623, 2113979629.py, 8, INFO, Processing year 1994 for ticker GLW.\n", + "2026-01-19 21:58:06,643, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1994\n", + "2026-01-19 21:58:06,691, 2113979629.py, 8, INFO, Processing year 1995 for ticker GLW.\n", + "2026-01-19 21:58:06,705, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1995\n", + "2026-01-19 21:58:06,790, 2113979629.py, 8, INFO, Processing year 1996 for ticker GLW.\n", + "2026-01-19 21:58:06,806, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1996\n", + "2026-01-19 21:58:06,857, 2113979629.py, 8, INFO, Processing year 1997 for ticker GLW.\n", + "2026-01-19 21:58:06,868, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1997\n", + "2026-01-19 21:58:06,913, 2113979629.py, 8, INFO, Processing year 1998 for ticker GLW.\n", + "2026-01-19 21:58:06,922, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1998\n", + "2026-01-19 21:58:06,963, 2113979629.py, 8, INFO, Processing year 1999 for ticker GLW.\n", + "2026-01-19 21:58:06,976, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_1999\n", + "2026-01-19 21:58:07,028, 2113979629.py, 8, INFO, Processing year 2000 for ticker GLW.\n", + "2026-01-19 21:58:07,040, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2000\n", + "2026-01-19 21:58:07,090, 2113979629.py, 8, INFO, Processing year 2001 for ticker GLW.\n", + "2026-01-19 21:58:07,090, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2001\n", + "2026-01-19 21:58:07,151, 2113979629.py, 8, INFO, Processing year 2002 for ticker GLW.\n", + "2026-01-19 21:58:07,158, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2002\n", + "2026-01-19 21:58:07,207, 2113979629.py, 8, INFO, Processing year 2003 for ticker GLW.\n", + "2026-01-19 21:58:07,215, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2003\n", + "2026-01-19 21:58:07,256, 2113979629.py, 8, INFO, Processing year 2004 for ticker GLW.\n", + "2026-01-19 21:58:07,274, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2004\n", + "2026-01-19 21:58:07,339, 2113979629.py, 8, INFO, Processing year 2005 for ticker GLW.\n", + "2026-01-19 21:58:07,357, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2005\n", + "2026-01-19 21:58:07,390, 2113979629.py, 8, INFO, Processing year 2006 for ticker GLW.\n", + "2026-01-19 21:58:07,411, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2006\n", + "2026-01-19 21:58:07,452, 2113979629.py, 8, INFO, Processing year 2007 for ticker GLW.\n", + "2026-01-19 21:58:07,466, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2007\n", + "2026-01-19 21:58:07,506, 2113979629.py, 8, INFO, Processing year 2008 for ticker GLW.\n", + "2026-01-19 21:58:07,530, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2008\n", + "2026-01-19 21:58:07,663, 2113979629.py, 8, INFO, Processing year 2009 for ticker GLW.\n", + "2026-01-19 21:58:07,688, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2009\n", + "2026-01-19 21:58:07,758, 2113979629.py, 8, INFO, Processing year 2010 for ticker GLW.\n", + "2026-01-19 21:58:07,769, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2010\n", + "2026-01-19 21:58:07,819, 2113979629.py, 8, INFO, Processing year 2011 for ticker GLW.\n", + "2026-01-19 21:58:07,830, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2011\n", + "2026-01-19 21:58:07,870, 2113979629.py, 8, INFO, Processing year 2012 for ticker GLW.\n", + "2026-01-19 21:58:07,879, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2012\n", + "2026-01-19 21:58:07,930, 2113979629.py, 8, INFO, Processing year 2013 for ticker GLW.\n", + "2026-01-19 21:58:07,943, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2013\n", + "2026-01-19 21:58:07,989, 2113979629.py, 8, INFO, Processing year 2014 for ticker GLW.\n", + "2026-01-19 21:58:08,001, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2014\n", + "2026-01-19 21:58:08,063, 2113979629.py, 8, INFO, Processing year 2015 for ticker GLW.\n", + "2026-01-19 21:58:08,079, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2015\n", + "2026-01-19 21:58:08,123, 2113979629.py, 8, INFO, Processing year 2016 for ticker GLW.\n", + "2026-01-19 21:58:08,123, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2016\n", + "2026-01-19 21:58:08,180, 2113979629.py, 8, INFO, Processing year 2017 for ticker GLW.\n", + "2026-01-19 21:58:08,190, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2017\n", + "2026-01-19 21:58:08,237, 2113979629.py, 8, INFO, Processing year 2018 for ticker GLW.\n", + "2026-01-19 21:58:08,250, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2018\n", + "2026-01-19 21:58:08,300, 2113979629.py, 8, INFO, Processing year 2019 for ticker GLW.\n", + "2026-01-19 21:58:08,317, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2019\n", + "2026-01-19 21:58:08,361, 2113979629.py, 8, INFO, Processing year 2020 for ticker GLW.\n", + "2026-01-19 21:58:08,374, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLW\\GLW_2020\n", + "2026-01-19 21:58:08,427, 2113979629.py, 4, INFO, Processing ticker: ACN\n", + "2026-01-19 21:58:08,444, 2113979629.py, 8, INFO, Processing year 2001 for ticker ACN.\n", + "2026-01-19 21:58:08,456, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2001\n", + "2026-01-19 21:58:08,509, 2113979629.py, 8, INFO, Processing year 2002 for ticker ACN.\n", + "2026-01-19 21:58:08,524, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2002\n", + "2026-01-19 21:58:08,572, 2113979629.py, 8, INFO, Processing year 2003 for ticker ACN.\n", + "2026-01-19 21:58:08,574, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2003\n", + "2026-01-19 21:58:08,634, 2113979629.py, 8, INFO, Processing year 2004 for ticker ACN.\n", + "2026-01-19 21:58:08,646, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2004\n", + "2026-01-19 21:58:08,695, 2113979629.py, 8, INFO, Processing year 2005 for ticker ACN.\n", + "2026-01-19 21:58:08,707, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2005\n", + "2026-01-19 21:58:08,758, 2113979629.py, 8, INFO, Processing year 2006 for ticker ACN.\n", + "2026-01-19 21:58:08,758, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2006\n", + "2026-01-19 21:58:08,818, 2113979629.py, 8, INFO, Processing year 2007 for ticker ACN.\n", + "2026-01-19 21:58:08,831, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2007\n", + "2026-01-19 21:58:08,898, 2113979629.py, 8, INFO, Processing year 2008 for ticker ACN.\n", + "2026-01-19 21:58:08,910, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2008\n", + "2026-01-19 21:58:08,957, 2113979629.py, 8, INFO, Processing year 2009 for ticker ACN.\n", + "2026-01-19 21:58:08,970, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2009\n", + "2026-01-19 21:58:09,006, 2113979629.py, 8, INFO, Processing year 2010 for ticker ACN.\n", + "2026-01-19 21:58:09,035, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2010\n", + "2026-01-19 21:58:09,092, 2113979629.py, 8, INFO, Processing year 2011 for ticker ACN.\n", + "2026-01-19 21:58:09,107, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2011\n", + "2026-01-19 21:58:09,156, 2113979629.py, 8, INFO, Processing year 2012 for ticker ACN.\n", + "2026-01-19 21:58:09,171, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2012\n", + "2026-01-19 21:58:09,218, 2113979629.py, 8, INFO, Processing year 2013 for ticker ACN.\n", + "2026-01-19 21:58:09,228, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2013\n", + "2026-01-19 21:58:09,273, 2113979629.py, 8, INFO, Processing year 2014 for ticker ACN.\n", + "2026-01-19 21:58:09,285, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2014\n", + "2026-01-19 21:58:09,329, 2113979629.py, 8, INFO, Processing year 2015 for ticker ACN.\n", + "2026-01-19 21:58:09,343, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2015\n", + "2026-01-19 21:58:09,387, 2113979629.py, 8, INFO, Processing year 2016 for ticker ACN.\n", + "2026-01-19 21:58:09,393, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2016\n", + "2026-01-19 21:58:09,460, 2113979629.py, 8, INFO, Processing year 2017 for ticker ACN.\n", + "2026-01-19 21:58:09,472, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2017\n", + "2026-01-19 21:58:09,526, 2113979629.py, 8, INFO, Processing year 2018 for ticker ACN.\n", + "2026-01-19 21:58:09,553, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2018\n", + "2026-01-19 21:58:09,602, 2113979629.py, 8, INFO, Processing year 2019 for ticker ACN.\n", + "2026-01-19 21:58:09,614, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2019\n", + "2026-01-19 21:58:09,661, 2113979629.py, 8, INFO, Processing year 2020 for ticker ACN.\n", + "2026-01-19 21:58:09,671, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ACN\\ACN_2020\n", + "2026-01-19 21:58:09,719, 2113979629.py, 4, INFO, Processing ticker: CSSE\n", + "2026-01-19 21:58:09,735, 2113979629.py, 8, INFO, Processing year 2017 for ticker CSSE.\n", + "2026-01-19 21:58:09,742, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CSSE\\CSSE_2017\n", + "2026-01-19 21:58:09,792, 2113979629.py, 8, INFO, Processing year 2018 for ticker CSSE.\n", + "2026-01-19 21:58:09,797, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CSSE\\CSSE_2018\n", + "2026-01-19 21:58:09,858, 2113979629.py, 8, INFO, Processing year 2019 for ticker CSSE.\n", + "2026-01-19 21:58:09,875, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CSSE\\CSSE_2019\n", + "2026-01-19 21:58:09,932, 2113979629.py, 8, INFO, Processing year 2020 for ticker CSSE.\n", + "2026-01-19 21:58:09,947, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CSSE\\CSSE_2020\n", + "2026-01-19 21:58:09,990, 2113979629.py, 4, INFO, Processing ticker: WORK\n", + "2026-01-19 21:58:10,006, 2113979629.py, 8, INFO, Processing year 2019 for ticker WORK.\n", + "2026-01-19 21:58:10,006, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WORK\\WORK_2019\n", + "2026-01-19 21:58:10,063, 2113979629.py, 8, INFO, Processing year 2020 for ticker WORK.\n", + "2026-01-19 21:58:10,081, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/WORK\\WORK_2020\n", + "2026-01-19 21:58:10,140, 2113979629.py, 4, INFO, Processing ticker: MOS\n", + "2026-01-19 21:58:10,161, 2113979629.py, 8, INFO, Processing year 1988 for ticker MOS.\n", + "2026-01-19 21:58:10,175, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1988\n", + "2026-01-19 21:58:10,225, 2113979629.py, 8, INFO, Processing year 1989 for ticker MOS.\n", + "2026-01-19 21:58:10,239, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1989\n", + "2026-01-19 21:58:10,285, 2113979629.py, 8, INFO, Processing year 1990 for ticker MOS.\n", + "2026-01-19 21:58:10,299, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1990\n", + "2026-01-19 21:58:10,342, 2113979629.py, 8, INFO, Processing year 1991 for ticker MOS.\n", + "2026-01-19 21:58:10,359, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1991\n", + "2026-01-19 21:58:10,413, 2113979629.py, 8, INFO, Processing year 1992 for ticker MOS.\n", + "2026-01-19 21:58:10,425, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1992\n", + "2026-01-19 21:58:10,468, 2113979629.py, 8, INFO, Processing year 1993 for ticker MOS.\n", + "2026-01-19 21:58:10,483, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1993\n", + "2026-01-19 21:58:10,523, 2113979629.py, 8, INFO, Processing year 1994 for ticker MOS.\n", + "2026-01-19 21:58:10,545, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1994\n", + "2026-01-19 21:58:10,592, 2113979629.py, 8, INFO, Processing year 1995 for ticker MOS.\n", + "2026-01-19 21:58:10,604, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1995\n", + "2026-01-19 21:58:10,640, 2113979629.py, 8, INFO, Processing year 1996 for ticker MOS.\n", + "2026-01-19 21:58:10,656, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1996\n", + "2026-01-19 21:58:10,702, 2113979629.py, 8, INFO, Processing year 1997 for ticker MOS.\n", + "2026-01-19 21:58:10,706, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1997\n", + "2026-01-19 21:58:10,873, 2113979629.py, 8, INFO, Processing year 1998 for ticker MOS.\n", + "2026-01-19 21:58:10,898, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1998\n", + "2026-01-19 21:58:10,970, 2113979629.py, 8, INFO, Processing year 1999 for ticker MOS.\n", + "2026-01-19 21:58:10,975, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_1999\n", + "2026-01-19 21:58:11,027, 2113979629.py, 8, INFO, Processing year 2000 for ticker MOS.\n", + "2026-01-19 21:58:11,040, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2000\n", + "2026-01-19 21:58:11,094, 2113979629.py, 8, INFO, Processing year 2001 for ticker MOS.\n", + "2026-01-19 21:58:11,109, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2001\n", + "2026-01-19 21:58:11,162, 2113979629.py, 8, INFO, Processing year 2002 for ticker MOS.\n", + "2026-01-19 21:58:11,175, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2002\n", + "2026-01-19 21:58:11,234, 2113979629.py, 8, INFO, Processing year 2003 for ticker MOS.\n", + "2026-01-19 21:58:11,246, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2003\n", + "2026-01-19 21:58:11,299, 2113979629.py, 8, INFO, Processing year 2004 for ticker MOS.\n", + "2026-01-19 21:58:11,312, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2004\n", + "2026-01-19 21:58:11,365, 2113979629.py, 8, INFO, Processing year 2005 for ticker MOS.\n", + "2026-01-19 21:58:11,377, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2005\n", + "2026-01-19 21:58:11,424, 2113979629.py, 8, INFO, Processing year 2006 for ticker MOS.\n", + "2026-01-19 21:58:11,435, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2006\n", + "2026-01-19 21:58:11,510, 2113979629.py, 8, INFO, Processing year 2007 for ticker MOS.\n", + "2026-01-19 21:58:11,510, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2007\n", + "2026-01-19 21:58:11,562, 2113979629.py, 8, INFO, Processing year 2008 for ticker MOS.\n", + "2026-01-19 21:58:11,582, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2008\n", + "2026-01-19 21:58:11,621, 2113979629.py, 8, INFO, Processing year 2009 for ticker MOS.\n", + "2026-01-19 21:58:11,623, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2009\n", + "2026-01-19 21:58:11,680, 2113979629.py, 8, INFO, Processing year 2010 for ticker MOS.\n", + "2026-01-19 21:58:11,693, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2010\n", + "2026-01-19 21:58:11,742, 2113979629.py, 8, INFO, Processing year 2011 for ticker MOS.\n", + "2026-01-19 21:58:11,753, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2011\n", + "2026-01-19 21:58:11,790, 2113979629.py, 8, INFO, Processing year 2012 for ticker MOS.\n", + "2026-01-19 21:58:11,810, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2012\n", + "2026-01-19 21:58:11,859, 2113979629.py, 8, INFO, Processing year 2013 for ticker MOS.\n", + "2026-01-19 21:58:11,872, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2013\n", + "2026-01-19 21:58:11,913, 2113979629.py, 8, INFO, Processing year 2014 for ticker MOS.\n", + "2026-01-19 21:58:11,933, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2014\n", + "2026-01-19 21:58:11,976, 2113979629.py, 8, INFO, Processing year 2015 for ticker MOS.\n", + "2026-01-19 21:58:11,978, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2015\n", + "2026-01-19 21:58:12,023, 2113979629.py, 8, INFO, Processing year 2016 for ticker MOS.\n", + "2026-01-19 21:58:12,045, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2016\n", + "2026-01-19 21:58:12,109, 2113979629.py, 8, INFO, Processing year 2017 for ticker MOS.\n", + "2026-01-19 21:58:12,120, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2017\n", + "2026-01-19 21:58:12,167, 2113979629.py, 8, INFO, Processing year 2018 for ticker MOS.\n", + "2026-01-19 21:58:12,173, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2018\n", + "2026-01-19 21:58:12,225, 2113979629.py, 8, INFO, Processing year 2019 for ticker MOS.\n", + "2026-01-19 21:58:12,243, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2019\n", + "2026-01-19 21:58:12,288, 2113979629.py, 8, INFO, Processing year 2020 for ticker MOS.\n", + "2026-01-19 21:58:12,296, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/MOS\\MOS_2020\n", + "2026-01-19 21:58:12,343, 2113979629.py, 4, INFO, Processing ticker: IPWR\n", + "2026-01-19 21:58:12,363, 2113979629.py, 8, INFO, Processing year 2013 for ticker IPWR.\n", + "2026-01-19 21:58:12,378, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2013\n", + "2026-01-19 21:58:12,423, 2113979629.py, 8, INFO, Processing year 2014 for ticker IPWR.\n", + "2026-01-19 21:58:12,436, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2014\n", + "2026-01-19 21:58:12,481, 2113979629.py, 8, INFO, Processing year 2015 for ticker IPWR.\n", + "2026-01-19 21:58:12,494, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2015\n", + "2026-01-19 21:58:12,536, 2113979629.py, 8, INFO, Processing year 2016 for ticker IPWR.\n", + "2026-01-19 21:58:12,547, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2016\n", + "2026-01-19 21:58:12,613, 2113979629.py, 8, INFO, Processing year 2017 for ticker IPWR.\n", + "2026-01-19 21:58:12,623, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2017\n", + "2026-01-19 21:58:12,668, 2113979629.py, 8, INFO, Processing year 2018 for ticker IPWR.\n", + "2026-01-19 21:58:12,679, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2018\n", + "2026-01-19 21:58:12,725, 2113979629.py, 8, INFO, Processing year 2019 for ticker IPWR.\n", + "2026-01-19 21:58:12,737, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2019\n", + "2026-01-19 21:58:12,799, 2113979629.py, 8, INFO, Processing year 2020 for ticker IPWR.\n", + "2026-01-19 21:58:12,811, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/IPWR\\IPWR_2020\n", + "2026-01-19 21:58:12,855, 2113979629.py, 4, INFO, Processing ticker: GLUU\n", + "2026-01-19 21:58:12,871, 2113979629.py, 8, INFO, Processing year 2007 for ticker GLUU.\n", + "2026-01-19 21:58:12,882, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2007\n", + "2026-01-19 21:58:12,929, 2113979629.py, 8, INFO, Processing year 2008 for ticker GLUU.\n", + "2026-01-19 21:58:12,941, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2008\n", + "2026-01-19 21:58:12,988, 2113979629.py, 8, INFO, Processing year 2009 for ticker GLUU.\n", + "2026-01-19 21:58:13,003, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2009\n", + "2026-01-19 21:58:13,054, 2113979629.py, 8, INFO, Processing year 2010 for ticker GLUU.\n", + "2026-01-19 21:58:13,062, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2010\n", + "2026-01-19 21:58:13,110, 2113979629.py, 8, INFO, Processing year 2011 for ticker GLUU.\n", + "2026-01-19 21:58:13,122, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2011\n", + "2026-01-19 21:58:13,182, 2113979629.py, 8, INFO, Processing year 2012 for ticker GLUU.\n", + "2026-01-19 21:58:13,199, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2012\n", + "2026-01-19 21:58:13,250, 2113979629.py, 8, INFO, Processing year 2013 for ticker GLUU.\n", + "2026-01-19 21:58:13,263, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2013\n", + "2026-01-19 21:58:13,309, 2113979629.py, 8, INFO, Processing year 2014 for ticker GLUU.\n", + "2026-01-19 21:58:13,321, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2014\n", + "2026-01-19 21:58:13,374, 2113979629.py, 8, INFO, Processing year 2015 for ticker GLUU.\n", + "2026-01-19 21:58:13,385, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2015\n", + "2026-01-19 21:58:13,427, 2113979629.py, 8, INFO, Processing year 2016 for ticker GLUU.\n", + "2026-01-19 21:58:13,443, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2016\n", + "2026-01-19 21:58:13,481, 2113979629.py, 8, INFO, Processing year 2017 for ticker GLUU.\n", + "2026-01-19 21:58:13,500, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2017\n", + "2026-01-19 21:58:13,595, 2113979629.py, 8, INFO, Processing year 2018 for ticker GLUU.\n", + "2026-01-19 21:58:13,615, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2018\n", + "2026-01-19 21:58:13,690, 2113979629.py, 8, INFO, Processing year 2019 for ticker GLUU.\n", + "2026-01-19 21:58:13,703, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2019\n", + "2026-01-19 21:58:13,759, 2113979629.py, 8, INFO, Processing year 2020 for ticker GLUU.\n", + "2026-01-19 21:58:13,772, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GLUU\\GLUU_2020\n", + "2026-01-19 21:58:13,839, 2113979629.py, 4, INFO, Processing ticker: CRMT\n", + "2026-01-19 21:58:13,862, 2113979629.py, 8, INFO, Processing year 1987 for ticker CRMT.\n", + "2026-01-19 21:58:13,872, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1987\n", + "2026-01-19 21:58:13,921, 2113979629.py, 8, INFO, Processing year 1988 for ticker CRMT.\n", + "2026-01-19 21:58:13,923, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1988\n", + "2026-01-19 21:58:13,988, 2113979629.py, 8, INFO, Processing year 1989 for ticker CRMT.\n", + "2026-01-19 21:58:13,990, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1989\n", + "2026-01-19 21:58:14,053, 2113979629.py, 8, INFO, Processing year 1990 for ticker CRMT.\n", + "2026-01-19 21:58:14,067, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1990\n", + "2026-01-19 21:58:14,113, 2113979629.py, 8, INFO, Processing year 1991 for ticker CRMT.\n", + "2026-01-19 21:58:14,128, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1991\n", + "2026-01-19 21:58:14,162, 2113979629.py, 8, INFO, Processing year 1992 for ticker CRMT.\n", + "2026-01-19 21:58:14,182, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1992\n", + "2026-01-19 21:58:14,226, 2113979629.py, 8, INFO, Processing year 1993 for ticker CRMT.\n", + "2026-01-19 21:58:14,236, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1993\n", + "2026-01-19 21:58:14,292, 2113979629.py, 8, INFO, Processing year 1994 for ticker CRMT.\n", + "2026-01-19 21:58:14,309, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1994\n", + "2026-01-19 21:58:14,357, 2113979629.py, 8, INFO, Processing year 1995 for ticker CRMT.\n", + "2026-01-19 21:58:14,369, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1995\n", + "2026-01-19 21:58:14,406, 2113979629.py, 8, INFO, Processing year 1996 for ticker CRMT.\n", + "2026-01-19 21:58:14,422, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1996\n", + "2026-01-19 21:58:14,469, 2113979629.py, 8, INFO, Processing year 1997 for ticker CRMT.\n", + "2026-01-19 21:58:14,473, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1997\n", + "2026-01-19 21:58:14,531, 2113979629.py, 8, INFO, Processing year 1998 for ticker CRMT.\n", + "2026-01-19 21:58:14,543, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1998\n", + "2026-01-19 21:58:14,592, 2113979629.py, 8, INFO, Processing year 1999 for ticker CRMT.\n", + "2026-01-19 21:58:14,609, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_1999\n", + "2026-01-19 21:58:14,652, 2113979629.py, 8, INFO, Processing year 2000 for ticker CRMT.\n", + "2026-01-19 21:58:14,668, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2000\n", + "2026-01-19 21:58:14,716, 2113979629.py, 8, INFO, Processing year 2001 for ticker CRMT.\n", + "2026-01-19 21:58:14,723, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2001\n", + "2026-01-19 21:58:14,768, 2113979629.py, 8, INFO, Processing year 2002 for ticker CRMT.\n", + "2026-01-19 21:58:14,780, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2002\n", + "2026-01-19 21:58:14,823, 2113979629.py, 8, INFO, Processing year 2003 for ticker CRMT.\n", + "2026-01-19 21:58:14,839, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2003\n", + "2026-01-19 21:58:14,883, 2113979629.py, 8, INFO, Processing year 2004 for ticker CRMT.\n", + "2026-01-19 21:58:14,896, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2004\n", + "2026-01-19 21:58:14,944, 2113979629.py, 8, INFO, Processing year 2005 for ticker CRMT.\n", + "2026-01-19 21:58:14,954, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2005\n", + "2026-01-19 21:58:15,001, 2113979629.py, 8, INFO, Processing year 2006 for ticker CRMT.\n", + "2026-01-19 21:58:15,012, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2006\n", + "2026-01-19 21:58:15,061, 2113979629.py, 8, INFO, Processing year 2007 for ticker CRMT.\n", + "2026-01-19 21:58:15,070, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2007\n", + "2026-01-19 21:58:15,113, 2113979629.py, 8, INFO, Processing year 2008 for ticker CRMT.\n", + "2026-01-19 21:58:15,126, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2008\n", + "2026-01-19 21:58:15,172, 2113979629.py, 8, INFO, Processing year 2009 for ticker CRMT.\n", + "2026-01-19 21:58:15,184, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2009\n", + "2026-01-19 21:58:15,239, 2113979629.py, 8, INFO, Processing year 2010 for ticker CRMT.\n", + "2026-01-19 21:58:15,239, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2010\n", + "2026-01-19 21:58:15,295, 2113979629.py, 8, INFO, Processing year 2011 for ticker CRMT.\n", + "2026-01-19 21:58:15,306, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2011\n", + "2026-01-19 21:58:15,361, 2113979629.py, 8, INFO, Processing year 2012 for ticker CRMT.\n", + "2026-01-19 21:58:15,371, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2012\n", + "2026-01-19 21:58:15,416, 2113979629.py, 8, INFO, Processing year 2013 for ticker CRMT.\n", + "2026-01-19 21:58:15,426, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2013\n", + "2026-01-19 21:58:15,477, 2113979629.py, 8, INFO, Processing year 2014 for ticker CRMT.\n", + "2026-01-19 21:58:15,486, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2014\n", + "2026-01-19 21:58:15,530, 2113979629.py, 8, INFO, Processing year 2015 for ticker CRMT.\n", + "2026-01-19 21:58:15,539, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2015\n", + "2026-01-19 21:58:15,588, 2113979629.py, 8, INFO, Processing year 2016 for ticker CRMT.\n", + "2026-01-19 21:58:15,593, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2016\n", + "2026-01-19 21:58:15,639, 2113979629.py, 8, INFO, Processing year 2017 for ticker CRMT.\n", + "2026-01-19 21:58:15,639, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2017\n", + "2026-01-19 21:58:15,695, 2113979629.py, 8, INFO, Processing year 2018 for ticker CRMT.\n", + "2026-01-19 21:58:15,704, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2018\n", + "2026-01-19 21:58:15,748, 2113979629.py, 8, INFO, Processing year 2019 for ticker CRMT.\n", + "2026-01-19 21:58:15,761, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2019\n", + "2026-01-19 21:58:15,802, 2113979629.py, 8, INFO, Processing year 2020 for ticker CRMT.\n", + "2026-01-19 21:58:15,813, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CRMT\\CRMT_2020\n", + "2026-01-19 21:58:15,862, 2113979629.py, 4, INFO, Processing ticker: EOLS\n", + "2026-01-19 21:58:15,880, 2113979629.py, 8, INFO, Processing year 2018 for ticker EOLS.\n", + "2026-01-19 21:58:15,905, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EOLS\\EOLS_2018\n", + "2026-01-19 21:58:15,981, 2113979629.py, 8, INFO, Processing year 2019 for ticker EOLS.\n", + "2026-01-19 21:58:15,993, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EOLS\\EOLS_2019\n", + "2026-01-19 21:58:16,041, 2113979629.py, 8, INFO, Processing year 2020 for ticker EOLS.\n", + "2026-01-19 21:58:16,054, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/EOLS\\EOLS_2020\n", + "2026-01-19 21:58:16,110, 2113979629.py, 4, INFO, Processing ticker: INSU\n", + "2026-01-19 21:58:16,126, 2113979629.py, 8, INFO, Processing year 2019 for ticker INSU.\n", + "2026-01-19 21:58:16,138, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/INSU\\INSU_2019\n", + "2026-01-19 21:58:16,195, 2113979629.py, 8, INFO, Processing year 2020 for ticker INSU.\n", + "2026-01-19 21:58:16,212, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/INSU\\INSU_2020\n", + "2026-01-19 21:58:16,265, 2113979629.py, 4, INFO, Processing ticker: BWEN\n", + "2026-01-19 21:58:16,278, 2113979629.py, 8, INFO, Processing year 2005 for ticker BWEN.\n", + "2026-01-19 21:58:16,299, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2005\n", + "2026-01-19 21:58:16,411, 2113979629.py, 8, INFO, Processing year 2006 for ticker BWEN.\n", + "2026-01-19 21:58:16,428, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2006\n", + "2026-01-19 21:58:16,489, 2113979629.py, 8, INFO, Processing year 2007 for ticker BWEN.\n", + "2026-01-19 21:58:16,504, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2007\n", + "2026-01-19 21:58:16,585, 2113979629.py, 8, INFO, Processing year 2008 for ticker BWEN.\n", + "2026-01-19 21:58:16,596, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2008\n", + "2026-01-19 21:58:16,639, 2113979629.py, 8, INFO, Processing year 2009 for ticker BWEN.\n", + "2026-01-19 21:58:16,658, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2009\n", + "2026-01-19 21:58:16,704, 2113979629.py, 8, INFO, Processing year 2010 for ticker BWEN.\n", + "2026-01-19 21:58:16,706, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2010\n", + "2026-01-19 21:58:16,762, 2113979629.py, 8, INFO, Processing year 2011 for ticker BWEN.\n", + "2026-01-19 21:58:16,775, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2011\n", + "2026-01-19 21:58:16,834, 2113979629.py, 8, INFO, Processing year 2012 for ticker BWEN.\n", + "2026-01-19 21:58:16,847, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2012\n", + "2026-01-19 21:58:16,910, 2113979629.py, 8, INFO, Processing year 2013 for ticker BWEN.\n", + "2026-01-19 21:58:16,922, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2013\n", + "2026-01-19 21:58:16,968, 2113979629.py, 8, INFO, Processing year 2014 for ticker BWEN.\n", + "2026-01-19 21:58:16,978, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2014\n", + "2026-01-19 21:58:17,025, 2113979629.py, 8, INFO, Processing year 2015 for ticker BWEN.\n", + "2026-01-19 21:58:17,028, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2015\n", + "2026-01-19 21:58:17,097, 2113979629.py, 8, INFO, Processing year 2016 for ticker BWEN.\n", + "2026-01-19 21:58:17,116, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2016\n", + "2026-01-19 21:58:17,162, 2113979629.py, 8, INFO, Processing year 2017 for ticker BWEN.\n", + "2026-01-19 21:58:17,175, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2017\n", + "2026-01-19 21:58:17,218, 2113979629.py, 8, INFO, Processing year 2018 for ticker BWEN.\n", + "2026-01-19 21:58:17,225, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2018\n", + "2026-01-19 21:58:17,275, 2113979629.py, 8, INFO, Processing year 2019 for ticker BWEN.\n", + "2026-01-19 21:58:17,286, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2019\n", + "2026-01-19 21:58:17,334, 2113979629.py, 8, INFO, Processing year 2020 for ticker BWEN.\n", + "2026-01-19 21:58:17,346, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BWEN\\BWEN_2020\n", + "2026-01-19 21:58:17,379, 2113979629.py, 4, INFO, Processing ticker: BPMX\n", + "2026-01-19 21:58:17,399, 2113979629.py, 8, INFO, Processing year 2013 for ticker BPMX.\n", + "2026-01-19 21:58:17,413, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2013\n", + "2026-01-19 21:58:17,456, 2113979629.py, 8, INFO, Processing year 2014 for ticker BPMX.\n", + "2026-01-19 21:58:17,456, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2014\n", + "2026-01-19 21:58:17,514, 2113979629.py, 8, INFO, Processing year 2015 for ticker BPMX.\n", + "2026-01-19 21:58:17,523, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2015\n", + "2026-01-19 21:58:17,574, 2113979629.py, 8, INFO, Processing year 2016 for ticker BPMX.\n", + "2026-01-19 21:58:17,584, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2016\n", + "2026-01-19 21:58:17,623, 2113979629.py, 8, INFO, Processing year 2017 for ticker BPMX.\n", + "2026-01-19 21:58:17,641, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2017\n", + "2026-01-19 21:58:17,684, 2113979629.py, 8, INFO, Processing year 2018 for ticker BPMX.\n", + "2026-01-19 21:58:17,694, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2018\n", + "2026-01-19 21:58:17,758, 2113979629.py, 8, INFO, Processing year 2019 for ticker BPMX.\n", + "2026-01-19 21:58:17,769, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2019\n", + "2026-01-19 21:58:17,820, 2113979629.py, 8, INFO, Processing year 2020 for ticker BPMX.\n", + "2026-01-19 21:58:17,831, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BPMX\\BPMX_2020\n", + "2026-01-19 21:58:17,876, 2113979629.py, 4, INFO, Processing ticker: LH\n", + "2026-01-19 21:58:17,894, 2113979629.py, 8, INFO, Processing year 1990 for ticker LH.\n", + "2026-01-19 21:58:17,916, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1990\n", + "2026-01-19 21:58:17,966, 2113979629.py, 8, INFO, Processing year 1991 for ticker LH.\n", + "2026-01-19 21:58:17,978, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1991\n", + "2026-01-19 21:58:18,021, 2113979629.py, 8, INFO, Processing year 1992 for ticker LH.\n", + "2026-01-19 21:58:18,023, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1992\n", + "2026-01-19 21:58:18,078, 2113979629.py, 8, INFO, Processing year 1993 for ticker LH.\n", + "2026-01-19 21:58:18,088, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1993\n", + "2026-01-19 21:58:18,132, 2113979629.py, 8, INFO, Processing year 1994 for ticker LH.\n", + "2026-01-19 21:58:18,144, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1994\n", + "2026-01-19 21:58:18,187, 2113979629.py, 8, INFO, Processing year 1995 for ticker LH.\n", + "2026-01-19 21:58:18,200, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1995\n", + "2026-01-19 21:58:18,260, 2113979629.py, 8, INFO, Processing year 1996 for ticker LH.\n", + "2026-01-19 21:58:18,270, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1996\n", + "2026-01-19 21:58:18,317, 2113979629.py, 8, INFO, Processing year 1997 for ticker LH.\n", + "2026-01-19 21:58:18,328, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1997\n", + "2026-01-19 21:58:18,377, 2113979629.py, 8, INFO, Processing year 1998 for ticker LH.\n", + "2026-01-19 21:58:18,395, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1998\n", + "2026-01-19 21:58:18,454, 2113979629.py, 8, INFO, Processing year 1999 for ticker LH.\n", + "2026-01-19 21:58:18,469, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_1999\n", + "2026-01-19 21:58:18,529, 2113979629.py, 8, INFO, Processing year 2000 for ticker LH.\n", + "2026-01-19 21:58:18,549, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2000\n", + "2026-01-19 21:58:18,607, 2113979629.py, 8, INFO, Processing year 2001 for ticker LH.\n", + "2026-01-19 21:58:18,625, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2001\n", + "2026-01-19 21:58:18,687, 2113979629.py, 8, INFO, Processing year 2002 for ticker LH.\n", + "2026-01-19 21:58:18,699, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2002\n", + "2026-01-19 21:58:18,757, 2113979629.py, 8, INFO, Processing year 2003 for ticker LH.\n", + "2026-01-19 21:58:18,772, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2003\n", + "2026-01-19 21:58:18,825, 2113979629.py, 8, INFO, Processing year 2004 for ticker LH.\n", + "2026-01-19 21:58:18,838, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2004\n", + "2026-01-19 21:58:18,925, 2113979629.py, 8, INFO, Processing year 2005 for ticker LH.\n", + "2026-01-19 21:58:18,936, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2005\n", + "2026-01-19 21:58:18,982, 2113979629.py, 8, INFO, Processing year 2006 for ticker LH.\n", + "2026-01-19 21:58:18,997, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2006\n", + "2026-01-19 21:58:19,099, 2113979629.py, 8, INFO, Processing year 2007 for ticker LH.\n", + "2026-01-19 21:58:19,149, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2007\n", + "2026-01-19 21:58:19,227, 2113979629.py, 8, INFO, Processing year 2008 for ticker LH.\n", + "2026-01-19 21:58:19,242, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2008\n", + "2026-01-19 21:58:19,305, 2113979629.py, 8, INFO, Processing year 2009 for ticker LH.\n", + "2026-01-19 21:58:19,327, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2009\n", + "2026-01-19 21:58:19,386, 2113979629.py, 8, INFO, Processing year 2010 for ticker LH.\n", + "2026-01-19 21:58:19,401, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2010\n", + "2026-01-19 21:58:19,457, 2113979629.py, 8, INFO, Processing year 2011 for ticker LH.\n", + "2026-01-19 21:58:19,473, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2011\n", + "2026-01-19 21:58:19,551, 2113979629.py, 8, INFO, Processing year 2012 for ticker LH.\n", + "2026-01-19 21:58:19,565, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2012\n", + "2026-01-19 21:58:19,624, 2113979629.py, 8, INFO, Processing year 2013 for ticker LH.\n", + "2026-01-19 21:58:19,641, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2013\n", + "2026-01-19 21:58:19,695, 2113979629.py, 8, INFO, Processing year 2014 for ticker LH.\n", + "2026-01-19 21:58:19,710, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2014\n", + "2026-01-19 21:58:19,756, 2113979629.py, 8, INFO, Processing year 2015 for ticker LH.\n", + "2026-01-19 21:58:19,768, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2015\n", + "2026-01-19 21:58:19,817, 2113979629.py, 8, INFO, Processing year 2016 for ticker LH.\n", + "2026-01-19 21:58:19,829, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2016\n", + "2026-01-19 21:58:19,873, 2113979629.py, 8, INFO, Processing year 2017 for ticker LH.\n", + "2026-01-19 21:58:19,884, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2017\n", + "2026-01-19 21:58:19,924, 2113979629.py, 8, INFO, Processing year 2018 for ticker LH.\n", + "2026-01-19 21:58:19,943, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2018\n", + "2026-01-19 21:58:19,998, 2113979629.py, 8, INFO, Processing year 2019 for ticker LH.\n", + "2026-01-19 21:58:20,010, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2019\n", + "2026-01-19 21:58:20,055, 2113979629.py, 8, INFO, Processing year 2020 for ticker LH.\n", + "2026-01-19 21:58:20,056, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LH\\LH_2020\n", + "2026-01-19 21:58:20,128, 2113979629.py, 4, INFO, Processing ticker: BRQS\n", + "2026-01-19 21:58:20,144, 2113979629.py, 8, INFO, Processing year 2015 for ticker BRQS.\n", + "2026-01-19 21:58:20,153, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BRQS\\BRQS_2015\n", + "2026-01-19 21:58:20,196, 2113979629.py, 8, INFO, Processing year 2016 for ticker BRQS.\n", + "2026-01-19 21:58:20,210, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BRQS\\BRQS_2016\n", + "2026-01-19 21:58:20,260, 2113979629.py, 8, INFO, Processing year 2017 for ticker BRQS.\n", + "2026-01-19 21:58:20,272, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BRQS\\BRQS_2017\n", + "2026-01-19 21:58:20,322, 2113979629.py, 8, INFO, Processing year 2018 for ticker BRQS.\n", + "2026-01-19 21:58:20,335, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BRQS\\BRQS_2018\n", + "2026-01-19 21:58:20,383, 2113979629.py, 8, INFO, Processing year 2019 for ticker BRQS.\n", + "2026-01-19 21:58:20,395, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BRQS\\BRQS_2019\n", + "2026-01-19 21:58:20,441, 2113979629.py, 8, INFO, Processing year 2020 for ticker BRQS.\n", + "2026-01-19 21:58:20,454, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BRQS\\BRQS_2020\n", + "2026-01-19 21:58:20,505, 2113979629.py, 4, INFO, Processing ticker: KALU\n", + "2026-01-19 21:58:20,506, 2113979629.py, 8, INFO, Processing year 2006 for ticker KALU.\n", + "2026-01-19 21:58:20,531, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2006\n", + "2026-01-19 21:58:20,613, 2113979629.py, 8, INFO, Processing year 2007 for ticker KALU.\n", + "2026-01-19 21:58:20,627, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2007\n", + "2026-01-19 21:58:20,673, 2113979629.py, 8, INFO, Processing year 2008 for ticker KALU.\n", + "2026-01-19 21:58:20,689, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2008\n", + "2026-01-19 21:58:20,742, 2113979629.py, 8, INFO, Processing year 2009 for ticker KALU.\n", + "2026-01-19 21:58:20,756, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2009\n", + "2026-01-19 21:58:20,809, 2113979629.py, 8, INFO, Processing year 2010 for ticker KALU.\n", + "2026-01-19 21:58:20,820, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2010\n", + "2026-01-19 21:58:20,862, 2113979629.py, 8, INFO, Processing year 2011 for ticker KALU.\n", + "2026-01-19 21:58:20,879, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2011\n", + "2026-01-19 21:58:20,927, 2113979629.py, 8, INFO, Processing year 2012 for ticker KALU.\n", + "2026-01-19 21:58:20,928, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2012\n", + "2026-01-19 21:58:20,996, 2113979629.py, 8, INFO, Processing year 2013 for ticker KALU.\n", + "2026-01-19 21:58:21,006, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2013\n", + "2026-01-19 21:58:21,071, 2113979629.py, 8, INFO, Processing year 2014 for ticker KALU.\n", + "2026-01-19 21:58:21,072, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2014\n", + "2026-01-19 21:58:21,126, 2113979629.py, 8, INFO, Processing year 2015 for ticker KALU.\n", + "2026-01-19 21:58:21,143, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2015\n", + "2026-01-19 21:58:21,183, 2113979629.py, 8, INFO, Processing year 2016 for ticker KALU.\n", + "2026-01-19 21:58:21,195, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2016\n", + "2026-01-19 21:58:21,239, 2113979629.py, 8, INFO, Processing year 2017 for ticker KALU.\n", + "2026-01-19 21:58:21,241, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2017\n", + "2026-01-19 21:58:21,299, 2113979629.py, 8, INFO, Processing year 2018 for ticker KALU.\n", + "2026-01-19 21:58:21,306, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2018\n", + "2026-01-19 21:58:21,348, 2113979629.py, 8, INFO, Processing year 2019 for ticker KALU.\n", + "2026-01-19 21:58:21,363, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2019\n", + "2026-01-19 21:58:21,406, 2113979629.py, 8, INFO, Processing year 2020 for ticker KALU.\n", + "2026-01-19 21:58:21,427, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KALU\\KALU_2020\n", + "2026-01-19 21:58:21,477, 2113979629.py, 4, INFO, Processing ticker: ITCB\n", + "2026-01-19 21:58:21,489, 2113979629.py, 8, INFO, Processing year 2005 for ticker ITCB.\n", + "2026-01-19 21:58:21,489, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2005\n", + "2026-01-19 21:58:21,549, 2113979629.py, 8, INFO, Processing year 2006 for ticker ITCB.\n", + "2026-01-19 21:58:21,561, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2006\n", + "2026-01-19 21:58:21,623, 2113979629.py, 8, INFO, Processing year 2007 for ticker ITCB.\n", + "2026-01-19 21:58:21,635, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2007\n", + "2026-01-19 21:58:21,677, 2113979629.py, 8, INFO, Processing year 2008 for ticker ITCB.\n", + "2026-01-19 21:58:21,687, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2008\n", + "2026-01-19 21:58:21,730, 2113979629.py, 8, INFO, Processing year 2009 for ticker ITCB.\n", + "2026-01-19 21:58:21,744, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2009\n", + "2026-01-19 21:58:21,833, 2113979629.py, 8, INFO, Processing year 2010 for ticker ITCB.\n", + "2026-01-19 21:58:21,854, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2010\n", + "2026-01-19 21:58:21,923, 2113979629.py, 8, INFO, Processing year 2011 for ticker ITCB.\n", + "2026-01-19 21:58:21,935, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2011\n", + "2026-01-19 21:58:21,997, 2113979629.py, 8, INFO, Processing year 2012 for ticker ITCB.\n", + "2026-01-19 21:58:22,011, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2012\n", + "2026-01-19 21:58:22,056, 2113979629.py, 8, INFO, Processing year 2013 for ticker ITCB.\n", + "2026-01-19 21:58:22,068, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2013\n", + "2026-01-19 21:58:22,138, 2113979629.py, 8, INFO, Processing year 2014 for ticker ITCB.\n", + "2026-01-19 21:58:22,149, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2014\n", + "2026-01-19 21:58:22,202, 2113979629.py, 8, INFO, Processing year 2015 for ticker ITCB.\n", + "2026-01-19 21:58:22,206, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2015\n", + "2026-01-19 21:58:22,258, 2113979629.py, 8, INFO, Processing year 2016 for ticker ITCB.\n", + "2026-01-19 21:58:22,276, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2016\n", + "2026-01-19 21:58:22,322, 2113979629.py, 8, INFO, Processing year 2017 for ticker ITCB.\n", + "2026-01-19 21:58:22,338, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2017\n", + "2026-01-19 21:58:22,385, 2113979629.py, 8, INFO, Processing year 2018 for ticker ITCB.\n", + "2026-01-19 21:58:22,394, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2018\n", + "2026-01-19 21:58:22,446, 2113979629.py, 8, INFO, Processing year 2019 for ticker ITCB.\n", + "2026-01-19 21:58:22,459, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2019\n", + "2026-01-19 21:58:22,501, 2113979629.py, 8, INFO, Processing year 2020 for ticker ITCB.\n", + "2026-01-19 21:58:22,513, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/ITCB\\ITCB_2020\n", + "2026-01-19 21:58:22,600, 2113979629.py, 4, INFO, Processing ticker: SRE\n", + "2026-01-19 21:58:22,615, 2113979629.py, 8, INFO, Processing year 1998 for ticker SRE.\n", + "2026-01-19 21:58:22,623, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_1998\n", + "2026-01-19 21:58:22,678, 2113979629.py, 8, INFO, Processing year 1999 for ticker SRE.\n", + "2026-01-19 21:58:22,689, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_1999\n", + "2026-01-19 21:58:22,727, 2113979629.py, 8, INFO, Processing year 2000 for ticker SRE.\n", + "2026-01-19 21:58:22,752, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2000\n", + "2026-01-19 21:58:22,790, 2113979629.py, 8, INFO, Processing year 2001 for ticker SRE.\n", + "2026-01-19 21:58:22,805, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2001\n", + "2026-01-19 21:58:22,850, 2113979629.py, 8, INFO, Processing year 2002 for ticker SRE.\n", + "2026-01-19 21:58:22,861, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2002\n", + "2026-01-19 21:58:22,907, 2113979629.py, 8, INFO, Processing year 2003 for ticker SRE.\n", + "2026-01-19 21:58:22,920, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2003\n", + "2026-01-19 21:58:22,966, 2113979629.py, 8, INFO, Processing year 2004 for ticker SRE.\n", + "2026-01-19 21:58:22,972, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2004\n", + "2026-01-19 21:58:23,028, 2113979629.py, 8, INFO, Processing year 2005 for ticker SRE.\n", + "2026-01-19 21:58:23,044, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2005\n", + "2026-01-19 21:58:23,086, 2113979629.py, 8, INFO, Processing year 2006 for ticker SRE.\n", + "2026-01-19 21:58:23,098, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2006\n", + "2026-01-19 21:58:23,156, 2113979629.py, 8, INFO, Processing year 2007 for ticker SRE.\n", + "2026-01-19 21:58:23,156, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2007\n", + "2026-01-19 21:58:23,216, 2113979629.py, 8, INFO, Processing year 2008 for ticker SRE.\n", + "2026-01-19 21:58:23,228, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2008\n", + "2026-01-19 21:58:23,273, 2113979629.py, 8, INFO, Processing year 2009 for ticker SRE.\n", + "2026-01-19 21:58:23,284, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2009\n", + "2026-01-19 21:58:23,331, 2113979629.py, 8, INFO, Processing year 2010 for ticker SRE.\n", + "2026-01-19 21:58:23,343, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2010\n", + "2026-01-19 21:58:23,385, 2113979629.py, 8, INFO, Processing year 2011 for ticker SRE.\n", + "2026-01-19 21:58:23,389, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2011\n", + "2026-01-19 21:58:23,447, 2113979629.py, 8, INFO, Processing year 2012 for ticker SRE.\n", + "2026-01-19 21:58:23,456, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2012\n", + "2026-01-19 21:58:23,501, 2113979629.py, 8, INFO, Processing year 2013 for ticker SRE.\n", + "2026-01-19 21:58:23,506, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2013\n", + "2026-01-19 21:58:23,561, 2113979629.py, 8, INFO, Processing year 2014 for ticker SRE.\n", + "2026-01-19 21:58:23,571, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2014\n", + "2026-01-19 21:58:23,618, 2113979629.py, 8, INFO, Processing year 2015 for ticker SRE.\n", + "2026-01-19 21:58:23,622, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2015\n", + "2026-01-19 21:58:23,672, 2113979629.py, 8, INFO, Processing year 2016 for ticker SRE.\n", + "2026-01-19 21:58:23,692, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2016\n", + "2026-01-19 21:58:23,769, 2113979629.py, 8, INFO, Processing year 2017 for ticker SRE.\n", + "2026-01-19 21:58:23,773, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2017\n", + "2026-01-19 21:58:23,826, 2113979629.py, 8, INFO, Processing year 2018 for ticker SRE.\n", + "2026-01-19 21:58:23,836, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2018\n", + "2026-01-19 21:58:23,879, 2113979629.py, 8, INFO, Processing year 2019 for ticker SRE.\n", + "2026-01-19 21:58:23,893, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2019\n", + "2026-01-19 21:58:23,941, 2113979629.py, 8, INFO, Processing year 2020 for ticker SRE.\n", + "2026-01-19 21:58:23,944, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SRE\\SRE_2020\n", + "2026-01-19 21:58:23,996, 2113979629.py, 4, INFO, Processing ticker: GAZ\n", + "2026-01-19 21:58:24,016, 2113979629.py, 8, INFO, Processing year 2007 for ticker GAZ.\n", + "2026-01-19 21:58:24,029, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2007\n", + "2026-01-19 21:58:24,075, 2113979629.py, 8, INFO, Processing year 2008 for ticker GAZ.\n", + "2026-01-19 21:58:24,091, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2008\n", + "2026-01-19 21:58:24,123, 2113979629.py, 8, INFO, Processing year 2009 for ticker GAZ.\n", + "2026-01-19 21:58:24,139, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2009\n", + "2026-01-19 21:58:24,189, 2113979629.py, 8, INFO, Processing year 2010 for ticker GAZ.\n", + "2026-01-19 21:58:24,189, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2010\n", + "2026-01-19 21:58:24,265, 2113979629.py, 8, INFO, Processing year 2011 for ticker GAZ.\n", + "2026-01-19 21:58:24,281, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2011\n", + "2026-01-19 21:58:24,328, 2113979629.py, 8, INFO, Processing year 2012 for ticker GAZ.\n", + "2026-01-19 21:58:24,339, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2012\n", + "2026-01-19 21:58:24,415, 2113979629.py, 8, INFO, Processing year 2013 for ticker GAZ.\n", + "2026-01-19 21:58:24,469, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2013\n", + "2026-01-19 21:58:24,533, 2113979629.py, 8, INFO, Processing year 2014 for ticker GAZ.\n", + "2026-01-19 21:58:24,546, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2014\n", + "2026-01-19 21:58:24,596, 2113979629.py, 8, INFO, Processing year 2015 for ticker GAZ.\n", + "2026-01-19 21:58:24,605, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2015\n", + "2026-01-19 21:58:24,656, 2113979629.py, 8, INFO, Processing year 2016 for ticker GAZ.\n", + "2026-01-19 21:58:24,656, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2016\n", + "2026-01-19 21:58:24,717, 2113979629.py, 8, INFO, Processing year 2017 for ticker GAZ.\n", + "2026-01-19 21:58:24,729, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2017\n", + "2026-01-19 21:58:24,775, 2113979629.py, 8, INFO, Processing year 2018 for ticker GAZ.\n", + "2026-01-19 21:58:24,785, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2018\n", + "2026-01-19 21:58:24,822, 2113979629.py, 8, INFO, Processing year 2019 for ticker GAZ.\n", + "2026-01-19 21:58:24,839, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2019\n", + "2026-01-19 21:58:24,920, 2113979629.py, 8, INFO, Processing year 2020 for ticker GAZ.\n", + "2026-01-19 21:58:24,924, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GAZ\\GAZ_2020\n", + "2026-01-19 21:58:24,975, 2113979629.py, 4, INFO, Processing ticker: AQMS\n", + "2026-01-19 21:58:24,993, 2113979629.py, 8, INFO, Processing year 2015 for ticker AQMS.\n", + "2026-01-19 21:58:25,010, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AQMS\\AQMS_2015\n", + "2026-01-19 21:58:25,059, 2113979629.py, 8, INFO, Processing year 2016 for ticker AQMS.\n", + "2026-01-19 21:58:25,071, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AQMS\\AQMS_2016\n", + "2026-01-19 21:58:25,117, 2113979629.py, 8, INFO, Processing year 2017 for ticker AQMS.\n", + "2026-01-19 21:58:25,132, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AQMS\\AQMS_2017\n", + "2026-01-19 21:58:25,175, 2113979629.py, 8, INFO, Processing year 2018 for ticker AQMS.\n", + "2026-01-19 21:58:25,189, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AQMS\\AQMS_2018\n", + "2026-01-19 21:58:25,230, 2113979629.py, 8, INFO, Processing year 2019 for ticker AQMS.\n", + "2026-01-19 21:58:25,247, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AQMS\\AQMS_2019\n", + "2026-01-19 21:58:25,282, 2113979629.py, 8, INFO, Processing year 2020 for ticker AQMS.\n", + "2026-01-19 21:58:25,300, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/AQMS\\AQMS_2020\n", + "2026-01-19 21:58:25,345, 2113979629.py, 4, INFO, Processing ticker: NPK\n", + "2026-01-19 21:58:25,369, 2113979629.py, 8, INFO, Processing year 1980 for ticker NPK.\n", + "2026-01-19 21:58:25,381, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1980\n", + "2026-01-19 21:58:25,447, 2113979629.py, 8, INFO, Processing year 1981 for ticker NPK.\n", + "2026-01-19 21:58:25,461, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1981\n", + "2026-01-19 21:58:25,505, 2113979629.py, 8, INFO, Processing year 1982 for ticker NPK.\n", + "2026-01-19 21:58:25,519, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1982\n", + "2026-01-19 21:58:25,567, 2113979629.py, 8, INFO, Processing year 1983 for ticker NPK.\n", + "2026-01-19 21:58:25,576, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1983\n", + "2026-01-19 21:58:25,625, 2113979629.py, 8, INFO, Processing year 1984 for ticker NPK.\n", + "2026-01-19 21:58:25,628, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1984\n", + "2026-01-19 21:58:25,673, 2113979629.py, 8, INFO, Processing year 1985 for ticker NPK.\n", + "2026-01-19 21:58:25,697, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1985\n", + "2026-01-19 21:58:25,737, 2113979629.py, 8, INFO, Processing year 1986 for ticker NPK.\n", + "2026-01-19 21:58:25,743, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1986\n", + "2026-01-19 21:58:25,820, 2113979629.py, 8, INFO, Processing year 1987 for ticker NPK.\n", + "2026-01-19 21:58:25,822, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1987\n", + "2026-01-19 21:58:25,880, 2113979629.py, 8, INFO, Processing year 1988 for ticker NPK.\n", + "2026-01-19 21:58:25,893, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1988\n", + "2026-01-19 21:58:25,940, 2113979629.py, 8, INFO, Processing year 1989 for ticker NPK.\n", + "2026-01-19 21:58:25,951, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1989\n", + "2026-01-19 21:58:26,000, 2113979629.py, 8, INFO, Processing year 1990 for ticker NPK.\n", + "2026-01-19 21:58:26,012, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1990\n", + "2026-01-19 21:58:26,059, 2113979629.py, 8, INFO, Processing year 1991 for ticker NPK.\n", + "2026-01-19 21:58:26,071, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1991\n", + "2026-01-19 21:58:26,122, 2113979629.py, 8, INFO, Processing year 1992 for ticker NPK.\n", + "2026-01-19 21:58:26,137, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1992\n", + "2026-01-19 21:58:26,206, 2113979629.py, 8, INFO, Processing year 1993 for ticker NPK.\n", + "2026-01-19 21:58:26,216, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1993\n", + "2026-01-19 21:58:26,256, 2113979629.py, 8, INFO, Processing year 1994 for ticker NPK.\n", + "2026-01-19 21:58:26,279, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1994\n", + "2026-01-19 21:58:26,323, 2113979629.py, 8, INFO, Processing year 1995 for ticker NPK.\n", + "2026-01-19 21:58:26,336, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1995\n", + "2026-01-19 21:58:26,385, 2113979629.py, 8, INFO, Processing year 1996 for ticker NPK.\n", + "2026-01-19 21:58:26,400, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1996\n", + "2026-01-19 21:58:26,444, 2113979629.py, 8, INFO, Processing year 1997 for ticker NPK.\n", + "2026-01-19 21:58:26,454, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1997\n", + "2026-01-19 21:58:26,500, 2113979629.py, 8, INFO, Processing year 1998 for ticker NPK.\n", + "2026-01-19 21:58:26,512, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1998\n", + "2026-01-19 21:58:26,555, 2113979629.py, 8, INFO, Processing year 1999 for ticker NPK.\n", + "2026-01-19 21:58:26,556, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_1999\n", + "2026-01-19 21:58:26,632, 2113979629.py, 8, INFO, Processing year 2000 for ticker NPK.\n", + "2026-01-19 21:58:26,647, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2000\n", + "2026-01-19 21:58:26,694, 2113979629.py, 8, INFO, Processing year 2001 for ticker NPK.\n", + "2026-01-19 21:58:26,705, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2001\n", + "2026-01-19 21:58:26,754, 2113979629.py, 8, INFO, Processing year 2002 for ticker NPK.\n", + "2026-01-19 21:58:26,756, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2002\n", + "2026-01-19 21:58:26,815, 2113979629.py, 8, INFO, Processing year 2003 for ticker NPK.\n", + "2026-01-19 21:58:26,827, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2003\n", + "2026-01-19 21:58:26,871, 2113979629.py, 8, INFO, Processing year 2004 for ticker NPK.\n", + "2026-01-19 21:58:26,873, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2004\n", + "2026-01-19 21:58:26,979, 2113979629.py, 8, INFO, Processing year 2005 for ticker NPK.\n", + "2026-01-19 21:58:27,001, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2005\n", + "2026-01-19 21:58:27,056, 2113979629.py, 8, INFO, Processing year 2006 for ticker NPK.\n", + "2026-01-19 21:58:27,072, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2006\n", + "2026-01-19 21:58:27,129, 2113979629.py, 8, INFO, Processing year 2007 for ticker NPK.\n", + "2026-01-19 21:58:27,141, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2007\n", + "2026-01-19 21:58:27,189, 2113979629.py, 8, INFO, Processing year 2008 for ticker NPK.\n", + "2026-01-19 21:58:27,211, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2008\n", + "2026-01-19 21:58:27,256, 2113979629.py, 8, INFO, Processing year 2009 for ticker NPK.\n", + "2026-01-19 21:58:27,267, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2009\n", + "2026-01-19 21:58:27,318, 2113979629.py, 8, INFO, Processing year 2010 for ticker NPK.\n", + "2026-01-19 21:58:27,331, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2010\n", + "2026-01-19 21:58:27,372, 2113979629.py, 8, INFO, Processing year 2011 for ticker NPK.\n", + "2026-01-19 21:58:27,372, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2011\n", + "2026-01-19 21:58:27,427, 2113979629.py, 8, INFO, Processing year 2012 for ticker NPK.\n", + "2026-01-19 21:58:27,439, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2012\n", + "2026-01-19 21:58:27,492, 2113979629.py, 8, INFO, Processing year 2013 for ticker NPK.\n", + "2026-01-19 21:58:27,503, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2013\n", + "2026-01-19 21:58:27,545, 2113979629.py, 8, INFO, Processing year 2014 for ticker NPK.\n", + "2026-01-19 21:58:27,563, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2014\n", + "2026-01-19 21:58:27,612, 2113979629.py, 8, INFO, Processing year 2015 for ticker NPK.\n", + "2026-01-19 21:58:27,621, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2015\n", + "2026-01-19 21:58:27,698, 2113979629.py, 8, INFO, Processing year 2016 for ticker NPK.\n", + "2026-01-19 21:58:27,706, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2016\n", + "2026-01-19 21:58:27,751, 2113979629.py, 8, INFO, Processing year 2017 for ticker NPK.\n", + "2026-01-19 21:58:27,756, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2017\n", + "2026-01-19 21:58:27,809, 2113979629.py, 8, INFO, Processing year 2018 for ticker NPK.\n", + "2026-01-19 21:58:27,820, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2018\n", + "2026-01-19 21:58:27,876, 2113979629.py, 8, INFO, Processing year 2019 for ticker NPK.\n", + "2026-01-19 21:58:27,885, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2019\n", + "2026-01-19 21:58:27,928, 2113979629.py, 8, INFO, Processing year 2020 for ticker NPK.\n", + "2026-01-19 21:58:27,939, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/NPK\\NPK_2020\n", + "2026-01-19 21:58:27,980, 2113979629.py, 4, INFO, Processing ticker: QRHC\n", + "2026-01-19 21:58:27,998, 2113979629.py, 8, INFO, Processing year 2010 for ticker QRHC.\n", + "2026-01-19 21:58:28,009, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2010\n", + "2026-01-19 21:58:28,055, 2113979629.py, 8, INFO, Processing year 2011 for ticker QRHC.\n", + "2026-01-19 21:58:28,067, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2011\n", + "2026-01-19 21:58:28,106, 2113979629.py, 8, INFO, Processing year 2012 for ticker QRHC.\n", + "2026-01-19 21:58:28,124, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2012\n", + "2026-01-19 21:58:28,189, 2113979629.py, 8, INFO, Processing year 2013 for ticker QRHC.\n", + "2026-01-19 21:58:28,190, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2013\n", + "2026-01-19 21:58:28,246, 2113979629.py, 8, INFO, Processing year 2014 for ticker QRHC.\n", + "2026-01-19 21:58:28,260, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2014\n", + "2026-01-19 21:58:28,305, 2113979629.py, 8, INFO, Processing year 2015 for ticker QRHC.\n", + "2026-01-19 21:58:28,313, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2015\n", + "2026-01-19 21:58:28,361, 2113979629.py, 8, INFO, Processing year 2016 for ticker QRHC.\n", + "2026-01-19 21:58:28,372, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2016\n", + "2026-01-19 21:58:28,421, 2113979629.py, 8, INFO, Processing year 2017 for ticker QRHC.\n", + "2026-01-19 21:58:28,422, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2017\n", + "2026-01-19 21:58:28,635, 2113979629.py, 8, INFO, Processing year 2018 for ticker QRHC.\n", + "2026-01-19 21:58:28,645, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2018\n", + "2026-01-19 21:58:28,694, 2113979629.py, 8, INFO, Processing year 2019 for ticker QRHC.\n", + "2026-01-19 21:58:28,708, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2019\n", + "2026-01-19 21:58:28,759, 2113979629.py, 8, INFO, Processing year 2020 for ticker QRHC.\n", + "2026-01-19 21:58:28,760, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/QRHC\\QRHC_2020\n", + "2026-01-19 21:58:28,833, 2113979629.py, 4, INFO, Processing ticker: CGEN\n", + "2026-01-19 21:58:28,845, 2113979629.py, 8, INFO, Processing year 2000 for ticker CGEN.\n", + "2026-01-19 21:58:28,862, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2000\n", + "2026-01-19 21:58:28,911, 2113979629.py, 8, INFO, Processing year 2001 for ticker CGEN.\n", + "2026-01-19 21:58:28,922, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2001\n", + "2026-01-19 21:58:28,968, 2113979629.py, 8, INFO, Processing year 2002 for ticker CGEN.\n", + "2026-01-19 21:58:28,978, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2002\n", + "2026-01-19 21:58:29,027, 2113979629.py, 8, INFO, Processing year 2003 for ticker CGEN.\n", + "2026-01-19 21:58:29,037, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2003\n", + "2026-01-19 21:58:29,082, 2113979629.py, 8, INFO, Processing year 2004 for ticker CGEN.\n", + "2026-01-19 21:58:29,094, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2004\n", + "2026-01-19 21:58:29,134, 2113979629.py, 8, INFO, Processing year 2005 for ticker CGEN.\n", + "2026-01-19 21:58:29,144, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2005\n", + "2026-01-19 21:58:29,205, 2113979629.py, 8, INFO, Processing year 2006 for ticker CGEN.\n", + "2026-01-19 21:58:29,206, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2006\n", + "2026-01-19 21:58:29,275, 2113979629.py, 8, INFO, Processing year 2007 for ticker CGEN.\n", + "2026-01-19 21:58:29,285, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2007\n", + "2026-01-19 21:58:29,329, 2113979629.py, 8, INFO, Processing year 2008 for ticker CGEN.\n", + "2026-01-19 21:58:29,339, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2008\n", + "2026-01-19 21:58:29,392, 2113979629.py, 8, INFO, Processing year 2009 for ticker CGEN.\n", + "2026-01-19 21:58:29,433, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2009\n", + "2026-01-19 21:58:29,511, 2113979629.py, 8, INFO, Processing year 2010 for ticker CGEN.\n", + "2026-01-19 21:58:29,531, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2010\n", + "2026-01-19 21:58:29,587, 2113979629.py, 8, INFO, Processing year 2011 for ticker CGEN.\n", + "2026-01-19 21:58:29,589, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2011\n", + "2026-01-19 21:58:29,666, 2113979629.py, 8, INFO, Processing year 2012 for ticker CGEN.\n", + "2026-01-19 21:58:29,680, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2012\n", + "2026-01-19 21:58:29,737, 2113979629.py, 8, INFO, Processing year 2013 for ticker CGEN.\n", + "2026-01-19 21:58:29,745, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2013\n", + "2026-01-19 21:58:29,796, 2113979629.py, 8, INFO, Processing year 2014 for ticker CGEN.\n", + "2026-01-19 21:58:29,810, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2014\n", + "2026-01-19 21:58:29,856, 2113979629.py, 8, INFO, Processing year 2015 for ticker CGEN.\n", + "2026-01-19 21:58:29,859, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2015\n", + "2026-01-19 21:58:29,912, 2113979629.py, 8, INFO, Processing year 2016 for ticker CGEN.\n", + "2026-01-19 21:58:29,926, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2016\n", + "2026-01-19 21:58:29,966, 2113979629.py, 8, INFO, Processing year 2017 for ticker CGEN.\n", + "2026-01-19 21:58:29,983, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2017\n", + "2026-01-19 21:58:30,028, 2113979629.py, 8, INFO, Processing year 2018 for ticker CGEN.\n", + "2026-01-19 21:58:30,040, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2018\n", + "2026-01-19 21:58:30,087, 2113979629.py, 8, INFO, Processing year 2019 for ticker CGEN.\n", + "2026-01-19 21:58:30,099, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2019\n", + "2026-01-19 21:58:30,168, 2113979629.py, 8, INFO, Processing year 2020 for ticker CGEN.\n", + "2026-01-19 21:58:30,176, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/CGEN\\CGEN_2020\n", + "2026-01-19 21:58:30,226, 2113979629.py, 4, INFO, Processing ticker: LEVL\n", + "2026-01-19 21:58:30,239, 2113979629.py, 8, INFO, Processing year 2018 for ticker LEVL.\n", + "2026-01-19 21:58:30,239, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LEVL\\LEVL_2018\n", + "2026-01-19 21:58:30,296, 2113979629.py, 8, INFO, Processing year 2019 for ticker LEVL.\n", + "2026-01-19 21:58:30,317, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LEVL\\LEVL_2019\n", + "2026-01-19 21:58:30,365, 2113979629.py, 8, INFO, Processing year 2020 for ticker LEVL.\n", + "2026-01-19 21:58:30,372, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/LEVL\\LEVL_2020\n", + "2026-01-19 21:58:30,422, 2113979629.py, 4, INFO, Processing ticker: BGS\n", + "2026-01-19 21:58:30,422, 2113979629.py, 8, INFO, Processing year 2007 for ticker BGS.\n", + "2026-01-19 21:58:30,451, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2007\n", + "2026-01-19 21:58:30,496, 2113979629.py, 8, INFO, Processing year 2008 for ticker BGS.\n", + "2026-01-19 21:58:30,510, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2008\n", + "2026-01-19 21:58:30,571, 2113979629.py, 8, INFO, Processing year 2009 for ticker BGS.\n", + "2026-01-19 21:58:30,572, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2009\n", + "2026-01-19 21:58:30,629, 2113979629.py, 8, INFO, Processing year 2010 for ticker BGS.\n", + "2026-01-19 21:58:30,641, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2010\n", + "2026-01-19 21:58:30,687, 2113979629.py, 8, INFO, Processing year 2011 for ticker BGS.\n", + "2026-01-19 21:58:30,689, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2011\n", + "2026-01-19 21:58:30,748, 2113979629.py, 8, INFO, Processing year 2012 for ticker BGS.\n", + "2026-01-19 21:58:30,761, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2012\n", + "2026-01-19 21:58:30,806, 2113979629.py, 8, INFO, Processing year 2013 for ticker BGS.\n", + "2026-01-19 21:58:30,817, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2013\n", + "2026-01-19 21:58:30,865, 2113979629.py, 8, INFO, Processing year 2014 for ticker BGS.\n", + "2026-01-19 21:58:30,882, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2014\n", + "2026-01-19 21:58:30,931, 2113979629.py, 8, INFO, Processing year 2015 for ticker BGS.\n", + "2026-01-19 21:58:30,942, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2015\n", + "2026-01-19 21:58:31,005, 2113979629.py, 8, INFO, Processing year 2016 for ticker BGS.\n", + "2026-01-19 21:58:31,018, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2016\n", + "2026-01-19 21:58:31,065, 2113979629.py, 8, INFO, Processing year 2017 for ticker BGS.\n", + "2026-01-19 21:58:31,078, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2017\n", + "2026-01-19 21:58:31,131, 2113979629.py, 8, INFO, Processing year 2018 for ticker BGS.\n", + "2026-01-19 21:58:31,142, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2018\n", + "2026-01-19 21:58:31,193, 2113979629.py, 8, INFO, Processing year 2019 for ticker BGS.\n", + "2026-01-19 21:58:31,203, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2019\n", + "2026-01-19 21:58:31,247, 2113979629.py, 8, INFO, Processing year 2020 for ticker BGS.\n", + "2026-01-19 21:58:31,264, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/BGS\\BGS_2020\n", + "2026-01-19 21:58:31,338, 2113979629.py, 4, INFO, Processing ticker: RIV\n", + "2026-01-19 21:58:31,355, 2113979629.py, 8, INFO, Processing year 2016 for ticker RIV.\n", + "2026-01-19 21:58:31,362, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RIV\\RIV_2016\n", + "2026-01-19 21:58:31,420, 2113979629.py, 8, INFO, Processing year 2017 for ticker RIV.\n", + "2026-01-19 21:58:31,431, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RIV\\RIV_2017\n", + "2026-01-19 21:58:31,479, 2113979629.py, 8, INFO, Processing year 2018 for ticker RIV.\n", + "2026-01-19 21:58:31,491, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RIV\\RIV_2018\n", + "2026-01-19 21:58:31,538, 2113979629.py, 8, INFO, Processing year 2019 for ticker RIV.\n", + "2026-01-19 21:58:31,551, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RIV\\RIV_2019\n", + "2026-01-19 21:58:31,598, 2113979629.py, 8, INFO, Processing year 2020 for ticker RIV.\n", + "2026-01-19 21:58:31,606, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/RIV\\RIV_2020\n", + "2026-01-19 21:58:31,709, 2113979629.py, 4, INFO, Processing ticker: GURE\n", + "2026-01-19 21:58:31,742, 2113979629.py, 8, INFO, Processing year 2006 for ticker GURE.\n", + "2026-01-19 21:58:31,762, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2006\n", + "2026-01-19 21:58:31,809, 2113979629.py, 8, INFO, Processing year 2007 for ticker GURE.\n", + "2026-01-19 21:58:31,823, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2007\n", + "2026-01-19 21:58:31,910, 2113979629.py, 8, INFO, Processing year 2008 for ticker GURE.\n", + "2026-01-19 21:58:31,922, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2008\n", + "2026-01-19 21:58:31,972, 2113979629.py, 8, INFO, Processing year 2009 for ticker GURE.\n", + "2026-01-19 21:58:31,975, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2009\n", + "2026-01-19 21:58:32,027, 2113979629.py, 8, INFO, Processing year 2010 for ticker GURE.\n", + "2026-01-19 21:58:32,040, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2010\n", + "2026-01-19 21:58:32,088, 2113979629.py, 8, INFO, Processing year 2011 for ticker GURE.\n", + "2026-01-19 21:58:32,100, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2011\n", + "2026-01-19 21:58:32,147, 2113979629.py, 8, INFO, Processing year 2012 for ticker GURE.\n", + "2026-01-19 21:58:32,158, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2012\n", + "2026-01-19 21:58:32,208, 2113979629.py, 8, INFO, Processing year 2013 for ticker GURE.\n", + "2026-01-19 21:58:32,220, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2013\n", + "2026-01-19 21:58:32,267, 2113979629.py, 8, INFO, Processing year 2014 for ticker GURE.\n", + "2026-01-19 21:58:32,275, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2014\n", + "2026-01-19 21:58:32,322, 2113979629.py, 8, INFO, Processing year 2015 for ticker GURE.\n", + "2026-01-19 21:58:32,322, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2015\n", + "2026-01-19 21:58:32,400, 2113979629.py, 8, INFO, Processing year 2016 for ticker GURE.\n", + "2026-01-19 21:58:32,410, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2016\n", + "2026-01-19 21:58:32,459, 2113979629.py, 8, INFO, Processing year 2017 for ticker GURE.\n", + "2026-01-19 21:58:32,470, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2017\n", + "2026-01-19 21:58:32,520, 2113979629.py, 8, INFO, Processing year 2018 for ticker GURE.\n", + "2026-01-19 21:58:32,527, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2018\n", + "2026-01-19 21:58:32,578, 2113979629.py, 8, INFO, Processing year 2019 for ticker GURE.\n", + "2026-01-19 21:58:32,589, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2019\n", + "2026-01-19 21:58:32,631, 2113979629.py, 8, INFO, Processing year 2020 for ticker GURE.\n", + "2026-01-19 21:58:32,644, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/GURE\\GURE_2020\n", + "2026-01-19 21:58:32,682, 2113979629.py, 4, INFO, Processing ticker: TEF\n", + "2026-01-19 21:58:32,695, 2113979629.py, 8, INFO, Processing year 1987 for ticker TEF.\n", + "2026-01-19 21:58:32,714, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1987\n", + "2026-01-19 21:58:32,775, 2113979629.py, 8, INFO, Processing year 1988 for ticker TEF.\n", + "2026-01-19 21:58:32,791, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1988\n", + "2026-01-19 21:58:32,833, 2113979629.py, 8, INFO, Processing year 1989 for ticker TEF.\n", + "2026-01-19 21:58:32,844, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1989\n", + "2026-01-19 21:58:32,886, 2113979629.py, 8, INFO, Processing year 1990 for ticker TEF.\n", + "2026-01-19 21:58:32,895, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1990\n", + "2026-01-19 21:58:32,939, 2113979629.py, 8, INFO, Processing year 1991 for ticker TEF.\n", + "2026-01-19 21:58:32,939, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1991\n", + "2026-01-19 21:58:32,994, 2113979629.py, 8, INFO, Processing year 1992 for ticker TEF.\n", + "2026-01-19 21:58:33,005, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1992\n", + "2026-01-19 21:58:33,052, 2113979629.py, 8, INFO, Processing year 1993 for ticker TEF.\n", + "2026-01-19 21:58:33,062, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1993\n", + "2026-01-19 21:58:33,102, 2113979629.py, 8, INFO, Processing year 1994 for ticker TEF.\n", + "2026-01-19 21:58:33,105, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1994\n", + "2026-01-19 21:58:33,161, 2113979629.py, 8, INFO, Processing year 1995 for ticker TEF.\n", + "2026-01-19 21:58:33,168, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1995\n", + "2026-01-19 21:58:33,211, 2113979629.py, 8, INFO, Processing year 1996 for ticker TEF.\n", + "2026-01-19 21:58:33,220, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1996\n", + "2026-01-19 21:58:33,289, 2113979629.py, 8, INFO, Processing year 1997 for ticker TEF.\n", + "2026-01-19 21:58:33,292, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1997\n", + "2026-01-19 21:58:33,343, 2113979629.py, 8, INFO, Processing year 1998 for ticker TEF.\n", + "2026-01-19 21:58:33,354, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1998\n", + "2026-01-19 21:58:33,398, 2113979629.py, 8, INFO, Processing year 1999 for ticker TEF.\n", + "2026-01-19 21:58:33,405, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_1999\n", + "2026-01-19 21:58:33,449, 2113979629.py, 8, INFO, Processing year 2000 for ticker TEF.\n", + "2026-01-19 21:58:33,461, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2000\n", + "2026-01-19 21:58:33,511, 2113979629.py, 8, INFO, Processing year 2001 for ticker TEF.\n", + "2026-01-19 21:58:33,533, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2001\n", + "2026-01-19 21:58:33,583, 2113979629.py, 8, INFO, Processing year 2002 for ticker TEF.\n", + "2026-01-19 21:58:33,589, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2002\n", + "2026-01-19 21:58:33,636, 2113979629.py, 8, INFO, Processing year 2003 for ticker TEF.\n", + "2026-01-19 21:58:33,644, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2003\n", + "2026-01-19 21:58:33,693, 2113979629.py, 8, INFO, Processing year 2004 for ticker TEF.\n", + "2026-01-19 21:58:33,704, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2004\n", + "2026-01-19 21:58:33,746, 2113979629.py, 8, INFO, Processing year 2005 for ticker TEF.\n", + "2026-01-19 21:58:33,755, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2005\n", + "2026-01-19 21:58:33,879, 2113979629.py, 8, INFO, Processing year 2006 for ticker TEF.\n", + "2026-01-19 21:58:33,900, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2006\n", + "2026-01-19 21:58:33,956, 2113979629.py, 8, INFO, Processing year 2007 for ticker TEF.\n", + "2026-01-19 21:58:33,969, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2007\n", + "2026-01-19 21:58:34,015, 2113979629.py, 8, INFO, Processing year 2008 for ticker TEF.\n", + "2026-01-19 21:58:34,029, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2008\n", + "2026-01-19 21:58:34,075, 2113979629.py, 8, INFO, Processing year 2009 for ticker TEF.\n", + "2026-01-19 21:58:34,084, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2009\n", + "2026-01-19 21:58:34,129, 2113979629.py, 8, INFO, Processing year 2010 for ticker TEF.\n", + "2026-01-19 21:58:34,139, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2010\n", + "2026-01-19 21:58:34,182, 2113979629.py, 8, INFO, Processing year 2011 for ticker TEF.\n", + "2026-01-19 21:58:34,192, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2011\n", + "2026-01-19 21:58:34,244, 2113979629.py, 8, INFO, Processing year 2012 for ticker TEF.\n", + "2026-01-19 21:58:34,244, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2012\n", + "2026-01-19 21:58:34,322, 2113979629.py, 8, INFO, Processing year 2013 for ticker TEF.\n", + "2026-01-19 21:58:34,322, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2013\n", + "2026-01-19 21:58:34,379, 2113979629.py, 8, INFO, Processing year 2014 for ticker TEF.\n", + "2026-01-19 21:58:34,390, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2014\n", + "2026-01-19 21:58:34,432, 2113979629.py, 8, INFO, Processing year 2015 for ticker TEF.\n", + "2026-01-19 21:58:34,439, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2015\n", + "2026-01-19 21:58:34,489, 2113979629.py, 8, INFO, Processing year 2016 for ticker TEF.\n", + "2026-01-19 21:58:34,489, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2016\n", + "2026-01-19 21:58:34,543, 2113979629.py, 8, INFO, Processing year 2017 for ticker TEF.\n", + "2026-01-19 21:58:34,555, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2017\n", + "2026-01-19 21:58:34,595, 2113979629.py, 8, INFO, Processing year 2018 for ticker TEF.\n", + "2026-01-19 21:58:34,610, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2018\n", + "2026-01-19 21:58:34,645, 2113979629.py, 8, INFO, Processing year 2019 for ticker TEF.\n", + "2026-01-19 21:58:34,662, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2019\n", + "2026-01-19 21:58:34,727, 2113979629.py, 8, INFO, Processing year 2020 for ticker TEF.\n", + "2026-01-19 21:58:34,738, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/TEF\\TEF_2020\n", + "2026-01-19 21:58:34,772, 2113979629.py, 4, INFO, Processing ticker: SYNH\n", + "2026-01-19 21:58:34,789, 2113979629.py, 8, INFO, Processing year 2014 for ticker SYNH.\n", + "2026-01-19 21:58:34,813, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2014\n", + "2026-01-19 21:58:34,850, 2113979629.py, 8, INFO, Processing year 2015 for ticker SYNH.\n", + "2026-01-19 21:58:34,867, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2015\n", + "2026-01-19 21:58:34,905, 2113979629.py, 8, INFO, Processing year 2016 for ticker SYNH.\n", + "2026-01-19 21:58:34,905, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2016\n", + "2026-01-19 21:58:34,964, 2113979629.py, 8, INFO, Processing year 2017 for ticker SYNH.\n", + "2026-01-19 21:58:34,979, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2017\n", + "2026-01-19 21:58:35,027, 2113979629.py, 8, INFO, Processing year 2018 for ticker SYNH.\n", + "2026-01-19 21:58:35,037, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2018\n", + "2026-01-19 21:58:35,078, 2113979629.py, 8, INFO, Processing year 2019 for ticker SYNH.\n", + "2026-01-19 21:58:35,095, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2019\n", + "2026-01-19 21:58:35,140, 2113979629.py, 8, INFO, Processing year 2020 for ticker SYNH.\n", + "2026-01-19 21:58:35,166, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/SYNH\\SYNH_2020\n", + "2026-01-19 21:58:35,222, 2113979629.py, 4, INFO, Processing ticker: KEY\n", + "2026-01-19 21:58:35,243, 2113979629.py, 8, INFO, Processing year 1987 for ticker KEY.\n", + "2026-01-19 21:58:35,249, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1987\n", + "2026-01-19 21:58:35,289, 2113979629.py, 8, INFO, Processing year 1988 for ticker KEY.\n", + "2026-01-19 21:58:35,313, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1988\n", + "2026-01-19 21:58:35,358, 2113979629.py, 8, INFO, Processing year 1989 for ticker KEY.\n", + "2026-01-19 21:58:35,369, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1989\n", + "2026-01-19 21:58:35,405, 2113979629.py, 8, INFO, Processing year 1990 for ticker KEY.\n", + "2026-01-19 21:58:35,422, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1990\n", + "2026-01-19 21:58:35,472, 2113979629.py, 8, INFO, Processing year 1991 for ticker KEY.\n", + "2026-01-19 21:58:35,472, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1991\n", + "2026-01-19 21:58:35,523, 2113979629.py, 8, INFO, Processing year 1992 for ticker KEY.\n", + "2026-01-19 21:58:35,534, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1992\n", + "2026-01-19 21:58:35,596, 2113979629.py, 8, INFO, Processing year 1993 for ticker KEY.\n", + "2026-01-19 21:58:35,611, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1993\n", + "2026-01-19 21:58:35,655, 2113979629.py, 8, INFO, Processing year 1994 for ticker KEY.\n", + "2026-01-19 21:58:35,662, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1994\n", + "2026-01-19 21:58:35,712, 2113979629.py, 8, INFO, Processing year 1995 for ticker KEY.\n", + "2026-01-19 21:58:35,730, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1995\n", + "2026-01-19 21:58:35,775, 2113979629.py, 8, INFO, Processing year 1996 for ticker KEY.\n", + "2026-01-19 21:58:35,786, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1996\n", + "2026-01-19 21:58:35,833, 2113979629.py, 8, INFO, Processing year 1997 for ticker KEY.\n", + "2026-01-19 21:58:35,845, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1997\n", + "2026-01-19 21:58:35,889, 2113979629.py, 8, INFO, Processing year 1998 for ticker KEY.\n", + "2026-01-19 21:58:35,889, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1998\n", + "2026-01-19 21:58:36,004, 2113979629.py, 8, INFO, Processing year 1999 for ticker KEY.\n", + "2026-01-19 21:58:36,040, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_1999\n", + "2026-01-19 21:58:36,105, 2113979629.py, 8, INFO, Processing year 2000 for ticker KEY.\n", + "2026-01-19 21:58:36,125, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2000\n", + "2026-01-19 21:58:36,178, 2113979629.py, 8, INFO, Processing year 2001 for ticker KEY.\n", + "2026-01-19 21:58:36,189, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2001\n", + "2026-01-19 21:58:36,234, 2113979629.py, 8, INFO, Processing year 2002 for ticker KEY.\n", + "2026-01-19 21:58:36,245, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2002\n", + "2026-01-19 21:58:36,296, 2113979629.py, 8, INFO, Processing year 2003 for ticker KEY.\n", + "2026-01-19 21:58:36,313, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2003\n", + "2026-01-19 21:58:36,357, 2113979629.py, 8, INFO, Processing year 2004 for ticker KEY.\n", + "2026-01-19 21:58:36,369, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2004\n", + "2026-01-19 21:58:36,446, 2113979629.py, 8, INFO, Processing year 2005 for ticker KEY.\n", + "2026-01-19 21:58:36,455, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2005\n", + "2026-01-19 21:58:36,495, 2113979629.py, 8, INFO, Processing year 2006 for ticker KEY.\n", + "2026-01-19 21:58:36,515, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2006\n", + "2026-01-19 21:58:36,562, 2113979629.py, 8, INFO, Processing year 2007 for ticker KEY.\n", + "2026-01-19 21:58:36,573, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2007\n", + "2026-01-19 21:58:36,620, 2113979629.py, 8, INFO, Processing year 2008 for ticker KEY.\n", + "2026-01-19 21:58:36,622, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2008\n", + "2026-01-19 21:58:36,677, 2113979629.py, 8, INFO, Processing year 2009 for ticker KEY.\n", + "2026-01-19 21:58:36,688, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2009\n", + "2026-01-19 21:58:36,735, 2113979629.py, 8, INFO, Processing year 2010 for ticker KEY.\n", + "2026-01-19 21:58:36,738, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2010\n", + "2026-01-19 21:58:36,794, 2113979629.py, 8, INFO, Processing year 2011 for ticker KEY.\n", + "2026-01-19 21:58:36,813, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2011\n", + "2026-01-19 21:58:36,857, 2113979629.py, 8, INFO, Processing year 2012 for ticker KEY.\n", + "2026-01-19 21:58:36,857, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2012\n", + "2026-01-19 21:58:36,908, 2113979629.py, 8, INFO, Processing year 2013 for ticker KEY.\n", + "2026-01-19 21:58:36,922, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2013\n", + "2026-01-19 21:58:36,997, 2113979629.py, 8, INFO, Processing year 2014 for ticker KEY.\n", + "2026-01-19 21:58:37,005, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2014\n", + "2026-01-19 21:58:37,047, 2113979629.py, 8, INFO, Processing year 2015 for ticker KEY.\n", + "2026-01-19 21:58:37,065, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2015\n", + "2026-01-19 21:58:37,112, 2113979629.py, 8, INFO, Processing year 2016 for ticker KEY.\n", + "2026-01-19 21:58:37,127, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2016\n", + "2026-01-19 21:58:37,173, 2113979629.py, 8, INFO, Processing year 2017 for ticker KEY.\n", + "2026-01-19 21:58:37,184, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2017\n", + "2026-01-19 21:58:37,226, 2113979629.py, 8, INFO, Processing year 2018 for ticker KEY.\n", + "2026-01-19 21:58:37,243, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2018\n", + "2026-01-19 21:58:37,278, 2113979629.py, 8, INFO, Processing year 2019 for ticker KEY.\n", + "2026-01-19 21:58:37,301, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2019\n", + "2026-01-19 21:58:37,368, 2113979629.py, 8, INFO, Processing year 2020 for ticker KEY.\n", + "2026-01-19 21:58:37,377, 2113979629.py, 15, INFO, Writing data to path: ../../05_src/data/prices/KEY\\KEY_2020\n" + ] + } + ], + "source": [ + "for ticker in stock_prices['ticker'].unique():\n", + " # Filter data for ticker\n", + " # Notice that these are Pandas dataframes\n", + " _logs.info(f'Processing ticker: {ticker}')\n", + " ticker_dt = stock_prices[stock_prices['ticker'] == ticker]\n", + " ticker_dt = ticker_dt.assign(Year = ticker_dt.Date.dt.year)\n", + " for yr in ticker_dt['Year'].unique():\n", + " _logs.info(f'Processing year {yr} for ticker {ticker}.')\n", + " # Filter data for year and convert to Dask dataframe\n", + " yr_dd = dd.from_pandas(ticker_dt[ticker_dt['Year'] == yr],2)\n", + " \n", + " # Define path and create directories if not exist\n", + " yr_path = os.path.join(PRICE_DATA, ticker, f\"{ticker}_{yr}\")\n", + " os.makedirs(os.path.dirname(yr_path), exist_ok=True)\n", + " _logs.info(f'Writing data to path: {yr_path}')\n", + "\n", + " # Write to Parquet\n", + " yr_dd.to_parquet(yr_path, engine = \"pyarrow\")\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Why would we want to store data this way?\n", + "\n", + "+ Data files are easier to maintain. We do not update old data, only recent data or the most recent \"delta\".\n", + "+ Parquet files, as long as they maintain a consistent schema, can all be read jointly. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Load, Transform, and Save\n", + "\n", + "In this section, we will load the Parquet files we generated, transform the data, and save the resulting dataset." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load\n", + "\n", + "+ Parquet files can be read individually or as a collection.\n", + "+ `dd.read_parquet()` can take a list (collection) of files as input.\n", + "+ Use `glob` to obtain the collection of files." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 21:58:48,105, 174194153.py, 4, INFO, Found 2045 parquet files for reading back into Dask.\n" + ] + } + ], + "source": [ + "from glob import glob\n", + "\n", + "parquet_files = glob(os.path.join(PRICE_DATA, \"**/*.parquet\"), recursive = True)\n", + "_logs.info(f'Found {len(parquet_files)} parquet files for reading back into Dask.')\n", + "\n", + "dd_px = dd.read_parquet(parquet_files).set_index(\"ticker\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transform\n", + "\n", + "+ This transformation step will create a *Features* data set. In our case, features will be stock returns (we obtained prices).\n", + "+ Dask dataframes work similarly to Pandas dataframes: in particular, we can perform groupby and apply operations.\n", + "+ Notice the use of [an anonymous (lambda) function](https://realpython.com/python-lambda/) in the apply statement.\n", + "\n", + "In the code below, the following operation occurs:\n", + "\n", + "+ Start with a Dask dataframe, `dd_px`.\n", + "+ Group the rows of this dataframe by the variable `ticker`, i.e., each group will contain the observations that pertain only to one ticker at a time. The `group_key` parameter controls whether an index entry is added with the value of the grouping variable (`ticker` in this case); if we made `group_keys=True`, we would have a duplicate `ticker` column.\n", + "+ For each group defined by a `ticker`, `apply()` the following calculation:\n", + "\n", + " - Sort the values by `Date` in ascending order.\n", + " - Assign a new variable called `Close_lag_1` by shifting the position of the closing price (`Close`) by one position. \n", + " - Define the schema of the resulting dataframe. If we omit this specification, we would get a warning; however, the simplicity of the calculation ensures that Dask can determine the resulting schema." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22.0.0\n" + ] + } + ], + "source": [ + "import pyarrow\n", + "print(pyarrow.__version__)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [], + "source": [ + "dd_shift = (\n", + " dd_px\n", + " .groupby('ticker', group_keys=False)\n", + " .apply(\n", + " lambda x: x.sort_values('Date', ascending = True)\n", + " .assign(Close_lag_1 = x['Close'].shift(1)), \n", + " meta = pd.DataFrame(data ={'Date': 'datetime64[ns]',\n", + " 'Open': 'f8',\n", + " 'High': 'f8',\n", + " 'Low': 'f8',\n", + " 'Close': 'f8',\n", + " 'Adj Close': 'f8',\n", + " 'Volume': 'i8',\n", + " 'source': 'object',\n", + " 'Year': 'int32',\n", + " 'Close_lag_1': 'f8'},\n", + " index = pd.Index([], dtype=pd.StringDtype(), name='ticker'))\n", + " ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, using the dataframe that we created above, we can now `assign` the `Returns` variable to the entire dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "dd_rets = dd_shift.assign(\n", + " Returns = lambda x: x['Close']/x['Close_lag_1'] - 1\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Question: How do we know that we are not (erroneously) combining the last price of a ticker with the first price of the next ticker?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lazy Exection\n", + "\n", + "What does `dd_rets` contain?" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Dask DataFrame Structure:
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateOpenHighLowCloseAdj CloseVolumesourceYearClose_lag_1Returns
npartitions=60
ACNobjectobjectobjectobjectobjectobjectobjectobjectobjectobjectobject
ALDX.................................
....................................
ZIXI.................................
ZIXI.................................
\n", + "
Dask Name: assign, 9 expressions
" + ], + "text/plain": [ + "Dask DataFrame Structure:\n", + " Date Open High Low Close Adj Close Volume source Year Close_lag_1 Returns\n", + "npartitions=60 \n", + "ACN object object object object object object object object object object object\n", + "ALDX ... ... ... ... ... ... ... ... ... ... ...\n", + "... ... ... ... ... ... ... ... ... ... ... ...\n", + "ZIXI ... ... ... ... ... ... ... ... ... ... ...\n", + "ZIXI ... ... ... ... ... ... ... ... ... ... ...\n", + "Dask Name: assign, 9 expressions\n", + "Expr=Assign(frame=Assign(frame=GroupByApply(frame=SetIndex(frame=ReadParquetFSSpec(70a84bd), _other='ticker', options={}), observed=False, group_keys=False, func= at 0x00000289CBCA44A0>, args=(), kwargs={})))" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd_rets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "+ Dask is a lazy execution framework: commands will not execute until the computation is required. \n", + "+ To trigger an execution in dask use `.compute()` or execute a command that requires the actual values (for example, write to Parquet or SQL)." + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateOpenHighLowCloseAdj CloseVolumesourceYearClose_lag_1Returns
ticker
ACN2001-07-1915.1015.2915.0015.1711.40439434994300.0ACN.csv2001NaNNaN
ACN2001-07-2015.0515.0514.8015.0111.2841089238500.0ACN.csv2001153.839996-0.902431
ACN2001-07-2315.0015.0114.5515.0011.2765877501000.0ACN.csv2001154.550003-0.902944
ACN2001-07-2414.9514.9714.7014.8611.1713413537300.0ACN.csv2001156.380005-0.904975
ACN2001-07-2514.7014.9514.6514.9511.2389994208100.0ACN.csv2001157.669998-0.905182
....................................
ZIXI2020-03-264.064.533.884.514.5100001668500.0ZIXI.csv20204.0400000.116337
ZIXI2020-03-274.494.714.104.604.6000001146800.0ZIXI.csv20204.0000000.150000
ZIXI2020-03-304.834.874.444.644.6400001212000.0ZIXI.csv20203.8500000.205195
ZIXI2020-03-314.604.694.104.314.3100001057200.0ZIXI.csv20203.7700000.143236
ZIXI2020-04-014.114.163.803.823.820000539500.0ZIXI.csv20203.7800000.010582
\n", + "

239659 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " Date Open High Low Close Adj Close Volume \\\n", + "ticker \n", + "ACN 2001-07-19 15.10 15.29 15.00 15.17 11.404394 34994300.0 \n", + "ACN 2001-07-20 15.05 15.05 14.80 15.01 11.284108 9238500.0 \n", + "ACN 2001-07-23 15.00 15.01 14.55 15.00 11.276587 7501000.0 \n", + "ACN 2001-07-24 14.95 14.97 14.70 14.86 11.171341 3537300.0 \n", + "ACN 2001-07-25 14.70 14.95 14.65 14.95 11.238999 4208100.0 \n", + "... ... ... ... ... ... ... ... \n", + "ZIXI 2020-03-26 4.06 4.53 3.88 4.51 4.510000 1668500.0 \n", + "ZIXI 2020-03-27 4.49 4.71 4.10 4.60 4.600000 1146800.0 \n", + "ZIXI 2020-03-30 4.83 4.87 4.44 4.64 4.640000 1212000.0 \n", + "ZIXI 2020-03-31 4.60 4.69 4.10 4.31 4.310000 1057200.0 \n", + "ZIXI 2020-04-01 4.11 4.16 3.80 3.82 3.820000 539500.0 \n", + "\n", + " source Year Close_lag_1 Returns \n", + "ticker \n", + "ACN ACN.csv 2001 NaN NaN \n", + "ACN ACN.csv 2001 153.839996 -0.902431 \n", + "ACN ACN.csv 2001 154.550003 -0.902944 \n", + "ACN ACN.csv 2001 156.380005 -0.904975 \n", + "ACN ACN.csv 2001 157.669998 -0.905182 \n", + "... ... ... ... ... \n", + "ZIXI ZIXI.csv 2020 4.040000 0.116337 \n", + "ZIXI ZIXI.csv 2020 4.000000 0.150000 \n", + "ZIXI ZIXI.csv 2020 3.850000 0.205195 \n", + "ZIXI ZIXI.csv 2020 3.770000 0.143236 \n", + "ZIXI ZIXI.csv 2020 3.780000 0.010582 \n", + "\n", + "[239659 rows x 11 columns]" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd_rets.compute()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save\n", + "\n", + "With our transformed data, we can now save the new feature to a Parquet file. We will need to answer the following questions depending on our context, setup, and available resources:\n", + "\n", + "+ Should we keep the same namespace? \n", + "+ Should we save all columns?" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Dask DataFrame Structure:
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateOpenHighLowCloseAdj CloseVolumesourceYearClose_lag_1Returns
npartitions=60
ACNobjectobjectobjectobjectobjectobjectobjectobjectobjectobjectobject
ALDX.................................
....................................
ZIXI.................................
ZIXI.................................
\n", + "
Dask Name: assign, 9 expressions
" + ], + "text/plain": [ + "Dask DataFrame Structure:\n", + " Date Open High Low Close Adj Close Volume source Year Close_lag_1 Returns\n", + "npartitions=60 \n", + "ACN object object object object object object object object object object object\n", + "ALDX ... ... ... ... ... ... ... ... ... ... ...\n", + "... ... ... ... ... ... ... ... ... ... ... ...\n", + "ZIXI ... ... ... ... ... ... ... ... ... ... ...\n", + "ZIXI ... ... ... ... ... ... ... ... ... ... ...\n", + "Dask Name: assign, 9 expressions\n", + "Expr=Assign(frame=Assign(frame=GroupByApply(frame=SetIndex(frame=ReadParquetFSSpec(70a84bd), _other='ticker', options={}), observed=False, group_keys=False, func= at 0x00000289CBCA44A0>, args=(), kwargs={})))" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd_rets" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [], + "source": [ + "# CLean up before save\n", + "FEATURES_DATA = os.getenv(\"FEATURES_DATA\")\n", + "if os.path.exists(FEATURES_DATA):\n", + " shutil.rmtree(FEATURES_DATA)\n", + "dd_rets.to_parquet(FEATURES_DATA, \n", + " overwrite = True, \n", + " schema={\n", + " 'Date': 'timestamp[ns]',\n", + " 'Open': 'float64',\n", + " 'High': 'float64',\n", + " 'Low': 'float64',\n", + " 'Close': 'float64',\n", + " 'Adj Close': 'float64',\n", + " 'Volume': 'int64',\n", + " 'source': 'string',\n", + " 'Year': 'int32',\n", + " 'Close_lag_1': 'float64',\n", + " 'Returns': 'float64',\n", + " 'ticker': 'large_string'\n", + " })" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Optional: from Jupyter to Command Line\n", + "\n", + "+ We have drafted our code in a Jupyter Notebook. \n", + "+ Finalized code should be written in Python modules.\n", + "\n", + "## Object Oriented vs Functional Programming\n", + "\n", + "+ We can use classes to keep parameters and functions together.\n", + "+ We *could* use Object Oriented Programming, but parallelization of data manipulation and modelling tasks benefit from *Functional Programming*.\n", + "+ An Idea: \n", + "\n", + " - [Data Oriented Programming](https://blog.klipse.tech/dop/2022/06/22/principles-of-dop.html).\n", + " - Use the class to bundle together parameters and functions.\n", + " - Use stateless operations and treat all data objects as immutable (we do not modify them, we overwrite them).\n", + " - Take advantage of [`@staticmethod`](https://realpython.com/instance-class-and-static-methods-demystified/).\n", + "\n", + "The code is in `./05_src/stock_prices/data_manager.py`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our original design was:\n", + "\n", + "![](./images/02_target_pipeline_manager.png)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "from stock_prices.data_manager import DataManager\n", + "dm = DataManager()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Download all prices." + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 22:00:17,465, data_manager.py, 53, INFO, Processing sample of tickers\n", + "2026-01-19 22:00:17,466, data_manager.py, 64, INFO, Getting file list from ../../05_src/data/prices_csv/\n", + "2026-01-19 22:00:17,500, data_manager.py, 66, INFO, Found 5884 files in ../../05_src/data/prices/\n", + "2026-01-19 22:00:17,503, data_manager.py, 74, INFO, Selecting sample of files\n", + "2026-01-19 22:00:17,505, data_manager.py, 80, INFO, Selected 30 files\n", + "2026-01-19 22:00:17,505, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\SOGO.csv\n", + "2026-01-19 22:00:17,507, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\SOGO.csv\n", + "2026-01-19 22:00:17,509, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:17,509, data_manager.py, 103, INFO, Processing ticker: SOGO\n", + "2026-01-19 22:00:17,520, data_manager.py, 107, INFO, Processing year 2017 for ticker SOGO.\n", + "2026-01-19 22:00:17,532, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SOGO\\SOGO_2017\n", + "2026-01-19 22:00:17,571, data_manager.py, 107, INFO, Processing year 2018 for ticker SOGO.\n", + "2026-01-19 22:00:17,599, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SOGO\\SOGO_2018\n", + "2026-01-19 22:00:17,652, data_manager.py, 107, INFO, Processing year 2019 for ticker SOGO.\n", + "2026-01-19 22:00:17,655, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SOGO\\SOGO_2019\n", + "2026-01-19 22:00:17,717, data_manager.py, 107, INFO, Processing year 2020 for ticker SOGO.\n", + "2026-01-19 22:00:17,724, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SOGO\\SOGO_2020\n", + "2026-01-19 22:00:17,773, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\GRBK.csv\n", + "2026-01-19 22:00:17,773, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\GRBK.csv\n", + "2026-01-19 22:00:17,792, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:17,793, data_manager.py, 103, INFO, Processing ticker: GRBK\n", + "2026-01-19 22:00:17,795, data_manager.py, 107, INFO, Processing year 2007 for ticker GRBK.\n", + "2026-01-19 22:00:17,808, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2007\n", + "2026-01-19 22:00:17,858, data_manager.py, 107, INFO, Processing year 2008 for ticker GRBK.\n", + "2026-01-19 22:00:17,871, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2008\n", + "2026-01-19 22:00:17,918, data_manager.py, 107, INFO, Processing year 2009 for ticker GRBK.\n", + "2026-01-19 22:00:17,923, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2009\n", + "2026-01-19 22:00:17,981, data_manager.py, 107, INFO, Processing year 2010 for ticker GRBK.\n", + "2026-01-19 22:00:17,996, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2010\n", + "2026-01-19 22:00:18,050, data_manager.py, 107, INFO, Processing year 2011 for ticker GRBK.\n", + "2026-01-19 22:00:18,065, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2011\n", + "2026-01-19 22:00:18,110, data_manager.py, 107, INFO, Processing year 2012 for ticker GRBK.\n", + "2026-01-19 22:00:18,133, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2012\n", + "2026-01-19 22:00:18,191, data_manager.py, 107, INFO, Processing year 2013 for ticker GRBK.\n", + "2026-01-19 22:00:18,202, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2013\n", + "2026-01-19 22:00:18,250, data_manager.py, 107, INFO, Processing year 2014 for ticker GRBK.\n", + "2026-01-19 22:00:18,257, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2014\n", + "2026-01-19 22:00:18,305, data_manager.py, 107, INFO, Processing year 2015 for ticker GRBK.\n", + "2026-01-19 22:00:18,325, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2015\n", + "2026-01-19 22:00:18,376, data_manager.py, 107, INFO, Processing year 2016 for ticker GRBK.\n", + "2026-01-19 22:00:18,385, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2016\n", + "2026-01-19 22:00:18,433, data_manager.py, 107, INFO, Processing year 2017 for ticker GRBK.\n", + "2026-01-19 22:00:18,445, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2017\n", + "2026-01-19 22:00:18,515, data_manager.py, 107, INFO, Processing year 2018 for ticker GRBK.\n", + "2026-01-19 22:00:18,526, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2018\n", + "2026-01-19 22:00:18,568, data_manager.py, 107, INFO, Processing year 2019 for ticker GRBK.\n", + "2026-01-19 22:00:18,568, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2019\n", + "2026-01-19 22:00:18,625, data_manager.py, 107, INFO, Processing year 2020 for ticker GRBK.\n", + "2026-01-19 22:00:18,642, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRBK\\GRBK_2020\n", + "2026-01-19 22:00:18,690, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\MTP.csv\n", + "2026-01-19 22:00:18,692, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\MTP.csv\n", + "2026-01-19 22:00:18,710, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:18,711, data_manager.py, 103, INFO, Processing ticker: MTP\n", + "2026-01-19 22:00:18,713, data_manager.py, 107, INFO, Processing year 2015 for ticker MTP.\n", + "2026-01-19 22:00:18,725, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MTP\\MTP_2015\n", + "2026-01-19 22:00:18,770, data_manager.py, 107, INFO, Processing year 2016 for ticker MTP.\n", + "2026-01-19 22:00:18,772, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MTP\\MTP_2016\n", + "2026-01-19 22:00:18,826, data_manager.py, 107, INFO, Processing year 2017 for ticker MTP.\n", + "2026-01-19 22:00:18,843, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MTP\\MTP_2017\n", + "2026-01-19 22:00:18,886, data_manager.py, 107, INFO, Processing year 2018 for ticker MTP.\n", + "2026-01-19 22:00:18,896, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MTP\\MTP_2018\n", + "2026-01-19 22:00:18,942, data_manager.py, 107, INFO, Processing year 2019 for ticker MTP.\n", + "2026-01-19 22:00:18,955, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MTP\\MTP_2019\n", + "2026-01-19 22:00:18,998, data_manager.py, 107, INFO, Processing year 2020 for ticker MTP.\n", + "2026-01-19 22:00:19,010, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MTP\\MTP_2020\n", + "2026-01-19 22:00:19,047, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\REPH.csv\n", + "2026-01-19 22:00:19,048, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\REPH.csv\n", + "2026-01-19 22:00:19,073, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:19,074, data_manager.py, 103, INFO, Processing ticker: REPH\n", + "2026-01-19 22:00:19,076, data_manager.py, 107, INFO, Processing year 2014 for ticker REPH.\n", + "2026-01-19 22:00:19,087, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2014\n", + "2026-01-19 22:00:19,118, data_manager.py, 107, INFO, Processing year 2015 for ticker REPH.\n", + "2026-01-19 22:00:19,134, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2015\n", + "2026-01-19 22:00:19,190, data_manager.py, 107, INFO, Processing year 2016 for ticker REPH.\n", + "2026-01-19 22:00:19,199, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2016\n", + "2026-01-19 22:00:19,245, data_manager.py, 107, INFO, Processing year 2017 for ticker REPH.\n", + "2026-01-19 22:00:19,257, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2017\n", + "2026-01-19 22:00:19,300, data_manager.py, 107, INFO, Processing year 2018 for ticker REPH.\n", + "2026-01-19 22:00:19,306, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2018\n", + "2026-01-19 22:00:19,360, data_manager.py, 107, INFO, Processing year 2019 for ticker REPH.\n", + "2026-01-19 22:00:19,372, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2019\n", + "2026-01-19 22:00:19,405, data_manager.py, 107, INFO, Processing year 2020 for ticker REPH.\n", + "2026-01-19 22:00:19,428, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/REPH\\REPH_2020\n", + "2026-01-19 22:00:19,472, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\MPA.csv\n", + "2026-01-19 22:00:19,472, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\MPA.csv\n", + "2026-01-19 22:00:19,497, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:19,498, data_manager.py, 103, INFO, Processing ticker: MPA\n", + "2026-01-19 22:00:19,500, data_manager.py, 107, INFO, Processing year 1992 for ticker MPA.\n", + "2026-01-19 22:00:19,506, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1992\n", + "2026-01-19 22:00:19,555, data_manager.py, 107, INFO, Processing year 1993 for ticker MPA.\n", + "2026-01-19 22:00:19,568, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1993\n", + "2026-01-19 22:00:19,608, data_manager.py, 107, INFO, Processing year 1994 for ticker MPA.\n", + "2026-01-19 22:00:19,617, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1994\n", + "2026-01-19 22:00:19,670, data_manager.py, 107, INFO, Processing year 1995 for ticker MPA.\n", + "2026-01-19 22:00:19,684, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1995\n", + "2026-01-19 22:00:19,717, data_manager.py, 107, INFO, Processing year 1996 for ticker MPA.\n", + "2026-01-19 22:00:19,735, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1996\n", + "2026-01-19 22:00:19,783, data_manager.py, 107, INFO, Processing year 1997 for ticker MPA.\n", + "2026-01-19 22:00:19,790, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1997\n", + "2026-01-19 22:00:19,841, data_manager.py, 107, INFO, Processing year 1998 for ticker MPA.\n", + "2026-01-19 22:00:19,850, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1998\n", + "2026-01-19 22:00:19,903, data_manager.py, 107, INFO, Processing year 1999 for ticker MPA.\n", + "2026-01-19 22:00:19,912, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_1999\n", + "2026-01-19 22:00:19,961, data_manager.py, 107, INFO, Processing year 2000 for ticker MPA.\n", + "2026-01-19 22:00:19,968, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2000\n", + "2026-01-19 22:00:20,006, data_manager.py, 107, INFO, Processing year 2001 for ticker MPA.\n", + "2026-01-19 22:00:20,029, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2001\n", + "2026-01-19 22:00:20,068, data_manager.py, 107, INFO, Processing year 2002 for ticker MPA.\n", + "2026-01-19 22:00:20,088, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2002\n", + "2026-01-19 22:00:20,134, data_manager.py, 107, INFO, Processing year 2003 for ticker MPA.\n", + "2026-01-19 22:00:20,146, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2003\n", + "2026-01-19 22:00:20,192, data_manager.py, 107, INFO, Processing year 2004 for ticker MPA.\n", + "2026-01-19 22:00:20,208, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2004\n", + "2026-01-19 22:00:20,371, data_manager.py, 107, INFO, Processing year 2005 for ticker MPA.\n", + "2026-01-19 22:00:20,403, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2005\n", + "2026-01-19 22:00:20,463, data_manager.py, 107, INFO, Processing year 2006 for ticker MPA.\n", + "2026-01-19 22:00:20,473, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2006\n", + "2026-01-19 22:00:20,522, data_manager.py, 107, INFO, Processing year 2007 for ticker MPA.\n", + "2026-01-19 22:00:20,535, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2007\n", + "2026-01-19 22:00:20,587, data_manager.py, 107, INFO, Processing year 2008 for ticker MPA.\n", + "2026-01-19 22:00:20,589, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2008\n", + "2026-01-19 22:00:20,640, data_manager.py, 107, INFO, Processing year 2009 for ticker MPA.\n", + "2026-01-19 22:00:20,662, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2009\n", + "2026-01-19 22:00:20,706, data_manager.py, 107, INFO, Processing year 2010 for ticker MPA.\n", + "2026-01-19 22:00:20,717, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2010\n", + "2026-01-19 22:00:20,773, data_manager.py, 107, INFO, Processing year 2011 for ticker MPA.\n", + "2026-01-19 22:00:20,786, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2011\n", + "2026-01-19 22:00:20,826, data_manager.py, 107, INFO, Processing year 2012 for ticker MPA.\n", + "2026-01-19 22:00:20,847, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2012\n", + "2026-01-19 22:00:20,892, data_manager.py, 107, INFO, Processing year 2013 for ticker MPA.\n", + "2026-01-19 22:00:20,901, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2013\n", + "2026-01-19 22:00:20,947, data_manager.py, 107, INFO, Processing year 2014 for ticker MPA.\n", + "2026-01-19 22:00:20,953, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2014\n", + "2026-01-19 22:00:21,006, data_manager.py, 107, INFO, Processing year 2015 for ticker MPA.\n", + "2026-01-19 22:00:21,022, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2015\n", + "2026-01-19 22:00:21,081, data_manager.py, 107, INFO, Processing year 2016 for ticker MPA.\n", + "2026-01-19 22:00:21,099, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2016\n", + "2026-01-19 22:00:21,163, data_manager.py, 107, INFO, Processing year 2017 for ticker MPA.\n", + "2026-01-19 22:00:21,177, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2017\n", + "2026-01-19 22:00:21,223, data_manager.py, 107, INFO, Processing year 2018 for ticker MPA.\n", + "2026-01-19 22:00:21,239, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2018\n", + "2026-01-19 22:00:21,308, data_manager.py, 107, INFO, Processing year 2019 for ticker MPA.\n", + "2026-01-19 22:00:21,328, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2019\n", + "2026-01-19 22:00:21,411, data_manager.py, 107, INFO, Processing year 2020 for ticker MPA.\n", + "2026-01-19 22:00:21,438, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MPA\\MPA_2020\n", + "2026-01-19 22:00:21,524, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\PVL.csv\n", + "2026-01-19 22:00:21,526, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\PVL.csv\n", + "2026-01-19 22:00:21,540, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:21,540, data_manager.py, 103, INFO, Processing ticker: PVL\n", + "2026-01-19 22:00:21,540, data_manager.py, 107, INFO, Processing year 2011 for ticker PVL.\n", + "2026-01-19 22:00:21,565, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2011\n", + "2026-01-19 22:00:21,645, data_manager.py, 107, INFO, Processing year 2012 for ticker PVL.\n", + "2026-01-19 22:00:21,663, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2012\n", + "2026-01-19 22:00:21,744, data_manager.py, 107, INFO, Processing year 2013 for ticker PVL.\n", + "2026-01-19 22:00:21,764, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2013\n", + "2026-01-19 22:00:21,895, data_manager.py, 107, INFO, Processing year 2014 for ticker PVL.\n", + "2026-01-19 22:00:21,922, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2014\n", + "2026-01-19 22:00:22,004, data_manager.py, 107, INFO, Processing year 2015 for ticker PVL.\n", + "2026-01-19 22:00:22,020, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2015\n", + "2026-01-19 22:00:22,087, data_manager.py, 107, INFO, Processing year 2016 for ticker PVL.\n", + "2026-01-19 22:00:22,108, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2016\n", + "2026-01-19 22:00:22,182, data_manager.py, 107, INFO, Processing year 2017 for ticker PVL.\n", + "2026-01-19 22:00:22,196, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2017\n", + "2026-01-19 22:00:22,276, data_manager.py, 107, INFO, Processing year 2018 for ticker PVL.\n", + "2026-01-19 22:00:22,295, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2018\n", + "2026-01-19 22:00:22,357, data_manager.py, 107, INFO, Processing year 2019 for ticker PVL.\n", + "2026-01-19 22:00:22,389, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2019\n", + "2026-01-19 22:00:22,447, data_manager.py, 107, INFO, Processing year 2020 for ticker PVL.\n", + "2026-01-19 22:00:22,455, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PVL\\PVL_2020\n", + "2026-01-19 22:00:22,509, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\GRPN.csv\n", + "2026-01-19 22:00:22,509, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\GRPN.csv\n", + "2026-01-19 22:00:22,539, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:22,540, data_manager.py, 103, INFO, Processing ticker: GRPN\n", + "2026-01-19 22:00:22,543, data_manager.py, 107, INFO, Processing year 2011 for ticker GRPN.\n", + "2026-01-19 22:00:22,551, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2011\n", + "2026-01-19 22:00:22,622, data_manager.py, 107, INFO, Processing year 2012 for ticker GRPN.\n", + "2026-01-19 22:00:22,635, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2012\n", + "2026-01-19 22:00:22,703, data_manager.py, 107, INFO, Processing year 2013 for ticker GRPN.\n", + "2026-01-19 22:00:22,718, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2013\n", + "2026-01-19 22:00:22,774, data_manager.py, 107, INFO, Processing year 2014 for ticker GRPN.\n", + "2026-01-19 22:00:22,793, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2014\n", + "2026-01-19 22:00:22,841, data_manager.py, 107, INFO, Processing year 2015 for ticker GRPN.\n", + "2026-01-19 22:00:22,856, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2015\n", + "2026-01-19 22:00:22,900, data_manager.py, 107, INFO, Processing year 2016 for ticker GRPN.\n", + "2026-01-19 22:00:22,917, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2016\n", + "2026-01-19 22:00:22,968, data_manager.py, 107, INFO, Processing year 2017 for ticker GRPN.\n", + "2026-01-19 22:00:22,968, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2017\n", + "2026-01-19 22:00:23,034, data_manager.py, 107, INFO, Processing year 2018 for ticker GRPN.\n", + "2026-01-19 22:00:23,034, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2018\n", + "2026-01-19 22:00:23,107, data_manager.py, 107, INFO, Processing year 2019 for ticker GRPN.\n", + "2026-01-19 22:00:23,123, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2019\n", + "2026-01-19 22:00:23,178, data_manager.py, 107, INFO, Processing year 2020 for ticker GRPN.\n", + "2026-01-19 22:00:23,196, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/GRPN\\GRPN_2020\n", + "2026-01-19 22:00:23,250, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\RMG.csv\n", + "2026-01-19 22:00:23,251, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\RMG.csv\n", + "2026-01-19 22:00:23,273, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:23,273, data_manager.py, 103, INFO, Processing ticker: RMG\n", + "2026-01-19 22:00:23,284, data_manager.py, 107, INFO, Processing year 1996 for ticker RMG.\n", + "2026-01-19 22:00:23,291, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_1996\n", + "2026-01-19 22:00:23,343, data_manager.py, 107, INFO, Processing year 1997 for ticker RMG.\n", + "2026-01-19 22:00:23,363, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_1997\n", + "2026-01-19 22:00:23,400, data_manager.py, 107, INFO, Processing year 1998 for ticker RMG.\n", + "2026-01-19 22:00:23,423, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_1998\n", + "2026-01-19 22:00:23,479, data_manager.py, 107, INFO, Processing year 1999 for ticker RMG.\n", + "2026-01-19 22:00:23,498, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_1999\n", + "2026-01-19 22:00:23,548, data_manager.py, 107, INFO, Processing year 2000 for ticker RMG.\n", + "2026-01-19 22:00:23,551, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2000\n", + "2026-01-19 22:00:23,612, data_manager.py, 107, INFO, Processing year 2001 for ticker RMG.\n", + "2026-01-19 22:00:23,617, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2001\n", + "2026-01-19 22:00:23,680, data_manager.py, 107, INFO, Processing year 2002 for ticker RMG.\n", + "2026-01-19 22:00:23,695, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2002\n", + "2026-01-19 22:00:23,757, data_manager.py, 107, INFO, Processing year 2003 for ticker RMG.\n", + "2026-01-19 22:00:23,772, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2003\n", + "2026-01-19 22:00:23,839, data_manager.py, 107, INFO, Processing year 2004 for ticker RMG.\n", + "2026-01-19 22:00:23,852, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2004\n", + "2026-01-19 22:00:23,906, data_manager.py, 107, INFO, Processing year 2005 for ticker RMG.\n", + "2026-01-19 22:00:23,917, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2005\n", + "2026-01-19 22:00:23,969, data_manager.py, 107, INFO, Processing year 2006 for ticker RMG.\n", + "2026-01-19 22:00:23,984, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2006\n", + "2026-01-19 22:00:24,029, data_manager.py, 107, INFO, Processing year 2007 for ticker RMG.\n", + "2026-01-19 22:00:24,046, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2007\n", + "2026-01-19 22:00:24,090, data_manager.py, 107, INFO, Processing year 2008 for ticker RMG.\n", + "2026-01-19 22:00:24,108, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2008\n", + "2026-01-19 22:00:24,158, data_manager.py, 107, INFO, Processing year 2009 for ticker RMG.\n", + "2026-01-19 22:00:24,173, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2009\n", + "2026-01-19 22:00:24,225, data_manager.py, 107, INFO, Processing year 2010 for ticker RMG.\n", + "2026-01-19 22:00:24,234, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2010\n", + "2026-01-19 22:00:24,285, data_manager.py, 107, INFO, Processing year 2011 for ticker RMG.\n", + "2026-01-19 22:00:24,303, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2011\n", + "2026-01-19 22:00:24,376, data_manager.py, 107, INFO, Processing year 2012 for ticker RMG.\n", + "2026-01-19 22:00:24,384, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2012\n", + "2026-01-19 22:00:24,444, data_manager.py, 107, INFO, Processing year 2013 for ticker RMG.\n", + "2026-01-19 22:00:24,451, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2013\n", + "2026-01-19 22:00:24,510, data_manager.py, 107, INFO, Processing year 2014 for ticker RMG.\n", + "2026-01-19 22:00:24,525, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2014\n", + "2026-01-19 22:00:24,581, data_manager.py, 107, INFO, Processing year 2015 for ticker RMG.\n", + "2026-01-19 22:00:24,596, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2015\n", + "2026-01-19 22:00:24,672, data_manager.py, 107, INFO, Processing year 2016 for ticker RMG.\n", + "2026-01-19 22:00:24,686, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2016\n", + "2026-01-19 22:00:24,738, data_manager.py, 107, INFO, Processing year 2017 for ticker RMG.\n", + "2026-01-19 22:00:24,750, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2017\n", + "2026-01-19 22:00:24,800, data_manager.py, 107, INFO, Processing year 2019 for ticker RMG.\n", + "2026-01-19 22:00:24,800, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2019\n", + "2026-01-19 22:00:24,874, data_manager.py, 107, INFO, Processing year 2020 for ticker RMG.\n", + "2026-01-19 22:00:24,890, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RMG\\RMG_2020\n", + "2026-01-19 22:00:24,950, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\TWMC.csv\n", + "2026-01-19 22:00:24,953, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\TWMC.csv\n", + "2026-01-19 22:00:24,974, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:24,980, data_manager.py, 103, INFO, Processing ticker: TWMC\n", + "2026-01-19 22:00:24,988, data_manager.py, 107, INFO, Processing year 1986 for ticker TWMC.\n", + "2026-01-19 22:00:25,003, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1986\n", + "2026-01-19 22:00:25,057, data_manager.py, 107, INFO, Processing year 1987 for ticker TWMC.\n", + "2026-01-19 22:00:25,068, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1987\n", + "2026-01-19 22:00:25,130, data_manager.py, 107, INFO, Processing year 1988 for ticker TWMC.\n", + "2026-01-19 22:00:25,146, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1988\n", + "2026-01-19 22:00:25,203, data_manager.py, 107, INFO, Processing year 1989 for ticker TWMC.\n", + "2026-01-19 22:00:25,222, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1989\n", + "2026-01-19 22:00:25,274, data_manager.py, 107, INFO, Processing year 1990 for ticker TWMC.\n", + "2026-01-19 22:00:25,293, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1990\n", + "2026-01-19 22:00:25,342, data_manager.py, 107, INFO, Processing year 1991 for ticker TWMC.\n", + "2026-01-19 22:00:25,351, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1991\n", + "2026-01-19 22:00:25,407, data_manager.py, 107, INFO, Processing year 1992 for ticker TWMC.\n", + "2026-01-19 22:00:25,421, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1992\n", + "2026-01-19 22:00:25,493, data_manager.py, 107, INFO, Processing year 1993 for ticker TWMC.\n", + "2026-01-19 22:00:25,507, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1993\n", + "2026-01-19 22:00:25,567, data_manager.py, 107, INFO, Processing year 1994 for ticker TWMC.\n", + "2026-01-19 22:00:25,585, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1994\n", + "2026-01-19 22:00:25,640, data_manager.py, 107, INFO, Processing year 1995 for ticker TWMC.\n", + "2026-01-19 22:00:25,651, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1995\n", + "2026-01-19 22:00:25,701, data_manager.py, 107, INFO, Processing year 1996 for ticker TWMC.\n", + "2026-01-19 22:00:25,713, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1996\n", + "2026-01-19 22:00:25,764, data_manager.py, 107, INFO, Processing year 1997 for ticker TWMC.\n", + "2026-01-19 22:00:25,767, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1997\n", + "2026-01-19 22:00:25,834, data_manager.py, 107, INFO, Processing year 1998 for ticker TWMC.\n", + "2026-01-19 22:00:25,847, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1998\n", + "2026-01-19 22:00:25,904, data_manager.py, 107, INFO, Processing year 1999 for ticker TWMC.\n", + "2026-01-19 22:00:25,919, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_1999\n", + "2026-01-19 22:00:25,977, data_manager.py, 107, INFO, Processing year 2000 for ticker TWMC.\n", + "2026-01-19 22:00:25,986, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2000\n", + "2026-01-19 22:00:26,055, data_manager.py, 107, INFO, Processing year 2001 for ticker TWMC.\n", + "2026-01-19 22:00:26,070, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2001\n", + "2026-01-19 22:00:26,124, data_manager.py, 107, INFO, Processing year 2002 for ticker TWMC.\n", + "2026-01-19 22:00:26,139, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2002\n", + "2026-01-19 22:00:26,188, data_manager.py, 107, INFO, Processing year 2003 for ticker TWMC.\n", + "2026-01-19 22:00:26,201, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2003\n", + "2026-01-19 22:00:26,253, data_manager.py, 107, INFO, Processing year 2004 for ticker TWMC.\n", + "2026-01-19 22:00:26,274, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2004\n", + "2026-01-19 22:00:26,327, data_manager.py, 107, INFO, Processing year 2005 for ticker TWMC.\n", + "2026-01-19 22:00:26,334, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2005\n", + "2026-01-19 22:00:26,385, data_manager.py, 107, INFO, Processing year 2006 for ticker TWMC.\n", + "2026-01-19 22:00:26,390, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2006\n", + "2026-01-19 22:00:26,454, data_manager.py, 107, INFO, Processing year 2007 for ticker TWMC.\n", + "2026-01-19 22:00:26,466, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2007\n", + "2026-01-19 22:00:26,517, data_manager.py, 107, INFO, Processing year 2008 for ticker TWMC.\n", + "2026-01-19 22:00:26,519, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2008\n", + "2026-01-19 22:00:26,637, data_manager.py, 107, INFO, Processing year 2009 for ticker TWMC.\n", + "2026-01-19 22:00:26,650, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2009\n", + "2026-01-19 22:00:26,721, data_manager.py, 107, INFO, Processing year 2010 for ticker TWMC.\n", + "2026-01-19 22:00:26,737, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2010\n", + "2026-01-19 22:00:26,793, data_manager.py, 107, INFO, Processing year 2011 for ticker TWMC.\n", + "2026-01-19 22:00:26,801, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2011\n", + "2026-01-19 22:00:26,854, data_manager.py, 107, INFO, Processing year 2012 for ticker TWMC.\n", + "2026-01-19 22:00:26,867, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2012\n", + "2026-01-19 22:00:26,924, data_manager.py, 107, INFO, Processing year 2013 for ticker TWMC.\n", + "2026-01-19 22:00:26,937, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2013\n", + "2026-01-19 22:00:26,984, data_manager.py, 107, INFO, Processing year 2014 for ticker TWMC.\n", + "2026-01-19 22:00:27,000, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2014\n", + "2026-01-19 22:00:27,055, data_manager.py, 107, INFO, Processing year 2015 for ticker TWMC.\n", + "2026-01-19 22:00:27,058, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2015\n", + "2026-01-19 22:00:27,123, data_manager.py, 107, INFO, Processing year 2016 for ticker TWMC.\n", + "2026-01-19 22:00:27,137, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2016\n", + "2026-01-19 22:00:27,186, data_manager.py, 107, INFO, Processing year 2017 for ticker TWMC.\n", + "2026-01-19 22:00:27,191, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2017\n", + "2026-01-19 22:00:27,254, data_manager.py, 107, INFO, Processing year 2018 for ticker TWMC.\n", + "2026-01-19 22:00:27,270, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2018\n", + "2026-01-19 22:00:27,317, data_manager.py, 107, INFO, Processing year 2019 for ticker TWMC.\n", + "2026-01-19 22:00:27,330, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2019\n", + "2026-01-19 22:00:27,367, data_manager.py, 107, INFO, Processing year 2020 for ticker TWMC.\n", + "2026-01-19 22:00:27,387, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/TWMC\\TWMC_2020\n", + "2026-01-19 22:00:27,438, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\SON.csv\n", + "2026-01-19 22:00:27,439, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\SON.csv\n", + "2026-01-19 22:00:27,474, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:27,477, data_manager.py, 103, INFO, Processing ticker: SON\n", + "2026-01-19 22:00:27,480, data_manager.py, 107, INFO, Processing year 1980 for ticker SON.\n", + "2026-01-19 22:00:27,484, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1980\n", + "2026-01-19 22:00:27,567, data_manager.py, 107, INFO, Processing year 1981 for ticker SON.\n", + "2026-01-19 22:00:27,582, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1981\n", + "2026-01-19 22:00:27,637, data_manager.py, 107, INFO, Processing year 1982 for ticker SON.\n", + "2026-01-19 22:00:27,649, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1982\n", + "2026-01-19 22:00:27,695, data_manager.py, 107, INFO, Processing year 1983 for ticker SON.\n", + "2026-01-19 22:00:27,700, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1983\n", + "2026-01-19 22:00:27,751, data_manager.py, 107, INFO, Processing year 1984 for ticker SON.\n", + "2026-01-19 22:00:27,772, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1984\n", + "2026-01-19 22:00:27,821, data_manager.py, 107, INFO, Processing year 1985 for ticker SON.\n", + "2026-01-19 22:00:27,834, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1985\n", + "2026-01-19 22:00:27,882, data_manager.py, 107, INFO, Processing year 1986 for ticker SON.\n", + "2026-01-19 22:00:27,889, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1986\n", + "2026-01-19 22:00:27,941, data_manager.py, 107, INFO, Processing year 1987 for ticker SON.\n", + "2026-01-19 22:00:27,951, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1987\n", + "2026-01-19 22:00:28,001, data_manager.py, 107, INFO, Processing year 1988 for ticker SON.\n", + "2026-01-19 22:00:28,016, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1988\n", + "2026-01-19 22:00:28,075, data_manager.py, 107, INFO, Processing year 1989 for ticker SON.\n", + "2026-01-19 22:00:28,087, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1989\n", + "2026-01-19 22:00:28,133, data_manager.py, 107, INFO, Processing year 1990 for ticker SON.\n", + "2026-01-19 22:00:28,145, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1990\n", + "2026-01-19 22:00:28,190, data_manager.py, 107, INFO, Processing year 1991 for ticker SON.\n", + "2026-01-19 22:00:28,206, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1991\n", + "2026-01-19 22:00:28,253, data_manager.py, 107, INFO, Processing year 1992 for ticker SON.\n", + "2026-01-19 22:00:28,263, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1992\n", + "2026-01-19 22:00:28,315, data_manager.py, 107, INFO, Processing year 1993 for ticker SON.\n", + "2026-01-19 22:00:28,317, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1993\n", + "2026-01-19 22:00:28,374, data_manager.py, 107, INFO, Processing year 1994 for ticker SON.\n", + "2026-01-19 22:00:28,395, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1994\n", + "2026-01-19 22:00:28,435, data_manager.py, 107, INFO, Processing year 1995 for ticker SON.\n", + "2026-01-19 22:00:28,451, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1995\n", + "2026-01-19 22:00:28,503, data_manager.py, 107, INFO, Processing year 1996 for ticker SON.\n", + "2026-01-19 22:00:28,507, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1996\n", + "2026-01-19 22:00:28,574, data_manager.py, 107, INFO, Processing year 1997 for ticker SON.\n", + "2026-01-19 22:00:28,584, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1997\n", + "2026-01-19 22:00:28,660, data_manager.py, 107, INFO, Processing year 1998 for ticker SON.\n", + "2026-01-19 22:00:28,674, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1998\n", + "2026-01-19 22:00:28,727, data_manager.py, 107, INFO, Processing year 1999 for ticker SON.\n", + "2026-01-19 22:00:28,738, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_1999\n", + "2026-01-19 22:00:28,789, data_manager.py, 107, INFO, Processing year 2000 for ticker SON.\n", + "2026-01-19 22:00:28,800, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2000\n", + "2026-01-19 22:00:28,854, data_manager.py, 107, INFO, Processing year 2001 for ticker SON.\n", + "2026-01-19 22:00:28,866, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2001\n", + "2026-01-19 22:00:28,916, data_manager.py, 107, INFO, Processing year 2002 for ticker SON.\n", + "2026-01-19 22:00:28,935, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2002\n", + "2026-01-19 22:00:28,985, data_manager.py, 107, INFO, Processing year 2003 for ticker SON.\n", + "2026-01-19 22:00:29,000, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2003\n", + "2026-01-19 22:00:29,046, data_manager.py, 107, INFO, Processing year 2004 for ticker SON.\n", + "2026-01-19 22:00:29,050, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2004\n", + "2026-01-19 22:00:29,107, data_manager.py, 107, INFO, Processing year 2005 for ticker SON.\n", + "2026-01-19 22:00:29,124, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2005\n", + "2026-01-19 22:00:29,172, data_manager.py, 107, INFO, Processing year 2006 for ticker SON.\n", + "2026-01-19 22:00:29,184, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2006\n", + "2026-01-19 22:00:29,241, data_manager.py, 107, INFO, Processing year 2007 for ticker SON.\n", + "2026-01-19 22:00:29,254, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2007\n", + "2026-01-19 22:00:29,300, data_manager.py, 107, INFO, Processing year 2008 for ticker SON.\n", + "2026-01-19 22:00:29,300, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2008\n", + "2026-01-19 22:00:29,366, data_manager.py, 107, INFO, Processing year 2009 for ticker SON.\n", + "2026-01-19 22:00:29,367, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2009\n", + "2026-01-19 22:00:29,429, data_manager.py, 107, INFO, Processing year 2010 for ticker SON.\n", + "2026-01-19 22:00:29,434, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2010\n", + "2026-01-19 22:00:29,499, data_manager.py, 107, INFO, Processing year 2011 for ticker SON.\n", + "2026-01-19 22:00:29,510, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2011\n", + "2026-01-19 22:00:29,586, data_manager.py, 107, INFO, Processing year 2012 for ticker SON.\n", + "2026-01-19 22:00:29,600, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2012\n", + "2026-01-19 22:00:29,646, data_manager.py, 107, INFO, Processing year 2013 for ticker SON.\n", + "2026-01-19 22:00:29,656, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2013\n", + "2026-01-19 22:00:29,707, data_manager.py, 107, INFO, Processing year 2014 for ticker SON.\n", + "2026-01-19 22:00:29,717, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2014\n", + "2026-01-19 22:00:29,772, data_manager.py, 107, INFO, Processing year 2015 for ticker SON.\n", + "2026-01-19 22:00:29,783, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2015\n", + "2026-01-19 22:00:29,839, data_manager.py, 107, INFO, Processing year 2016 for ticker SON.\n", + "2026-01-19 22:00:29,852, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2016\n", + "2026-01-19 22:00:29,902, data_manager.py, 107, INFO, Processing year 2017 for ticker SON.\n", + "2026-01-19 22:00:29,907, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2017\n", + "2026-01-19 22:00:29,967, data_manager.py, 107, INFO, Processing year 2018 for ticker SON.\n", + "2026-01-19 22:00:29,979, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2018\n", + "2026-01-19 22:00:30,026, data_manager.py, 107, INFO, Processing year 2019 for ticker SON.\n", + "2026-01-19 22:00:30,035, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2019\n", + "2026-01-19 22:00:30,092, data_manager.py, 107, INFO, Processing year 2020 for ticker SON.\n", + "2026-01-19 22:00:30,106, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/SON\\SON_2020\n", + "2026-01-19 22:00:30,150, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\MIME.csv\n", + "2026-01-19 22:00:30,150, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\MIME.csv\n", + "2026-01-19 22:00:30,173, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:30,173, data_manager.py, 103, INFO, Processing ticker: MIME\n", + "2026-01-19 22:00:30,173, data_manager.py, 107, INFO, Processing year 2015 for ticker MIME.\n", + "2026-01-19 22:00:30,190, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MIME\\MIME_2015\n", + "2026-01-19 22:00:30,244, data_manager.py, 107, INFO, Processing year 2016 for ticker MIME.\n", + "2026-01-19 22:00:30,258, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MIME\\MIME_2016\n", + "2026-01-19 22:00:30,308, data_manager.py, 107, INFO, Processing year 2017 for ticker MIME.\n", + "2026-01-19 22:00:30,322, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MIME\\MIME_2017\n", + "2026-01-19 22:00:30,376, data_manager.py, 107, INFO, Processing year 2018 for ticker MIME.\n", + "2026-01-19 22:00:30,388, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MIME\\MIME_2018\n", + "2026-01-19 22:00:30,440, data_manager.py, 107, INFO, Processing year 2019 for ticker MIME.\n", + "2026-01-19 22:00:30,452, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MIME\\MIME_2019\n", + "2026-01-19 22:00:30,490, data_manager.py, 107, INFO, Processing year 2020 for ticker MIME.\n", + "2026-01-19 22:00:30,513, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MIME\\MIME_2020\n", + "2026-01-19 22:00:30,563, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\MGTA.csv\n", + "2026-01-19 22:00:30,564, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\MGTA.csv\n", + "2026-01-19 22:00:30,572, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:30,573, data_manager.py, 103, INFO, Processing ticker: MGTA\n", + "2026-01-19 22:00:30,575, data_manager.py, 107, INFO, Processing year 2018 for ticker MGTA.\n", + "2026-01-19 22:00:30,588, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MGTA\\MGTA_2018\n", + "2026-01-19 22:00:30,634, data_manager.py, 107, INFO, Processing year 2019 for ticker MGTA.\n", + "2026-01-19 22:00:30,650, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MGTA\\MGTA_2019\n", + "2026-01-19 22:00:30,696, data_manager.py, 107, INFO, Processing year 2020 for ticker MGTA.\n", + "2026-01-19 22:00:30,709, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MGTA\\MGTA_2020\n", + "2026-01-19 22:00:30,757, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\VVNT.csv\n", + "2026-01-19 22:00:30,757, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\VVNT.csv\n", + "2026-01-19 22:00:30,757, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:30,757, data_manager.py, 103, INFO, Processing ticker: VVNT\n", + "2026-01-19 22:00:30,770, data_manager.py, 107, INFO, Processing year 2019 for ticker VVNT.\n", + "2026-01-19 22:00:30,776, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVNT\\VVNT_2019\n", + "2026-01-19 22:00:30,834, data_manager.py, 107, INFO, Processing year 2020 for ticker VVNT.\n", + "2026-01-19 22:00:30,850, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVNT\\VVNT_2020\n", + "2026-01-19 22:00:30,903, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\AKBA.csv\n", + "2026-01-19 22:00:30,904, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\AKBA.csv\n", + "2026-01-19 22:00:30,922, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:30,922, data_manager.py, 103, INFO, Processing ticker: AKBA\n", + "2026-01-19 22:00:30,922, data_manager.py, 107, INFO, Processing year 2014 for ticker AKBA.\n", + "2026-01-19 22:00:30,940, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2014\n", + "2026-01-19 22:00:30,992, data_manager.py, 107, INFO, Processing year 2015 for ticker AKBA.\n", + "2026-01-19 22:00:31,000, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2015\n", + "2026-01-19 22:00:31,056, data_manager.py, 107, INFO, Processing year 2016 for ticker AKBA.\n", + "2026-01-19 22:00:31,067, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2016\n", + "2026-01-19 22:00:31,117, data_manager.py, 107, INFO, Processing year 2017 for ticker AKBA.\n", + "2026-01-19 22:00:31,137, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2017\n", + "2026-01-19 22:00:31,214, data_manager.py, 107, INFO, Processing year 2018 for ticker AKBA.\n", + "2026-01-19 22:00:31,227, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2018\n", + "2026-01-19 22:00:31,271, data_manager.py, 107, INFO, Processing year 2019 for ticker AKBA.\n", + "2026-01-19 22:00:31,288, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2019\n", + "2026-01-19 22:00:31,341, data_manager.py, 107, INFO, Processing year 2020 for ticker AKBA.\n", + "2026-01-19 22:00:31,355, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/AKBA\\AKBA_2020\n", + "2026-01-19 22:00:31,408, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\DAUD.csv\n", + "2026-01-19 22:00:31,409, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\DAUD.csv\n", + "2026-01-19 22:00:31,418, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:31,419, data_manager.py, 103, INFO, Processing ticker: DAUD\n", + "2026-01-19 22:00:31,422, data_manager.py, 107, INFO, Processing year 2017 for ticker DAUD.\n", + "2026-01-19 22:00:31,437, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/DAUD\\DAUD_2017\n", + "2026-01-19 22:00:31,484, data_manager.py, 107, INFO, Processing year 2018 for ticker DAUD.\n", + "2026-01-19 22:00:31,505, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/DAUD\\DAUD_2018\n", + "2026-01-19 22:00:31,557, data_manager.py, 107, INFO, Processing year 2019 for ticker DAUD.\n", + "2026-01-19 22:00:31,570, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/DAUD\\DAUD_2019\n", + "2026-01-19 22:00:31,627, data_manager.py, 107, INFO, Processing year 2020 for ticker DAUD.\n", + "2026-01-19 22:00:31,633, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/DAUD\\DAUD_2020\n", + "2026-01-19 22:00:31,696, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\MFA.csv\n", + "2026-01-19 22:00:31,697, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\MFA.csv\n", + "2026-01-19 22:00:31,715, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:31,717, data_manager.py, 103, INFO, Processing ticker: MFA\n", + "2026-01-19 22:00:31,722, data_manager.py, 107, INFO, Processing year 1998 for ticker MFA.\n", + "2026-01-19 22:00:31,735, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_1998\n", + "2026-01-19 22:00:31,790, data_manager.py, 107, INFO, Processing year 1999 for ticker MFA.\n", + "2026-01-19 22:00:31,801, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_1999\n", + "2026-01-19 22:00:31,856, data_manager.py, 107, INFO, Processing year 2000 for ticker MFA.\n", + "2026-01-19 22:00:31,869, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2000\n", + "2026-01-19 22:00:31,917, data_manager.py, 107, INFO, Processing year 2001 for ticker MFA.\n", + "2026-01-19 22:00:31,924, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2001\n", + "2026-01-19 22:00:31,967, data_manager.py, 107, INFO, Processing year 2002 for ticker MFA.\n", + "2026-01-19 22:00:31,984, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2002\n", + "2026-01-19 22:00:32,042, data_manager.py, 107, INFO, Processing year 2003 for ticker MFA.\n", + "2026-01-19 22:00:32,050, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2003\n", + "2026-01-19 22:00:32,100, data_manager.py, 107, INFO, Processing year 2004 for ticker MFA.\n", + "2026-01-19 22:00:32,116, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2004\n", + "2026-01-19 22:00:32,177, data_manager.py, 107, INFO, Processing year 2005 for ticker MFA.\n", + "2026-01-19 22:00:32,191, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2005\n", + "2026-01-19 22:00:32,243, data_manager.py, 107, INFO, Processing year 2006 for ticker MFA.\n", + "2026-01-19 22:00:32,250, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2006\n", + "2026-01-19 22:00:32,304, data_manager.py, 107, INFO, Processing year 2007 for ticker MFA.\n", + "2026-01-19 22:00:32,317, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2007\n", + "2026-01-19 22:00:32,371, data_manager.py, 107, INFO, Processing year 2008 for ticker MFA.\n", + "2026-01-19 22:00:32,371, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2008\n", + "2026-01-19 22:00:32,430, data_manager.py, 107, INFO, Processing year 2009 for ticker MFA.\n", + "2026-01-19 22:00:32,435, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2009\n", + "2026-01-19 22:00:32,490, data_manager.py, 107, INFO, Processing year 2010 for ticker MFA.\n", + "2026-01-19 22:00:32,507, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2010\n", + "2026-01-19 22:00:32,555, data_manager.py, 107, INFO, Processing year 2011 for ticker MFA.\n", + "2026-01-19 22:00:32,568, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2011\n", + "2026-01-19 22:00:32,617, data_manager.py, 107, INFO, Processing year 2012 for ticker MFA.\n", + "2026-01-19 22:00:32,631, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2012\n", + "2026-01-19 22:00:32,684, data_manager.py, 107, INFO, Processing year 2013 for ticker MFA.\n", + "2026-01-19 22:00:32,695, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2013\n", + "2026-01-19 22:00:32,740, data_manager.py, 107, INFO, Processing year 2014 for ticker MFA.\n", + "2026-01-19 22:00:32,751, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2014\n", + "2026-01-19 22:00:32,795, data_manager.py, 107, INFO, Processing year 2015 for ticker MFA.\n", + "2026-01-19 22:00:32,807, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2015\n", + "2026-01-19 22:00:32,867, data_manager.py, 107, INFO, Processing year 2016 for ticker MFA.\n", + "2026-01-19 22:00:32,883, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2016\n", + "2026-01-19 22:00:32,920, data_manager.py, 107, INFO, Processing year 2017 for ticker MFA.\n", + "2026-01-19 22:00:32,934, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2017\n", + "2026-01-19 22:00:32,985, data_manager.py, 107, INFO, Processing year 2018 for ticker MFA.\n", + "2026-01-19 22:00:32,996, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2018\n", + "2026-01-19 22:00:33,043, data_manager.py, 107, INFO, Processing year 2019 for ticker MFA.\n", + "2026-01-19 22:00:33,055, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2019\n", + "2026-01-19 22:00:33,102, data_manager.py, 107, INFO, Processing year 2020 for ticker MFA.\n", + "2026-01-19 22:00:33,105, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/MFA\\MFA_2020\n", + "2026-01-19 22:00:33,159, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\XTLB.csv\n", + "2026-01-19 22:00:33,160, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\XTLB.csv\n", + "2026-01-19 22:00:33,170, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:33,185, data_manager.py, 103, INFO, Processing ticker: XTLB\n", + "2026-01-19 22:00:33,187, data_manager.py, 107, INFO, Processing year 2005 for ticker XTLB.\n", + "2026-01-19 22:00:33,201, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2005\n", + "2026-01-19 22:00:33,250, data_manager.py, 107, INFO, Processing year 2006 for ticker XTLB.\n", + "2026-01-19 22:00:33,250, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2006\n", + "2026-01-19 22:00:33,306, data_manager.py, 107, INFO, Processing year 2007 for ticker XTLB.\n", + "2026-01-19 22:00:33,322, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2007\n", + "2026-01-19 22:00:33,367, data_manager.py, 107, INFO, Processing year 2008 for ticker XTLB.\n", + "2026-01-19 22:00:33,378, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2008\n", + "2026-01-19 22:00:33,426, data_manager.py, 107, INFO, Processing year 2009 for ticker XTLB.\n", + "2026-01-19 22:00:33,434, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2009\n", + "2026-01-19 22:00:33,486, data_manager.py, 107, INFO, Processing year 2010 for ticker XTLB.\n", + "2026-01-19 22:00:33,507, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2010\n", + "2026-01-19 22:00:33,558, data_manager.py, 107, INFO, Processing year 2011 for ticker XTLB.\n", + "2026-01-19 22:00:33,569, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2011\n", + "2026-01-19 22:00:33,626, data_manager.py, 107, INFO, Processing year 2012 for ticker XTLB.\n", + "2026-01-19 22:00:33,637, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2012\n", + "2026-01-19 22:00:33,684, data_manager.py, 107, INFO, Processing year 2013 for ticker XTLB.\n", + "2026-01-19 22:00:33,695, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2013\n", + "2026-01-19 22:00:33,742, data_manager.py, 107, INFO, Processing year 2014 for ticker XTLB.\n", + "2026-01-19 22:00:33,750, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2014\n", + "2026-01-19 22:00:33,799, data_manager.py, 107, INFO, Processing year 2015 for ticker XTLB.\n", + "2026-01-19 22:00:33,803, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2015\n", + "2026-01-19 22:00:33,854, data_manager.py, 107, INFO, Processing year 2016 for ticker XTLB.\n", + "2026-01-19 22:00:33,869, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2016\n", + "2026-01-19 22:00:33,904, data_manager.py, 107, INFO, Processing year 2017 for ticker XTLB.\n", + "2026-01-19 22:00:33,923, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2017\n", + "2026-01-19 22:00:33,956, data_manager.py, 107, INFO, Processing year 2018 for ticker XTLB.\n", + "2026-01-19 22:00:33,985, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2018\n", + "2026-01-19 22:00:34,026, data_manager.py, 107, INFO, Processing year 2019 for ticker XTLB.\n", + "2026-01-19 22:00:34,033, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2019\n", + "2026-01-19 22:00:34,082, data_manager.py, 107, INFO, Processing year 2020 for ticker XTLB.\n", + "2026-01-19 22:00:34,093, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/XTLB\\XTLB_2020\n", + "2026-01-19 22:00:34,136, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\RDN.csv\n", + "2026-01-19 22:00:34,137, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\RDN.csv\n", + "2026-01-19 22:00:34,180, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:34,183, data_manager.py, 103, INFO, Processing ticker: RDN\n", + "2026-01-19 22:00:34,187, data_manager.py, 107, INFO, Processing year 1992 for ticker RDN.\n", + "2026-01-19 22:00:34,203, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1992\n", + "2026-01-19 22:00:34,314, data_manager.py, 107, INFO, Processing year 1993 for ticker RDN.\n", + "2026-01-19 22:00:34,335, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1993\n", + "2026-01-19 22:00:34,407, data_manager.py, 107, INFO, Processing year 1994 for ticker RDN.\n", + "2026-01-19 22:00:34,421, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1994\n", + "2026-01-19 22:00:34,471, data_manager.py, 107, INFO, Processing year 1995 for ticker RDN.\n", + "2026-01-19 22:00:34,483, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1995\n", + "2026-01-19 22:00:34,530, data_manager.py, 107, INFO, Processing year 1996 for ticker RDN.\n", + "2026-01-19 22:00:34,534, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1996\n", + "2026-01-19 22:00:34,591, data_manager.py, 107, INFO, Processing year 1997 for ticker RDN.\n", + "2026-01-19 22:00:34,603, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1997\n", + "2026-01-19 22:00:34,653, data_manager.py, 107, INFO, Processing year 1998 for ticker RDN.\n", + "2026-01-19 22:00:34,653, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1998\n", + "2026-01-19 22:00:34,719, data_manager.py, 107, INFO, Processing year 1999 for ticker RDN.\n", + "2026-01-19 22:00:34,721, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_1999\n", + "2026-01-19 22:00:34,777, data_manager.py, 107, INFO, Processing year 2000 for ticker RDN.\n", + "2026-01-19 22:00:34,789, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2000\n", + "2026-01-19 22:00:34,841, data_manager.py, 107, INFO, Processing year 2001 for ticker RDN.\n", + "2026-01-19 22:00:34,853, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2001\n", + "2026-01-19 22:00:34,884, data_manager.py, 107, INFO, Processing year 2002 for ticker RDN.\n", + "2026-01-19 22:00:34,904, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2002\n", + "2026-01-19 22:00:34,959, data_manager.py, 107, INFO, Processing year 2003 for ticker RDN.\n", + "2026-01-19 22:00:34,971, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2003\n", + "2026-01-19 22:00:35,027, data_manager.py, 107, INFO, Processing year 2004 for ticker RDN.\n", + "2026-01-19 22:00:35,034, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2004\n", + "2026-01-19 22:00:35,086, data_manager.py, 107, INFO, Processing year 2005 for ticker RDN.\n", + "2026-01-19 22:00:35,096, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2005\n", + "2026-01-19 22:00:35,141, data_manager.py, 107, INFO, Processing year 2006 for ticker RDN.\n", + "2026-01-19 22:00:35,152, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2006\n", + "2026-01-19 22:00:35,200, data_manager.py, 107, INFO, Processing year 2007 for ticker RDN.\n", + "2026-01-19 22:00:35,216, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2007\n", + "2026-01-19 22:00:35,267, data_manager.py, 107, INFO, Processing year 2008 for ticker RDN.\n", + "2026-01-19 22:00:35,278, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2008\n", + "2026-01-19 22:00:35,321, data_manager.py, 107, INFO, Processing year 2009 for ticker RDN.\n", + "2026-01-19 22:00:35,335, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2009\n", + "2026-01-19 22:00:35,380, data_manager.py, 107, INFO, Processing year 2010 for ticker RDN.\n", + "2026-01-19 22:00:35,392, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2010\n", + "2026-01-19 22:00:35,438, data_manager.py, 107, INFO, Processing year 2011 for ticker RDN.\n", + "2026-01-19 22:00:35,449, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2011\n", + "2026-01-19 22:00:35,492, data_manager.py, 107, INFO, Processing year 2012 for ticker RDN.\n", + "2026-01-19 22:00:35,504, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2012\n", + "2026-01-19 22:00:35,552, data_manager.py, 107, INFO, Processing year 2013 for ticker RDN.\n", + "2026-01-19 22:00:35,563, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2013\n", + "2026-01-19 22:00:35,628, data_manager.py, 107, INFO, Processing year 2014 for ticker RDN.\n", + "2026-01-19 22:00:35,633, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2014\n", + "2026-01-19 22:00:35,693, data_manager.py, 107, INFO, Processing year 2015 for ticker RDN.\n", + "2026-01-19 22:00:35,700, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2015\n", + "2026-01-19 22:00:35,752, data_manager.py, 107, INFO, Processing year 2016 for ticker RDN.\n", + "2026-01-19 22:00:35,765, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2016\n", + "2026-01-19 22:00:35,801, data_manager.py, 107, INFO, Processing year 2017 for ticker RDN.\n", + "2026-01-19 22:00:35,817, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2017\n", + "2026-01-19 22:00:35,879, data_manager.py, 107, INFO, Processing year 2018 for ticker RDN.\n", + "2026-01-19 22:00:35,891, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2018\n", + "2026-01-19 22:00:35,942, data_manager.py, 107, INFO, Processing year 2019 for ticker RDN.\n", + "2026-01-19 22:00:35,953, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2019\n", + "2026-01-19 22:00:36,005, data_manager.py, 107, INFO, Processing year 2020 for ticker RDN.\n", + "2026-01-19 22:00:36,017, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/RDN\\RDN_2020\n", + "2026-01-19 22:00:36,065, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\PFO.csv\n", + "2026-01-19 22:00:36,065, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\PFO.csv\n", + "2026-01-19 22:00:36,086, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:36,088, data_manager.py, 103, INFO, Processing ticker: PFO\n", + "2026-01-19 22:00:36,091, data_manager.py, 107, INFO, Processing year 1992 for ticker PFO.\n", + "2026-01-19 22:00:36,103, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1992\n", + "2026-01-19 22:00:36,154, data_manager.py, 107, INFO, Processing year 1993 for ticker PFO.\n", + "2026-01-19 22:00:36,170, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1993\n", + "2026-01-19 22:00:36,216, data_manager.py, 107, INFO, Processing year 1994 for ticker PFO.\n", + "2026-01-19 22:00:36,230, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1994\n", + "2026-01-19 22:00:36,277, data_manager.py, 107, INFO, Processing year 1995 for ticker PFO.\n", + "2026-01-19 22:00:36,289, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1995\n", + "2026-01-19 22:00:36,339, data_manager.py, 107, INFO, Processing year 1996 for ticker PFO.\n", + "2026-01-19 22:00:36,350, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1996\n", + "2026-01-19 22:00:36,405, data_manager.py, 107, INFO, Processing year 1997 for ticker PFO.\n", + "2026-01-19 22:00:36,418, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1997\n", + "2026-01-19 22:00:36,467, data_manager.py, 107, INFO, Processing year 1998 for ticker PFO.\n", + "2026-01-19 22:00:36,471, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1998\n", + "2026-01-19 22:00:36,519, data_manager.py, 107, INFO, Processing year 1999 for ticker PFO.\n", + "2026-01-19 22:00:36,541, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_1999\n", + "2026-01-19 22:00:36,592, data_manager.py, 107, INFO, Processing year 2000 for ticker PFO.\n", + "2026-01-19 22:00:36,605, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2000\n", + "2026-01-19 22:00:36,658, data_manager.py, 107, INFO, Processing year 2001 for ticker PFO.\n", + "2026-01-19 22:00:36,667, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2001\n", + "2026-01-19 22:00:36,714, data_manager.py, 107, INFO, Processing year 2002 for ticker PFO.\n", + "2026-01-19 22:00:36,727, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2002\n", + "2026-01-19 22:00:36,798, data_manager.py, 107, INFO, Processing year 2003 for ticker PFO.\n", + "2026-01-19 22:00:36,816, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2003\n", + "2026-01-19 22:00:36,867, data_manager.py, 107, INFO, Processing year 2004 for ticker PFO.\n", + "2026-01-19 22:00:36,867, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2004\n", + "2026-01-19 22:00:36,920, data_manager.py, 107, INFO, Processing year 2005 for ticker PFO.\n", + "2026-01-19 22:00:36,941, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2005\n", + "2026-01-19 22:00:36,997, data_manager.py, 107, INFO, Processing year 2006 for ticker PFO.\n", + "2026-01-19 22:00:37,000, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2006\n", + "2026-01-19 22:00:37,074, data_manager.py, 107, INFO, Processing year 2007 for ticker PFO.\n", + "2026-01-19 22:00:37,089, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2007\n", + "2026-01-19 22:00:37,144, data_manager.py, 107, INFO, Processing year 2008 for ticker PFO.\n", + "2026-01-19 22:00:37,150, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2008\n", + "2026-01-19 22:00:37,210, data_manager.py, 107, INFO, Processing year 2009 for ticker PFO.\n", + "2026-01-19 22:00:37,225, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2009\n", + "2026-01-19 22:00:37,270, data_manager.py, 107, INFO, Processing year 2010 for ticker PFO.\n", + "2026-01-19 22:00:37,292, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2010\n", + "2026-01-19 22:00:37,338, data_manager.py, 107, INFO, Processing year 2011 for ticker PFO.\n", + "2026-01-19 22:00:37,356, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2011\n", + "2026-01-19 22:00:37,402, data_manager.py, 107, INFO, Processing year 2012 for ticker PFO.\n", + "2026-01-19 22:00:37,416, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2012\n", + "2026-01-19 22:00:37,466, data_manager.py, 107, INFO, Processing year 2013 for ticker PFO.\n", + "2026-01-19 22:00:37,467, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2013\n", + "2026-01-19 22:00:37,531, data_manager.py, 107, INFO, Processing year 2014 for ticker PFO.\n", + "2026-01-19 22:00:37,534, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2014\n", + "2026-01-19 22:00:37,593, data_manager.py, 107, INFO, Processing year 2015 for ticker PFO.\n", + "2026-01-19 22:00:37,608, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2015\n", + "2026-01-19 22:00:37,650, data_manager.py, 107, INFO, Processing year 2016 for ticker PFO.\n", + "2026-01-19 22:00:37,670, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2016\n", + "2026-01-19 22:00:37,720, data_manager.py, 107, INFO, Processing year 2017 for ticker PFO.\n", + "2026-01-19 22:00:37,734, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2017\n", + "2026-01-19 22:00:37,786, data_manager.py, 107, INFO, Processing year 2018 for ticker PFO.\n", + "2026-01-19 22:00:37,796, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2018\n", + "2026-01-19 22:00:37,843, data_manager.py, 107, INFO, Processing year 2019 for ticker PFO.\n", + "2026-01-19 22:00:37,854, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2019\n", + "2026-01-19 22:00:37,902, data_manager.py, 107, INFO, Processing year 2020 for ticker PFO.\n", + "2026-01-19 22:00:37,916, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PFO\\PFO_2020\n", + "2026-01-19 22:00:37,967, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\CKPT.csv\n", + "2026-01-19 22:00:37,968, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\CKPT.csv\n", + "2026-01-19 22:00:37,980, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:37,981, data_manager.py, 103, INFO, Processing ticker: CKPT\n", + "2026-01-19 22:00:37,985, data_manager.py, 107, INFO, Processing year 2016 for ticker CKPT.\n", + "2026-01-19 22:00:38,011, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CKPT\\CKPT_2016\n", + "2026-01-19 22:00:38,074, data_manager.py, 107, INFO, Processing year 2017 for ticker CKPT.\n", + "2026-01-19 22:00:38,085, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CKPT\\CKPT_2017\n", + "2026-01-19 22:00:38,117, data_manager.py, 107, INFO, Processing year 2018 for ticker CKPT.\n", + "2026-01-19 22:00:38,138, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CKPT\\CKPT_2018\n", + "2026-01-19 22:00:38,194, data_manager.py, 107, INFO, Processing year 2019 for ticker CKPT.\n", + "2026-01-19 22:00:38,200, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CKPT\\CKPT_2019\n", + "2026-01-19 22:00:38,261, data_manager.py, 107, INFO, Processing year 2020 for ticker CKPT.\n", + "2026-01-19 22:00:38,267, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CKPT\\CKPT_2020\n", + "2026-01-19 22:00:38,317, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\PANL.csv\n", + "2026-01-19 22:00:38,317, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\PANL.csv\n", + "2026-01-19 22:00:38,335, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:38,336, data_manager.py, 103, INFO, Processing ticker: PANL\n", + "2026-01-19 22:00:38,341, data_manager.py, 107, INFO, Processing year 2013 for ticker PANL.\n", + "2026-01-19 22:00:38,352, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2013\n", + "2026-01-19 22:00:38,402, data_manager.py, 107, INFO, Processing year 2014 for ticker PANL.\n", + "2026-01-19 22:00:38,415, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2014\n", + "2026-01-19 22:00:38,462, data_manager.py, 107, INFO, Processing year 2015 for ticker PANL.\n", + "2026-01-19 22:00:38,474, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2015\n", + "2026-01-19 22:00:38,520, data_manager.py, 107, INFO, Processing year 2016 for ticker PANL.\n", + "2026-01-19 22:00:38,539, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2016\n", + "2026-01-19 22:00:38,587, data_manager.py, 107, INFO, Processing year 2017 for ticker PANL.\n", + "2026-01-19 22:00:38,597, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2017\n", + "2026-01-19 22:00:38,649, data_manager.py, 107, INFO, Processing year 2018 for ticker PANL.\n", + "2026-01-19 22:00:38,650, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2018\n", + "2026-01-19 22:00:38,710, data_manager.py, 107, INFO, Processing year 2019 for ticker PANL.\n", + "2026-01-19 22:00:38,724, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2019\n", + "2026-01-19 22:00:38,771, data_manager.py, 107, INFO, Processing year 2020 for ticker PANL.\n", + "2026-01-19 22:00:38,789, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/PANL\\PANL_2020\n", + "2026-01-19 22:00:38,840, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\JJN.csv\n", + "2026-01-19 22:00:38,841, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\JJN.csv\n", + "2026-01-19 22:00:38,864, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:38,866, data_manager.py, 103, INFO, Processing ticker: JJN\n", + "2026-01-19 22:00:38,869, data_manager.py, 107, INFO, Processing year 2007 for ticker JJN.\n", + "2026-01-19 22:00:38,883, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2007\n", + "2026-01-19 22:00:38,917, data_manager.py, 107, INFO, Processing year 2008 for ticker JJN.\n", + "2026-01-19 22:00:38,934, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2008\n", + "2026-01-19 22:00:38,991, data_manager.py, 107, INFO, Processing year 2009 for ticker JJN.\n", + "2026-01-19 22:00:39,000, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2009\n", + "2026-01-19 22:00:39,058, data_manager.py, 107, INFO, Processing year 2010 for ticker JJN.\n", + "2026-01-19 22:00:39,071, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2010\n", + "2026-01-19 22:00:39,138, data_manager.py, 107, INFO, Processing year 2011 for ticker JJN.\n", + "2026-01-19 22:00:39,156, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2011\n", + "2026-01-19 22:00:39,206, data_manager.py, 107, INFO, Processing year 2012 for ticker JJN.\n", + "2026-01-19 22:00:39,217, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2012\n", + "2026-01-19 22:00:39,270, data_manager.py, 107, INFO, Processing year 2013 for ticker JJN.\n", + "2026-01-19 22:00:39,285, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2013\n", + "2026-01-19 22:00:39,338, data_manager.py, 107, INFO, Processing year 2014 for ticker JJN.\n", + "2026-01-19 22:00:39,349, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2014\n", + "2026-01-19 22:00:39,389, data_manager.py, 107, INFO, Processing year 2015 for ticker JJN.\n", + "2026-01-19 22:00:39,412, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2015\n", + "2026-01-19 22:00:39,465, data_manager.py, 107, INFO, Processing year 2016 for ticker JJN.\n", + "2026-01-19 22:00:39,467, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2016\n", + "2026-01-19 22:00:39,521, data_manager.py, 107, INFO, Processing year 2017 for ticker JJN.\n", + "2026-01-19 22:00:39,541, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2017\n", + "2026-01-19 22:00:39,654, data_manager.py, 107, INFO, Processing year 2018 for ticker JJN.\n", + "2026-01-19 22:00:39,670, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2018\n", + "2026-01-19 22:00:39,733, data_manager.py, 107, INFO, Processing year 2019 for ticker JJN.\n", + "2026-01-19 22:00:39,733, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2019\n", + "2026-01-19 22:00:39,800, data_manager.py, 107, INFO, Processing year 2020 for ticker JJN.\n", + "2026-01-19 22:00:39,800, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/JJN\\JJN_2020\n", + "2026-01-19 22:00:39,866, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\VVI.csv\n", + "2026-01-19 22:00:39,867, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\VVI.csv\n", + "2026-01-19 22:00:39,883, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:39,884, data_manager.py, 103, INFO, Processing ticker: VVI\n", + "2026-01-19 22:00:39,888, data_manager.py, 107, INFO, Processing year 2004 for ticker VVI.\n", + "2026-01-19 22:00:39,899, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2004\n", + "2026-01-19 22:00:39,953, data_manager.py, 107, INFO, Processing year 2005 for ticker VVI.\n", + "2026-01-19 22:00:39,965, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2005\n", + "2026-01-19 22:00:40,003, data_manager.py, 107, INFO, Processing year 2006 for ticker VVI.\n", + "2026-01-19 22:00:40,026, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2006\n", + "2026-01-19 22:00:40,071, data_manager.py, 107, INFO, Processing year 2007 for ticker VVI.\n", + "2026-01-19 22:00:40,087, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2007\n", + "2026-01-19 22:00:40,156, data_manager.py, 107, INFO, Processing year 2008 for ticker VVI.\n", + "2026-01-19 22:00:40,178, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2008\n", + "2026-01-19 22:00:40,228, data_manager.py, 107, INFO, Processing year 2009 for ticker VVI.\n", + "2026-01-19 22:00:40,234, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2009\n", + "2026-01-19 22:00:40,288, data_manager.py, 107, INFO, Processing year 2010 for ticker VVI.\n", + "2026-01-19 22:00:40,300, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2010\n", + "2026-01-19 22:00:40,361, data_manager.py, 107, INFO, Processing year 2011 for ticker VVI.\n", + "2026-01-19 22:00:40,367, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2011\n", + "2026-01-19 22:00:40,422, data_manager.py, 107, INFO, Processing year 2012 for ticker VVI.\n", + "2026-01-19 22:00:40,437, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2012\n", + "2026-01-19 22:00:40,487, data_manager.py, 107, INFO, Processing year 2013 for ticker VVI.\n", + "2026-01-19 22:00:40,499, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2013\n", + "2026-01-19 22:00:40,550, data_manager.py, 107, INFO, Processing year 2014 for ticker VVI.\n", + "2026-01-19 22:00:40,572, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2014\n", + "2026-01-19 22:00:40,617, data_manager.py, 107, INFO, Processing year 2015 for ticker VVI.\n", + "2026-01-19 22:00:40,641, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2015\n", + "2026-01-19 22:00:40,687, data_manager.py, 107, INFO, Processing year 2016 for ticker VVI.\n", + "2026-01-19 22:00:40,697, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2016\n", + "2026-01-19 22:00:40,743, data_manager.py, 107, INFO, Processing year 2017 for ticker VVI.\n", + "2026-01-19 22:00:40,750, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2017\n", + "2026-01-19 22:00:40,812, data_manager.py, 107, INFO, Processing year 2018 for ticker VVI.\n", + "2026-01-19 22:00:40,827, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2018\n", + "2026-01-19 22:00:40,873, data_manager.py, 107, INFO, Processing year 2019 for ticker VVI.\n", + "2026-01-19 22:00:40,893, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2019\n", + "2026-01-19 22:00:40,934, data_manager.py, 107, INFO, Processing year 2020 for ticker VVI.\n", + "2026-01-19 22:00:40,950, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VVI\\VVI_2020\n", + "2026-01-19 22:00:41,017, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\QRTEB.csv\n", + "2026-01-19 22:00:41,017, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\QRTEB.csv\n", + "2026-01-19 22:00:41,038, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:41,040, data_manager.py, 103, INFO, Processing ticker: QRTEB\n", + "2026-01-19 22:00:41,040, data_manager.py, 107, INFO, Processing year 2006 for ticker QRTEB.\n", + "2026-01-19 22:00:41,058, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2006\n", + "2026-01-19 22:00:41,112, data_manager.py, 107, INFO, Processing year 2007 for ticker QRTEB.\n", + "2026-01-19 22:00:41,123, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2007\n", + "2026-01-19 22:00:41,167, data_manager.py, 107, INFO, Processing year 2008 for ticker QRTEB.\n", + "2026-01-19 22:00:41,179, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2008\n", + "2026-01-19 22:00:41,229, data_manager.py, 107, INFO, Processing year 2009 for ticker QRTEB.\n", + "2026-01-19 22:00:41,234, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2009\n", + "2026-01-19 22:00:41,286, data_manager.py, 107, INFO, Processing year 2010 for ticker QRTEB.\n", + "2026-01-19 22:00:41,298, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2010\n", + "2026-01-19 22:00:41,367, data_manager.py, 107, INFO, Processing year 2011 for ticker QRTEB.\n", + "2026-01-19 22:00:41,367, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2011\n", + "2026-01-19 22:00:41,429, data_manager.py, 107, INFO, Processing year 2012 for ticker QRTEB.\n", + "2026-01-19 22:00:41,433, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2012\n", + "2026-01-19 22:00:41,501, data_manager.py, 107, INFO, Processing year 2013 for ticker QRTEB.\n", + "2026-01-19 22:00:41,516, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2013\n", + "2026-01-19 22:00:41,567, data_manager.py, 107, INFO, Processing year 2014 for ticker QRTEB.\n", + "2026-01-19 22:00:41,569, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2014\n", + "2026-01-19 22:00:41,626, data_manager.py, 107, INFO, Processing year 2015 for ticker QRTEB.\n", + "2026-01-19 22:00:41,641, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2015\n", + "2026-01-19 22:00:41,689, data_manager.py, 107, INFO, Processing year 2016 for ticker QRTEB.\n", + "2026-01-19 22:00:41,700, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2016\n", + "2026-01-19 22:00:41,750, data_manager.py, 107, INFO, Processing year 2017 for ticker QRTEB.\n", + "2026-01-19 22:00:41,750, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2017\n", + "2026-01-19 22:00:41,812, data_manager.py, 107, INFO, Processing year 2018 for ticker QRTEB.\n", + "2026-01-19 22:00:41,825, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2018\n", + "2026-01-19 22:00:41,873, data_manager.py, 107, INFO, Processing year 2019 for ticker QRTEB.\n", + "2026-01-19 22:00:41,893, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2019\n", + "2026-01-19 22:00:41,942, data_manager.py, 107, INFO, Processing year 2020 for ticker QRTEB.\n", + "2026-01-19 22:00:41,956, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/QRTEB\\QRTEB_2020\n", + "2026-01-19 22:00:42,000, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\CYRX.csv\n", + "2026-01-19 22:00:42,003, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\CYRX.csv\n", + "2026-01-19 22:00:42,017, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:42,018, data_manager.py, 103, INFO, Processing ticker: CYRX\n", + "2026-01-19 22:00:42,018, data_manager.py, 107, INFO, Processing year 2005 for ticker CYRX.\n", + "2026-01-19 22:00:42,018, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2005\n", + "2026-01-19 22:00:42,088, data_manager.py, 107, INFO, Processing year 2006 for ticker CYRX.\n", + "2026-01-19 22:00:42,099, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2006\n", + "2026-01-19 22:00:42,160, data_manager.py, 107, INFO, Processing year 2007 for ticker CYRX.\n", + "2026-01-19 22:00:42,175, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2007\n", + "2026-01-19 22:00:42,236, data_manager.py, 107, INFO, Processing year 2008 for ticker CYRX.\n", + "2026-01-19 22:00:42,249, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2008\n", + "2026-01-19 22:00:42,302, data_manager.py, 107, INFO, Processing year 2009 for ticker CYRX.\n", + "2026-01-19 22:00:42,316, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2009\n", + "2026-01-19 22:00:42,388, data_manager.py, 107, INFO, Processing year 2010 for ticker CYRX.\n", + "2026-01-19 22:00:42,404, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2010\n", + "2026-01-19 22:00:42,462, data_manager.py, 107, INFO, Processing year 2011 for ticker CYRX.\n", + "2026-01-19 22:00:42,476, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2011\n", + "2026-01-19 22:00:42,522, data_manager.py, 107, INFO, Processing year 2012 for ticker CYRX.\n", + "2026-01-19 22:00:42,545, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2012\n", + "2026-01-19 22:00:42,599, data_manager.py, 107, INFO, Processing year 2013 for ticker CYRX.\n", + "2026-01-19 22:00:42,614, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2013\n", + "2026-01-19 22:00:42,675, data_manager.py, 107, INFO, Processing year 2014 for ticker CYRX.\n", + "2026-01-19 22:00:42,687, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2014\n", + "2026-01-19 22:00:42,738, data_manager.py, 107, INFO, Processing year 2015 for ticker CYRX.\n", + "2026-01-19 22:00:42,750, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2015\n", + "2026-01-19 22:00:42,807, data_manager.py, 107, INFO, Processing year 2016 for ticker CYRX.\n", + "2026-01-19 22:00:42,819, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2016\n", + "2026-01-19 22:00:42,870, data_manager.py, 107, INFO, Processing year 2017 for ticker CYRX.\n", + "2026-01-19 22:00:42,888, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2017\n", + "2026-01-19 22:00:42,945, data_manager.py, 107, INFO, Processing year 2018 for ticker CYRX.\n", + "2026-01-19 22:00:42,958, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2018\n", + "2026-01-19 22:00:43,004, data_manager.py, 107, INFO, Processing year 2019 for ticker CYRX.\n", + "2026-01-19 22:00:43,022, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2019\n", + "2026-01-19 22:00:43,078, data_manager.py, 107, INFO, Processing year 2020 for ticker CYRX.\n", + "2026-01-19 22:00:43,091, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/CYRX\\CYRX_2020\n", + "2026-01-19 22:00:43,141, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\ANAB.csv\n", + "2026-01-19 22:00:43,141, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\ANAB.csv\n", + "2026-01-19 22:00:43,150, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:43,150, data_manager.py, 103, INFO, Processing ticker: ANAB\n", + "2026-01-19 22:00:43,150, data_manager.py, 107, INFO, Processing year 2017 for ticker ANAB.\n", + "2026-01-19 22:00:43,183, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ANAB\\ANAB_2017\n", + "2026-01-19 22:00:43,233, data_manager.py, 107, INFO, Processing year 2018 for ticker ANAB.\n", + "2026-01-19 22:00:43,255, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ANAB\\ANAB_2018\n", + "2026-01-19 22:00:43,316, data_manager.py, 107, INFO, Processing year 2019 for ticker ANAB.\n", + "2026-01-19 22:00:43,340, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ANAB\\ANAB_2019\n", + "2026-01-19 22:00:43,389, data_manager.py, 107, INFO, Processing year 2020 for ticker ANAB.\n", + "2026-01-19 22:00:43,400, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ANAB\\ANAB_2020\n", + "2026-01-19 22:00:43,458, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\VCEL.csv\n", + "2026-01-19 22:00:43,459, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\VCEL.csv\n", + "2026-01-19 22:00:43,486, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:43,488, data_manager.py, 103, INFO, Processing ticker: VCEL\n", + "2026-01-19 22:00:43,488, data_manager.py, 107, INFO, Processing year 1997 for ticker VCEL.\n", + "2026-01-19 22:00:43,502, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_1997\n", + "2026-01-19 22:00:43,554, data_manager.py, 107, INFO, Processing year 1998 for ticker VCEL.\n", + "2026-01-19 22:00:43,567, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_1998\n", + "2026-01-19 22:00:43,619, data_manager.py, 107, INFO, Processing year 1999 for ticker VCEL.\n", + "2026-01-19 22:00:43,631, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_1999\n", + "2026-01-19 22:00:43,682, data_manager.py, 107, INFO, Processing year 2000 for ticker VCEL.\n", + "2026-01-19 22:00:43,695, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2000\n", + "2026-01-19 22:00:43,745, data_manager.py, 107, INFO, Processing year 2001 for ticker VCEL.\n", + "2026-01-19 22:00:43,758, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2001\n", + "2026-01-19 22:00:43,807, data_manager.py, 107, INFO, Processing year 2002 for ticker VCEL.\n", + "2026-01-19 22:00:43,825, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2002\n", + "2026-01-19 22:00:44,064, data_manager.py, 107, INFO, Processing year 2003 for ticker VCEL.\n", + "2026-01-19 22:00:44,084, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2003\n", + "2026-01-19 22:00:44,153, data_manager.py, 107, INFO, Processing year 2004 for ticker VCEL.\n", + "2026-01-19 22:00:44,165, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2004\n", + "2026-01-19 22:00:44,222, data_manager.py, 107, INFO, Processing year 2005 for ticker VCEL.\n", + "2026-01-19 22:00:44,236, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2005\n", + "2026-01-19 22:00:44,291, data_manager.py, 107, INFO, Processing year 2006 for ticker VCEL.\n", + "2026-01-19 22:00:44,305, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2006\n", + "2026-01-19 22:00:44,385, data_manager.py, 107, INFO, Processing year 2007 for ticker VCEL.\n", + "2026-01-19 22:00:44,398, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2007\n", + "2026-01-19 22:00:44,449, data_manager.py, 107, INFO, Processing year 2008 for ticker VCEL.\n", + "2026-01-19 22:00:44,463, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2008\n", + "2026-01-19 22:00:44,518, data_manager.py, 107, INFO, Processing year 2009 for ticker VCEL.\n", + "2026-01-19 22:00:44,531, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2009\n", + "2026-01-19 22:00:44,584, data_manager.py, 107, INFO, Processing year 2010 for ticker VCEL.\n", + "2026-01-19 22:00:44,589, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2010\n", + "2026-01-19 22:00:44,651, data_manager.py, 107, INFO, Processing year 2011 for ticker VCEL.\n", + "2026-01-19 22:00:44,666, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2011\n", + "2026-01-19 22:00:44,722, data_manager.py, 107, INFO, Processing year 2012 for ticker VCEL.\n", + "2026-01-19 22:00:44,735, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2012\n", + "2026-01-19 22:00:44,790, data_manager.py, 107, INFO, Processing year 2013 for ticker VCEL.\n", + "2026-01-19 22:00:44,803, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2013\n", + "2026-01-19 22:00:44,853, data_manager.py, 107, INFO, Processing year 2014 for ticker VCEL.\n", + "2026-01-19 22:00:44,865, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2014\n", + "2026-01-19 22:00:44,911, data_manager.py, 107, INFO, Processing year 2015 for ticker VCEL.\n", + "2026-01-19 22:00:44,932, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2015\n", + "2026-01-19 22:00:44,986, data_manager.py, 107, INFO, Processing year 2016 for ticker VCEL.\n", + "2026-01-19 22:00:44,998, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2016\n", + "2026-01-19 22:00:45,047, data_manager.py, 107, INFO, Processing year 2017 for ticker VCEL.\n", + "2026-01-19 22:00:45,050, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2017\n", + "2026-01-19 22:00:45,106, data_manager.py, 107, INFO, Processing year 2018 for ticker VCEL.\n", + "2026-01-19 22:00:45,122, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2018\n", + "2026-01-19 22:00:45,167, data_manager.py, 107, INFO, Processing year 2019 for ticker VCEL.\n", + "2026-01-19 22:00:45,167, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2019\n", + "2026-01-19 22:00:45,244, data_manager.py, 107, INFO, Processing year 2020 for ticker VCEL.\n", + "2026-01-19 22:00:45,260, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/VCEL\\VCEL_2020\n", + "2026-01-19 22:00:45,309, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\NYT.csv\n", + "2026-01-19 22:00:45,309, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\NYT.csv\n", + "2026-01-19 22:00:45,334, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:45,337, data_manager.py, 103, INFO, Processing ticker: NYT\n", + "2026-01-19 22:00:45,340, data_manager.py, 107, INFO, Processing year 1973 for ticker NYT.\n", + "2026-01-19 22:00:45,353, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1973\n", + "2026-01-19 22:00:45,408, data_manager.py, 107, INFO, Processing year 1974 for ticker NYT.\n", + "2026-01-19 22:00:45,416, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1974\n", + "2026-01-19 22:00:45,472, data_manager.py, 107, INFO, Processing year 1975 for ticker NYT.\n", + "2026-01-19 22:00:45,484, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1975\n", + "2026-01-19 22:00:45,534, data_manager.py, 107, INFO, Processing year 1976 for ticker NYT.\n", + "2026-01-19 22:00:45,550, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1976\n", + "2026-01-19 22:00:45,596, data_manager.py, 107, INFO, Processing year 1977 for ticker NYT.\n", + "2026-01-19 22:00:45,607, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1977\n", + "2026-01-19 22:00:45,650, data_manager.py, 107, INFO, Processing year 1978 for ticker NYT.\n", + "2026-01-19 22:00:45,673, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1978\n", + "2026-01-19 22:00:45,730, data_manager.py, 107, INFO, Processing year 1979 for ticker NYT.\n", + "2026-01-19 22:00:45,734, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1979\n", + "2026-01-19 22:00:45,808, data_manager.py, 107, INFO, Processing year 1980 for ticker NYT.\n", + "2026-01-19 22:00:45,817, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1980\n", + "2026-01-19 22:00:45,884, data_manager.py, 107, INFO, Processing year 1981 for ticker NYT.\n", + "2026-01-19 22:00:45,898, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1981\n", + "2026-01-19 22:00:45,960, data_manager.py, 107, INFO, Processing year 1982 for ticker NYT.\n", + "2026-01-19 22:00:45,971, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1982\n", + "2026-01-19 22:00:46,030, data_manager.py, 107, INFO, Processing year 1983 for ticker NYT.\n", + "2026-01-19 22:00:46,045, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1983\n", + "2026-01-19 22:00:46,128, data_manager.py, 107, INFO, Processing year 1984 for ticker NYT.\n", + "2026-01-19 22:00:46,134, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1984\n", + "2026-01-19 22:00:46,194, data_manager.py, 107, INFO, Processing year 1985 for ticker NYT.\n", + "2026-01-19 22:00:46,200, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1985\n", + "2026-01-19 22:00:46,260, data_manager.py, 107, INFO, Processing year 1986 for ticker NYT.\n", + "2026-01-19 22:00:46,272, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1986\n", + "2026-01-19 22:00:46,323, data_manager.py, 107, INFO, Processing year 1987 for ticker NYT.\n", + "2026-01-19 22:00:46,333, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1987\n", + "2026-01-19 22:00:46,388, data_manager.py, 107, INFO, Processing year 1988 for ticker NYT.\n", + "2026-01-19 22:00:46,403, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1988\n", + "2026-01-19 22:00:46,450, data_manager.py, 107, INFO, Processing year 1989 for ticker NYT.\n", + "2026-01-19 22:00:46,450, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1989\n", + "2026-01-19 22:00:46,508, data_manager.py, 107, INFO, Processing year 1990 for ticker NYT.\n", + "2026-01-19 22:00:46,517, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1990\n", + "2026-01-19 22:00:46,587, data_manager.py, 107, INFO, Processing year 1991 for ticker NYT.\n", + "2026-01-19 22:00:46,599, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1991\n", + "2026-01-19 22:00:46,648, data_manager.py, 107, INFO, Processing year 1992 for ticker NYT.\n", + "2026-01-19 22:00:46,660, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1992\n", + "2026-01-19 22:00:46,720, data_manager.py, 107, INFO, Processing year 1993 for ticker NYT.\n", + "2026-01-19 22:00:46,734, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1993\n", + "2026-01-19 22:00:46,822, data_manager.py, 107, INFO, Processing year 1994 for ticker NYT.\n", + "2026-01-19 22:00:46,845, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1994\n", + "2026-01-19 22:00:46,916, data_manager.py, 107, INFO, Processing year 1995 for ticker NYT.\n", + "2026-01-19 22:00:46,933, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1995\n", + "2026-01-19 22:00:46,985, data_manager.py, 107, INFO, Processing year 1996 for ticker NYT.\n", + "2026-01-19 22:00:46,997, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1996\n", + "2026-01-19 22:00:47,048, data_manager.py, 107, INFO, Processing year 1997 for ticker NYT.\n", + "2026-01-19 22:00:47,050, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1997\n", + "2026-01-19 22:00:47,114, data_manager.py, 107, INFO, Processing year 1998 for ticker NYT.\n", + "2026-01-19 22:00:47,129, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1998\n", + "2026-01-19 22:00:47,213, data_manager.py, 107, INFO, Processing year 1999 for ticker NYT.\n", + "2026-01-19 22:00:47,221, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_1999\n", + "2026-01-19 22:00:47,283, data_manager.py, 107, INFO, Processing year 2000 for ticker NYT.\n", + "2026-01-19 22:00:47,295, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2000\n", + "2026-01-19 22:00:47,338, data_manager.py, 107, INFO, Processing year 2001 for ticker NYT.\n", + "2026-01-19 22:00:47,349, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2001\n", + "2026-01-19 22:00:47,416, data_manager.py, 107, INFO, Processing year 2002 for ticker NYT.\n", + "2026-01-19 22:00:47,429, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2002\n", + "2026-01-19 22:00:47,483, data_manager.py, 107, INFO, Processing year 2003 for ticker NYT.\n", + "2026-01-19 22:00:47,495, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2003\n", + "2026-01-19 22:00:47,547, data_manager.py, 107, INFO, Processing year 2004 for ticker NYT.\n", + "2026-01-19 22:00:47,554, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2004\n", + "2026-01-19 22:00:47,610, data_manager.py, 107, INFO, Processing year 2005 for ticker NYT.\n", + "2026-01-19 22:00:47,616, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2005\n", + "2026-01-19 22:00:47,675, data_manager.py, 107, INFO, Processing year 2006 for ticker NYT.\n", + "2026-01-19 22:00:47,686, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2006\n", + "2026-01-19 22:00:47,739, data_manager.py, 107, INFO, Processing year 2007 for ticker NYT.\n", + "2026-01-19 22:00:47,749, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2007\n", + "2026-01-19 22:00:47,797, data_manager.py, 107, INFO, Processing year 2008 for ticker NYT.\n", + "2026-01-19 22:00:47,800, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2008\n", + "2026-01-19 22:00:47,861, data_manager.py, 107, INFO, Processing year 2009 for ticker NYT.\n", + "2026-01-19 22:00:47,875, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2009\n", + "2026-01-19 22:00:47,920, data_manager.py, 107, INFO, Processing year 2010 for ticker NYT.\n", + "2026-01-19 22:00:47,935, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2010\n", + "2026-01-19 22:00:47,995, data_manager.py, 107, INFO, Processing year 2011 for ticker NYT.\n", + "2026-01-19 22:00:48,012, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2011\n", + "2026-01-19 22:00:48,100, data_manager.py, 107, INFO, Processing year 2012 for ticker NYT.\n", + "2026-01-19 22:00:48,117, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2012\n", + "2026-01-19 22:00:48,171, data_manager.py, 107, INFO, Processing year 2013 for ticker NYT.\n", + "2026-01-19 22:00:48,194, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2013\n", + "2026-01-19 22:00:48,244, data_manager.py, 107, INFO, Processing year 2014 for ticker NYT.\n", + "2026-01-19 22:00:48,259, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2014\n", + "2026-01-19 22:00:48,302, data_manager.py, 107, INFO, Processing year 2015 for ticker NYT.\n", + "2026-01-19 22:00:48,328, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2015\n", + "2026-01-19 22:00:48,373, data_manager.py, 107, INFO, Processing year 2016 for ticker NYT.\n", + "2026-01-19 22:00:48,394, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2016\n", + "2026-01-19 22:00:48,433, data_manager.py, 107, INFO, Processing year 2017 for ticker NYT.\n", + "2026-01-19 22:00:48,450, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2017\n", + "2026-01-19 22:00:48,503, data_manager.py, 107, INFO, Processing year 2018 for ticker NYT.\n", + "2026-01-19 22:00:48,517, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2018\n", + "2026-01-19 22:00:48,570, data_manager.py, 107, INFO, Processing year 2019 for ticker NYT.\n", + "2026-01-19 22:00:48,582, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2019\n", + "2026-01-19 22:00:48,624, data_manager.py, 107, INFO, Processing year 2020 for ticker NYT.\n", + "2026-01-19 22:00:48,633, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/NYT\\NYT_2020\n", + "2026-01-19 22:00:48,687, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\ACC.csv\n", + "2026-01-19 22:00:48,689, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\ACC.csv\n", + "2026-01-19 22:00:48,716, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:48,718, data_manager.py, 103, INFO, Processing ticker: ACC\n", + "2026-01-19 22:00:48,722, data_manager.py, 107, INFO, Processing year 2004 for ticker ACC.\n", + "2026-01-19 22:00:48,738, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2004\n", + "2026-01-19 22:00:48,786, data_manager.py, 107, INFO, Processing year 2005 for ticker ACC.\n", + "2026-01-19 22:00:48,797, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2005\n", + "2026-01-19 22:00:48,843, data_manager.py, 107, INFO, Processing year 2006 for ticker ACC.\n", + "2026-01-19 22:00:48,850, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2006\n", + "2026-01-19 22:00:48,916, data_manager.py, 107, INFO, Processing year 2007 for ticker ACC.\n", + "2026-01-19 22:00:48,931, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2007\n", + "2026-01-19 22:00:48,981, data_manager.py, 107, INFO, Processing year 2008 for ticker ACC.\n", + "2026-01-19 22:00:48,994, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2008\n", + "2026-01-19 22:00:49,049, data_manager.py, 107, INFO, Processing year 2009 for ticker ACC.\n", + "2026-01-19 22:00:49,062, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2009\n", + "2026-01-19 22:00:49,116, data_manager.py, 107, INFO, Processing year 2010 for ticker ACC.\n", + "2026-01-19 22:00:49,120, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2010\n", + "2026-01-19 22:00:49,187, data_manager.py, 107, INFO, Processing year 2011 for ticker ACC.\n", + "2026-01-19 22:00:49,197, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2011\n", + "2026-01-19 22:00:49,249, data_manager.py, 107, INFO, Processing year 2012 for ticker ACC.\n", + "2026-01-19 22:00:49,250, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2012\n", + "2026-01-19 22:00:49,314, data_manager.py, 107, INFO, Processing year 2013 for ticker ACC.\n", + "2026-01-19 22:00:49,321, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2013\n", + "2026-01-19 22:00:49,370, data_manager.py, 107, INFO, Processing year 2014 for ticker ACC.\n", + "2026-01-19 22:00:49,386, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2014\n", + "2026-01-19 22:00:49,434, data_manager.py, 107, INFO, Processing year 2015 for ticker ACC.\n", + "2026-01-19 22:00:49,449, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2015\n", + "2026-01-19 22:00:49,498, data_manager.py, 107, INFO, Processing year 2016 for ticker ACC.\n", + "2026-01-19 22:00:49,500, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2016\n", + "2026-01-19 22:00:49,559, data_manager.py, 107, INFO, Processing year 2017 for ticker ACC.\n", + "2026-01-19 22:00:49,573, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2017\n", + "2026-01-19 22:00:49,638, data_manager.py, 107, INFO, Processing year 2018 for ticker ACC.\n", + "2026-01-19 22:00:49,650, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2018\n", + "2026-01-19 22:00:49,702, data_manager.py, 107, INFO, Processing year 2019 for ticker ACC.\n", + "2026-01-19 22:00:49,724, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2019\n", + "2026-01-19 22:00:49,773, data_manager.py, 107, INFO, Processing year 2020 for ticker ACC.\n", + "2026-01-19 22:00:49,786, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/ACC\\ACC_2020\n", + "2026-01-19 22:00:49,835, data_manager.py, 90, INFO, Processing file ../../05_src/data/prices_csv\\stocks\\KBSF.csv\n", + "2026-01-19 22:00:49,836, data_manager.py, 121, INFO, Reading file: ../../05_src/data/prices_csv\\stocks\\KBSF.csv\n", + "2026-01-19 22:00:49,860, data_manager.py, 101, INFO, Saving data by year\n", + "2026-01-19 22:00:49,861, data_manager.py, 103, INFO, Processing ticker: KBSF\n", + "2026-01-19 22:00:49,867, data_manager.py, 107, INFO, Processing year 2013 for ticker KBSF.\n", + "2026-01-19 22:00:49,884, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2013\n", + "2026-01-19 22:00:49,934, data_manager.py, 107, INFO, Processing year 2014 for ticker KBSF.\n", + "2026-01-19 22:00:49,950, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2014\n", + "2026-01-19 22:00:50,004, data_manager.py, 107, INFO, Processing year 2015 for ticker KBSF.\n", + "2026-01-19 22:00:50,018, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2015\n", + "2026-01-19 22:00:50,065, data_manager.py, 107, INFO, Processing year 2016 for ticker KBSF.\n", + "2026-01-19 22:00:50,073, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2016\n", + "2026-01-19 22:00:50,135, data_manager.py, 107, INFO, Processing year 2017 for ticker KBSF.\n", + "2026-01-19 22:00:50,146, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2017\n", + "2026-01-19 22:00:50,194, data_manager.py, 107, INFO, Processing year 2018 for ticker KBSF.\n", + "2026-01-19 22:00:50,206, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2018\n", + "2026-01-19 22:00:50,259, data_manager.py, 107, INFO, Processing year 2019 for ticker KBSF.\n", + "2026-01-19 22:00:50,266, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2019\n", + "2026-01-19 22:00:50,337, data_manager.py, 107, INFO, Processing year 2020 for ticker KBSF.\n", + "2026-01-19 22:00:50,357, data_manager.py, 111, INFO, Writing data to path: ../../05_src/data/prices/KBSF\\KBSF_2020\n" + ] + } + ], + "source": [ + "dm.process_sample_files()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, add features to the data set and save to a *feature store*." + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-01-19 22:00:52,745, data_manager.py, 134, INFO, Creating features data.\n", + "2026-01-19 22:00:52,746, data_manager.py, 144, INFO, Loading price data from ../../05_src/data/prices/\n", + "2026-01-19 22:00:53,246, data_manager.py, 153, INFO, Creating features\n", + "2026-01-19 22:00:53,254, data_manager.py, 184, INFO, Saving features to ../../05_src/data/features/stock_features.parquet\n" + ] + } + ], + "source": [ + "dm.featurize()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -165,7 +5088,7 @@ ], "metadata": { "kernelspec": { - "display_name": "env", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -179,7 +5102,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.12.1" } }, "nbformat": 4,