U kunt een stukje hierover lezen via de volgende link:
http://www.jstas.com/ALMA.pdf
Onderstaand de TA-script code.
Ik heb de ALMA als een functie erin geplaatst, zodat u die functie kan overnemen in een ander stukje code.
AEX grafiek met ALMA erin weergegeven

AEX grafiek met daarin ALMA (blauw) en een EMA (rood)

Code:
Code: Selecteer alles
{- Filename: ALMA -}
//Arnaud Legoux Moving Average ALMA
//Versie 1.0 dd. 2021-08-16
//vertaling: jstas.com
Function ALMA(serie:Tseries; Offset:Real; Sigma,Per:Integer):TSeries;
var
aDen, aNum, m, s, w :real;
i, j :integer;
begin
Result := CreateSeries(BarCount);
m := (Offset*(Per-1));
s := Per/Sigma;
for i:= (Per+1) to (BarCount-1) do
begin
aNum := 0;
aDen := 0;
for j := 0 to Per-1 do
begin
w := exp(-1.0* ((j-m)*(j-m)/ (2*s*s)));
aNum := aNum + Serie[i-(Per-(j+1))]*w;
aDen := aDen +w;
end;
if aDen<>0 then Result[i] := aNum /aDen;
end;
end;
//*************************************************************************
Procedure Initialisatie(Per : Integer);
begin
with Indicator do
begin
ShortName := 'ALMA';
RequiredBars := 5 * Per;
NewBand := false;
ScaleRange := srCommon;
end;
end;
// *********************************************************************
Procedure Tekenlijn(serie : TSeries);
begin
with CreateLine(serie) do
begin
Color := ClRed;
end;
end;
//*************************************************************************
var
Offset : Real;
Sigma, Per : Integer;
begin
Sigma := CreateParameterInteger('Sigma:',1,10,6,True);
Offset := CreateParameterReal('Offset:',0,10,0.85,True);
Per := CreateParameterInteger('Periode:',1,300,9,True);
Initialisatie(Per);
Tekenlijn(ALMA(Close,Offset,Sigma,Per));
end.