Entwickler-Example

Entwickler-Example & SDK

  • 🚀 Echtzeit-Datenintegration für C# / .NET
  • 📊 Tick-, Intraday- und End-of-Day Daten
  • ⚡ Push-basierte Live-Datenversorgung

Was ist das TAI-PAN .NET Example?

Dieses Beispielprojekt zeigt, wie die TAI-PAN Schnittstelle in einer .NET Anwendung genutzt wird.

Es dient als Startpunkt für Entwickler, die Marktdaten, Echtzeit-Feeds und historische Daten integrieren möchten.

Enthaltene Funktionen

  • 🔐 Anmeldung über DevID & User Credentials
  • 📈 Zugriff auf Kursdaten (Tick / Intraday / Historie)
  • ⚡ PushFeed für Live-Daten
  • 🖥️ Windows Forms Oberfläche
  • 🧩 Strukturierte .NET API Integration
  • 🌍 Stammdaten Zugriff
  • 🔎 Suchfunktion
⬇ Download Example

TPRAccess Schnittstelle – Entwicklerdokumentation

Hinweis

Diese Schnittstelle kann mit verschiedenen Programmiersprachen verwendet werden.
Allerdings sind möglicherweise nicht alle Funktionen in jeder Sprache vollständig oder identisch nutzbar.

Die Entwicklung und Tests erfolgen primär in C#. Sämtliche Funktionen wurden in dieser Umgebung validiert.

Für Implementierungen in anderen Programmiersprachen (z. B. Python) kann daher kein Support angeboten werden.

Quick Start

Download

Laden Sie zunächst die benötigte DLL herunter:

TPRAccess.dll herunterladen

Entpacken Sie anschließend die Datei TPRAccess.zip.

Einbindung der DLL-Schnittstelle

Öffnen Sie den Solution Explorer
→ Rechtsklick auf „Verweise“
→ „Verweis hinzufügen…“
→ „Durchsuchen…“
→ TPRAccess.dll auswählen
→ „Hinzufügen“ klicken
→ Sicherstellen, dass das Häkchen gesetzt ist
→ „OK“ klicken

Projekt-Konfiguration (.NET Core)

Hinweis: Für .NET Core Anwendungen muss die Codepage 1252 hinzugefügt werden.

csproj-Datei:

<ItemGroup>
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
</ItemGroup>

Initialisierung im Quellcode:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

Verwendung

Nach erfolgreicher Einbindung können Sie die Schnittstelle wie folgt verwenden:

using TPRAccess;
                                                

Verbindung & Login

TPRClientLanguages

German – deutsche Rückgaben
English – englische Rückgaben
connection.ClientLanguage = TPRClientLanguages.German;
Die Sprache sollte direkt nach dem Erzeugen der Verbindung gesetzt werden, bevor weitere API-Aufrufe erfolgen.

TPRServerConnection

Das Objekt TPRServerConnection initialisiert die Verbindung zur API und stellt sämtliche Kernfunktionen der Schnittstelle bereit.

Ohne gültige Developer-ID kann keine Verbindung aufgebaut werden.

var connection = new TPRServerConnection("DEVELOPER_ID");
connection.ClientLanguage = TPRClientLanguages.German;
TPRServerConnection(string developerId)
developerId – Developer-ID für die Freischaltung der Schnittstelle
Zentrales Verbindungsobjekt für Login, Suche, Feed, Charts, Watchlists und weitere API-Aufrufe.
Ohne gültige Developer-ID kann keine produktive Verbindung aufgebaut werden.
Hinweis:

Für die Nutzung der Schnittstelle wird eine Developer-ID benötigt. Diese wird durch unseren Vertrieb bereitgestellt.

Bei Fragen oder Interesse an einer Freischaltung erreichen Sie uns über die Kontaktseite .

Login

Die Methode Login meldet den Benutzer am Tai-Pan-Server an und initialisiert die Sitzung für weitere API-Aufrufe.

bool ok = connection.Login(string "CustomerID", string">"Password");
                                                                        
bool Login(string customerId, string password)
Parameter
customerId – Kundenkennung / Login-ID
password – Passwort des Benutzers
Rückgabe
true – Login erfolgreich
false – Login fehlgeschlagen
Fehlerursachen
falsche Zugangsdaten
keine Verbindung zum Server
Developer-ID nicht gültig

Client-Information

Mit GetConnectionClientInfo können Informationen zur verwendeten Client- bzw. DLL-Version ausgelesen werden.

var info = new TPRConnectionClientInfo();
connection.GetConnectionClientInfo(ref info);
string text = info.InfoText;
bool GetConnectionClientInfo(ref TPRConnectionClientInfo info)
Parameter
info – Referenz auf ein Objekt
Rückgabe
true – Daten erfolgreich geladen
false – Daten konnten nicht geladen werden
Eigenschaften
InfoText – Textinformation zur Client- bzw. DLL-Version

Benutzerdaten

GetUserInfo

var userInfo = connection.GetUserInfo();
Signatur
TPRUserInfo GetUserInfo()
Rückgabe
TPRUserInfo – Benutzerdaten und Stammdatenlisten des angemeldeten Benutzers

TPRUserInfo

Das Objekt TPRUserInfo stellt benutzerspezifische Informationen, Benachrichtigungseinstellungen sowie verfügbare Sammlungen wie Watchlists, Börsen und Abonnements bereit.

Daten
EMail – E-Mail-Adresse des Benutzers
Mobile – Mobilnummer
Username – Anzeigename / Benutzername
UserId – interne Benutzer- oder Kunden-ID
UseEMail – Kennzeichen für E-Mail-Benachrichtigungen
UseSMS – Kennzeichen für SMS-Benachrichtigungen
Sammlungen
WatchLists – vorhandene Watchlists
Exchanges – Börsenverzeichnis
SecurityTypes – Wertpapierarten
Countries – Länder
NewsSubscriptions – vorhandene News-Abonnements

Katalogstruktur

Mit GetCatalogStructure kann die vollständige Katalogstruktur mit Ordnern und Einträgen geladen werden. Kataloge bilden dabei eine Ordnerstruktur von Wertpapieren nach Börsen, Märkten oder Themenbereichen ab. Die Methode liefert sowohl die hierarchische Struktur als auch direkten Zugriff auf alle enthaltenen Ordner- und Katalogobjekte.

var entries = new List();
                var folders = new Dictionary();
                var items = new Dictionary();
                                                                        
                connection.GetCatalogStructure(ref entries, ref folders, ref items);
                
GetCatalogStructure Signatur
bool GetCatalogStructure(
                        		  ref List entries,
                        		  ref Dictionary folders,
                        		  ref Dictionary items
                                    )
Parameter
entries – Liste der Katalogeinträge in Strukturform
folders – Dictionary mit allen Ordnerobjekten, Schlüssel ist jeweils die Ordner-ID
items – Dictionary mit allen Katalogobjekten, Schlüssel ist jeweils die Item-ID
Rückgabe
true – Katalogstruktur erfolgreich geladen
false – Laden fehlgeschlagen

Die Search-Funktion ermöglicht die Suche nach Wertpapieren über unterschiedliche Suchtypen wie Symbol, ISIN, Name oder interne Kennungen. Zusätzlich kann die Suche auf bestimmte Wertpapierarten und Börsen eingeschränkt werden.

TPRSearchTypes

Default – Standardsuche
EDV – Suche über EDV-Kennung
ISIN – Suche über ISIN
LimitSymbolen – spezielle Suche für Limitsymbole
MMQuoteId – Suche über MM-Quote-ID
Name – Suche über den Namen
QuickSuggestion – schnelle Vorschlagsliste für Suchfelder
SucheSymbolKuerzel – Suche über Symbolkürzel
Symbol – Suche über Symbol
SymbolNo – Suche über interne Symbolnummer
Symbol_Equal – exakte Symbolsuche
Symbol_ISIN_Name – kombinierte Suche über Symbol, ISIN oder Name
TaiPanEODDBID – Suche über interne EOD-Datenbank-ID

Search

var result = connection.Search(
                        			TPRSearchTypes.Name,
                        			string "Daimler",
                        			TPRSecurityType.All.Id,0
                                	     );
                        
Signatur
TPRSymbolList Search(
                                  TPRSearchTypes searchType,
                        	      string searchText,
                        	      int securityTypeId,
                        	      int exchangeId
                                )
Parameter
searchType – Suchmodus aus TPRSearchTypes
searchText – Suchbegriff, z. B. Name, ISIN oder Symbol
securityTypeId – Filter auf eine Wertpapierart; TPRSecurityType.All.Id bedeutet keine Einschränkung nach Typ
exchangeId – Filter auf eine Börse; 0 bedeutet keine Einschränkung
Rückgabe
TPRSymbolList – Trefferliste mit TPRSymbol-Objekten

TPRSecurityType

TPRSecurityType.All.Id

All – alle Wertpapierarten

Die vollständigen verfügbaren Security-Typen werden über userInfo.SecurityTypes bereitgestellt. Dort kann auf Id und Bezeichnung zugegriffen werden.

Watchlists

Mit den Watchlist-Funktionen können persönliche Beobachtungslisten erstellt, verwaltet und geladen werden. Wertpapiere lassen sich dabei einzeln, gesammelt oder direkt aus Suchergebnissen zu einer Watchlist hinzufügen.


AddWatchList

Erstellt eine neue Watchlist.

Signatur
TPRWatchList AddWatchList(string name)
Parameter
name – frei wählbarer Name der Watchlist
Rückgabe
TPRWatchList – neu erzeugte Watchlist
Beispiel
var watchlist = userInfo.WatchLists.AddWatchList(string "Meine Watchlist");

Add (Einzelnes Instrument)

Fügt ein einzelnes Instrument zur Watchlist hinzu.

Beispiel
watchlist.Add(169286);
Signatur
void Add(int symbolNo)
Parameter
symbolNo – interne Symbolnummer des Instruments

Add (Mehrere Instrumente)

Fügt mehrere Instrumente gleichzeitig zur Watchlist hinzu.

Beispiel
watchlist.Add(new List<int> {169286, 79514});
Signatur
void Add(List<int> symbolNumbers)
Parameter
symbolNumbers – Liste interner Symbolnummern

Add (Aus Suchergebnis)

Übernimmt alle Instrumente aus einer Trefferliste in die Watchlist.

Beispiel
watchlist.Add(result);
Signatur
void Add(TPRSymbolList symbols)
Parameter
symbols – Trefferliste, deren enthaltene Instrumente zur Watchlist hinzugefügt werden

GetWatchListContent

Lädt den Inhalt einer Watchlist.

Beispiel
var entries = connection.GetWatchListContent(watchlist.Id);
Signatur
TPRSymbolList GetWatchListContent(int watchListId)
Parameter
watchListId – ID der Watchlist
Rückgabe
TPRSymbolList – Inhalt der Watchlist

DeleteWatchList

Löscht eine bestehende Watchlist.

Beispiel
userInfo.WatchLists.DeleteWatchList(watchlist.Id);
Signatur
bool DeleteWatchList(int watchListId)
Parameter
watchListId – ID der zu löschenden Watchlist
Rückgabe
true – Watchlist gelöscht
false – Löschen fehlgeschlagen

Realtime Push-Feed

Der Realtime Push-Feed ermöglicht den Empfang von Echtzeitdaten und Push-Nachrichten für abonnierte Wertpapiere. Instrumente können dynamisch abonniert oder entfernt werden, während neue Feed-Nachrichten fortlaufend ausgelesen werden können.

Verarbeitung von Feed-Nachrichten - Codebeispiel
TPRPushFeedMessage pfm = m_PushFeed.GetNextPushFeedMessage();
            if (pfm != null)
            {
                do
                {
                    switch (pfm.MessageType)
                    {
                        case TPRPushFeedMessageTypes.Quote:
                            var TickMessage = pfm as TPRQuoteTickMessage;
                            
                            switch (TickMessage.QuoteType)
                            {
                                case TPRQuoteTypes.Ask:
                                    // TickMessage.QuoteTick.Quote
                                    // TickMessage.QuoteTick.Volume
                                    // TickMessage.QuoteTick.Time
                                    break;
                                case TPRQuoteTypes.Last:
                                    // TickMessage.QuoteTick.Quote
                                    // TickMessage.QuoteTick.Volume
                                    // TickMessage.QuoteTick.Time
                                    break;
                                case TPRQuoteTypes.Bid:
                                    // TickMessage.QuoteTick.Quote
                                    // TickMessage.QuoteTick.Volume
                                    // TickMessage.QuoteTick.Time
                                    break;
                                case TPRQuoteTypes.OFF_MARKET:
                                    // TickMessage.QuoteTick.Quote
                                    // TickMessage.QuoteTick.Volume
                                    // TickMessage.QuoteTick.Time
                                    break;
                                case TPRQuoteTypes.Auction:
                                    // TickMessage.QuoteTick.Quote
                                    // TickMessage.QuoteTick.Volume
                                    // TickMessage.QuoteTick.Time
                                    break;
                                case TPRQuoteTypes.OpenInterest:
                                    // TickMessage.QuoteTick.Quote
                                    // TickMessage.QuoteTick.Volume
                                    // TickMessage.QuoteTick.Time
                                    break;
                            }
                            break;
                        case TPRPushFeedMessageTypes.MarketDepth:
                            var MarketDepthMessage = pfm as TPRMarketDepthMessage;
                            
                            // MarketDepthMessage.QuoteTick.Quote
                            // MarketDepthMessage.QuoteTick.Time
                            // MarketDepthMessage.QuoteTick.Volume
                            // MarketDepthMessage.QuoteType
                            // MarketDepthMessage.Position
                            break;
                    }
                    m_PushFeed.ReturnFeedMessage(pfm);   // Speicher freigeben
                    pfm = m_PushFeed.GetNextPushFeedMessage();  
                } while (pfm != null);
            }
            

GetPushFeed

Erzeugt ein TPRPushFeed-Objekt für den Empfang von Realtime-Nachrichten.

Signatur
TPRPushFeed GetPushFeed()
Rückgabe
TPRPushFeed – Feed-Objekt für Realtime-Nachrichten
Initialisierung
var feed = connection.GetPushFeed();
            feed.ConnectFeed();

SubscribeSymbol

Abonniert Realtime-Daten für ein einzelnes Instrument.

Beispiel
feed.SubscribeSymbol(169286);
Signatur
bool SubscribeSymbol(int symbolNo)
Parameter
symbolNo – interne Symbolnummer des zu abonnierenden Instruments
Rückgabe
true – Abo gesetzt
false – Abo fehlgeschlagen

SubscribeSymbol (Mehrere Instrumente)

Abonniert Realtime-Daten für mehrere Instrumente gleichzeitig.

Beispiel
feed.SubscribeSymbol(new List<int> {169286, 79514});
Signatur
bool SubscribeSymbol(List<int> symbolNumbers)
Parameter
symbolNumbers – Liste interner Symbolnummern
Rückgabe
true – Abos gesetzt
false – mindestens ein Abo fehlgeschlagen oder der Aufruf war nicht erfolgreich

UnsubscribeSymbol

Entfernt ein bestehendes Realtime-Abonnement.

Beispiel
feed.UnsubscribeSymbol(169286);
Signatur
bool UnsubscribeSymbol(int symbolNo)
Parameter
symbolNo – interne Symbolnummer des abzumeldenden Instruments
Rückgabe
true – Abo entfernt
false – Entfernen fehlgeschlagen

GetNextPushFeedMessage

Liest die nächste verfügbare Feed-Nachricht aus.

Beispiel
var msg = feed.GetNextPushFeedMessage();
Signatur
TPRPushFeedMessage GetNextPushFeedMessage()
Rückgabe
nächste verfügbare Feed-Nachricht
TPRQuoteTypes (Kursarten)
TPRQuoteTypes.OFF_MARKET – Vorbörsliche und nachbörsliche Kursfeststellungen (außerhalb der regulären Handelszeiten)

TPRQuoteTypes.Last – Tatsächlich gehandelte Preise (letzter ausgeführter Trade / Schlusskurs eines Ticks)

TPRQuoteTypes.Bid – Kaufkurs: höchster Preis, den ein Käufer aktuell bereit ist zu zahlen

TPRQuoteTypes.Ask – Verkaufskurs: niedrigster Preis, zu dem ein Verkäufer aktuell bereit ist zu verkaufen

TPRQuoteTypes.Auction – Auktionskurs aus Eröffnungs-, Schluss- oder Intraday-Auktionen

TPRQuoteTypes.OpenInterest – Open Interest / Anzahl offener Kontrakte bei Terminmarktinstrumenten

TPRPushFeedMessageTypes

Quote – neue Kursdaten
MarketDepth – neue Markttiefe
News – neue Nachricht
SymbolUpdate – Aktualisierung der Stammdaten eines Symbols
LimitUpdate – Änderung an einem Limit / Alert
LimitTrigger – Limit / Alert wurde ausgelöst
Reconnect – Reconnect-Status
Korrection – Kurskorrektur
Ping – Heartbeat des Servers
Info – allgemeine Information
ConnectionStatus – Verbindungsstatus
Beenden
feed.DisconnectFeed();

Candle Charts

Mit GetCandleChart können historische Candle- bzw. Kursdaten für ein Wertpapier geladen werden. Dabei lassen sich Tagesdaten oder komprimierte Zeitintervalle wie Minutenkerzen abrufen.

GetCandleChart

Verfügbare Overloads
TPRCandleList GetCandleChart(int symbolNo, DateTime from)
                TPRCandleList GetCandleChart(int symbolNo, int compression, int count)
                TPRCandleList GetCandleChart(int symbolNo, int compression, DateTime from)
                
Parameter
symbolNo – interne Symbolnummer des Instruments
compression – Komprimierung der Kerzen, z. B. Minutenintervall
count – Anzahl der gewünschten Kerzen
from – Startdatum ab dem Candles geladen werden
Rückgabe
TPRCandleList – Liste mit Candle-Daten
Tagesdaten
var candles = connection.GetCandleChart(169286, DateTime.Now.AddDays(-10));
Minuten
var candles = connection.GetCandleChart(169286, 15, DateTime.Now.AddDays(-10));
Anzahl
var candles = connection.GetCandleChart(169286, 12, 42);

Intraday Charts

Mit GetIntradayChart können Intraday-Kursdaten und Tickdaten für Wertpapiere geladen werden. Dabei können verschiedene Kursarten wie Last-, Bid- oder Ask-Kurse sowie unterschiedliche Zeiträume und Detailstufen abgefragt werden.

Overloads
TPRQuoteTickList GetIntradayChart(int symbolNo, DateTime from) 
        TPRQuoteTickList GetIntradayChart(int symbolNo, DateTime from, int dayCount)
        bool GetIntradayChart(int symbolNo, DateTime from, out TPRQuoteTickList last, out TPRQuoteTickList ask, out TPRQuoteTickList bid, int dayCount)
        TPRQuoteTickList GetIntradayChart(SymbolNo startDate, DateTime endDateThisLoad, TPRQuoteTypes quoteType)
                
Parameter
symbolNo – interne Symbolnummer des Instruments
from – Startdatum der Abfrage
dayCount – Anzahl der Tage ab from
startDate – Startdatum der Abfrage (für erweiterten Overload)
endDateThisLoad – Enddatum der Abfrage
quoteType – Art der Kursdaten (siehe unten)
last – Rückgabeparameter für Last-Ticks
ask – Rückgabeparameter für Ask-Ticks
bid – Rückgabeparameter für Bid-Ticks
TPRQuoteTypes (Kursarten)
TPRQuoteTypes.OFF_MARKET – Vorbörsliche und nachbörsliche Kursfeststellungen (außerhalb der regulären Handelszeiten)
TPRQuoteTypes.last – Tatsächlich gehandelte Preise (letzter ausgeführter Trade / Schlusskurs eines Ticks)
TPRQuoteTypes.bid – Kaufkurs: höchster Preis, den ein Käufer aktuell bereit ist zu zahlen
TPRQuoteTypes.ask – Verkaufskurs: niedrigster Preis, zu dem ein Verkäufer aktuell bereit ist zu verkaufen
Rückgabe
je nach Overload TPRQuoteTickList oder bool
bei bool: true = Daten erfolgreich geladen, false = Laden fehlgeschlagen
Einfach
var ticks = connection.GetIntradayChart(169286, DateTime.Now.AddDays(-1));
Mit Bid/Ask
TPRQuoteTickList last, ask, bid;
                connection.GetIntradayChart(169286, DateTime.Now.AddDays(-3), out last, out ask, out bid, 1);
Mit QuoteType
var ticks = connection.GetIntradayChart(169286, DateTime.Now.AddDays(-1), DateTime.Now, TPRQuoteTypes.last);

Markttiefe

Mit GetMarketDepth kann die aktuelle Markttiefe ( Level 2 ) eines Instruments abgerufen werden. Dabei stehen die Kauf- und Verkaufsseite des Orderbuchs inklusive Preis- und Volumeninformationen zur Verfügung.

var depth = connection.GetMarketDepth(169286);
Signatur
TPRMarketDepth GetMarketDepth(int symbolNo)
Parameter
symbolNo – interne Symbolnummer des Instruments
Rückgabe
TPRMarketDepth – Markttiefe mit Ask- und Bid-Seite sowie Kursinformationen
Ask
foreach (var a in depth.Ask)
                {
                          var price = a.Quote;
                }
                
Bid
foreach (var b in depth.Bid)
                {
                          var price = b.Quote;
                }
                

Options Matrix

Mit GetOptionsMatrix kann die strukturierte Optionsmatrix eines Basiswerts geladen werden. Die Matrix enthält verfügbare Optionen und Optionsscheine inklusive Laufzeiten, Basispreisen und weiterer Marktdaten.

var matrix = connection.GetOptionsMatrix(169286);
Signatur
TPROptionsMatrix GetOptionsMatrix(int symbolNo)
Parameter
symbolNo – interne Symbolnummer des Basiswerts
Rückgabe
TPROptionsMatrix – strukturierte Optionsmatrix zum Basiswert

Objekte

TPRSymbol

SymbolNo – interne eindeutige Symbolnummer
ISIN – internationale Wertpapierkennnummer
WKN – nationale Kennung
Name – Bezeichnung des Instruments
SymbolString – Kürzel / Symbolanzeige
LastBid – letzter Geldkurs
LastAsk – letzter Briefkurs
LastTrade – letzter gehandelter Kurs
DayOpen – Tageseröffnung
DayHigh – Tageshoch
DayLow – Tagestief
DayVolume oder Volume – Tagesvolumen, sofern verfügbar

TPRCandle

Open – Eröffnungskurs
High – Höchstkurs
Low – Tiefstkurs
Close – Schlusskurs
Time – Zeitstempel der Candle
Volume – Volumen der Candle

TPRQuoteTick

Quote – Kurs des Ticks
Time – Zeitstempel
Volume – Volumen zum Tick

Hinweise

Vor allen API-Aufrufen muss ein erfolgreicher Login erfolgen
PushFeed nicht im UI-Thread verarbeiten
SymbolNo ist die zentrale Referenz für fast alle Methoden
ExchangeId = 0 bedeutet keine Einschränkung
Risikohinweis: Futures, Aktien und Devisenhandel beinhalten ein erhebliches Risiko und sind nicht für jeden Anleger geeignet. Ein Investor könnte ganz oder mehr als das investierte Kapital verlieren. Risikokapital ist Geld, das verloren gehen kann, ohne die finanzielle Sicherheit oder den Lebensstil zu gefährden. Nur Risikokapital sollte für den Handel verwendet werden und nur diejenigen mit ausreichendem Risikokapital sollten den Handel in Betracht ziehen. Die Wertentwicklung in der Vergangenheit ist nicht notwendigerweise ein Indikator für zukünftige Ergebnisse.