Real Time Daten und Systeme. Wer kann helfen?
Hallo,
ich habe mir verschiedenste Webseiten unter anderem die terminmarktwelt.de Produkte angesehen und bin von der Kostenstruktur unschlüssig, was für mich richtig ist und was eben nicht. Sind die Zahlungen monatlich oder jährlich?
Ich möchte gerne Real Time Daten, entweder für einen Windowsrechner mit MetaStock oder einen Datenserver für Linux um dann mit der Qdesign Umgebung eine eigene Chartsoftware zu erstellen. Beides wäre Optimal.
Die zweite Frage: Da ich gerne in verschiedene Ländern bin, überlege ich mir, ob ich die Daten via Satellit (Übertragungslücken) oder via Internet anbinden soll. Es ist immer ein für und wieder. In Amerika kann es bei bestimmten Rechnern Einwahlprobleme geben, vor allem wenn der Rechner eine Registrierung aus Deutschland oder z.B. der Schweiz hat. Wiederum gibt es via Satellit einige Umstellungen. Was kann man da überhaupt machen, um einen Rechner multinational mit Real Time Quotes einzurichten? Kurse von DAX, NASDAQ, NIKKEI reichen mir für mein vorhaben.
Wie hoch sind die Kosten bei Internet mit Flate Rate und wie bei Satellit?
Ich habe eine Lösung gefunden. Es wird zwar sehr zeitaufwendig und viele Hürden müssen erstmal genommen werden. Da ich sowieso von einer Unordnung ausgehe, werde ich mir dieses Engagement leisten.
Um einen Einblick zu geben schreibe ich mal ein Beispiel: ComponentenWare mit Kylix
Im folgenden Beispiel namens StocksOnline wird eine einfache Anwendung zur Verwaltung von Aktienkursen erstellt. Die aktuellen Kurse werden per HTTP aus dem Internet abgefragt und in einer speicherresidenten Tabelle abgelegt. Der Inhalt dieser Tabelle kann dann mit weiteren Komponenten angezeigt, gespeichert oder in eine Datenbank übertragen werden.
Nachdem die Komponenten heruntergeladen und installiert wurden
http://www.swissdelphicenter.ch , http://www.morphtek.com , http://www.nsoftware.com
erzeugt man mit dem Befehl New Application eine neue Anwendung. Diese besitzt auch gleich ein erstes Formular, auf der eine Instanz der mtkMemData-Komponente positioniert wird. Die Tabelle soll die Spalten Symbol (Kurzzeichen der Aktie), Last (letzter Kurs), Date, Time, Change, Open, High, Low und Volume enthalten.
Um den Inhalt der Speicher-Tabelle anzuzeigen, kann man ein Datengitter verwenden. Es wird mit der Tabelle über eine weitere Komponente, die Datenquelle verbunden. Die Aufgabe der Datenquelle besteht darin, mehrere Daten-Kontrollelemente wie das Datengitter oder ein Diagramm mit der selben Datenmenge, in diesem Fall der Tabelle, zu verbinden. Die Navigator-Komponente fügt der Anwendung die wichtigsten Befehle für das Datengitter hinzu. Dazu gehören das Rollen durch die Tabelle sowie Einfügen, Ändern, und Löschen von Zeilen. Das Datengitter und der Navigator sind hervorragende Beispiele dafür, wie man durch die Verwendung einer Standard-Schnittstelle den Einsatz weiterer Komponenten ermöglicht.
Diese beiden Komponenten sind Bestandteil der mit Kylix mitgelieferten CLX-Bibliothek und arbeiten problemlos mit der MorphThek-Komponente zusammen. An dieser Stelle kann man die Anwendung schon einmal übersetzen und starten. Im Datengitter können nun Einträge angelegt werden. Was man nicht sieht, sieht, dass diese Daten in der speicherresidenten Tabelle abgelegt sind. Über die Methoden der Speicher-Tabelle könnte man nun auf einfache Weise weitere Funktionen hinzufügen, z.B. das Speichern und Laden der Aktienkurse in und aus einer Textdatei.
Im Beispiel werden nun die Aktienkurse online aus dem Internet geholt. Yahoo bietet einen Service an, der diese Kurse per HTTP-Abfrage zugänglich macht. Wenn man dem Server die richtige URL mit den gewünschten Aktien-Kurz-Zeichen schickt, antwortet er mit einer Textdatei, die alle Angaben enthält. Diese Aufgabe übernimmt die HTTP-Komponente der IP*Works Suite. Der Schalter mit der Aufschrift Update löst ein Ereignis aus, auf das hin die URL zusammengestellt und über die HTTP-Komponente als GET abgeschickt wird. Für die Aktien-Kurzzeichen wurde links noch eine Listbox eingefügt, in die man die gewünschten Kurzzeichen in der Entwicklungsumgebung sehr einfach eintragen kann. Diese Liste zur Laufzeit abzuändern wäre eine nützliche und einfache Erweiterung für dieses Programm.
Der Quellcode für das Senden der HTTP-Anfrage ist im Listing 1 zu sehen. Die URL wird aus de Listbox-Einträgen mit Pluszeichen zusammengebaut. Der eigentliche Sendebefehl steckt in der Zuweisung HTTP1.Action:=httpGet
Bis die Antwort vom Yahoo-Server eintrifft, dauert es je nach Internet-Verbindung um die zehn Sekunden. Das Beispielprogramm wartet aber in dieser Zeit nicht aktiv, da hier konsequent auf Ereignisse gesetzt wird. Daher, die HTTP-Komponente meldet sich per Ereignis On-Transfer, wenn die Antwort eintrifft. Auf diese Events reagiert die Applikation, zerlegt die Textdatei in die einzelnen Bestandteile und trägt sie in die Speicher-Tabelle ein. Die Methode HTTP1 Transfer wird aufgerufen, wenn ein Teil der Antwort eingetroffen ist. Sie hängt das Paket an den bisher noch nicht ausgewerteten Text in rPrevText und analysiert dann alle mit LF abgeschlossenen Zeilen. Die Standard-Schnittstelle von Datenmengen sieht für das Einfügen von neuen Zeilen den Ablauf Append, Setzen der neuen Werte und ein abschliessendes Post vor.
Der abschliessende Aufruf von MemTable.Cancel ist nötig, weil in der Schleife hinter der letzten Zeile der Antwort noch eine weitere angefügt wird. Damit ist eine kleine Anwendung auch schon fertig. Der grösste Aufwand steckt dabei in Zusammenbau der URL und im Zerlegen der Antwortdatei.
Listing 1
procedure TForm1.HTTP1Transfer(Sender:TObject;Direction, BytesTransferred: Integer; Text:String);
var
s:String;
i, last|: integer;
begin
s:= rPrevText + Text;
last|:1;
MemTable.DisableControls;
MemTable.Append;
for i:= to Length(s) do begin
If s[i]=`,’ then begin
MemTable.Fields[rCurrCol].AsString:= Parse(s, last|:=i-1);
last:=i+1;
Inc(rCurrCol);
end else if s[i] = #10 then begin
MemTable.Fields[rCurrCol].AsString:= Parse(s, last|, i-2);
MemTable.Post;
last|:=i+1;
rCurrCol:=0;
MemTable.Append;
end;
end;
MemTable.Cancel;
rPrevText:=Copy(s, last|,Length(s)-last|+1;
MemTable.EnableControls;
end;
Hallo daytrading,
Klingt spannend.
Mit yahoo könnte es ein Problem geben. Mir ist aufgefallen, wenn man innerhalb weniger Sekunden den selben Chart immer wieder aktualisieren will, sperrt der Server ab.
Aber vielleicht liegt das auch an etwas anderem.
Gruß,
Swingtrader