Using FamaFrenchΒΆ

Notebooks for this code: python; R.

"""This example illustrates how to use the Fama-French dataset."""

import sys
sys.path.append("..")
    
from sqlalchemy import func, text
from plutoPy.model import RoutingSession, FamaFrench

# show data-ranges for Fama-french factors

results = (RoutingSession.session.query(FamaFrench.FiveFactor3x2Daily.KEY_ID, 
                                        func.min(FamaFrench.FiveFactor3x2Daily.TIME_STAMP).label("start_dt"), 
                                        func.max(FamaFrench.FiveFactor3x2Daily.TIME_STAMP).label("end_dt"))
            .group_by(FamaFrench.FiveFactor3x2Daily.KEY_ID)
            .all())

print(f"fetched: {len(results)}")
for instance in results:
    print(instance)

# show data-ranges for Fama-french industry daily returns

results = (RoutingSession.session.query(FamaFrench.Industry49Daily.KEY_ID,
                                        FamaFrench.Industry49Daily.RET_TYPE, 
                                        func.min(FamaFrench.Industry49Daily.TIME_STAMP).label("start_dt"), 
                                        func.max(FamaFrench.Industry49Daily.TIME_STAMP).label("end_dt"))
            .group_by(FamaFrench.Industry49Daily.KEY_ID, FamaFrench.Industry49Daily.RET_TYPE)
            .order_by(text("start_dt"))
            .all())

print(f"fetched: {len(results)}")
for instance in results:
    print(instance)
    
# show data-ranges for Fama-french momentum daily returns

results = (RoutingSession.session.query(FamaFrench.MomentumDaily.KEY_ID, 
                                        FamaFrench.MomentumDaily.RET_TYPE,
                                        func.min(FamaFrench.MomentumDaily.TIME_STAMP).label("start_dt"), 
                                        func.max(FamaFrench.MomentumDaily.TIME_STAMP).label("end_dt"))
            .group_by(FamaFrench.MomentumDaily.KEY_ID, FamaFrench.MomentumDaily.RET_TYPE)
            .order_by(text("start_dt"))
            .all())

print(f"fetched: {len(results)}")
for instance in results:
    print(instance)  
    
    
# show data-ranges for Fama-french momentum daily returns

results = (RoutingSession.session.query(FamaFrench.MomentumMonthly.KEY_ID, 
                                        FamaFrench.MomentumMonthly.RET_TYPE,
                                        func.min(FamaFrench.MomentumMonthly.TIME_STAMP).label("start_dt"), 
                                        func.max(FamaFrench.MomentumMonthly.TIME_STAMP).label("end_dt"))
            .group_by(FamaFrench.MomentumMonthly.KEY_ID, FamaFrench.MomentumMonthly.RET_TYPE)
            .order_by(text("start_dt"))
            .all())

print(f"fetched: {len(results)}")
for instance in results:
    print(instance)