TAI-PAN Realtime COM Entwicklerdokumentation
Schnellstart
using TaiPanRTLib;
TaiPanRealtimeClass m_TPR = new TaiPanRealtimeClass();
DataBase db = (DataBase)m_TPR.DataBase;
Zentrales COM Objekt für den Zugriff auf Tai-Pan Realtime. Von hier aus erhalten Sie Datenbank, Datastream, Charts, News und weitere Objekte.
Einbinden der COM-Schnittstelle
Klicken Sie im Solution Explorer mit der rechten Maustaste auf References.
Wählen Sie im Kontextmenü den Eintrag Add Reference...
Suchen und markieren Sie unter COM die Referenz: Tai-Pan Realtime Library 1.0 und bestätigen Sie mit OK.
Bitte achten Sie darauf, dass unter den Eigenschaften von TaiPanRTLib die Option Embed Interop Types auf False steht.
Nutzen der COM-Schnittstelle
using-Anweisung
using TaiPanRTLib;
Objekt erzeugen
TaiPanRealtimeClass m_TPR = new TaiPanRealtimeClass();
...
m_TPR.Quit();
Das Objekt stellt die Verbindung zur Tai-Pan Realtime COM Schnittstelle her. Nach Verwendung sauber mit Quit() schließen.
TaiPanRealtime
Das TaiPanRealtime Objekt stellt die Basis für die Kommunikation zwischen Ihrer Anwendung und Tai-Pan Realtime dar.
TaiPanRealtime TPRTObjekt;
public void ComServerStarten()
{
TPRTObjekt = new TaiPanRealtime();
}
Database
Verwenden Sie das DataBase Objekt, um vorhandene Daten aus Tai-Pan Realtime auszulesen oder Veränderungen an diesen durchzuführen.
DataBase db = (DataBase)TPRTObjekt.DataBase;
BarChart
Ein BarChart Objekt bietet den Zugriff auf bereits vorkomprimierte Daten (z.B. 5 Minuten Candles) zu einem Symbol.
BarChart bc = new BarChart();
IBarChartEntry
Dieses Interface bietet Zugriff auf die Eckdaten einer Periode, die im BarChart vorhanden sind.
foreach(IBarChartEntry candle in BarChart)
{
// candle.Zeit
// candle.Open
// candle.High
// candle.Low
// candle.Close
// candle.Volume
}
Barchart via Data und Data2
Für performante Verarbeitung können Periodendaten direkt als Arrays oder per Pointer ausgelesen werden.
// Data2
var openKurse = chart.Data2(
TPRQuickAccessKursArten.TPRQuickAccessKursArtenOpen);
var highKurse = chart.Data2(
TPRQuickAccessKursArten.TPRQuickAccessKursArtenHigh);
var lowKurse = chart.Data2(
TPRQuickAccessKursArten.TPRQuickAccessKursArtenLow);
var closeKurse = chart.Data2(
TPRQuickAccessKursArten.TPRQuickAccessKursArtenClose);
var volumeKurse = chart.Data2(
TPRQuickAccessKursArten.TPRQuickAccessKursArtenVolume);
var zeiten = chart.Data2(
TPRQuickAccessKursArten.TPRQuickAccessKursArtenZeit);
// Data
int[] arrInt = chart.Data;
fixed(void* pointer = &arrInt[0])
{
TPRPERIODE* tprPerioden = (TPRPERIODE*)pointer;
if(tprPerioden != null)
{
for(int i = 0; i < chart.Count; i++)
{
DateTime dt =
DateTime.FromOADate(tprPerioden[i].Zeit);
Debug.WriteLine(
"O:{0} H:{1} L:{2} C:{3} V:{4} Z:{5}",
tprPerioden[i].Open,
tprPerioden[i].High,
tprPerioden[i].Low,
tprPerioden[i].Close,
tprPerioden[i].Volume,
dt.ToLongTimeString());
}
}
}
Datastream (neue Variante)
Das Datastream Objekt kapselt die Funktionalität für den Abgriff von Realtime Kursdaten. Diese Variante ist die empfohlene moderne Nutzung.
m_TPRTDataStream =
m_TPRTObject.DataStream as DataStream;
var datastreamEx =
m_TPRTDataStream as IDataStreamEx;
datastreamEx.EnableExEvent();
m_TPRTDataStream.ExEvent +=
M_datastream_ExEvent;
// Symbol 123456 nur Bezahltkurse
m_TPRTDataStream.Add(123456, 0);
// Symbol 555555 alle drei Kursarten
m_TPRTDataStream.Add(555555, 1);
// Symbol entfernen
m_TPRTDataStream.Remove(78303);
// Alles entfernen
m_TPRTDataStream.RemoveAll();
Push-Daten empfangen
private void M_datastream_ExEvent(
TPRStreamEventID nEventID,
int SymbolNr,
float Kurs,
float Volume,
DateTime Zeit,
int LongValue)
{
switch(nEventID)
{
case TPRStreamEventID.TPRStreamEvent_Price:
M_datastream_Bezahlt(
SymbolNr, Kurs, Volume, Zeit);
break;
case TPRStreamEventID.TPRStreamEvent_Bid:
M_datastream_Geld(
SymbolNr, Kurs, Volume, Zeit);
break;
case TPRStreamEventID.TPRStreamEvent_Ask:
M_datastream_Brief(
SymbolNr, Kurs, Volume, Zeit);
break;
}
}
Weiterverarbeitung
private void M_datastream_Brief(
int SymbolNr, float Kurs,
float Volume, DateTime Zeit)
{
Debug.WriteLine($"{Kurs}");
}
private void M_datastream_Geld(
int SymbolNr, float Kurs,
float Volume, DateTime Zeit)
{
Debug.WriteLine($"{Kurs}");
}
private void M_datastream_Bezahlt(
int SymbolNr, float Kurs,
float Volume, DateTime Zeit)
{
Debug.WriteLine($"{Kurs}");
}
Datastream (ALTE Verfahrensweise)
Nicht empfohlen. Nur für Altprojekte.
m_TPRTDataStream.Bezahlt +=
M_TPRTDataStream_Bezahlt;
// Hinzufügen Symbolnummer 123456
m_TPRTDataStream.Add(123456, 0);
// Hinzufügen Symbolnummer 555555
m_TPRTDataStream.Add(555555, 1);
// Entfernen Symbolnummer 78303
m_TPRTDataStream.Remove(78303);
// Entfernen aller Symbole
m_TPRTDataStream.RemoveAll();
private void M_TPRTDataStream_Bezahlt(
int SymbolNr,
float Kurs,
float Volume,
DateTime Zeit)
{
// SymbolNr
// Kurs
// Volume
// Zeit
}
IBoerse
Über dieses Objekt kann auf Name und Nummer eines Börsenplatzes zugegriffen werden.
foreach(IBoerse boerse in
(IBoersen)db.Boersen)
{
// boerse.Name
// boerse.Nr
}
IChartTimeRange
Dieses Interface muss per Cast abgerufen werden. Danach kann eine Zeitspanne gesetzt werden.
IChartTimeRange range =
(IChartTimeRange)new Jahreschart();
DateTime Time1 =
new DateTime(2005, 01, 01);
DateTime Time2 =
new DateTime(2005, 01, 20);
range.TimeRange(Time1, Time2);
IDepotListe
Ein Objekt vom Typ IDepotListe kapselt alle Symboleinträge einer Depotliste.
foreach(IDepotListe DepotListe in
(IListen)db.DepotListen)
{
// DepotListe.Nr
// DepotListe.Name
}
IDepotListe2
Ermöglicht das Hinzufügen und Löschen von Symbolen innerhalb einer Depotliste.
IDepotListe2 DepotListe2;
foreach(IDepotListe DepotListe in
(IListen)db.DepotListen)
{
DepotListe2 =
(IDepotListe2)DepotListe;
DepotListe2.Add(79514);
DepotListe2.Remove(42);
DepotListe2.RemoveAll();
}
IIntradayChart
Dieses Objekt beinhaltet alle Intradaykurse zu einem Symbol von einem bestimmten Tag. Je nach Anforderung stehen Bezahltkurse sowie Brief-/Geldkurse zur Verfügung.
var heute = DateTime.Now.Date;
var DAX = 79514;
// 0 = keine BidAsk Kurse
IIntradayChart Chart =
(IIntradayChart)db.IntradayChart(
DAX,
0,
heute);
Chart.KursArt =
TPRKursart.TPRKursartBezahlt;
IIntradayChartEintrag
Ein IIntradayChartEintrag Objekt stellt Zeitpunkt, Kurswert und Kursvolumen eines Kursticks bereit.
foreach(IIntradayChartEintrag Eintrag
in TPRTIntradayChart)
{
// Eintrag.Kurs
// Eintrag.Volume
// Eintrag.Zeit
}
IIntradayChartPeriodeEintrag
Stellt die Eckdaten einer komprimierten Periode bereit.
IIntradayChartQuickAccessPeriode IChart;
var heute = DateTime.Now.Date;
var DAX = 79514;
// 0 = keine BidAsk Kurse
IChart =
(IIntradayChartQuickAccessPeriode)
db.IntradayChart(DAX,0,heute);
IChart.Komprimierung = 60;
foreach(IIntradayChartPeriodeEintrag Eintrag
in IChart)
{
// Eintrag.Open
// Eintrag.High
// Eintrag.Low
// Eintrag.Close
// Eintrag.Volume
// Eintrag.Zeit
}
IIntradayChartQuickAccess
Ermöglicht schnellen Zugriff auf komplette Kursreihen eines Wertpapieres als Arrays.
IIntradayChartQuickAccess IDAccess =
(IIntradayChartQuickAccess)
db.IntradayChart(
79514,
9,
DateTime.Now.Date);
float[] Kurse =
(float[])IDAccess.IntradayData2(
TPRQuickAccessKursArten
.TPRQuickAccessKursArtenClose);
DateTime[] Zeit =
(DateTime[])IDAccess.IntradayData2(
TPRQuickAccessKursArten
.TPRQuickAccessKursArtenZeit);
Int32[] Volume =
(Int32[])IDAccess.IntradayData2(
TPRQuickAccessKursArten
.TPRQuickAccessKursArtenVolume);
IIntradayChartQuickAccessPeriode
Stellt Kursinformationen bereit, wobei die Daten anhand einer Komprimierung zusammengefasst werden.
IIntradayChartQuickAccessPeriode IChart =
(IIntradayChartQuickAccessPeriode)
db.IntradayChart(
79514,
0,
DateTime.Now.Date);
IChart.Komprimierung = 60;
foreach(IIntradayChartPeriodeEintrag Eintrag
in IChart)
{
// Eintrag.Open
// Eintrag.High
// Eintrag.Low
// Eintrag.Close
// Eintrag.Volume
}
IIntradayChartCollection (ArrayLoader)
Lädt Intradaydaten mehrerer Tage performant über den ArrayLoader.
ArrayLoader loader = new ArrayLoader();
// Wertpapier über SymbolNr
int symbolNr = 78303;
// Startdatum = gestern
DateTime startDatum =
DateTime.Now.AddDays(-1);
// 0 = ohne BidAsk
int bidAsk = 0;
IIntradayChartCollection ichartCol =
loader.Intradaycharts(
symbolNr,
startDatum,
bidAsk)
as IIntradayChartCollection;
if(ichartCol != null)
{
int count = ichartCol.Count;
for(int i = 1; i <= count; i++)
{
IIntradayChart ichart =
ichartCol[i] as IIntradayChart;
if(ichart != null)
{
foreach(
IIntradayChartEintrag entry
in ichart)
{
Debug.WriteLine(
"{0}{1}",
entry.Zeit.ToShortTimeString(),
entry.Kurs);
}
}
}
}
JahreschartCollection (ArrayLoader)
Lädt End-of-Day Charts mehrerer Symbole gleichzeitig.
ArrayLoader loader = new ArrayLoader();
int[] symbolNr = new int[5]
{
78303,
169286,
78275,
78340,
78267
};
DateTime datumVon =
new DateTime(2013,8,1);
DateTime datumBis =
DateTime.Now;
JahreschartCollection jahresCol =
loader.Jahrescharts(
symbolNr,
datumVon,
datumBis)
as JahreschartCollection;
if(jahresCol != null)
{
foreach(Jahreschart chart in jahresCol)
{
foreach(IJahreschartEintrag entry
in chart)
{
Debug.WriteLine(
"{0} {1} {2} {3} {4}",
entry.Zeit.ToShortDateString(),
entry.Open,
entry.High,
entry.Low,
entry.Close);
}
}
}
BarChartCollection (ArrayLoader)
Lädt Periodencharts mehrerer Symbole gleichzeitig.
ArrayLoader loader = new ArrayLoader();
int[] symbolNr = new int[5]
{
78303,
169286,
78275,
78340,
78267
};
int minuten = 60;
int anzahl = 5;
BarChartCollection barCol =
loader.Periodencharts(
symbolNr,
minuten,
anzahl)
as BarChartCollection;
if(barCol != null)
{
foreach(BarChart chart in barCol)
{
foreach(IBarChartEntry bar in chart)
{
Debug.WriteLine(
"{0} {1} {2} {3} {4}",
bar.Zeit,
bar.Open,
bar.High,
bar.Low,
bar.Close);
}
}
}
IKatalogListe
Das IKatalogListe Objekt ist eine Collection aller in Tai-Pan Realtime vorhandenen Kataloge. Über die Item Eigenschaft (Objekte vom Typ IKatalog) wird der Zugriff auf weitere Details des Kataloges ermöglicht.
foreach(IKatalog Liste in
(IKatalogListe)db.KatalogListe)
{
// Liste.Nr
// Liste.Art
// Liste.Count
// Liste.Name
}
IKatalog
Ein IKatalog Objekt stellt Informationen zu einem Katalog bereit und bietet über die Item Eigenschaft Zugriff auf die darin enthaltenen Einträge.
// siehe Beispiel IKatalogListe
Ein IKursSuchListe Objekt beinhaltet detaillierte Informationen zu Wertpapieren. Dieses Objekt wird von der Methode KursSuche() des Database Objektes zurückgegeben.
IKursSuchListe SuchListe =
(IKursSuchListe)db.KursSuche(
TPRSuchKriterien.TPRSucheWertpapiername,
"volkswagen",
9,
1);
foreach(IKursSymbol Symbol in SuchListe)
{
// Symbol.Aktuell
// Symbol.AktuellZeit
// Symbol.BezahltVolume
// Symbol.Boerse
// Symbol.Brief
// Symbol.BriefVolume
// Symbol.BriefZeit
// Symbol.EDV
// Symbol.FirstTickDate
// Symbol.Geld
// Symbol.GeldVolume
// Symbol.GeldZeit
// Symbol.Handel
// Symbol.High
// Symbol.Low
// Symbol.Marktkapitalisierung
// Symbol.Name
// Symbol.Open
// Symbol.PrevClose
// Symbol.Symbol
// Symbol.SymbolNr
// Symbol.Volume
// Symbol.Waehrung
// Symbol.WPArt
}
Ein Objekt dieses Typs ermöglicht die Abfrage fast aller Spalteninformationen eines Suchergebnisses.
// siehe Beispiel IKursSuchListe
IListen
Mit diesem Objekt können vorhandene Watchlisten und Depotlisten ausgelesen werden.
foreach(IWatchListe Liste in
(IListen)db.WatchListen)
{
// Liste.Name
// Liste.Nr
// Liste.Count
}
foreach(IDepotListe Liste in
(IListen)db.DepotListen)
{
// Liste.Name
// Liste.Nr
// Liste.Count
}
IMarkttiefeListe
Dieses Objekt liefert eine Collection über die aktuellen Werte innerhalb der Markttiefe. Alle Einträge sind vom Typ IMarkttiefe.
IMarkttiefeListe TPRTMarkttiefeListe =
(IMarkttiefeListe)
db.get_Markttiefe(78303);
foreach(IMarkttiefe MT
in TPRTMarkttiefeListe)
{
// MT.Bezahlt
// MT.BezahltVolume
// MT.BezahltZeit
// MT.Brief
// MT.BriefVolume
// MT.BriefZeit
// MT.Geld
// MT.GeldVolume
// MT.GeldZeit
// MT.Position
}
IMarkttiefe
Ein Objekt vom Typ IMarkttiefe stellt alle Informationen an einer bestimmten Position innerhalb der Markttiefe eines Symbols zur Verfügung.
// siehe Beispiel IMarkttiefeListe
Watchlisten & Depotlisten Hinweise
Watchlisten dienen zur Beobachtung von Symbolen. Depotlisten können zusätzlich Positionsdaten enthalten und aktiv verändert werden.
| Typ |
Beschreibung |
| Watchliste |
Beobachtungsliste ohne Bestand |
| Depotliste |
Portfolio / Positionsverwaltung |
Hinweise zur Wertpapiersuche
Mit KursSuche() lassen sich Symbole nach Namen, ISIN, Symbol, WKN oder weiteren Kriterien finden.
db.KursSuche(
TPRSuchKriterien.TPRSucheISIN,
"DE0005557508",
9,
1);
News
Ein News Objekt bietet Zugriff auf die News von Tai-Pan Realtime. Die abrufbare Newsliste enthält alle verfügbaren News und kann zusätzlich gefiltert werden.
TaiPanRTLib.News m_News;
TaiPanRTLib.INewsListe ListeNews;
TaiPanRTLib.INewsItem EineNews;
m_News = new TaiPanRTLib.News();
// Liste der News abrufen
ListeNews = m_News.NewsListe;
// Filter setzen:
// alle News von heute
// Deutsche Telekom
ListeNews.Filter(
TaiPanRTLib.NewsTagFilter.TPRNewsTagAlle,
0,
"555750");
// News abrufen
foreach(EineNews in ListeNews)
{
// EineNews.NewsNr
// EineNews.Datum
// EineNews.Zeit
// EineNews.Headline
// EineNews.Body
// EineNews.Wertpapiere
}
NewsAbo
Ein News Objekt bietet ebenfalls Zugriff auf abonnierbare Newsquellen.
News m_News = new News();
INewsAboListe AboListe =
(INewsAboListe)m_News.NewsAboListe;
foreach(INewsAbo Abo in AboListe)
{
// Abo.ID
// Abo.Name
}
// Beispiel Filter:
// 128 + 16400 = 16528
m_News.Add(16528, "");
IOSListe
Ein Objekt vom Typ IOSListe kapselt alle Symboleinträge einer Optionsscheinliste.
foreach(IOSListe Listen in
(IListen)db.Optionsscheinlisten)
{
// Listen.Count
// Listen.Name
// Listen.Nr
// Listen.VolaBasis
}
IOS
Ein Objekt dieses Typs ermöglicht die Abfrage fast aller Spalteninformationen einer IOSListe.
foreach(IOS Liste in Listen)
{
// Liste.Name
// Liste.SymbolNr
// Liste.Bezahlt
// Liste.Brief
// Liste.Geld
// Liste.Hebel
// Liste.Delta
// Liste.Gamma
// Liste.Theta
// Liste.Vega
// Liste.Vola
// Liste.Restlaufzeit
// Liste.Faelligkeit
}
IStammInfo
Die Informationen dieses Objektes bilden die sinnvolle gemeinsame Schnittmenge aller Wertpapierarten.
foreach(IStammInfo sInfo in
(IKatalog)db.get_Katalog(42))
{
// sInfo.Aktuell
// sInfo.AktuellZeit
// sInfo.Boerse
// sInfo.EDV
// sInfo.FullSymbol
// sInfo.ISIN
// sInfo.Name
// sInfo.Symbol
// sInfo.SymbolNr
// sInfo.Waehrung
// sInfo.WPArt
}
Durch Setzen der Symbolnummer werden automatisch die zugehörigen Stammdaten geladen.
IStamminformationen StammInfo =
new StamminformationenClass();
StammInfo.SymbolNr = 78303;
// StammInfo.Name
// StammInfo.Symbol
// StammInfo.ISIN
// StammInfo.Branche
// StammInfo.Land
// StammInfo.TickSize
// StammInfo.TickValue
// StammInfo.Waehrung
// StammInfo.WertpapierArt
IStamminformationen (ArrayLoader)
Mehrere Stammdatensätze gleichzeitig laden.
ArrayLoader loader = new ArrayLoader();
int[] symbolNr = new int[5]
{
78303,
169286,
78275,
78340,
78267
};
StammdatenCollection stammCol =
loader.Stammdaten(symbolNr)
as StammdatenCollection;
ISuchListe
Ein ISuchListe Objekt enthält Treffer einer Suche nach Wertpapieren innerhalb von Tai-Pan Realtime.
ISuchListe liste =
(ISuchListe)db.KursSuche(
TPRSuchKriterien.TPRSucheWertpapiername,
"Telekom",
9,
1);
foreach(ISuchSymbol item in liste)
{
// item.Name
// item.Symbol
}
ISuchSymbol
Ein einzelner Treffer innerhalb einer Suchliste.
foreach(ISuchSymbol item in liste)
{
// item.Name
// item.Symbol
// item.SymbolNr
// item.ISIN
// item.WKN
}
IWatchListe
Eine Watchliste enthält beobachtete Wertpapiere.
foreach(IWatchListe wl in
(IListen)db.WatchListen)
{
// wl.Name
// wl.Nr
// wl.Count
}
IWatchListe2
Erweitertes Interface zum Bearbeiten einer Watchliste.
IWatchListe2 wl2 =
(IWatchListe2)watchliste;
wl2.Add(78303);
wl2.Remove(1);
wl2.RemoveAll();
IWertpapier
Ein einzelnes Wertpapierobjekt mit Kurs-, Stamm- und Symbolinformationen.
IWertpapier wp =
liste.Item(1);
wp.Name;
wp.Symbol;
wp.ISIN;
wp.WKN;
wp.Aktuell;
IWertpapierListe
Collection mehrerer Wertpapierobjekte.
IWertpapierListe wl =
katalog.WertpapierListe;
foreach(IWertpapier wp in wl)
{
// wp.Name
// wp.Symbol
}
IZertifikat
Spezialobjekt für Zertifikate und strukturierte Produkte. Je nach Produkttyp stehen Zusatzfelder bereit.
IZertifikat z =
(IZertifikat)wp;
// z.B.
// z.Basiswert
// z.Hebel
// z.Barriere
// z.Laufzeit
// z.Emittent
Für große Datenmengen bevorzugt verwenden: • ArrayLoader • Data2() Methoden • QuickAccess Interfaces Diese Varianten sind deutlich schneller als COM Einzelzugriffe.
Allgemeine Hinweise
• Tai-Pan Realtime muss installiert sein
• COM Schnittstelle muss registriert sein
• x86 Build oft empfohlen
• COM Objekte sauber freigeben
• Streams nach Nutzung entfernen
• Events korrekt abmelden