93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
import csv
|
|
import copy
|
|
from datetime import datetime
|
|
from database import Database
|
|
from data.indicators.sma import calculate_sma
|
|
from model.sma import Sma
|
|
from model.ticker import Ticker
|
|
|
|
|
|
database = Database()
|
|
|
|
|
|
def load_database(chunk_size=100000):
|
|
database.drop_tables()
|
|
database.create_tables()
|
|
|
|
with open("./data/output/tickers.csv") as file:
|
|
try:
|
|
rows = []
|
|
reader = csv.DictReader(file)
|
|
total = 0
|
|
for row in reader:
|
|
ticker = Ticker(
|
|
date=datetime.strptime(row.get("date"), "%Y-%m-%d").date(),
|
|
symbol=row.get("symbol"),
|
|
open=row.get("open"),
|
|
high=row.get("high"),
|
|
low=row.get("low"),
|
|
close=row.get("close"),
|
|
volume=row.get("volume")
|
|
)
|
|
rows.append(ticker)
|
|
|
|
if len(rows) >= chunk_size:
|
|
database.session.bulk_save_objects(rows)
|
|
database.session.commit()
|
|
total += chunk_size
|
|
print(f"{total} rows inserted")
|
|
rows = []
|
|
|
|
# Insert any remaining rows.
|
|
if rows:
|
|
database.session.bulk_save_objects(rows)
|
|
database.session.commit()
|
|
total += len(rows)
|
|
print(f"{total} inserted")
|
|
except Exception as e:
|
|
import pprint
|
|
pprint.pprint(e)
|
|
|
|
|
|
def create_sma():
|
|
from sqlalchemy import distinct
|
|
|
|
database.drop_table("sma")
|
|
database.create_tables()
|
|
|
|
sma_periods = [5, 10, 20, 50, 100, 200]
|
|
symbols = database.session.query(distinct(Ticker.symbol)).all()
|
|
count = 0
|
|
for symbol in symbols:
|
|
try:
|
|
daily_ticker_data = database.session.query(Ticker).filter_by(symbol=symbol[0]).all()
|
|
daily_ticker_data = [ticker.to_dict() for ticker in daily_ticker_data]
|
|
|
|
smas = {}
|
|
for period in sma_periods:
|
|
data = copy.deepcopy(daily_ticker_data)
|
|
sma_data = calculate_sma(data, period)
|
|
smas[period] = sma_data
|
|
|
|
for i in range(len(daily_ticker_data)):
|
|
row = Sma(
|
|
date=daily_ticker_data[i]['date'],
|
|
symbol=symbol[0],
|
|
sma_5=smas[5][i]['SMA'],
|
|
sma_10=smas[10][i]['SMA'],
|
|
sma_20=smas[20][i]['SMA'],
|
|
sma_50=smas[50][i]['SMA'],
|
|
sma_100=smas[100][i]['SMA'],
|
|
sma_200=smas[200][i]['SMA']
|
|
)
|
|
database.session.add(row)
|
|
database.session.commit()
|
|
count += 1
|
|
print(f"finished {symbol[0]}: {count} of {len(symbols)}")
|
|
except Exception as e:
|
|
print(e)
|
|
database.session.rollback()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
create_sma() |