投資組合大擂台 Ver. 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

66 lines
2.7 KiB

import pandas as pd
import json
import yfinance as yf
import numpy as np
import psycopg2
from psycopg2.extras import execute_values
from tqdm import tqdm
import datetime
import schedule
import time
from config import SQL_CONFIG
#SQL setting
def update_data():
# Connect to the database
conn = psycopg2.connect(**SQL_CONFIG)
cursor = conn.cursor()
print("Stock prices US updating")
# Get the list of tickers
cursor.execute("SELECT DISTINCT ticker FROM stock_price")
tickers = [row[0] for row in cursor.fetchall()]
for ticker in tqdm(tickers):
# Get the latest date for this ticker
cursor.execute(f"SELECT MAX(date) FROM stock_price WHERE ticker = '{ticker}'")
latest_date = cursor.fetchone()[0]
# If the latest date is not today, update the data
if latest_date < datetime.date.today():
df = yf.download(ticker, start=latest_date.strftime('%Y-%m-%d'),
end=datetime.date.today().strftime('%Y-%m-%d'), progress=False)
value = [(ticker, df.index[i], df['Close'][i]) for i in range(len(df))]
with conn:
with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs:
sql = "insert into stock_price (ticker, date, price) values %s"
execute_values(curs, sql, value)
print("Stock prices US updated")
def update_data_tw():
# Connect to the database
conn = psycopg2.connect(**SQL_CONFIG)
cursor = conn.cursor()
print("Stock prices US updating")
# Get the list of tickers
cursor.execute("SELECT DISTINCT ticker FROM stock_price_tw")
tickers = [row[0] for row in cursor.fetchall()]
for ticker in tqdm(tickers):
# Get the latest date for this ticker
cursor.execute(f"SELECT MAX(date) FROM stock_price_tw WHERE ticker = '{ticker}'")
latest_date = cursor.fetchone()[0]
# If the latest date is not today, update the data
if latest_date < datetime.date.today():
df = yf.download(ticker, start=latest_date.strftime('%Y-%m-%d'),
end=datetime.date.today().strftime('%Y-%m-%d'), progress=False)
value = [(ticker, df.index[i], df['Close'][i]) for i in range(len(df))]
with conn:
with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs:
sql = "insert into stock_price_tw (ticker, date, price) values %s"
execute_values(curs, sql, value)
print("Stock prices TW updated")
# Schedule the task
schedule.every().day.at("17:00").do(update_data)
schedule.every().day.at("18:00").do(update_data_tw)
# Keep the script running
while True:
schedule.run_pending()
time.sleep(1)