Chart panels

This commit is contained in:
Michael Schimmel
2025-07-13 16:57:58 +02:00
parent 6e5c0de876
commit 840904e42d
9 changed files with 358 additions and 250 deletions
+10 -13
View File
@@ -27,6 +27,7 @@ uses
FMX.Memo,
FMX.Objects,
Myc.Futures,
Myc.Trade.Types,
Myc.Trade.DataStream,
Myc.Trade.DataPoint,
Myc.Trade.DataProvider,
@@ -183,17 +184,17 @@ begin
var Hull: IMycConverter<Double, Double> := TGenericIndicator<Double, Double>.Create(TIndicators.CreateHMA(150));
Closes.Sender.Link(Hull);
chart.AddDoubleSeries(Hull.Sender, TAlphaColors.Aliceblue);
chart.Panels[0].AddDoubleSeries(Hull.Sender, TAlphaColors.Aliceblue);
// Add SMA (Simple Moving Average)
var Sma: IMycConverter<Double, Double> := TGenericIndicator<Double, Double>.Create(TIndicators.CreateSMA(50));
Closes.Sender.Link(Sma);
chart.AddDoubleSeries(Sma.Sender, TAlphaColors.Yellow);
chart.Panels[0].AddDoubleSeries(Sma.Sender, TAlphaColors.Yellow);
// Add EMA (Exponential Moving Average)
var Ema: IMycConverter<Double, Double> := TGenericIndicator<Double, Double>.Create(TIndicators.CreateEMA(21));
Closes.Sender.Link(Ema);
chart.AddDoubleSeries(Ema.Sender, TAlphaColors.Aqua);
chart.Panels[0].AddDoubleSeries(Ema.Sender, TAlphaColors.Aqua);
// Add Bollinger Bands (20, 2.0)
var Boli: IMycConverter<Double, TBollingerBandsResult> :=
@@ -204,30 +205,26 @@ begin
TMycGenericConverter<TBollingerBandsResult, Double>
.Create(function(const Item: TBollingerBandsResult): Double begin Result := Item.UpperBand; end);
Boli.Sender.Link(BoliUpper);
chart.AddDoubleSeries(BoliUpper.Sender, TAlphaColors.Gray);
chart.Panels[0].AddDoubleSeries(BoliUpper.Sender, TAlphaColors.Gray);
var BoliMiddle: IMycConverter<TBollingerBandsResult, Double> :=
TMycGenericConverter<TBollingerBandsResult, Double>
.Create(function(const Item: TBollingerBandsResult): Double begin Result := Item.MiddleBand; end);
Boli.Sender.Link(BoliMiddle);
chart.AddDoubleSeries(BoliMiddle.Sender, TAlphaColors.Darkgray, 1.0);
chart.Panels[0].AddDoubleSeries(BoliMiddle.Sender, TAlphaColors.Darkgray, 1.0);
var BoliLower: IMycConverter<TBollingerBandsResult, Double> :=
TMycGenericConverter<TBollingerBandsResult, Double>
.Create(function(const Item: TBollingerBandsResult): Double begin Result := Item.LowerBand; end);
Boli.Sender.Link(BoliLower);
chart.AddDoubleSeries(BoliLower.Sender, TAlphaColors.Gray);
chart.Panels[0].AddDoubleSeries(BoliLower.Sender, TAlphaColors.Gray);
var rsiChart := TMycChart.Create(Self);
AlignControl(rsiChart);
rsiChart.Height := Layout.ChildrenRect.Width * 9 / 32;
rsiChart.Lookback.Value := 50000;
rsiChart.SetXAxisSeries<TDateTime>(Timestamps.Sender);
chart.AddPanel;
// Add RSI (Relative Strength Index)
var Rsi: IMycConverter<Double, Double> := TGenericIndicator<Double, Double>.Create(TIndicators.CreateRSI(14));
Closes.Sender.Link(Rsi);
rsiChart.AddDoubleSeries(Rsi.Sender, TAlphaColors.Fuchsia);
chart.Panels[1].AddDoubleSeries(Rsi.Sender, TAlphaColors.Fuchsia);
{
// Add MACD (12, 26, 9)
var Macd: IMycConverter<Double, TMacdResult> := TGenericIndicator<Double, TMacdResult>.Create(TIndicators.CreateMACD(12, 26, 9));
@@ -260,7 +257,7 @@ begin
OhlcPoint.Sender.Link(TimeStamps);
chart.SetXAxisSeries<TDateTime>(Timestamps.Sender);
chart.AddOhlcSeries(Ohlc.Sender);
chart.Panels[0].AddOhlcSeries(Ohlc.Sender);
var done := ExecuteStrategy(Symbol, OhlcPoint);