namespace NinjaTrader.NinjaScript.Indicators.MyIndicators {
public class MyPivotIndicator : Indicator, IOnBarUpdateReady {
public event EventHandler<EntryAlertEventArgs> EntryAlertEvent;
private void RaiseEntryAlertEvent(PositionDirection direction) {
var price = new Price(GetPriceToEnterTrade(direction), CurrentBar);
EventHandler<EntryAlertEventArgs> handler = EntryAlertEvent;
if (handler != null)
handler(this, new EntryAlertEventArgs(direction, price));
}
protected override void OnStateChange() {
if (State == State.SetDefaults) {
Description = @"Alerts when a pivot is complete.";
Name = "MyPivotIndicator";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
DisplayInDataBox = false;
}
else if (State == State.Configure) {
ClearOutputWindow();
}
}
protected override void OnBarUpdate() {
if (!IsOnBarUpdateReady())
return;
SetSupportPivot();
SetResistancePivot();
}
private void SetResistancePivot() {
var afterPivot = High[0];
var pivot = High[1];
var beforePivot = High[2];
var pivotBarIndex = CurrentBar - 1;
if (beforePivot <= pivot && pivot > afterPivot) {
Draw.Dot(this, "resistanceDot" + pivotBarIndex, true, 1, pivot, Brushes.Red, true);
RaiseEntryAlertEvent(PositionDirection.Short);
}
}
private void SetSupportPivot() {
var afterPivot = Low[0];
var pivot = Low[1];
var beforePivot = Low[2];
var pivotBarIndex = CurrentBar - 1;
if (beforePivot >= pivot && pivot < afterPivot) {
Draw.Dot(this, "supportDot" + pivotBarIndex, true, 1, pivot, Brushes.LimeGreen, true);
RaiseEntryAlertEvent(PositionDirection.Long);
}
}
public bool IsOnBarUpdateReady() { return (High.Count > 2 && Low.Count > 2); }
}
}
Comment