public class MyPositionActionIndicator : Indicator {
protected override void OnStateChange() {
if (State == State.SetDefaults) {
Description = @"Tracks all indicators that implement the IPositionAction interface to execute common operations";
Name = "MyPositionActionIndicator";
Calculate = Calculate.OnBarClose;
IsOverlay = false;
}
else if (State == State.Configure) {
ClearOutputWindow();
}
}
protected override void OnBarUpdate() {
var positions = new LimitedList<PositionDirection>(DefaultLimitedListS ize);
foreach (var i in ChartControl.Indicators) {
if (i != null && i is IPositionAction ipa)
positions.Add(ipa.GetPosition()); // breakdown occurs here.
}
if (positions.Count > 0 && positions.AreItemsEqual()) {
var pos = positions.Last();
if (pos == PositionDirection.Long)
Draw.TriangleUp(this, "EnterLong" + CurrentBar, true, 0, 1, Brushes.LimeGreen, false);
else if (pos == PositionDirection.Short)
Draw.TriangleDown(this, "EnterShort" + CurrentBar, true, 0, 1, Brushes.Red, false);
else
Draw.Dot(this, "Range" + CurrentBar, true, 0, 1, Brushes.Black, false);
}
}
}