Bygg en Magic Formula-screener för svenska aktier
Lär dig hur du använder Joel Greenblatts klassiska Magic Formula-strategi och automatiserar din screening av svenska aktier med BörsAPI.
Joel Greenblatts "Magic Formula" är en av de mest kända kvantitativa värderingsstrategierna i världen. Den syftar till att hitta billiga men kvalitativa bolag genom att ranka aktier baserat på två nyckeltal: Earnings Yield (vinstavkastning) och Return on Capital (avkastning på kapitalet).
De två pelarna i formeln
Formeln rankar bolag efter följande två nyckeltal och slår samman deras rankningspoäng för att hitta de mest köpvärda aktierna:
- Earnings Yield (EBIT / EV): Rörelseresultat (EBIT) dividerat med Enterprise Value (EV). Detta visar hur mycket rörelsevinst du får per krona bolaget värderas till (inklusive nettoskuld).
- Return on Capital (ROIC): Rörelseresultat (EBIT) dividerat med det arbetande kapitalet (sysselsatt kapital). Detta mäter hur effektivt bolaget genererar vinst på det investerade kapitalet.
Hämta data och beräkna med Python
Nedan hittar du ett färdigt Python-skript som hämtar bolag från BörsAPI, hämtar deras senaste helårsrapporter och beräknar nyckeltalen för att skapa en topplista.
import requests
import pandas as pd
API_KEY = "fd_din_api_nyckel_här"
BASE_URL = "https://borsapi.se/api/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Accept": "application/json"
}
def get_screener_data():
# 1. Hämta de första 100 bolagen
companies_url = f"{BASE_URL}/companies?limit=100"
resp = requests.get(companies_url, headers=headers)
if resp.status_code != 200:
print("Kunde inte hämta bolag")
return []
companies = resp.json()
screener_list = []
for c in companies:
isin = c["id"]
# Hämta rapporter för helåret 2024
report_url = f"{BASE_URL}/companies/{isin}/reports?period_type=year"
r_resp = requests.get(report_url, headers=headers)
if r_resp.status_code == 200:
reports = r_resp.json()
r_2024 = next((r for r in reports if r["period"] == "2024"), None)
if r_2024 and r_2024.get("revenue") and r_2024.get("operating_income"):
ebit = r_2024["operating_income"]
assets = r_2024.get("total_assets")
equity = r_2024.get("total_equity")
liabilities = r_2024.get("total_liabilities", 0)
# Antag ett fiktivt börsvärde för enkelhetens skull i detta exempel
market_cap = 5000000000 # 5 miljarder SEK
# EV = Market Cap + Skulder - Kassa (här förenklat med liabilities)
ev = market_cap + liabilities
# Beräkna nyckeltal
earnings_yield = ebit / ev if ev > 0 else 0
working_capital = assets - liabilities if assets and liabilities else 1
roic = ebit / working_capital if working_capital > 0 else 0
screener_list.append({
"name": c["name"],
"ticker": c["ticker"],
"earnings_yield": earnings_yield,
"roic": roic
})
return screener_list
data = get_screener_data()
df = pd.DataFrame(data)
# Rankning
df["ey_rank"] = df["earnings_yield"].rank(ascending=False)
df["roic_rank"] = df["roic"].rank(ascending=False)
df["total_rank"] = df["ey_rank"] + df["roic_rank"]
# Sortera fram de bästa bolagen (lägst total rank)
top_companies = df.sort_values(by="total_rank").head(10)
print(top_companies[["name", "ticker", "earnings_yield", "roic", "total_rank"]])Kom igång med BörsAPI
För att använda dessa mallar och skript behöver du ett personligt konto och en API-nyckel. Det är helt kostnadsfritt under vår beta-period.
Registrera dig på några sekunder via registreringssidan.
Gå till din Dashboard och klicka på "Generera API-nyckel".
Ersätt placeholder-nyckeln i källkoden eller kalkylarket med din personliga nyckel.