The problem is that, for some reason, the '"if" statement that triggers the alert is being run a second time, and is apparently getting triggered by variables that have been set to new values by the same "if" statement when it ran the first time.
Here is the output:
New Day 12/6/2024 6:31:00 AM startBarsAgo = 1, LoopNum = 1 ELSE Loop - 12/6/2024 6:32:00 AM startBarsAgo = 2, LoopNum = 1 ELSE Loop - 12/6/2024 6:33:00 AM startBarsAgo = 3, LoopNum = 1 ELSE Loop - 12/6/2024 6:34:00 AM startBarsAgo = 4, LoopNum = 1 ELSE Loop - 12/6/2024 6:35:00 AM startBarsAgo = 5, LoopNum = 1 No Beep 1 12/6/2024 6:35:00 AM startBarsAgo = 5, LoopNum = 1 No Beep 2 12/6/2024 6:35:00 AM startBarsAgo = 5, LoopNum = 2 ELSE Loop - 12/6/2024 6:36:00 AM startBarsAgo = 6, LoopNum = 2 FIRST BEEP 1 12/6/2024 6:36:00 AM startBarsAgo = 6, LoopNum = 2 FIRST BEEP 2 12/6/2024 6:36:00 AM startBarsAgo = 7, LoopNum = 3 ELSE Loop - 12/6/2024 6:36:00 AM startBarsAgo = 6, LoopNum = 2 FIRST BEEP 1 12/6/2024 6:36:00 AM startBarsAgo = 6, LoopNum = 2 FIRST BEEP 2 12/6/2024 6:36:00 AM startBarsAgo = 7, LoopNum = 3 ELSE Loop - 12/6/2024 6:37:00 AM startBarsAgo = 8, LoopNum = 3
The relevant code is:
if (IsFirstTickOfBar)
{
if (Time[0].Day != Time[1].Day)
{
startBarsAgo = 1;
LoopNum = 1;
Print("New Day " + Time[0].ToString() + " startBarsAgo = " + startBarsAgo.ToString() + ", LoopNum = " + LoopNum.ToString());
}
else
{
startBarsAgo++;
Print("ELSE Loop - " + Time[0].ToString() + " startBarsAgo = " + startBarsAgo.ToString() + ", LoopNum = " + LoopNum.ToString());
}
}
if (startBarsAgo == 5 && LoopNum == 1)
{
Print("No Beep 1 " + Time[0].ToString() + " startBarsAgo = " + startBarsAgo.ToString() + ", LoopNum = " + LoopNum.ToString());
High5 = MAX(High, 5)[0];
Low5 = MIN(Low, 5)[0];
LoopNum++;
Print("No Beep 2 " + Time[0].ToString() + " startBarsAgo = " + startBarsAgo.ToString() + ", LoopNum = " + LoopNum.ToString());
}
if (startBarsAgo == 6 && LoopNum == 2)
{
Print("FIRST BEEP 1 " + Time[0].ToString() + " startBarsAgo = " + startBarsAgo.ToString() + ", LoopNum = " + LoopNum.ToString());
Alert("5-min.", Priority.High, "5 Minutes", NinjaTrader.Core.Globals.InstallDir+@"\sounds\Alert2.wav", 10, Brushes.Black, Brushes.Yellow);
startBarsAgo++;
LoopNum++;
Print("FIRST BEEP 2 " + Time[0].ToString() + " startBarsAgo = " + startBarsAgo.ToString() + ", LoopNum = " + LoopNum.ToString());
}
How is it possible for the value of a single variable to be stored in two different places? Where is the second location, and how do I set it to the same new value that the variable now contains?
And why do I need the IsFirstTickOfBar if I am set to OnBarClose?
Likewise, if I am set to OnBarClose, why is the ELSE loop running twice on the same bar?

Comment