Sample SMA strategy
This commit is contained in:
@@ -34,6 +34,14 @@ type
|
||||
class function AssignResult(const AValue: IExpressionNode): IAssignmentNode; static;
|
||||
class function Indexer(const ABase: IExpressionNode; const AIndex: IExpressionNode): IIndexerNode; static;
|
||||
class function MemberAccess(const ABase: IExpressionNode; const AMember: IIdentifierNode): IMemberAccessNode; static;
|
||||
class function CreateSeries(const ADefinition: String): ICreateSeriesNode; static;
|
||||
class function AddSeriesItem(
|
||||
const ASeries: IIdentifierNode;
|
||||
const AValue: IExpressionNode;
|
||||
const ALookback: IExpressionNode = nil
|
||||
): IAddSeriesItemNode; static;
|
||||
// Added the new factory function for SeriesLength
|
||||
class function SeriesLength(const ASeries: IIdentifierNode): ISeriesLengthNode; static;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@@ -209,6 +217,41 @@ type
|
||||
function Accept(const Visitor: IAstVisitor): TAstValue; override;
|
||||
end;
|
||||
|
||||
{ TCreateSeriesNode }
|
||||
TCreateSeriesNode = class(TAstNode, ICreateSeriesNode)
|
||||
private
|
||||
FDefinition: String;
|
||||
function GetDefinition: String;
|
||||
public
|
||||
constructor Create(const ADefinition: String);
|
||||
function Accept(const Visitor: IAstVisitor): TAstValue; override;
|
||||
end;
|
||||
|
||||
{ TAddSeriesItemNode }
|
||||
TAddSeriesItemNode = class(TAstNode, IAddSeriesItemNode)
|
||||
private
|
||||
FSeries: IIdentifierNode;
|
||||
FValue: IExpressionNode;
|
||||
FLookback: IExpressionNode;
|
||||
function GetSeries: IIdentifierNode;
|
||||
function GetValue: IExpressionNode;
|
||||
function GetLookback: IExpressionNode;
|
||||
public
|
||||
constructor Create(const ASeries: IIdentifierNode; const AValue: IExpressionNode; const ALookback: IExpressionNode);
|
||||
function Accept(const Visitor: IAstVisitor): TAstValue; override;
|
||||
end;
|
||||
|
||||
// Added concrete class for the series length node.
|
||||
{ TSeriesLengthNode }
|
||||
TSeriesLengthNode = class(TAstNode, ISeriesLengthNode)
|
||||
private
|
||||
FSeries: IIdentifierNode;
|
||||
function GetSeries: IIdentifierNode;
|
||||
public
|
||||
constructor Create(const ASeries: IIdentifierNode);
|
||||
function Accept(const Visitor: IAstVisitor): TAstValue; override;
|
||||
end;
|
||||
|
||||
{ TConstantNode }
|
||||
|
||||
constructor TConstantNode.Create(AValue: TScalar);
|
||||
@@ -541,8 +584,83 @@ begin
|
||||
Result := FMember;
|
||||
end;
|
||||
|
||||
{ TCreateSeriesNode }
|
||||
|
||||
constructor TCreateSeriesNode.Create(const ADefinition: String);
|
||||
begin
|
||||
inherited Create;
|
||||
FDefinition := ADefinition;
|
||||
end;
|
||||
|
||||
function TCreateSeriesNode.Accept(const Visitor: IAstVisitor): TAstValue;
|
||||
begin
|
||||
Result := Visitor.VisitCreateSeries(Self);
|
||||
end;
|
||||
|
||||
function TCreateSeriesNode.GetDefinition: String;
|
||||
begin
|
||||
Result := FDefinition;
|
||||
end;
|
||||
|
||||
{ TAddSeriesItemNode }
|
||||
|
||||
constructor TAddSeriesItemNode.Create(const ASeries: IIdentifierNode; const AValue, ALookback: IExpressionNode);
|
||||
begin
|
||||
inherited Create;
|
||||
FSeries := ASeries;
|
||||
FValue := AValue;
|
||||
FLookback := ALookback;
|
||||
end;
|
||||
|
||||
function TAddSeriesItemNode.Accept(const Visitor: IAstVisitor): TAstValue;
|
||||
begin
|
||||
Result := Visitor.VisitAddSeriesItem(Self);
|
||||
end;
|
||||
|
||||
function TAddSeriesItemNode.GetLookback: IExpressionNode;
|
||||
begin
|
||||
Result := FLookback;
|
||||
end;
|
||||
|
||||
function TAddSeriesItemNode.GetSeries: IIdentifierNode;
|
||||
begin
|
||||
Result := FSeries;
|
||||
end;
|
||||
|
||||
function TAddSeriesItemNode.GetValue: IExpressionNode;
|
||||
begin
|
||||
Result := FValue;
|
||||
end;
|
||||
|
||||
{ TSeriesLengthNode }
|
||||
|
||||
constructor TSeriesLengthNode.Create(const ASeries: IIdentifierNode);
|
||||
begin
|
||||
inherited Create;
|
||||
FSeries := ASeries;
|
||||
end;
|
||||
|
||||
function TSeriesLengthNode.Accept(const Visitor: IAstVisitor): TAstValue;
|
||||
begin
|
||||
Result := Visitor.VisitSeriesLength(Self);
|
||||
end;
|
||||
|
||||
function TSeriesLengthNode.GetSeries: IIdentifierNode;
|
||||
begin
|
||||
Result := FSeries;
|
||||
end;
|
||||
|
||||
{ TAst }
|
||||
|
||||
class function TAst.AddSeriesItem(
|
||||
const ASeries: IIdentifierNode;
|
||||
const AValue: IExpressionNode;
|
||||
const ALookback: IExpressionNode
|
||||
): IAddSeriesItemNode;
|
||||
begin
|
||||
Result := TAddSeriesItemNode.Create(ASeries, AValue, ALookback);
|
||||
end;
|
||||
|
||||
class function TAst.Assign(const AIdentifier: IIdentifierNode; const AValue: IExpressionNode): IAssignmentNode;
|
||||
begin
|
||||
Result := TAssignmentNode.Create(AIdentifier, AValue);
|
||||
@@ -563,6 +681,11 @@ begin
|
||||
Result := TConstantNode.Create(AValue);
|
||||
end;
|
||||
|
||||
class function TAst.CreateSeries(const ADefinition: String): ICreateSeriesNode;
|
||||
begin
|
||||
Result := TCreateSeriesNode.Create(ADefinition);
|
||||
end;
|
||||
|
||||
class function TAst.BinaryExpr(ALeft: IExpressionNode; AOperator: TBinaryOperator; ARight: IExpressionNode): IBinaryExpressionNode;
|
||||
begin
|
||||
Result := TBinaryExpressionNode.Create(ALeft, AOperator, ARight);
|
||||
@@ -593,6 +716,11 @@ begin
|
||||
Result := TMemberAccessNode.Create(ABase, AMember);
|
||||
end;
|
||||
|
||||
class function TAst.SeriesLength(const ASeries: IIdentifierNode): ISeriesLengthNode;
|
||||
begin
|
||||
Result := TSeriesLengthNode.Create(ASeries);
|
||||
end;
|
||||
|
||||
class function TAst.TernaryExpr(const ACondition: IExpressionNode; const AThenBranch, AElseBranch: IExpressionNode): ITernaryExpressionNode;
|
||||
begin
|
||||
Result := TTernaryExpressionNode.Create(ACondition, AThenBranch, AElseBranch);
|
||||
|
||||
Reference in New Issue
Block a user