I have plotted lines based on the previous day prices series. Which is doing fine on historical data.
The issue I am facing is that it is not plotting lines for the next trading session i.e. 1800 hrs April 17th onwards when it is running in real-time. This is shown in the attached screenshot
More detail,
- When I load the indicator it works perfectly fine for all previous days i.e. plotting in a day session based on previous day session
- But the issue is it is not plotting in the next trading session after the session break i.e. at 1800 hrs when indicator is already running
public class FloorTest : Indicator
{
private double var_0;
private double var_1;
private double var_2;
private double var_3;
private double var_4;
private double var_5;
private double var_6;
private double var_7;
private double var_8;
private double var_9;
private double var_10;
private double var_12;
private double var_13;
private PloyType _pivotPlotType;
NinjaTrader.Gui.Tools.SimpleFont _font;
private SessionIterator sessionIterator;
private readonly List<int> newSessionBarIdxArr = new List<int>();
private DateTime currentDate = Globals.MinDate;
private DateTime cacheSessionDate = Globals.MinDate;
private DateTime cacheSessionEnd = Globals.MinDate;
private DateTime cacheTime;
private DateTime sessionDateTmp = Globals.MinDate;
private void SetDefaults()
{
Name = "Floor Test";
Description = "";
Calculate = Calculate.OnPriceChange;
IsAutoScale = false;
IsOverlay = true;
IsSuspendedWhileInactive = false;
DisplayInDataBox = true;
DrawOnPricePanel = true;
PaintPriceMarkers = true;
ScaleJustification = Gui.Chart.ScaleJustification.Right;
_font = new NinjaTrader.Gui.Tools.SimpleFont("Courier New", 12) { Size = 12, Bold = true };
var_13 = 1;
}
private void SetParameters()
{
_pivotPlotType = PloyType.Five;
}
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
SetDefaults();
SetParameters();
}
else if (State == State.Configure)
{
ClearOutputWindow();
_pivotPlotType = PivotPlotType;
AddDataSeries(Instrument.FullName, new BarsPeriod { BarsPeriodType = BarsPeriodType.Day, Value = 1 },
"CME US Index Futures RTH", true);
}
else if (State == State.DataLoaded)
{
sessionIterator = new SessionIterator(BarsArray[1]);
}
}
protected override void OnBarUpdate()
{
if (CurrentBar < 1 && BarsInProgress != 0) return;
DateTime lastBarTimeStamp = GetLastBarSessionDate(Times[0][0]);
if (currentDate != Globals.MinDate && lastBarTimeStamp != currentDate)
{
bool plotCondition;
DateTime today = DateTime.Now;
if (Time[0].DayOfYear < today.DayOfYear)
{
var_13 += 1;
var_12 = PriorDayOHLC().PriorClose[0];
var_7 = PriorDayOHLC().PriorHigh[0];
var_8 = var_7;
var_9 = PriorDayOHLC().PriorLow[0];
var_10 = var_9;
var_6 = (var_8 + var_10 + var_12) / 3;
var_3 = var_6 * 2 - var_10;
var_4 = var_6 + var_8 - var_10;
var_5 = var_4 + var_8 - var_10;
var_0 = var_6 * 2 - var_8;
var_1 = var_6 - var_8 + var_10;
var_2 = var_1 - var_8 + var_10;
}
else
{
if (High[0] > var_7)
var_7 = High[0];
if (Low[0] < var_9)
var_9 = Low[0];
}
plotCondition = var_13 >= 2 && Bars.BarsType.IsIntraday;
if (plotCondition)
{
DateTime firstBarTimestamp = lastBarTimeStamp.AddHours(-6);
DateTime endBar = firstBarTimestamp.AddHours(24);
if (_pivotPlotType == PloyType.Seven)
{
Draw.Line(this, "line_R3_" + Time[0], false, firstBarTimestamp, var_5, endBar, var_5,
Brushes.Green, DashStyleHelper.Solid, 2);
Draw.Text(this, "text_R3_" + Time[0], false, "R3", endBar, var_5, 0,
Brushes.Green, _font, System.Windows.TextAlignment.Center,
Brushes.Green, Brushes.Green, 5);
}
Draw.Line(this, "line_R2_" + Time[0], true, firstBarTimestamp, var_4, endBar, var_4,
Brushes.LimeGreen, DashStyleHelper.Solid, 2);
Draw.Text(this, "text_R2_" + Time[0], true, "R2", endBar, var_4, 0,
Brushes.LimeGreen, _font, System.Windows.TextAlignment.Center,
Brushes.LimeGreen, Brushes.LimeGreen, 5);
Draw.Line(this, "line_R1_" + Time[0], false, firstBarTimestamp, var_3, endBar, var_3,
Brushes.DarkOliveGreen, DashStyleHelper.Solid, 2);
Draw.Text(this, "text_R1_" + Time[0], false, "R1", endBar, var_3, 0,
Brushes.DarkOliveGreen, _font, System.Windows.TextAlignment.Center,
Brushes.DarkOliveGreen, Brushes.DarkOliveGreen, 5);
Draw.Line(this, "line_PP_" + Time[0], false, firstBarTimestamp, var_6, endBar, var_6,
Brushes.LightBlue, DashStyleHelper.Solid, 5);
Draw.Text(this, "text_PP_" + Time[0], false, "PP", endBar, var_6, 0,
Brushes.LightBlue, _font, System.Windows.TextAlignment.Center,
Brushes.LightBlue, Brushes.LightBlue, 5);
Draw.Line(this, "line_S1_" + Time[0], false, firstBarTimestamp, var_0, endBar, var_0,
Brushes.Red, DashStyleHelper.Solid, 2);
Draw.Text(this, "text_S1_" + Time[0], false, "S1", endBar, var_0, 0,
Brushes.Red, _font, System.Windows.TextAlignment.Center,
Brushes.Red, Brushes.Red, 5);
Draw.Line(this, "line_S2_" + Time[0], false, firstBarTimestamp, var_1, endBar, var_1,
Brushes.IndianRed, DashStyleHelper.Solid, 2);
Draw.Text(this, "text_S2_" + Time[0], false, "S2", endBar, var_1, 0,
Brushes.IndianRed, _font, System.Windows.TextAlignment.Center,
Brushes.IndianRed, Brushes.IndianRed, 5);
if (_pivotPlotType == PloyType.Seven)
{
Draw.Line(this, "line_S3_" + Time[0], false, firstBarTimestamp, var_2, endBar, var_2,
Brushes.MediumVioletRed, DashStyleHelper.Solid, 2);
Draw.Text(this, "text_S3_" + Time[0], false, "S3", endBar, var_2, 0,
Brushes.MediumVioletRed, _font, System.Windows.TextAlignment.Center,
Brushes.MediumVioletRed, Brushes.MediumVioletRed, 5);
}
}
}
currentDate = lastBarTimeStamp;
}
#region Private Methods
private DateTime GetLastBarSessionDate(DateTime time)
{
// Check the time[0] against the previous session end
if (time > cacheSessionEnd)
{
if (Bars.BarsType.IsIntraday)
{
// Make use of the stored session iterator to find the next session...
sessionIterator.GetNextSession(time, true);
// Store the actual session's end datetime as the session
cacheSessionEnd = sessionIterator.ActualSessionEnd;
// We need to convert that time from the session to the users time zone settings
sessionDateTmp = TimeZoneInfo.ConvertTime(cacheSessionEnd.AddSeconds(-1), Globals.GeneralOptions.TimeZoneInfo, Bars.TradingHours.TimeZoneInfo).Date;
}
else
{
sessionDateTmp = time.Date;
}
}
if (sessionDateTmp != cacheSessionDate)
{
if (newSessionBarIdxArr.Count == 0 || newSessionBarIdxArr.Count > 0 && CurrentBar > newSessionBarIdxArr[newSessionBarIdxArr.Count - 1])
{
newSessionBarIdxArr.Add(CurrentBar);
}
cacheSessionDate = sessionDateTmp;
}
return sessionDateTmp;
}
#endregion
public enum PloyType
{
Five,
Seven
}
#region Parameters
[NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "Plot Type", GroupName = "Plot Parameters", Order = 0)]
public PloyType PivotPlotType
{
get; set;
}
#endregion
}

Comment