This article is only available in Swedish.

Automatisera Piotroski F-Score för svenska aktier

En genomgång av Piotroski F-Score och hur du använder BörsAPI för att bygga en automatisk kvalitets-screener för svenska börsbolag.

July 10, 20267 min läsning

Piotroski F-Score är ett poängsystem mellan 0 och 9 som utvecklades av professorn Joseph Piotroski för att snabbt utvärdera den finansiella hälsan och kvaliteten hos ett bolag. Genom att kombinera 9 olika kriterier kan du gallra bort finansiellt svaga bolag från dina investeringar.

De 9 Kriterierna i F-Score

F-Score ger 1 poäng för varje uppfyllt kriterium inom tre huvudkategorier:

1. Lönsamhet (Profitability)

  • Positiv nettovinst: Vinst för året är större än noll.
  • Positivt kassaflöde: Kassaflöde från den löpande verksamheten är större än noll.
  • Ökad ROA (Return on Assets): Årets ROA är högre än föregående års ROA.
  • Kvalitet på vinsten: Det löpande kassaflödet är större än nettovinsten.

2. Hävstång och Likviditet (Leverage / Liquidity)

  • Minskad hävstång: Långfristiga skulder i förhållande till tillgångar har minskat jämfört med förra året.
  • Ökad likviditet: Balanslikviditeten (Current Ratio) har ökat jämfört med förra året.
  • Ingen utspädning: Inga nya aktier har emitterats under året (antalet utestående aktier har inte ökat).

3. Operationell Effektivitet (Operating Efficiency)

  • Ökad bruttomarginal: Årets bruttomarginal är högre än föregående års.
  • Ökad kapitalomsättningshastighet: Tillgångarnas omsättningshastighet har ökat jämfört med föregående år.

Python-kod för att räkna ut F-Score

Här är ett färdigt Python-script som hämtar data från BörsAPI och automatiskt kalkylera Piotroski F-Score för ett bolag baserat på de två senaste årsredovisningarna.

import requests

API_KEY = "fd_din_api_nyckel_här"
COMPANY_ISIN = "SE0000115446" # Volvo AB

url = f"https://borsapi.se/api/v1/companies/{COMPANY_ISIN}/reports?period_type=year"
headers = {"Authorization": f"Bearer {API_KEY}", "Accept": "application/json"}

resp = requests.get(url, headers=headers)
if resp.status_code == 200:
    reports = sorted(resp.json(), key=lambda x: x["period"])
    
    # Hämta de två senaste åren (t.ex. 2023 och 2024)
    if len(reports) >= 2:
        r_prev = reports[-2] # Föregående år
        r_curr = reports[-1] # Innevarande år
        
        f_score = 0
        notes = []
        
        # 1. Positiv vinst
        net_curr = r_curr.get("net_income", 0) or 0
        if net_curr > 0:
            f_score += 1
            notes.append("Positiv vinst (+1)")
            
        # 2. Positivt operativt kassaflöde
        ocf_curr = r_curr.get("operating_cash_flow", 0) or 0
        if ocf_curr > 0:
            f_score += 1
            notes.append("Positivt kassaflöde (+1)")
            
        # 3. ROA-ökning
        assets_curr = r_curr.get("total_assets", 1) or 1
        assets_prev = r_prev.get("total_assets", 1) or 1
        net_prev = r_prev.get("net_income", 0) or 0
        
        roa_curr = net_curr / assets_curr
        roa_prev = net_prev / assets_prev
        if roa_curr > roa_prev:
            f_score += 1
            notes.append("Ökad ROA (+1)")
            
        # 4. Kassaflöde > Vinst
        if ocf_curr > net_curr:
            f_score += 1
            notes.append("Kassaflöde > Vinst (+1)")
            
        # 5. Minskad skuldgrad (hävstång)
        liab_curr = r_curr.get("total_liabilities", 0) or 0
        liab_prev = r_prev.get("total_liabilities", 0) or 0
        lev_curr = liab_curr / assets_curr
        lev_prev = liab_prev / assets_prev
        if lev_curr < lev_prev:
            f_score += 1
            notes.append("Minskad skuldgrad (+1)")
            
        # 6. Ökad likviditet (balanslikviditet)
        curr_assets_curr = r_curr.get("total_current_assets", 0) or 0
        curr_assets_prev = r_prev.get("total_current_assets", 0) or 0
        # Enkel uppskattning för kortfristiga skulder om ej specifikt angivet
        curr_liab_curr = liab_curr * 0.5 
        curr_liab_prev = liab_prev * 0.5
        
        liq_curr = curr_assets_curr / curr_liab_curr if curr_liab_curr > 0 else 0
        liq_prev = curr_assets_prev / curr_liab_prev if curr_liab_prev > 0 else 0
        if liq_curr > liq_prev:
            f_score += 1
            notes.append("Ökad likviditet (+1)")
            
        # 7. Ingen utspädning (antag shares_outstanding)
        shares_curr = r_curr.get("shares_outstanding", 1) or 1
        shares_prev = r_prev.get("shares_outstanding", 1) or 1
        if shares_curr <= shares_prev:
            f_score += 1
            notes.append("Ingen aktieutspädning (+1)")
            
        # 8. Ökad bruttomarginal
        rev_curr = r_curr.get("revenue", 1) or 1
        rev_prev = r_prev.get("revenue", 1) or 1
        gp_curr = r_curr.get("gross_profit", 0) or 0
        gp_prev = r_prev.get("gross_profit", 0) or 0
        
        gm_curr = gp_curr / rev_curr
        gm_prev = gp_prev / rev_prev
        if gm_curr > gm_prev:
            f_score += 1
            notes.append("Ökad bruttomarginal (+1)")
            
        # 9. Ökad tillgångsomsättning
        turnover_curr = rev_curr / assets_curr
        turnover_prev = rev_prev / assets_prev
        if turnover_curr > turnover_prev:
            f_score += 1
            notes.append("Ökad tillgångsomsättning (+1)")
            
        print(f"Piotroski F-Score: {f_score}/9")
        print("Detaljer:")
        for note in notes:
            print(f" - {note}")
    else:
        print("För få årsredovisningar tillgängliga för att räkna ut F-Score.")
else:
    print(f"Ett fel uppstod: {resp.text}")

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.

1. Skapa konto

Registrera dig på några sekunder via registreringssidan.

2. Generera API-nyckel

Gå till din Dashboard och klicka på "Generera API-nyckel".

3. Anslut i mallen

Ersätt placeholder-nyckeln i källkoden eller kalkylarket med din personliga nyckel.

    Automatisera Piotroski F-Score för svenska aktier - BörsAPI.se