Skip to content

Instantly share code, notes, and snippets.

View HumanRupert's full-sized avatar
:shipit:

Ali HumanRupert

:shipit:
View GitHub Profile
@HumanRupert
HumanRupert / ff3fm_factors
Last active January 22, 2021 08:43
Visualize factors for Fama-French Three Factor Modal
from datetime import datetime
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
factors = pd.read_csv("./factors.csv", index_col="Date")
# convert Date index to datetime object
factors.index= pd.to_datetime(factors.index, format="%Y%m%d")
@HumanRupert
HumanRupert / amzn_returns.py
Last active January 23, 2021 07:20
AMZN excess monthly returns
import yfinance as yf
import pandas as pd
amzn = yf.Ticker("AMZN")
hist = amzn.history(period="max", auto_adjust=True, rounding=False)
price = hist[["Close"]]
monthly_price = price.resample('BM').last()
# calculate monthly returns
@HumanRupert
HumanRupert / ff3fm_factors.py
Created January 24, 2021 07:06
ff3fm_factors
factors = pd.read_csv("./data/factors.csv", index_col="Date")
# convert Date index to datetime object
factors.index= pd.to_datetime(factors.index, format="%Y%m%d")
# get monthly avg
factors = factors.resample('BM').mean()
factors_cum = factors.cumsum()
factors_cum.plot.line()
import yfinance as yf
import pandas as pd
etsy = yf.Ticker("ETSY")
hist = etsy.history(period="max", auto_adjust=True, rounding=False)
price = hist[["Close"]]
# resample by latest monthly price
monthly_price = price.resample('BM').last()
import statsmodels.api as sm
# join factors to returns dfs
data = factors.join(excess_returns).dropna()
y = data[["Returns"]]
x = data[["Mkt-RF","SMB","HML"]]
ols = sm.OLS(y,x)
latest_factors = factors.tail(1).to_dict('r')[0]
RRR = latest_factors["RF"]
RRR += betas["Mkt-RF"] * latest_factors["Mkt-RF"]
RRR += betas["SMB"] * latest_factors["SMB"]
RRR += betas["HML"] * latest_factors["HML"]
print(f"Required rate of return is: {RRR}")
# src/constants.py
DJIA_CONSTITUENTS_URL = "https://financialmodelingprep.com/api/v3/dowjones_constituent"
# src/models/constituent.py
from pydantic import BaseModel
class Constituent(BaseModel):
"""Represents a ticker received from FMP API when retrieving constituents of an index; see `price.load_djia_constituents` method."""
symbol: str
name: str
sector: str
# src/price/djia.py
import os
import csv
from typing import List
import requests
from dotenv import load_dotenv
from pydantic import parse_obj_as
# src/price/endpoints.py
DJIA_CONSTITUENTS = "https://financialmodelingprep.com/api/v3/dowjones_constituent"