Toulon France
Posts: 1 since Aug 2022
Thanks Given: 0
Thanks Received: 0
|
I want to create an indicator that will draw horizontal lines on top and bottom for a given number of ticks on each new candlestick. The code compiled without errors, but the lines do not have a deviation of approximately 8 ticks and are not redrawn. those. new lines do not appear on the new candle, but the old ones continue to hang
#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
namespace NinjaTrader.NinjaScript.Indicators
{
public class CustomHorizontalLines : Indicator
{
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Ticks Distance", Description="The number of ticks above and below the opening price to plot horizontal lines", Order=1, GroupName="Parameters")]
public int TicksDistance
{ get; set; }
[NinjaScriptProperty]
[XmlIgnore]
[Display(Name="Line Color", Order=2, GroupName="Parameters")]
public Brush LineColor
{ get; set; }
[Browsable(false)]
public string LineColorSerializable
{
get { return Serialize.BrushToString(LineColor); }
set { LineColor = Serialize.StringToBrush(value); }
}
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = "Draws horizontal lines above and below the opening price based on the specified number of ticks.";
Name = "CustomHorizontalLines";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
DisplayInDataBox = true;
DrawOnPricePanel = true;
DrawHorizontalGridLines = true;
DrawVerticalGridLines = true;
PaintPriceMarkers = true;
ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right;
IsSuspendedWhileInactive = true;
TicksDistance = 49;
LineColor = Brushes.Gray;
}
}
protected override void OnBarUpdate()
{
if (CurrentBar <= 0)
return;
double openingPrice = Open[0];
double priceAbove = openingPrice + (TicksDistance * TickSize);
double priceBelow = openingPrice - (TicksDistance * TickSize);
// Remove previous horizontal lines
RemoveDrawObject("AboveLine");
RemoveDrawObject("BelowLine");
// Draw horizontal lines above and below the opening price
Draw.HorizontalLine(this, "AboveLine", priceAbove, LineColor);
Draw.HorizontalLine(this, "BelowLine", priceBelow, LineColor);
}
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private CustomHorizontalLines[] cacheCustomHorizontalLines;
public CustomHorizontalLines CustomHorizontalLines(int ticksDistance, Brush lineColor)
{
return CustomHorizontalLines(Input, ticksDistance, lineColor);
}
public CustomHorizontalLines CustomHorizontalLines(ISeries<double> input, int ticksDistance, Brush lineColor)
{
if (cacheCustomHorizontalLines != null)
for (int idx = 0; idx < cacheCustomHorizontalLines.Length; idx++)
if (cacheCustomHorizontalLines[idx] != null && cacheCustomHorizontalLines[idx].TicksDistance == ticksDistance && cacheCustomHorizontalLines[idx].LineColor == lineColor && cacheCustomHorizontalLines[idx].EqualsInput(input))
return cacheCustomHorizontalLines[idx];
return CacheIndicator<CustomHorizontalLines>(new CustomHorizontalLines(){ TicksDistance = ticksDistance, LineColor = lineColor }, input, ref cacheCustomHorizontalLines);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.CustomHorizontalLines CustomHorizontalLines(int ticksDistance, Brush lineColor)
{
return indicator.CustomHorizontalLines(Input, ticksDistance, lineColor);
}
public Indicators.CustomHorizontalLines CustomHorizontalLines(ISeries<double> input , int ticksDistance, Brush lineColor)
{
return indicator.CustomHorizontalLines(input, ticksDistance, lineColor);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.CustomHorizontalLines CustomHorizontalLines(int ticksDistance, Brush lineColor)
{
return indicator.CustomHorizontalLines(Input, ticksDistance, lineColor);
}
public Indicators.CustomHorizontalLines CustomHorizontalLines(ISeries<double> input , int ticksDistance, Brush lineColor)
{
return indicator.CustomHorizontalLines(input, ticksDistance, lineColor);
}
}
}
#endregion
|