Abrufen von Aktienkursen über eine GET-Anfrage im JSON-Format und deren Verbindung mit FastReport VCL 6

2020-05-07

logo FR      logo FR

Heute schauen wir uns an, wie man Aktienkurse mit einer GET-Anfrage mit HTTPS-Protokoll und öffentlicher tradingviewapi.docs.apiary.io API bekommt 

Laut der Dokumentation https://tradingviewapi.docs.apiary.io/#reference/0/history/0?console=1 müssen Sie, um Kursberichte zu erhalten, die GET-Anfrage Geschichte verwenden

GET history

https://api.bcs.ru/udfdatafeed/v1/history?symbol=BRENT&resolution=60&from=1450772216&to=1450858616

URI PARAMETERS

Name

Example

Description

symbol

BRENT

currency pair

resolution

D

discreteness of candles, possible values: 1, 5, 15, 30, 45, 60, 120, 180, 240, D, W, M

from

1450772216

beginning of period

to

1450858616

end of period

Erstellen Sie eine Anwendung und fügen Sie dem Formular Komponenten hinzu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 frxReport1: TfrxReport;
 JSON_DS: TfrxUserDataSet;
 ButtonConnectToJSON: TButton;
 Label1: TLabel;
 Label2: TLabel;
 Label3: TLabel;
 ComboBoxName: TComboBox;
 ComboBoxResolution: TComboBox;
 DateTimePickerFrom: TDateTimePicker;
 Label4: TLabel;
 DateTimePickerTo: TDateTimePicker;
 ButtonShowReport: TButton;
 Image1: TImage;
 Label5: TLabel;
 StatusBar1: TStatusBar;
 ButtonDesign: TButton;
 frxDesigner1: TfrxDesigner;
 frxChartObject1: TfrxChartObject;
 frxPDFExport1: TfrxPDFExport;

FastReport VCL

Elemente zu ComboBoxName und ComboBoxResolution hinzufügen 

1
2
ComboBoxName.Items := 'GAZP SBER BRENT MOEX ROSN YNDX RUAL';
ComboBoxResolution.Items := '1 5 15 30 45 60 120 180 240 D W M';

Globale Variablen hinzufügen 

1
2
3
4
5
6
7
8
var
 tHTTP: TfrxTransportHTTP;
 frxJSON: TfrxJSON;
 Res: String;
 Symbol,Resolution,FromCandlesHistory,ToCandlesHistory : String;
 frxJSONArrayT,frxJSONArrayC,frxJSONArrayO,
 frxJSONArrayH,frxJSONArrayL,frxJSONArrayV: TfrxJSONArray;
 S: TStringStream;

Im Click-Ereignis der Schaltfläche ButtonConnectToJSON schreiben wir den folgenden Code: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
procedure TFormJSON.ButtonConnectToJSONClick(Sender: TObject);
begin
 frxReport1.LoadFromFile('ChartJSON.fr3');
 JSON_DS.RangeEnd := reCount;
 Symbol := ComboBoxName.Items[ComboBoxName.ItemIndex];
 Resolution := ComboBoxResolution.Items[ComboBoxResolution.ItemIndex];
 FromCandlesHistory := DateTimeToUnix(DateTimePickerFrom.DateTime).ToString;
 ToCandlesHistory := DateTimeToUnix(DateTimePickerTo.DateTime).ToString;
 
//Creating a TfrxTransportHTTP Object for a GET Request over HTTPS
 
 tHTTP := TfrxTransportHTTP.Create(nil);
 try
 
//We form a GET request string and get a response in JSON format
 
 Res := tHTTP.Get('https://api.bcs.ru/udfdatafeed/v1/history?symbol='
 +Symbol+
 '&resolution='+Resolution +
 '&from='+ FromCandlesHistory+
 '&to='+ToCandlesHistory);
 
// if JSON is received incorrectly, then load it from the file and display a message in StatusBarr
 
 if (Res = '') or (pos('"s":"ok"',Res) = 0) then
 begin
 StatusBar1.SimpleText := 'Error loading JSON';
 S := TStringStream.Create('', TEncoding.UTF8);
 try
 S.LoadFromFile('JSON/'+Symbol+'.json');
 finally
 Res:= S.DataString;
 FreeAndNil(S);
 end;
 StatusBar1.SimpleText := 'Successful JSON loading from file '+Symbol+'.json';
 end
 else
 begin
 StatusBar1.SimpleText := 'Successful JSON('+Symbol+') loading';
 end;
 
// We load the received JSON from the Res line into the frxJSON object: TfrxJSON
 
 frxJSON := TfrxJSON.Create(Res);
 try
 if frxJSON.IsValid then
 begin
 StatusBar1.SimpleText :=StatusBar1.SimpleText +' /JSON is Valid';
 
// Read arrays
 
 if frxJSON.IsNameExists('t') then
 frxJSONArrayT := TfrxJSONArray.Create(frxJSON.ObjectByName('t'));
 frxJSONArrayC := TfrxJSONArray.Create(frxJSON.ObjectByName('c'));
 frxJSONArrayO := TfrxJSONArray.Create(frxJSON.ObjectByName('o'));
 frxJSONArrayH := TfrxJSONArray.Create(frxJSON.ObjectByName('h'));
 frxJSONArrayL := TfrxJSONArray.Create(frxJSON.ObjectByName('l'));
 frxJSONArrayV := TfrxJSONArray.Create(frxJSON.ObjectByName('v'));
// Prepare JSON_DS by clearing and adding fields
 JSON_DS.Fields.Clear;
 JSON_DS.Fields.Add('Ticker');
 JSON_DS.Fields.Add('Date');
 JSON_DS.Fields.Add('Time');
 JSON_DS.Fields.Add('Open');
 JSON_DS.Fields.Add('Close');
 JSON_DS.Fields.Add('High');
 JSON_DS.Fields.Add('Low');
 JSON_DS.Fields.Add('Vol');
 JSON_DS.RangeEndCount := frxJSONArrayT.Count;
 end
 else StatusBar1.SimpleText :=StatusBar1.SimpleText +' /JSON is Invalid';
 finally
 end;
 finally
 end;
end;

Um Daten beim Generieren eines Berichts aus den Arrays frxJSONArrayT, frxJSONArrayC, frxJSONArrayO, frxJSONArrayH, frxJSONArrayL, frxJSONArrayV über die Komponente JSON_DS: TfrxUserDataSet zu erhalten, müssen wir das Ereignis OnGetValue verwenden: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure TFormJSON.JSON_DSGetValue(const VarName: string; var Value: Variant);
var
 Item: string;
 Time : string;
begin
 Item := frxJSONArrayT.GetString(JSON_DS.RecNo);
 DateTimeToString(Time, 't', UnixToDateTime(StrToInt64(Item)));
 
 if VarName = 'Ticker' then
 begin
 Value := Symbol;
 exit;
 end
 else if VarName = 'Date' then
 begin
 Value := DateToStr(UnixToDateTime(StrToInt64(Item)))+' '+Time;
 exit;
 end
 else if VarName = 'Time' then
 begin
 Value := Time;
 exit;
 end
 else if VarName = 'Open' then
 Item := frxJSONArrayO.GetString(JSON_DS.RecNo)
 else if VarName = 'Close' then
 Item := frxJSONArrayC.GetString(JSON_DS.RecNo)
 else if VarName = 'High' then
 Item := frxJSONArrayH.GetString(JSON_DS.RecNo)
 else if VarName = 'Low' then
 Item := frxJSONArrayL.GetString(JSON_DS.RecNo)
 else if VarName = 'Vol' then
 Item := frxJSONArrayV.GetString(JSON_DS.RecNo);
 
 Value := Item;
end;

Als nächstes erstellen Sie eine Vorlage im Report-Designer, nennen sie ChartJSON.fr3 und verbinden JSON_DS mit ihr

Designer_FR

Um das Diagramm anzuzeigen, verwenden Sie die Candle Series aus dem TeeChart Pro VCL-Paket und verbinden Sie sie ebenfalls mit JSON_DS

Candle_Series_configuration

Als nächstes fügen wir die Click-Event-Handler für die übrigen Schaltflächen hinzu: 
 
1
2
3
4
5
6
7
8
9
10
procedure TFormJSON.ButtonDesignClick(Sender: TObject);
begin
 if (Res = '') then ButtonConnectToJSON.Click;
 frxReport1.DesignReport();
end;

procedure TFormJSON.ButtonShowReportClick(Sender: TObject); begin if (Res = '') then ButtonConnectToJSON.Click; frxReport1.ShowReport(); end;

Wir fügen auch Change-Eventhandler für ComboBoxName, DateTimePickerFrom und DateTimePickerTo hinzu: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TFormJSON.ComboBoxNameChange(Sender: TObject);
begin
 ButtonConnectToJSON.Click;
end;
 
procedure TFormJSON.DateTimePickerFromChange(Sender: TObject);
begin
 ButtonConnectToJSON.Click;
end;
 
procedure TFormJSON.DateTimePickerToChange(Sender: TObject);
begin
 ButtonConnectToJSON.Click;
end;

Vergessen Sie auch beim Schließen der Anwendung nicht, den Speicher der verwendeten Objekte freizugeben.

1
2
3
4
5
6
7
8
9
10
11
procedure TFormJSON.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 tHTTP.Free;
 frxJSON.Free;
 frxJSONArrayT.Free;
 frxJSONArrayC.Free;
 frxJSONArrayO.Free;
 frxJSONArrayH.Free;
 frxJSONArrayL.Free;
 frxJSONArrayV.Free;
end;

Starten Sie nun die Anwendung

FastReport VCL

In dieser Anwendung können Sie die gewünschten Aktien auswählen

FastReport VCL

Und Sie können den gewünschten Datumsbereich auch über den Kalender auswählen

FastReport VCL

Die Verbindung zu JSON wird hergestellt, wenn Sie auf die Schaltflächen "Connect to JSON", "Show Report" oder "D" klicken, sowie beim Ändern der Daten oder Namen von Anteilen und es wird eine Meldung über den Verbindungsstatus angezeigt.  

FastReport VCL

Wenn Sie auf die Schaltfläche "Bericht anzeigen" klicken, wird ein Bericht erstellt und dessen Vorschau angezeigt

FastReport VCL

Herzlichen Glückwunsch, Sie haben Aktienkurse im JSON-Format über eine GET-Anfrage abgerufen, JSON mit FastReport VCL 6 verbunden und einen Bericht erstellt. 

Demo-Link herunterladen: DemoJSON.zip.

20. November 2024

Lokalisierung und Ändern von Sprachen in FastReport VCL

FastReport VCL unterstützt 40 Sprachen für die Schnittstellenlokalisierung und ermöglicht es Ihnen, die Sprache im laufenden Betrieb über Menüs oder Code ohne Neukompilierung zu ändern.
11. Dezember 2023

Neuer S3 (Amazon) Transport in FastReport VCL

In diesem Artikel werden wir uns den neuen Transport in S3 (Amazon) für FastReport VCL ansehen, bei dem es sich um einen Objektspeicher für Dateien und Buckets handelt.
26. September 2023

Installation von FastReport- und FastCube-Komponenten in Lazarus

Anleitung zur Installation von FastReport in Lazarus für verschiedene Betriebssysteme mit einem Vergleich der Trial, Professional-Editionen.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.