Christian-133 Oktober 12, 2023 Hallo an die Community, Ich bin ein neues Mitglied hier und habe gesehen, dass es hier in diesem Forum auch ein bisschen um das Thema Python und Aktien geht. Ich habe deshalb hierzu mal ein neues Thema erstellt. Ich selbst habe mich in den letzten Monaten etwas in Python und yfinance eingelesen und festgestellt, dass man mit wenig Zeilen Code interessante Sachen erstellen kann. z.b. eine Korrelationsmatrix oder eine monatliche Performance-Übersicht, oder ein Vergleich von Kennzahlen. Mich würde mal interessieren, ob ihr auch mit Python und yfinance Aktienanalyse durchführt und wenn ja, was ihr da bereits so gemacht habt. Vielleicht ergibt sich ja daraus die ein oder andere Idee, die man vielleicht weiter ausbauen kann. Diesen Beitrag teilen Link zum Beitrag
TWFS Oktober 12, 2023 Moin. Ich nutze Python zusammen mit der stockdio API, um 3x pro Handelstag ein paar Aktienkurse zu ziehen und zu verarbeiten. Das funktioniert sehr gut und zuverlässig seit ein paar Jahren, besser als Google Finance. Die stockdio API hat bei mir alphavantage abgelöst, wegen chronischer Unzuverlässigkeit. Ich nutze die gebührenfreie Variante, daher 3 Läufe pro Tag, was aber für meine Zwecke reicht. Code-Schnipsel stelle ich bei Bedarf gerne zur Verfügung. Diesen Beitrag teilen Link zum Beitrag
Christian-133 Oktober 13, 2023 Moin, die API kenne ich gar nicht. Worin besteht jetzt der Unterschied zu yfinance.? Yfinance ist ja auch kostenlos. Vielleicht sollte ich mir das erstmal angucken, bevor ich so viele Fragen stelle :-) Und was machst du jetzt genau mit dieser API? Gruß Christian Diesen Beitrag teilen Link zum Beitrag
slowandsteady Oktober 13, 2023 vor 10 Stunden von TWFS: Moin. Ich nutze Python zusammen mit der stockdio API, um 3x pro Handelstag ein paar Aktienkurse zu ziehen und zu verarbeiten. So ähnlich hatte ich das auch mal, als ich noch Haushaltsbuch geführt habe und quasi einen "Liveticker" vom Vermögen hatte. Damals noch mit der "alten" Yahoo Finance API, wo man es einfach ohne API-Key als CSV bekommen hat. Mittlerweile sind mir die Kurse aber auch ziemlich egal - meine passive Investmentstrategie ändert sich ja sowieso nicht und fürs jährliche Rebalancing von 3 Positionen World, EMU, EM brauche ich nur ein paar Minuten, ein Skript ist da Overkill. Diesen Beitrag teilen Link zum Beitrag
TWFS Oktober 16, 2023 Am 13.10.2023 um 08:49 von Christian-133: Und was machst du jetzt genau mit dieser API? Ich ziehe die aktuellen Kurse unserer Aktien aus der API und berechne Summen pro Depot und eine Gesamtsumme. Eine Art "Liveticker" zum Vermögen, wie @slowandsteady schon richtig vermutet hat. Zusätzlich zur Abarbeitung der Depots wird die Watchlist bearbeitet und ich bekomme Benachrichtigungen beim Erreichen festgelegter Schwellwerte. Das könnte man auch mit Limit-Orders regeln, aber so ist es mir lieber. Depots und Watchlist liegen in CSV vor. Dann werden ein paar Zahlen auf ein Paperwhite-Display geschrieben und das Raspi legt sich wieder schlafen. Diesen Beitrag teilen Link zum Beitrag
Christian-133 Oktober 17, 2023 Ach cool. Ist bestimmt ein sehr interessantes Projekt. Diesen Beitrag teilen Link zum Beitrag
Christian-133 Oktober 21, 2023 Moin TWFS, ich habe deine Idee mit yfinance nachgebaut. Es hat auch super funktioniert. Leider gibt es wohl seit neuestem ein Problem mit yfinance, sodass mein Script leider nicht mehr richtig funktioniert. Ich habe mich deshalb gerade bei stockdio angemeldet. Kannst du mir vielleicht dein Script zur Verfügung stellen, dann muss ich nicht lange rumexperimentieren. Dann wäre es nett. Gruß Christian Diesen Beitrag teilen Link zum Beitrag
TWFS Oktober 23, 2023 Na klar gerne. Die stockdio API bietet nur eine begrenzte Anzahl kostenloser Calls pro Monat an, daher arbeite ich eine Liste ab und setze pro Handelsplatz lediglich einen API Call ab. Dazu einen Call für die aktuellen Währungsumrechnungskurse. Mein Raspi wacht 3x pro Wochentag auf, zieht die Kurse, malt ein paar Zahlen auf ein Paperwhite-Display und legt sich wieder schlafen. Frag gerne nach, wenn etwas unklar ist. #!/usr/bin/env python3 import requests def _print_err(x): print('[ERROR] ' + x) def _stockdio_jdata2dict(j_data, exchange): output = {} for i in j_data['data']['prices']['values']: symbol = i[0] if exchange == 'FOREX': symbol = symbol[:3] quote = float(i[2]) if quote <= 0: _print_err('API quote ' + symbol + ' ' + str(quote)) raise ValueError() output[symbol] = quote return output def stockdio_prices(exchange='FOREX', symbols='USD/EUR;CHF/EUR'): """Query stockdio.com API getlatestprices. Return dictionary.""" apikey = 'DEIN-API-KEY' apiurl = 'https://api.stockdio.com/' apipath = 'data/financial/prices/v1/getlatestprices?' stockdio_s = requests.Session() stockdio_s.params = {'app-key': apikey, 'stockExchange': exchange, 'symbols': symbols} response = stockdio_s.get(apiurl + apipath) if response.ok: return _stockdio_jdata2dict(response.json(), exchange) else: _print_err('API prices ' + exchange + ' ' + symbols) response.raise_for_status() def _get_fx(list): fx_str = '' for row in list: if row['Currency'] not in fx_str and row['Currency'] != 'EUR': fx_str += row['Currency'] + '/EUR;' fx_str = fx_str[:-1] fx_response = stockdio_prices('FOREX', fx_str) fx_response['EUR'] = 1 return fx_response def _get_quotes(list): quotes = {} exchanges = [] for row in list: if row['Exchange'] not in exchanges: exchanges.append(row['Exchange']) for ex in exchanges: symbols = [] for row in list: if row['Exchange'] == ex and row['Symbol'] not in symbols: symbols.append(row['Symbol']) symbol_str = ';'.join(symbols) quotes_response = stockdio_prices(ex, symbol_str) quotes.update(quotes_response) return quotes Diesen Beitrag teilen Link zum Beitrag
Christian-133 Oktober 24, 2023 Moin, vielen Dank für deinen Code. Ich habe mir zwischenzeitlich auch etwas mit Python und BeautifulSoup programmiert. Das Script zieht die Information aus der Webseite von Yahoo finance. Ich poste hier auch mal meinen Code. Ich weiß zwar nicht, ob das hier so das richtige Forum dafür ist, aber egal :-))) Mein Code ist noch nicht optimiert. Ist sicherlich noch dirty Work., aber er funktioniert :-) import requests from bs4 import BeautifulSoup import pandas as pd # Aufbau CSV # Ticker,Anzahl, Bezeichnung ticker_obj = pd.read_csv("aktien.csv") symbols = ticker_obj['Ticker'].tolist() t = ticker_obj t = ticker_obj.set_index('Ticker') # Dataframe df = pd.DataFrame(index=[symbols],columns=['Bezeichnung','close','ask','anzahl','result']); for i in symbols: try: url = ('https://de.finance.yahoo.com/quote/'+ i +'?p='+ i +'&.tsrc=fin-srch') r = requests.get(url) r.text web_content = BeautifulSoup(r.text, 'lxml') web_content_close = web_content.find('td',{'data-test':'PREV_CLOSE-value'}).text.replace(",",".") web_content_ask = web_content.find('td',{'data-test':'ASK-value'}).text.replace(",",".") #print(url) #print (web_content_close) # print (type(web_content_ask)) ask = web_content_ask.split(" ") df.at[i,'ask'] = ask[0] df.at[i,'close'] = web_content_close df.at[i,'anzahl'] = t.loc[i].Anzahl df.at[i,'Bezeichnung'] = t.loc[i].Bezeichnung except: print ("error") df['ask'] = df['ask'].astype(float) df['close'] = df['close'].astype(float) df['test'] = df['ask']-df['close'] df Wer einen Optimierungsvorschlag hat. Immer gern. Gruß Christian Diesen Beitrag teilen Link zum Beitrag