[PYTHON] Was ist das Calmar-Verhältnis?

1. Zweck

Erklärt die Bedeutung und Berechnungsmethode des Calmar-Verhältnisses.

2 Inhalt

2-1 Berechnungsmethode zurückgeben

Die Rückkehr vom Startdatum zum aktuellen Tag eines bestimmten Problems [folgt dieser Definition](https://qiita.com/NT1123/items/096dc41c24751934747e#2-1-return%E3%81%AE%E5%AE%9A % E7% BE% A9).

2-2 So berechnen Sie die maximale Dropdown-Liste

Dies ist ein Ausdruck, der die Rate auswertet, mit der die Rendite fällt und ihren Tiefpunkt erreicht, nachdem die Rendite ihr Maximum erreicht hat. </ b>

Insbesondere beträgt der maximale Wert von Return im Zeitraum vom Startdatum bis zu n Werktagen $ R_ {max} ^ {(n)} $.

R_{max}^{(n)}=max\left\{R_{i} | 0<i≦n \right\}

Hier wird Maxdrowdown $ MDD_ {max} ^ {(n)} $ durch die folgende Formel definiert.

MDD_{max}^{(n)}=max\left\{\frac{R_{max}^{(n)}}{R_{i}} | 0<i≦n \right\}
90.JPG

2-3 Berechnungsmethode für das Calmar-Verhältnis

Definitionsformel des Calmar-Verhältnisses

Calmar Ratio=\frac{CAGR(n)}{MDD_{max}^{(n)}}

Die Definitionsformel von CAGR wird hier beschrieben.

Ergänzung: Im Vergleich zur Shapen Ratio ist die Calmar Ratio ein Index, der die schlechteste Rückgangsrate berücksichtigt. </ b>

2-4 Codebeispiel für die Calmar Ratio-Berechnungsformel

test.py


def CAGR(DF):
    df = DF.copy()
    df["daily_ret"] = DF["Close"].pct_change() #Berechnen Sie die Änderungsrate ab dem Tag vor dem Schlusskurs des Aktienkurses.
    df["cum_return"] = (1 + df["daily_ret"]).cumprod() #cumprod(Gibt das kumulative Produkt aller Elemente in Skalar y zurück.
    n = len(df)/252 #Der Handelstag für ein Jahr ist auf 252 Tage festgelegt.
    print( "df[cum_return]" )    
    print( df["cum_return"] )
    print( "df[cum_return][-1] ")           
    print( df["cum_return"][-1] )    
    CAGR = (df["cum_return"][-1])**(1/n) - 1
    return CAGR

def max_dd(DF):
    "function to calculate max drawdown"
    df = DF.copy()
    df["daily_ret"] = DF["Close"].pct_change()
    df["cum_return"] = (1 + df["daily_ret"]).cumprod()  #cumprod()Multiplizieren Sie alle Elemente.
    print(df["cum_return"])

    #ax.legend() #Zeichne eine Legende
    df["cum_roll_max"] = df["cum_return"].cummax()
    df["drawdown"] = df["cum_roll_max"] - df["cum_return"]
    df["drawdown_pct"] = df["drawdown"]/df["cum_roll_max"]
    max_dd = df["drawdown_pct"].max()
    ax=df["cum_return"].plot(marker="*",figsize=(10, 5))    
    ax=df["cum_roll_max"].plot(marker="*",figsize=(10, 5))    
    ax=df["drawdown"].plot(marker="*",figsize=(10, 5))   
    ax=df["drawdown_pct"].plot(marker="*",figsize=(10, 5))       
    ax.legend() #Zeichne eine Legende
    return max_dd
    
def calmar(DF):
    "function to calculate calmar ratio"
    df = DF.copy()
    clmr = CAGR(df)/max_dd(df)
    return clmr

Recommended Posts