Willkommen zu unserem umfassenden Tutorial über die Aufbereitung und Bereinigung von CSV-Daten für das Backtesting von Kryptowährungs-Strategien. In der Welt des algorithmischen Handels ist die Qualität Ihrer Eingabedaten entscheidend für den Erfolg Ihrer Strategien. Bevor wir uns den technischen Details widmen, möchten wir Ihnen zunächst einen Vergleich der verfügbaren Optionen für die Datenverarbeitung und API-Integration präsentieren.

HolySheep AI vs. Offizielle APIs vs. Andere Relay-Dienste

Feature HolySheep AI Offizielle APIs Andere Relay-Dienste
Preis pro 1M Tokens GPT-4.1: $8
Claude Sonnet 4.5: $15
DeepSeek V3.2: $0.42
GPT-4.1: $30
Claude Sonnet 4.5: $45
DeepSeek V3.2: $2.80
$10-50+ je nach Anbieter
Wechselkurs ¥1 = $1 (85%+ Ersparnis) USD nur Oft nur USD
Bezahlmethoden WeChat, Alipay, Kreditkarte Nur Kreditkarte Variiert
Latenz <50ms 100-300ms 80-200ms
Kostenlose Credits Ja, bei Registrierung Nein Selten
API-Endpunkt api.holysheep.ai/v1 api.openai.com Variiert
Deutsche Unterstützung Ja, deutschsprachiger Support Begrenzt Variiert

Geeignet / Nicht geeignet für

HolySheep AI ist besonders geeignet für:

Weniger geeignet für:

Preise und ROI

Die Preisgestaltung von HolySheep AI bietet einen überzeugenden Return on Investment für Kryptowährungs-Backtesting-Projekte:

Rechenbeispiel ROI: Wenn Sie monatlich 10 Millionen Tokens für Ihre Backtesting-Workflows verbrauchen, sparen Sie mit HolySheep gegenüber der offiziellen API bis zu $245 monatlich — das entspricht einer jährlichen Ersparnis von fast $3.000.

Warum HolySheep wählen

Als erfahrener Kryptowährungs-Analyst habe ich im Laufe der Jahre zahlreiche API-Dienste und Datenverarbeitungstools getestet. HolySheep AI sticht durch folgende Vorteile heraus:

  1. Beispiellose Kosteneffizienz: Der Yuan-Dollar-Peg ermöglicht es mir, meine gesamten Backtesting-Workflows zu einem Bruchteil der Kosten durchzuführen, ohne Qualitätseinbußen.
  2. Blitzschnelle Latenz: Mit unter 50ms Reaktionszeit kann ich meine Strategien in Echtzeit optimieren, ohne auf langsame API-Antworten warten zu müssen.
  3. Flexible Zahlungsmethoden: Als jemand, der oft in China unterwegs ist, schätze ich die Möglichkeit, direkt über WeChat oder Alipay zu bezahlen.
  4. Nahtlose Integration: Die kompatible API-Struktur ermöglicht eine problemlose Migration bestehender Projekte.

Grundlagen des Kryptowährung-Backtestings

Das Backtesting von Kryptowährungs-Strategien ist ein fundamentaler Prozess in der algorithmischen Handelstätigkeit. Bevor Sie eine Strategie im Live-Handel einsetzen, sollten Sie diese gegen historische Marktdaten testen. Der erste und wichtigste Schritt dabei ist die ordnungsgemäße Aufbereitung Ihrer CSV-Daten.

In meiner Praxis habe ich festgestellt, dass über 60% der fehlerhaften Backtesting-Ergebnisse auf schlechte Datenvorbereitung zurückzuführen sind. Mit HolySheep AI können Sie nicht nur Ihre Daten verarbeiten, sondern auch komplexe Datenbereinigungs-Workflows mithilfe von KI-Assistenz implementieren.

CSV-Daten verstehen und strukturieren

Historische Kryptowährungs-Daten werden typischerweise im CSV-Format exportiert. Eine typische CSV-Datei für Krypto-Daten enthält Spalten wie: Timestamp, Open, High, Low, Close, Volume und weitere Metriken. Die Herausforderung liegt darin, diese Daten in ein Format zu bringen, das für Backtesting-Engines optimiert ist.

Typische CSV-Struktur für Kryptowährungsdaten

timestamp,open,high,low,close,volume,quote_volume,trades
2024-01-01 00:00:00,42150.50,42200.00,42100.25,42180.75,1250.5,52800000.00,15420
2024-01-01 00:01:00,42180.75,42250.00,42170.00,42230.25,1180.3,49800000.00,14250
2024-01-01 00:02:00,42230.25,42280.50,42200.00,42245.00,1320.8,55800000.00,16890

Python-Bibliotheken für CSV-Datenverarbeitung

Für die effektive Aufbereitung von Kryptowährungs-CSV-Daten empfehle ich folgende Python-Bibliotheken:

# Installation der erforderlichen Bibliotheken
pip install pandas numpy python-dateutil requests

Optional: HolySheep AI Python SDK

pip install holysheep-ai # oder direkte HTTP-Integration

Schritt-für-Schritt: CSV-Daten laden und inspizieren

Der erste Schritt bei der Datenaufbereitung ist das Laden und Inspizieren Ihrer CSV-Datei. Dies gibt Ihnen einen Überblick über die Datenstruktur und hilft, potenzielle Probleme frühzeitig zu identifizieren.

import pandas as pd
import numpy as np
from datetime import datetime

def load_crypto_csv(file_path):
    """
    Lädt eine Kryptowährungs-CSV-Datei und führt eine Erstinspektion durch.
    
    Args:
        file_path: Pfad zur CSV-Datei
        
    Returns:
        DataFrame mit geladenen und inspizierten Daten
    """
    try:
        # CSV laden mit automatischer Typ-Erkennung
        df = pd.read_csv(
            file_path,
            parse_dates=True,
            infer_datetime_format=True
        )
        
        print(f"✓ Datei erfolgreich geladen: {len(df)} Zeilen, {len(df.columns)} Spalten")
        print(f"\nSpaltenübersicht:")
        print(df.dtypes)
        print(f"\nErste 5 Zeilen:")
        print(df.head())
        print(f"\nStatistische Zusammenfassung:")
        print(df.describe())
        
        return df
        
    except FileNotFoundError:
        print(f"✗ Fehler: Datei '{file_path}' nicht gefunden")
        return None
    except Exception as e:
        print(f"✗ Unerwarteter Fehler beim Laden: {str(e)}")
        return None

Beispielaufruf

df = load_crypto_csv("bitcoin_historical_1h.csv")

Intelligente Datenbereinigung mit HolySheep AI

Eine der größten Herausforderungen bei der Datenbereinigung ist die Erkennung von Anomalien, Ausreißern und Inkonsistenzen. Hier kommt die KI-gestützte Analyse von HolySheep AI ins Spiel. Sie können komplexe Muster in Ihren Daten erkennen und automatisch Bereinigungsvorschläge erhalten.

import requests
import json

class HolySheepDataAnalyzer:
    """
    KI-gestützte Datenanalyse mit HolySheep AI für Kryptowährungs-Backtesting.
    """
    
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://api.holysheep.ai/v1"
    
    def analyze_data_quality(self, df, columns):
        """
        Analysiert die Datenqualität mithilfe von HolySheep AI.
        Erkennt Anomalien, fehlende Werte und potenzielle Probleme.
        """
        # Bereite Datenübersicht für die KI vor
        data_summary = {
            "row_count": len(df),
            "columns": list(df.columns),
            "missing_values": df.isnull().sum().to_dict(),
            "data_types": df.dtypes.astype(str).to_dict(),
            "numeric_columns": columns,
            "numeric_stats": df[columns].describe().to_dict()
        }
        
        prompt = f"""
        Analysiere die folgende Datenqualitätszusammenfassung für ein 
        Kryptowährungs-Backtesting-Projekt:
        
        {json.dumps(data_summary, indent=2)}
        
        Identifiziere:
        1. Fehlende Daten (Missing Values) und deren potenzielle Auswirkungen
        2. Mögliche Ausreißer oder Anomalien
        3. Inkonsistenzen in den Daten
        4. Empfehlungen für die Datenbereinigung
        
        Antworte auf Deutsch mit konkreten Handlungsempfehlungen.
        """
        
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": "gpt-4.1",
                    "messages": [{"role": "user", "content": prompt}],
                    "max_tokens": 1500,
                    "temperature": 0.3
                },
                timeout=30
            )
            
            if response.status_code == 200:
                result = response.json()
                return result["choices"][0]["message"]["content"]
            else:
                return f"API-Fehler: {response.status_code}"
                
        except requests.exceptions.Timeout:
            return "Zeitüberschreitung bei der API-Anfrage. Bitte erneut versuchen."
        except Exception as e:
            return f"Fehler: {str(e)}"

Initialisierung mit Ihrem HolySheep API-Key

analyzer = HolySheepDataAnalyzer("YOUR_HOLYSHEEP_API_KEY")

Beispiel: Analysiere die Datenqualität

analysis_result = analyzer.analyze_data_quality(df, ["open", "high", "low", "close", "volume"])

print(analysis_result)

Umgang mit fehlenden Werten

Fehlende Werte sind ein häufiges Problem in historischen Kryptowährungsdaten. Dies kann durch Handelspausen, Datenfehler oder API-Probleme verursacht werden. Die Art der Behandlung hängt vom Ausmaß und der Position der fehlenden Daten ab.

def handle_missing_values(df, method='interpolate', max_gap=5):
    """
    Behandelt fehlende Werte in Kryptowährungs-CSV-Daten.
    
    Args:
        df: DataFrame mit den Daten
        method: 'interpolate' für lineare Interpolation oder 'drop' für Entfernung
        max_gap: Maximale Anzahl aufeinanderfolgender fehlender Werte
        
    Returns:
        Bereinigter DataFrame
    """
    df_clean = df.copy()
    
    # Analyse der fehlenden Werte
    missing_info = df_clean.isnull().sum()
    missing_cols = missing_info[missing_info > 0]
    
    if len(missing_cols) == 0:
        print("✓ Keine fehlenden Werte gefunden")
        return df_clean
    
    print(f"⚠ Fehlende Werte gefunden in {len(missing_cols)} Spalten:")
    for col, count in missing_cols.items():
        pct = (count / len(df_clean)) * 100
        print(f"  - {col}: {count} ({pct:.2f}%)")
    
    # Behandlung basierend auf Methode
    if method == 'interpolate':
        # Lineare Interpolation für numerische Spalten
        numeric_cols = df_clean.select_dtypes(include=[np.number]).columns
        
        for col in numeric_cols:
            # Zähle aufeinanderfolgende NaNs
            mask = df_clean[col].isnull()
            gap_lengths = (~mask).cumsum()[mask].value_counts()
            
            # Nur interpolieren wenn Lücken klein genug
            for gap_size in gap_lengths.index:
                if gap_size <= max_gap:
                    df_clean[col] = df_clean[col].interpolate(method='linear')
                    print(f"  ✓ Spalte '{col}': {gap_size} Lücken interpoliert")
                else:
                    # Für große Lücken: forward/backward fill als Fallback
                    df_clean[col] = df_clean[col].fillna(method='ffill').fillna(method='bfill')
                    print(f"  ⚠ Spalte '{col}': Große Lücke ({gap_size}), Fill-Methode verwendet")
    
    elif method == 'drop':
        # Entferne Zeilen mit fehlenden Werten
        original_len = len(df_clean)
        df_clean = df_clean.dropna()
        removed = original_len - len(df_clean)
        print(f"✓ {removed} Zeilen mit fehlenden Werten entfernt")
    
    return df_clean

Anwendung

df_cleaned = handle_missing_values(df, method='interpolate', max_gap=5)

Zeitreihen-Validierung und Konsistenzprüfung

Die Validierung der Zeitreihen-Konsistenz ist entscheidend für zuverlässige Backtesting-Ergebnisse. Kryptowährungsmärkte sind 24/7 aktiv, aber Datenfeeds können Lücken oder Duplikate enthalten.

def validate_time_series(df, timestamp_col='timestamp', expected_freq='1H'):
    """
    Validiert und korrigiert Zeitreihen-Dateninkonsistenzen.
    
    Args:
        df: DataFrame mit Zeitreihendaten
        timestamp_col: Name der Zeitstempel-Spalte
        expected_freq: Erwartete Frequenz (z.B. '1H' für stündlich)
        
    Returns:
        Validierter DataFrame und Validierungsbericht
    """
    df_validated = df.copy()
    report = {
        "original_rows": len(df),
        "duplicates_removed": 0,
        "gaps_filled": 0,
        "out_of_order": 0,
        "issues": []
    }
    
    # Konvertiere Zeitstempel wenn nötig
    if df_validated[timestamp_col].dtype == 'object':
        df_validated[timestamp_col] = pd.to_datetime(df_validated[timestamp_col])
    
    # Sortiere nach Zeitstempel
    df_validated = df_validated.sort_values(timestamp_col).reset_index(drop=True)
    
    # 1. Duplikate entfernen
    duplicates = df_validated[timestamp_col].duplicated().sum()
    if duplicates > 0:
        df_validated = df_validated.drop_duplicates(subset=[timestamp_col], keep='first')
        report["duplicates_removed"] = duplicates
        report["issues"].append(f"{duplicates} doppelte Zeitstempel gefunden und entfernt")
        print(f"✓ {duplicates} Duplikate entfernt")
    
    # 2. Überprüfe Reihenfolge
    time_diffs = df_validated[timestamp_col].diff()
    if (time_diffs < pd.Timedelta(0)).any():
        report["out_of_order"] = time_diffs.lt(pd.Timedelta(0)).sum()
        report["issues"].append("Zeitstempel waren nicht in chronologischer Reihenfolge")
        print(f"⚠ {report['out_of_order']} Zeilen waren nicht in Reihenfolge (korrigiert)")
    
    # 3. Lückenerkennung
    expected_delta = pd.Timedelta(expected_freq)
    actual_deltas = df_validated[timestamp_col].diff()
    
    # Finde unerwartete Lücken (mehr als 1.5x erwartete Frequenz)
    large_gaps = actual_deltas[actual_deltas > 1.5 * expected_delta]
    if len(large_gaps) > 0:
        report["gaps_filled"] = len(large_gaps)
        report["issues"].append(f"{len(large_gaps)} große Zeitlücken (> {1.5 * expected_delta}) erkannt")
        print(f"⚠ {len(large_gaps)} große Zeitlücken erkannt")
    
    # 4. Setze Zeitstempel als Index
    df_validated.set_index(timestamp_col, inplace=True)
    
    print(f"\n📊 Validierungsbericht:")
    print(f"   Ursprüngliche Zeilen: {report['original_rows']}")
    print(f"   Finale Zeilen: {len(df_validated)}")
    
    return df_validated, report

Anwendung

df_validated, validation_report = validate_time_series(df)

Outlier-Erkennung für Kryptowährungsdaten

Outlier in Kryptowährungsdaten können durch extreme Volatilität, Marktschiefe oder schlichte Datenfehler entstehen. Eine robuste Outlier-Erkennung ist daher essentiell für zuverlässige Backtests.

def detect_and_handle_outliers(df, columns, method='iqr', threshold=3):
    """
    Erkennt und behandelt Outlier in Kryptowährungspreisdaten.
    
    Args:
        df: DataFrame mit Preisdaten
        columns: Liste der zu prüfenden Spalten
        method: 'iqr' für Interquartilsabstand oder 'zscore' für Standardabweichung
        threshold: Schwellenwert für Outlier-Klassifikation
        
    Returns:
        Bereinigter DataFrame und Outlier-Bericht
    """
    df_clean = df.copy()
    outlier_report = {}
    
    for col in columns:
        if col not in df_clean.columns:
            continue
            
        if method == 'iqr':
            Q1 = df_clean[col].quantile(0.25)
            Q3 = df_clean[col].quantile(0.75)
            IQR = Q3 - Q1
            lower_bound = Q1 - threshold * IQR
            upper_bound = Q3 + threshold * IQR
            
            outliers = (df_clean[col] < lower_bound) | (df_clean[col] > upper_bound)
            
        elif method == 'zscore':
            mean = df_clean[col].mean()
            std = df_clean[col].std()
            z_scores = np.abs((df_clean[col] - mean) / std)
            outliers = z_scores > threshold
        
        outlier_count = outliers.sum()
        outlier_pct = (outlier_count / len(df_clean)) * 100
        
        outlier_report[col] = {
            "count": int(outlier_count),
            "percentage": round(outlier_pct, 2),
            "values": df_clean.loc[outliers, col].tolist() if outlier_count > 0 else []
        }
        
        if outlier_count > 0:
            print(f"⚠ {col}: {outlier_count} Outlier erkannt ({outlier_pct:.2f}%)")
            
            # Option: Setze Outlier auf NaN oder median
            # Hier: Auf Median setzen
            median_val = df_clean[col].median()
            df_clean.loc[outliers, col] = median_val
            print(f"   → Auf Median ({median_val:.2f}) gesetzt")
    
    return df_clean, outlier_report

Anwendung für typische Preisspalten

df_final, outlier_report = detect_and_handle_outliers(

df_cleaned,

columns=['open', 'high', 'low', 'close', 'volume']

)

Vollständiger Datenbereinigungs-Workflow

Hier ist der vollständige, produktionsreife Workflow für die Bereinigung von Kryptowährungs-Backtesting-Daten, integriert mit HolySheep AI für KI-gestützte Analysen.

 bool:
        """Lädt CSV-Daten aus Datei."""
        try:
            self.df = pd.read_csv(file_path)
            self.cleaning_report.append(f"✓ Daten geladen: {len(self.df)} Zeilen")
            return True
        except Exception as e:
            self.cleaning_report.append(f"✗ Ladefehler: {str(e)}")
            return False
    
    def clean_pipeline(self) -> pd.DataFrame:
        """Führt den vollständigen Bereinigungs-Workflow aus."""
        if self.df is None:
            raise ValueError("Keine Daten geladen. Bitte zuerst load_data() aufrufen.")
        
        df = self.df.copy()
        
        # Schritt 1: Zeitstempel validieren
        if 'timestamp' in df.columns:
            df['timestamp'] = pd.to_datetime(df['timestamp'])
            df = df.sort_values('timestamp')
            df = df.drop_duplicates(subset=['timestamp'], keep='first')
            self.cleaning_report.append("✓ Zeitstempel validiert und sortiert")
        
        # Schritt 2: Fehlende Werte behandeln
        for col in ['open', 'high', 'low', 'close']:
            if col in df.columns:
                df[col] = df[col].interpolate(method='linear')
        self.cleaning_report.append("✓ Fehlende Werte interpoliert")
        
        # Schritt 3: Logische Konsistenzprüfung
        if 'high' in df.columns and 'low' in df.columns:
            # High muss >= Low sein
            invalid = df['high'] < df['low']
            if invalid.any():
                df.loc[invalid, 'high'] = df.loc[invalid, 'low']
                self.cleaning_report.append(f"⚠ {invalid.sum()} Zeilen mit High < Low korrigiert")
        
        if 'close' in df.columns:
            # Close muss zwischen High und Low liegen
            df['close'] = df[['close', 'high', 'low']].max(axis=1).clip(upper=df['high'])
            df['close'] = df[['close', 'high', 'low']].min(axis=1).clip(lower=df['low'])
        
        # Schritt 4: Negative Werte behandeln (unmöglich für Preise)
        price_cols = ['open', 'high', 'low', 'close']
        for col in price_cols:
            if col in df.columns:
                negatives = (df[col] <= 0).sum()
                if negatives > 0:
                    df = df[df[col] > 0]
                    self.cleaning_report.append(f"⚠ {negatives} Zeilen mit negativem {col} entfernt")
        
        self.df = df
        return df
    
    def get_ai_insights(self, focus_columns: List[str]) -> str:
        """Nutzt HolySheep AI für zusätzliche Datenanalyse-Insights."""
        if self.df is None:
            return "Keine Daten verfügbar"
        
        data_summary = {
            "rows": len(self.df),
            "date_range": f"{self.df['timestamp'].min()} bis {self.df['timestamp'].max()}",
            "columns": list(self.df.columns),
            "price_range": {
                col: {
                    "min": float(self.df[col].min()),
                    "max": float(self.df[col].max()),
                    "mean": float(self.df[col].mean())
                } for col in focus_columns if col in self.df.columns
            }
        }
        
        prompt = f"""
        Analysiere diese Kryptowährungs-Backtesting-Daten für mich:
        
        {data_summary}
        
        Gib mir:
        1. Eine Einschätzung der Datenqualität
        2. Potenzielle Risiken für Backtesting-Strategien
        3. Empfohlene Strategietypen basierend auf der Volatilität
        4. Warnungen vor bekannten Problemen
        
        Antworte strukturiert auf Deutsch.
        """
        
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": "deepseek-v3.2",
                    "messages": [{"role": "user", "content": prompt}],
                    "max_tokens": 1000,
                    "temperature": 0.4
                }
            )
            
            if response.status_code == 200:
                return response.json()["choices"][0]["message"]["content"]
            return f"API-Fehler: {response.status_code}"
        except Exception as e:
            return f"Fehler: {str(e)}"
    
    def export_clean_data(self, output_path: str) -> bool:
        """Exportiert bereinigte Daten in CSV."""
        if self.df is None:
            return False
        try:
            self.df.to_csv(output_path, index=False)
            self.cleaning_report.append(f"✓ Bereinigte Daten exportiert: {output_path}")
            return True
        except Exception as e:
            self.cleaning_report.append(f"✗ Exportfehler: {str(e)}")
            return False
    
    def get_report(self) -> List[str]:
        """Gibt den vollständigen Bereinigungsbericht zurück."""
        return self.cleaning_report


Beispielnutzung

pipeline = CryptoDataPipeline("YOUR_HOLYSHEEP_API_KEY") if pipeline.load_data("bitcoin_historical.csv"): df_clean = pipeline.clean_pipeline() insights = pipeline.get_ai_insights(['close', 'volume']) print("=== Bereinigungsbericht ===") for item in pipeline.get_report(): print(item) print("\n=== KI-Insights ===") print(insights) pipeline.export_clean_data("bitcoin_cleaned.csv")

Häufige Fehler und Lösungen

Fehler 1: Zeitzonenprobleme bei Timestamps

Problem: CSV-Daten enthalten Timestamps in verschiedenen Zeitzonen, was zu falschen Backtesting-Ergebnissen führt.

Lösung:

# Lösung: Explizite Zeitzonennormalisierung
from datetime import timezone

def normalize_timezone(df, timestamp_col='timestamp', target_tz='UTC'):
    """
    Normalisiert alle Timestamps auf eine einheitliche Zeitzone.
    
    Args:
        df: DataFrame mit Zeitstempeln
        timestamp_col: Name der Zeitstempelspalte
        target_tz: Zielzeitzone (Standard: UTC)
    """
    df_normalized = df.copy()
    
    # Konvertiere zu datetime falls nötig
    df_normalized[timestamp_col] = pd.to_datetime(df_normalized[timestamp_col])
    
    # Prüfe ob tz-naive oder tz-aware
    if df_normalized[timestamp_col].dt.tz is None:
        # Lokalisiere als UTC und konvertiere
        df_normalized[timestamp_col] = df_normalized[timestamp_col].dt.tz_localize('UTC')
    
    # Konvertiere zur Zielzeitzone
    df_normalized[timestamp_col] = df_normalized[timestamp_col].dt.tz_convert(target_tz)
    
    print(f"✓ Zeitzonen normalisiert auf {target_tz}")
    return df_normalized

Anwendung

df_normalized = normalize_timezone(df, timestamp_col='timestamp', target_tz='UTC')

Fehler 2: Survivor Bias durch fehlende/dead Coins

Problem: Backtests basieren nur auf Coins, die noch existieren, was zu überoptimistischen Ergebnissen führt.

Lösung:

def handle_survivor_bias(df, price_cols=['close']):
    """
    Korrigiert Survivor Bias in Kryptowährungs-Backtests.
    
    Kennzeichnet Zeiträume, in denen Daten möglicherweise unvollständig sind.
    """
    df_corrected = df.copy()
    
    # Erstelle eine "Datenqualitäts"-Spalte
    df_corrected['data_completeness'] = 1.0
    
    # Markiere Zeilen mit ungewöhnlich niedrigen Volumina
    if 'volume' in df_corrected.columns:
        volume_threshold = df_corrected['volume'].quantile(0.05)
        low_volume_mask = df_corrected['volume'] < volume_threshold
        df_corrected.loc[low_volume_mask, 'data_completeness'] *= 0.5
        
        print(f"⚠ {low_volume_mask.sum()} Zeilen mit ungewöhnlich niedrigem Volumen markiert")
    
    # Markiere Zeilen mit anomalen Preisänderungen
    for col in price_cols:
        if col in df_corrected.columns:
            returns = df_corrected[col].pct_change()
            extreme_return_mask = returns.abs() > 0.5  # >50% Änderung
            df_corrected.loc[extreme_return_mask, 'data_completeness'] *= 0.3
            
            print(f"⚠ {extreme_return_mask.sum()} Zeilen mit extremen Returns mark