Load stocks and monthly returns into the model
Three CSV files list eligible stocks, monthly index returns, and each
stock’s monthly returns. pd.read_csv(...) loads each file into a
DataFrame.
Stock.new(...) and ReturnMonth.new(...) define base facts from the stock
and index-return DataFrames. The code groups stocks by sector and uses
Stock.monthly_return(...) to connect each stock to its monthly return,
giving the model the history needed to compare a proposed basket’s
returns with the index.
stocks_csv = pd.read_csv(DATA_DIR / "stocks.csv")index_returns_csv = pd.read_csv(DATA_DIR / "index_returns.csv")stock_returns_csv = pd.read_csv(DATA_DIR / "stock_returns.csv")
model.define(Stock.new(model.data(stocks_csv).to_schema()))
model.define(Sector.new(sector_name=Stock.sector))model.define(Stock.sector_ref(Sector)).where(Stock.sector == Sector.sector_name)model.define( Sector.benchmark_weight(sum(Stock.benchmark_weight).where(Stock.sector_ref(Sector)).per(Sector)))
model.define(ReturnMonth.new(model.data(index_returns_csv).to_schema()))
def map_stock_returns() -> None: stock_return_data = model.data(stock_returns_csv) model.define(Stock.monthly_return(ReturnMonth, stock_return_data["return"])).where( Stock.ticker(stock_return_data.ticker), ReturnMonth.date(stock_return_data.date), )
map_stock_returns()stocks_csv = pd.read_csv(DATA_DIR / "stocks.csv")index_returns_csv = pd.read_csv(DATA_DIR / "index_returns.csv")stock_returns_csv = pd.read_csv(DATA_DIR / "stock_returns.csv")
model.define(Stock.new(model.data(stocks_csv).to_schema()))
model.define(Sector.new(sector_name=Stock.sector))model.define(Stock.sector_ref(Sector)).where(Stock.sector == Sector.sector_name)model.define( Sector.benchmark_weight(sum(Stock.benchmark_weight).where(Stock.sector_ref(Sector)).per(Sector)))
model.define(ReturnMonth.new(model.data(index_returns_csv).to_schema()))
def map_stock_returns() -> None: stock_return_data = model.data(stock_returns_csv) model.define(Stock.monthly_return(ReturnMonth, stock_return_data["return"])).where( Stock.ticker(stock_return_data.ticker), ReturnMonth.date(stock_return_data.date), )
map_stock_returns()