Drawdown berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Ich bin leider wieder einmal hängengeblieben. Ich möchte von Zeitreihen den jährlichen Drawdown berechnen. Dies versuche ich mit folgendem Befehl, welcher korrekt zu sein scheint, da keine Fehlermeldung kommt:

Code: Alles auswählen

# Sterling Ratio
# Drawdown of the stocks and the index each year
stocks_dd_2010_ABBN = stocks_data.loc['30-09-2010':'31-08-2011',['ABBN_Preis']].apply(Drawdown)
stocks_dd_2010_ABBN
[\Code]

Das Resultat wird allerdings, egal welche Periode ich nehme immer mit 0 angegeben.

[Code]
ABBN_Preis    0
dtype: int32
[\Code]

Die Datenquelle stocks_data sieht wie folgt aus:

[Code]
stocks_data = pd.concat([ABBN,ADEN,CFR,CSGN,GEBN,GIVN,LHN,LONN,NESN,NOVN,SCMN,SGSN,SIKA,SLHN,ROG,SREN,UBSG,UHR,ZURN,SMI], axis=1)
stocks_data.head()
[\Code]

Bei den einzelnen Abkürzungen handelt es sich um die jeweiligen Dataframes zu den entsprechenden csv Files mit den Daten. Diese wurden alle zuvor schon einmal verwenden und sind vorhanden. Was hier zu sehen ist:

[Code]
ABBN = pd.read_csv('C:/Users/Startklar/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Anaconda3 (64-bit)/ABBN.csv', sep=" ",names=['Datum','ABBN_Preis'])
[\Code]

Angezeigt werden unter obigem Code folgende Werte:

[Code]
[	Datum	ABBN_Preis
0	30.09.2010	20.71
1	29.10.2010	20.38
2	30.11.2010	19.45
3	30.12.2010	20.83
4	31.01.2011	22.29
5	28.02.2011	22.72
6	31.03.2011	22.06
7	29.04.2011	23.88
8	31.05.2011	22.89
9	30.06.2011	21.80
10	29.07.2011	18.98
11	31.08.2011	17.28
[\Code]

Weshalb gibt mir das System immer den Wert 0 und rechnet nicht mit den entsprechenden Datensätzen?
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Ist die Frage zu spezifisch?
Benutzeravatar
snafu
User
Beiträge: 6870
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Vielleicht steigt die Chance auf Hilfe, wenn du den Inhalt der Funktion Drawdown zeigst...
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Mache ich gerne:

Code: Alles auswählen


# Function for the drawdown
def Drawdown(stock): 
    stock_nrow=stock.shape[0]
    stock.index=range(0,stock_nrow)
    Pdrop=np.zeros(stock_nrow,dtype=bool)
    for i in range(1,stock_nrow):
        if stock.iloc[i]<stock.iloc[i-1]:
            Pdrop[i]=True
    Min=0
    i=0
    j=0
    while (i<stock_nrow-1):
        j=i+1
        if Pdrop[j]:
            while(j<stock_nrow-1):
                if Pdrop[j+1]:
                    j=j+1
                else:
                    if stock[j]/stock[i]-1<Min:
                        Min=stock[j]/stock[i]-1
                    break
            if j==stock_nrow-1:
                if stock[j]/stock[i]-1<Min:
                    Min=stock[j]/stock[i]-1
        i=j
    return(100*np.absolute(Min))


Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

wäre es vielleicht möglich die Datei jemanden zu schicken damit die Person es sich genauer anschauen kann? Ich habe sonst leider niemanden wo ich mich melden kann.
Antworten