Community

Antworten
Highlighted
8203775005
Aufsteiger
  • Community Junior
  • Community Junior
Beiträge: 4
Registriert: 10.08.2017
Nachricht 1 von 8 (337 Ansichten)

Trading API - Depot und Orderbuch

Hallo liebe Gemeide,

 

bin gerade dabei mich in die API einzuareiten und komme nun leider nicht weiter. Ich versuche das Depot und Orderbuch zu streamen. Kurse funktionieren schon tadellos.

 

Anbei mal mein Code:


depot_client = TradingAPI_pb2_grpc.DepotServiceStub(channel)

 

SecurityDepotRequest = SecurityService_pb2.SecurityOrderBookRequest(
access_token=login_response.access_token,
#security_with_stockexchange=security_with_stock_exchange,
)

 

depot_data = depot_client.StreamDepot(SecurityDepotRequest)

 

for positions in depot_data:
print(positions.XXXX)

 

Leider ist das ohne Funktion :-(  Meine Frage ist vor allem, was muss ich in der for-Schleife abfragen?

 

 

Eine zweite Frage die sich mir noch gestellt hat, wie kann ich es im Python umsetzten, mehrere Kurse abzufragen und nicht auch mehrere Anmeldungen/ Account starten zu müssen? Hat da jemand vielleicht eine Idee?

 

Viele Grüße und besten Dank in die Runde!!!

 

Sebastian

Antworten
0 Likes
Highlighted
Lowenzahn
Aufsteiger
  • Community Junior
  • Kommentator
  • Community Beobachter
Beiträge: 33
Registriert: 12.02.2019
Nachricht 2 von 8 (278 Ansichten)

Betreff: Trading API - Depot und Orderbuch

Ohne Code ist es schwierig zu sagen, warum es geht. Es gibt die Beispiele in Java und C#. Ebenfalls sollen alle notwendige Daten ausgefüllt sein. 

Im Depotrequest ist DepotNo nötig.

 

   

Antworten
0 Likes
Highlighted
8203775005
Aufsteiger
  • Community Junior
  • Community Junior
Beiträge: 4
Registriert: 10.08.2017
Nachricht 3 von 8 (172 Ansichten)

Betreff: Trading API - Depot und Orderbuch

Hallo Lowenzahn,

bin leider noch immer nicht weitergekommen mit der Abfrage in Python.

 

Habe Dir den Code angehängt.

import grpc

import AccessService_pb2
import AccessService_pb2_grpc
import AccountService_pb2
import AccountService_pb2_grpc
import Common_pb2
import Common_pb2_grpc
import DepotService_pb2
import DepotService_pb2_grpc
import OrderService_pb2
import OrderService_pb2_grpc
import SecurityService_pb2
import SecurityService_pb2_grpc
import StockExchangeService_pb2
import StockExchangeService_pb2_grpc
import TradingTypes_pb2
import TradingTypes_pb2_grpc
import TradingAPI_pb2
import TradingAPI_pb2_grpc


def Order_Stream():
  

    host = "localhost"
    port = 40443

    with open('99_Consors_ActiveTrader\\Zertifikat.pem', 'rb') as f:
        trusted_certs = f.read()
        
    credentials = grpc.ssl_channel_credentials(root_certificates=trusted_certs)
    channel = grpc.secure_channel('{}:{}'.format(host, port), credentials)

    access_service_stub = TradingAPI_pb2_grpc.AccessServiceStub(channel)
    login_response = access_service_stub.Login(AccessService_pb2.LoginRequest(secret='XXXX'))

    print("Login response: " + str(login_response))

    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))


    order_client = TradingAPI_pb2_grpc.OrderServiceStub(channel)


    SecurityOrderBookRequest = SecurityService_pb2.SecurityOrderBookRequest(
        access_token=login_response.access_token
    )


    orders_data = order_client.StreamOrders(SecurityOrderBookRequest)


    print(orders_data)
    
    for ordersStreamer in orders_data:
        print(ordersStreamer)





if __name__ == '__main__':

    Order_Stream()

Der Code läuft soweit auch fehlerfrei. Ich kann auch den gpcr-Stream aufbauen. Nur komme ich an dem Punkt nicht weiter mit der for-Schleife das Orderbuch abzufragen. Dazu fehlt mir das "Schlüsselwort". Hier im Beispiel ist "ordersStreamer" verwendet, nur leider ohne Erfolg. Bei der Kursabfrage verwende ich "hist_data" und erhalte die gewünschten Werte zurück. Die Java und C Beispiele haben mir bei dem Problem leider nicht geholfen. 

 

Kannst du vielleicht nochmal drauf schaufen? Vielleicht hast du einen Tip?

 

Viele Grüße und vielen vielen Dank

 

Sebastian

 

Antworten
0 Likes
Highlighted
Lowenzahn
Aufsteiger
  • Community Junior
  • Kommentator
  • Community Beobachter
Beiträge: 33
Registriert: 12.02.2019
Nachricht 4 von 8 (145 Ansichten)

Betreff: Trading API - Depot und Orderbuch

Ich denke, es soll ein Thread genutzt werden. Orders_data ist endlos. 

 

Beispiel Python 

 

gRPC-Steaming im Python kann auch async genutzt werden  StackOverflow 

 

 

Antworten
0 Likes
Highlighted
immermalanders
Autorität
Beiträge: 3515
Registriert: 06.02.2015
Nachricht 5 von 8 (136 Ansichten)

Betreff: Trading API - Depot und Orderbuch

Bei StreamOrder werden die Daten als Objekt vom Type "orders" zurückgegeben. Den Datenaufbau findet man in der Dokumentation unter "Objects and type description". Welcher Service welche Daten benötigt und zurück gibt, kann man auch in den erzeugten gRPC-Dateien sehen.

 

Code um die einzelnen Orders auszugeben:

 

order_data = order_service_client.StreamOrders(trading_account_request)

for ordersStreamer in order_data:
    for order in ordersStreamer.orders:
        print(order)

 

 

Der Aufbau vom order Objekt ist in der Dokumentation beschrieben.

 

Antworten
0 Likes
Highlighted
8203775005
Aufsteiger
  • Community Junior
  • Community Junior
Beiträge: 4
Registriert: 10.08.2017
Nachricht 6 von 8 (122 Ansichten)

Betreff: Trading API - Depot und Orderbuch

[ Bearbeitet ]

vielen lieben Dank :-)


Leider ohne Erfolg, obwohl meine Frage nach der for-Schleife beantwortet ist. Ich bekomme eine saubere Bestätigung des Logins durch den Account. Das war es dann aber auch. Irgendwo ist leider noch ein Bock drin.


Die Orders zum Testen habe ich im Active-Trader eingestellt. Leider kommen diese nicht über den Channel an.


Hast du vielleicht noch einen Tip? Wie könnte ich den Code inkrementell testen? Muss ich die Orders über die API einstellen?

 

Oder werden nur ausgeführte Order gestreamt?

 

Vielen lieben Dank schon mal!!!

 

import grpc

import AccessService_pb2
import AccessService_pb2_grpc
import AccountService_pb2
import AccountService_pb2_grpc
import Common_pb2
import Common_pb2_grpc
import DepotService_pb2
import DepotService_pb2_grpc
import OrderService_pb2
import OrderService_pb2_grpc
import SecurityService_pb2
import SecurityService_pb2_grpc
import StockExchangeService_pb2
import StockExchangeService_pb2_grpc
import TradingTypes_pb2
import TradingTypes_pb2_grpc
import TradingAPI_pb2
import TradingAPI_pb2_grpc


def Order_Stream():
  

    host = "localhost"
    port = 40443

    with open('99_Consors_ActiveTrader\\Zertifikat.pem', 'rb') as f:
        trusted_certs = f.read()
        
    credentials = grpc.ssl_channel_credentials(root_certificates=trusted_certs)
    channel = grpc.secure_channel('{}:{}'.format(host, port), credentials)

    access_service_stub = TradingAPI_pb2_grpc.AccessServiceStub(channel)
    login_response = access_service_stub.Login(AccessService_pb2.LoginRequest(secret='XXXXXX'))

    print("Login response: " + str(login_response))

    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))


    order_client = TradingAPI_pb2_grpc.OrderServiceStub(channel)
    #security_service_client = TradingAPI_pb2_grpc.SecurityServiceStub(channel)


    SecurityOrderBookRequest = SecurityService_pb2.SecurityOrderBookRequest(
        access_token=login_response.access_token
    )


    order_data = order_client.StreamOrders(SecurityOrderBookRequest)
  

    for ordersStreamer in order_data:
        print(ordersStreamer)
        for order in ordersStreamer.orders:
            print(order)



if __name__ == '__main__':

    Order_Stream()

 

 

Antworten
0 Likes
Highlighted
immermalanders
Autorität
Beiträge: 3515
Registriert: 06.02.2015
Nachricht 7 von 8 (114 Ansichten)

Betreff: Trading API - Depot und Orderbuch

Mit dem SecurityOrderBookRequest kann man das Xetra-Orderbuch für eine Wkn abrufen, nicht aber die Orders aus dem eigenem Orderbuch.

 

Die Orders kann man mit folgendem Code Streamen:

 

order_service_client = TradingAPI_pb2_grpc.OrderServiceStub(channel)

accountserviceclient = TradingAPI_pb2_grpc.AccountServiceStub(channel)
accesstoken = Common_pb2.AccessTokenRequest(access_token=access_token)

trading_accounts = accountserviceclient.GetTradingAccounts(accesstoken)

for trading_account in trading_accounts.accounts:
    print('check account ' + str(trading_account.depot_number))

    if trading_account.depot_number == depot_to_use:
        print('list orders for depot ' + str(trading_account.depot_number))

        trading_account_request = AccountService_pb2.TradingAccountRequest(
            access_token=access_token,
            trading_account=trading_account
        )

        order_data = order_service_client.StreamOrders(trading_account_request)

        for ordersStreamer in order_data:
            print(ordersStreamer)

            for order in ordersStreamer.orders:
                print(order)

 

 

 

 

Antworten
0 Likes
Highlighted
8203775005
Aufsteiger
  • Community Junior
  • Community Junior
Beiträge: 4
Registriert: 10.08.2017
Nachricht 8 von 8 (91 Ansichten)

Betreff: Trading API - Depot und Orderbuch

ok. cool :-)

 

Nun hab ichs auch verstanden :-)

Antworten
0 Likes