there are only 3 objects in the DrawObjects list. Sometimes it works fine. Other times it locks up the chart but there is no error message in the output window or in the control panel log.
How do I find out why it is freezing the chart and why it is intermittent?
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion
//This namespace holds Indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators.Mike
{
public class StopLine : Indicator
{
private NinjaTrader.Gui.Tools.SimpleFont PeriodFont;
private double stopLinePrice;
private double stop;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Enter the description for your new custom Indicator here.";
Name = "StopLine";
Calculate = Calculate.OnEachTick;
IsOverlay = true;
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)
{
PeriodFont = new NinjaTrader.Gui.Tools.SimpleFont("Ariel", 24);
}
}
protected override void OnBarUpdate()
{
CheckForStopLine();
Draw.TextFixed(this, "StopPrice", stop.ToString("N0"), TextPosition.BottomRight, Brushes.White, PeriodFont, Brushes.Blue, Brushes.Blue, 100);
}
#region=== Check For StopLine //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
private void CheckForStopLine()
{
Print("checking");
foreach (DrawingTool draw in DrawObjects.ToList())
{
if (draw.Tag.Contains("Line"))
{
Print("found");
stopLinePrice = draw.Anchors.First().Price;
stop = Math.Abs(stopLinePrice - Close[0]) * 4;
}
}
}
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private Mike.StopLine[] cacheStopLine;
public Mike.StopLine StopLine()
{
return StopLine(Input);
}
public Mike.StopLine StopLine(ISeries<double> input)
{
if (cacheStopLine != null)
for (int idx = 0; idx < cacheStopLine.Length; idx++)
if (cacheStopLine[idx] != null && cacheStopLine[idx].EqualsInput(input))
return cacheStopLine[idx];
return CacheIndicator<Mike.StopLine>(new Mike.StopLine(), input, ref cacheStopLine);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.Mike.StopLine StopLine()
{
return indicator.StopLine(Input);
}
public Indicators.Mike.StopLine StopLine(ISeries<double> input )
{
return indicator.StopLine(input);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.Mike.StopLine StopLine()
{
return indicator.StopLine(Input);
}
public Indicators.Mike.StopLine StopLine(ISeries<double> input )
{
return indicator.StopLine(input);
}
}
}
#endregion
​

Comment