Community

Antworten
Highlighted
HimbeerToni
Gelegentlicher Autor
Beiträge: 7
Registriert: 20.03.2020
Nachricht 1 von 6 (1.411 Ansichten)

Einfache Kursabfrage in Python

Hallo Zusammen,

ich habe es grundsätzlich geschafft, dass die TAPI unter Python läuft.
Siehe hier: https://wissen.consorsbank.de/t5/Consorsbank-API/Trading-API-mit-Python-f%C3%BCr-Einsteiger/m-p/9802...

Jetzt möchte ich eine einfache Kursabfrage zu einer WKN durchführen.
Es findet sich sicher alles in der Dokumentation, aber ich blicke es nicht. . .

Wenn ich noch Stunden suche, finde ich es vielleicht. . .

Wenn jemand einen Tip hätte - wäre super!

Ein paar Zeilen Code - so etwa im Stile wie das hier reicht völlig aus:

account_service_stub = TradingAPI_pb2_grpc.AccountServiceStub(channel)
accounts_response = account_service_stub.GetTradingAccounts(Common_pb2.AccessTokenRequest(access_token=login_response.access_token))

print("Accounts response: " + str(accounts_response))

Wäre mir ein große Hilfe.

HG,

Stefan

Highlighted
immermalanders
Autorität
Beiträge: 3652
Registriert: 06.02.2015
Nachricht 2 von 6 (1.405 Ansichten)

Betreff: Einfache Kursabfrage in Python

Hallo @HimbeerToni

 

hier ein Beispiel um die historischen Kurse der letzten 15 Tage am Handelsplatz "OTC" abzurufen:

 

security_service_client = TradingAPI_pb2_grpc.SecurityServiceStub(channel)

securitycode = SecurityService_pb2.SecurityCode(code=code, code_type=code_type)
stockexchange = StockExchangeService_pb2.StockExchange(id='OTC')

security_with_stock_exchange = SecurityService_pb2.SecurityWithStockExchange(
    security_code=securitycode,
    stock_exchange=stockexchange
)
security_price_history_request = SecurityService_pb2.SecurityPriceHistoryRequest(
    access_token=access_token,
    security_with_stockexchange=security_with_stock_exchange,
    days=15,
    time_resolution=time_resolution
)

quote_data = security_service_client.GetSecurityPriceHistory(security_price_history_request)

for day_data in request_data.price_entries:
    # Daten verarbeiten

 

hier ein Beispiel um die aktuellen Kurse am Handelsplatz "OTC" abzurufen:

 

security_service_client = TradingAPI_pb2_grpc.SecurityServiceStub(channel=channel)

securitycode = SecurityService_pb2.SecurityCode(code=code, code_type=code_type)
stockexchange = StockExchangeService_pb2.StockExchange(id='OTC')

security_with_stock_exchange = SecurityService_pb2.SecurityWithStockExchange(
    security_code=securitycode,
    stock_exchange=stockexchange
)
security_price_marketdata_request = SecurityService_pb2.SecurityMarketDataRequest(
    access_token=token,
    security_with_stockexchange=security_with_stock_exchange,
    currency='EUR'
)

market_data = security_service_client.StreamMarketData(security_price_marketdata_request)

for hist_data in market_data:
    # Daten verarbeiten

Bei den Marketdaten werden immer nur die Änderungen geschickt. Ändert sich z.B. nur das Bid-Volumen, werden auch nur diese Daten gesendet.

 

 

Wichtige Variablen-Definitionen, die Werte steht in der Datei "TradingTypes.proto":

 

# Werte für "code_type"
NO_CODE_TYPE = 0
WKN = 1
ISIN = 2
ID_NOTATION = 3
ID_OSI = 4
ID_INSTRUMENT = 5
MNEMONIC = 6
MNEMONIC_US = 7

# Werte für "time_resolution"
NO_RESOLUTION = 0
TICK = 1
SECOND = 2
MINUTE = 3
HOUR = 4
DAY = 5

 

Hier die Definition der Felder für die Marktdaten. Die Werte steht in der Datei "SecurityService.proto":

 

# Price of the last trade
last_price = 4
# Volume last trade
last_volume = 5
# Last quote date and time
last_date_time = 6
# Today number of tradings
today_num_trades = 7
# Today volume
today_volume = 8
# Last ask price
ask_price = 9
# Volume last ask
ask_volume = 10
# Time of the last ask
ask_time = 11
# Last bid price
bid_price = 12
# Volume last bid
bid_volume = 13
# Time of the last bid
bid_time = 14
# Quote of the previous trading day
previous_price = 15
# Date of the previous trading day
previous_date = 16
# Relative difference to the previous day
relative_diff = 17
# Absolute difference to the previous day
abs_diff = 18
# Highest price
high_price = 19
# Lowest price
low_price = 20
# Price at opening
open_price = 21
# Highest price of the previous week
week_high_price = 22
# Date of highest price of the previous week
date_week_high = 23
# Lowest price of the previous week
week_low_price = 24
# Date of lowest price of the previous week
date_week_low = 25
# Highest price of the previous month
month_high_price = 26
# Date of highest price of the previous month
date_month_high = 27
# Lowest price of the previous month
month_low_price = 28
# Date of lowest price of the previous month
date_month_low = 29
# Highest price of the current year
year_high_price = 30
# Date of the highest price of the current year
date_year_high = 31
# Lowest price of the current year
year_low_price = 32
# Date of the lowest price of the current year
date_year_low = 33
# Addendum of the last price.
last_addendum = 34
# Trading phase
trading_phase = 35
# Indicative price
indicative_price = 36
# Trading volume corresponding to the last price
prevalence_volume = 37

 

Ohne Anpassung der Buffergröße wird ein Abruf der historischen Intraday-Kurse über einen größeren Zeitraum eventuell nicht funktionieren. Damit man die Daten abrufenkann muss man den Buffer entsprechend vergrößern.

 

# Buffer auf 100 MB setzen
channel = grpc.secure_channel(
    '{}:{}'.format(host, port),
    credentials,
    options=[('grpc.max_receive_message_length', 104857600)]
)

 

Grüße

immermalanders

 

Highlighted
HimbeerToni
Gelegentlicher Autor
Beiträge: 7
Registriert: 20.03.2020
Nachricht 3 von 6 (1.396 Ansichten)

Betreff: Einfache Kursabfrage in Python

Wow,
Herzlichen Dank für die überaus schnelle und ausführliche Antwort.
Ich werde etwas brauchen, bis ich das umgesetzt habe.
Komme nicht jeden Tag zum Programmieren.
Ich werde berichten. . .
Gruß,
Stefan
Highlighted
HimbeerToni
Gelegentlicher Autor
Beiträge: 7
Registriert: 20.03.2020
Nachricht 4 von 6 (1.374 Ansichten)

Nochmal schnell rückgefragt . . . Wie beende ich den Streamer?

Wenn ich das halbwegs richtig verstehe:

Solange ich den Streamer nicht beende, (oder wie auch immer das korrekt formuliert wird) werden Änderungen in der For-Schleife verarbeitet.

Wie kann ich das beenden?

Kann ich innerhalb der For- Schleife ein "Logout" senden?

Oder hab' ich den Ablauf grundsätzlich nicht verstanden?

 

Meine Absicht ist den Kurs einmal abzufragen und dann soll mein Programm was anderes tun. Später je nach User-Eingabe mal wieder 'ne Abfrage - usw.

 

Gruß,

Stefan

Antworten
0 Likes
Highlighted
immermalanders
Autorität
Beiträge: 3652
Registriert: 06.02.2015
Nachricht 5 von 6 (1.363 Ansichten)

Betreff: Nochmal schnell rückgefragt . . . Wie beende ich den Streamer?

[...] Solange ich den Streamer nicht beende, (oder wie auch immer das korrekt formuliert wird) werden Änderungen in der For-Schleife verarbeitet. [...]

Richtig verstanden. Um den Streamer zu beenden reichte es, die Schleife per "break" zu verlassen.

 

Antworten
0 Likes
Highlighted
HimbeerToni
Gelegentlicher Autor
Beiträge: 7
Registriert: 20.03.2020
Nachricht 6 von 6 (1.276 Ansichten)

Betreff: Nochmal schnell rückgefragt . . . Wie beende ich den Streamer?

Herzlichen Dank für die Antwort!

Is mir ja peinlich die Frage gestellt zu haben. . .
Antworten
0 Likes