Files
docker-configs/backtest/restructure_database.py
2025-07-18 00:00:01 -05:00

80 lines
2.7 KiB
Python
Executable File

import sqlite3
import pandas as pd
from tqdm import tqdm
def restructure_database():
"""Restructure database to have individual tables per ticker"""
conn = sqlite3.connect('data/stock_data.db')
# Get list of all tickers
tickers_df = pd.read_sql_query('SELECT DISTINCT ticker FROM stock_prices ORDER BY ticker', conn)
tickers = tickers_df['ticker'].tolist()
print(f"Restructuring data for {len(tickers)} tickers...")
cursor = conn.cursor()
# Create ticker_list table
cursor.execute('DROP TABLE IF EXISTS ticker_list')
cursor.execute('''
CREATE TABLE ticker_list (
ticker TEXT PRIMARY KEY,
records INTEGER
)
''')
for ticker in tqdm(tickers, desc="Creating ticker tables"):
try:
# Get data for this ticker
ticker_data = pd.read_sql_query('''
SELECT date, open, high, low, close, volume
FROM stock_prices
WHERE ticker = ?
ORDER BY date
''', conn, params=(ticker,))
if len(ticker_data) > 0:
# Create individual table for this ticker
table_name = ticker.lower()
cursor.execute(f'DROP TABLE IF EXISTS {table_name}')
cursor.execute(f'''
CREATE TABLE {table_name} (
date DATE PRIMARY KEY,
open REAL,
high REAL,
low REAL,
close REAL,
volume INTEGER
)
''')
# Insert data
for _, row in ticker_data.iterrows():
cursor.execute(f'''
INSERT INTO {table_name}
(date, open, high, low, close, volume)
VALUES (?, ?, ?, ?, ?, ?)
''', (
row['date'], row['open'], row['high'],
row['low'], row['close'], row['volume']
))
# Update ticker_list
cursor.execute('''
INSERT INTO ticker_list (ticker, records)
VALUES (?, ?)
''', (ticker, len(ticker_data)))
print(f" {ticker}: {len(ticker_data)} records")
except Exception as e:
print(f" Error processing {ticker}: {e}")
continue
conn.commit()
conn.close()
print("Database restructuring completed!")
if __name__ == "__main__":
restructure_database()