The lines draw properly, but I am having problem deleting them from the chart. After deleting a line, the lines still appear on the chart.
I have developed a simple test indicator (see below.) This test indicator draws four lines, then deletes one of them. The deleted line continues to show. I have included the a .jpg to demonstrate. Interestingly, if I print out a DawObjects.Count, after creating the lines (should be four) and after deleting one line (should be three) , the DawObjects.Count values are not as expected -- both before and after the line delete thee counts are two.
More puzzling, if I reload the indicator a number of times by pressing F5, eventually the deleted line will delete showing the lines as expected. Continued reloading of the indicator using F5, will at times be correct (only showing three lines) and at times be incorrect (showing four lines) and ignoring the line delete.
Pleases let me know what I am doing wrong.
Thank you for your help.
Sample output from test Indicator:
----608---------------------------------
Line count before delete: 2
Draw Object: before deleteline1 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object: before delete@Line2 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object: before delete@Line4 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Line count after delete: 2
Draw Object after delete: line1 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object after delete: @Line2 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object after delete: @Line4 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
----609---------------------------------
Line count before delete: 2
Draw Object: before deleteline1 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object: before delete@Line2 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object: before delete@Line4 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Line count after delete: 2
Draw Object after delete: line1 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object after delete: @Line2 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object after delete: @Line4 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
----610---------------------------------
Line count before delete: 2
Draw Object: before deleteline1 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object: before delete@Line2 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
;Draw Object: before delete@Line4 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Line count after delete: 2
Draw Object after delete: line1 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object after delete: @Line2 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
Draw Object after delete: @Line4 type:NinjaTrader.NinjaScript.DrawingTools.Horizont alLine
================================================== ======================================
Test Indicator below:
public class LineTest : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Enter the description for your new custom Indicator here.";
Name = "LineTest";
Calculate = Calculate.OnBarClose;
IsOverlay = false;
DisplayInDataBox = true;
DrawOnPricePanel = true;
DrawHorizontalGridLines = true;
DrawVerticalGridLines = true;
PaintPriceMarkers = true;
ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right;
//Disable this property if your indicator requires custom values that cumulate with each new market data event.
//See Help Guide for additional information.
IsSuspendedWhileInactive = true;
}
else if (State == State.Configure)
{
}
}
protected override void OnBarUpdate()
{
//Add your custom indicator logic here.
Print("----" + CurrentBar + "---------------------------------");
for(double i=1.0; i<=4.0;i++){
NinjaTrader.NinjaScript.DrawingTools.HorizontalLin e h= Draw.HorizontalLine(this, "Line" + i.ToString(), 3000.0+(2*i), true, "");
h.Stroke = new Stroke(Brushes.Bisque, DashStyleHelper.Solid, 2.0F);
}
Print(" Line count before delete: " + DrawObjects.Count );
foreach (DrawingTool draw in DrawObjects.ToList()){
Print("Draw Object: before delete" +draw.Tag + " type:" + draw.GetType().ToString());
}
RemoveDrawObject("Line3");
Print(" Line count after delete: " + DrawObjects.Count);
foreach (IDrawingTool hLine in DrawObjects){
HorizontalLine draw = hLine as HorizontalLine;
if(draw != null){
Print("Draw Object after delete: " +draw.Tag + " type:" + draw.GetType().ToString());
}
}
Print(" ");
}
}
Comment