I put all code inside barsinprogress ==2 and fib levels are drawn at different levels then if i have drawn indicator on that chart.
How can i make sure that fib levels get drawn at same levels on secondary series as i would place inicator on that chart series?
namespace NinjaTrader.NinjaScript.Indicators.TcF
{
public class TcFAutoFibos : Indicator
{
#region Variables
private FibonacciRetracements fib;
private MIN min;
private MAX max;
private int barsSinceHigh = -1, barsSinceLow = -1;
#endregion
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Automatically draw fibonacci retracements from swing highs and lows in the market.";
Name = "TcFAutoFibos";
Calculate = Calculate.OnBarClose;
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;
Strength = 20;
}
else if (State == State.Configure)
{
min=MIN(Low,Strength);
max=MAX(High,Strength);
}
}
protected override void OnBarUpdate()
{
if (CurrentBar<Strength)
return;
if (High[0]>max[1])
barsSinceHigh=0;
else if (barsSinceHigh>-1 && IsFirstTickOfBar)
barsSinceHigh++;
if (Low[0]<min[1])
barsSinceLow=0;
else if (barsSinceLow>-1 && IsFirstTickOfBar)
barsSinceLow++;
if (Math.Min(barsSinceHigh,barsSinceLow)<=0)
return;
if (barsSinceHigh<barsSinceLow)
fib=Draw.FibonacciRetracements(this,"fib",IsAutoScale,barsSinceLow,Low[barsSinceLow],barsSinceHigh,High[barsSinceHigh]);
else
fib=Draw.FibonacciRetracements(this,"fib",IsAutoScale,barsSinceHigh,High[barsSinceHigh],barsSinceLow,Low[barsSinceLow]);
}
#region Properties
[Range(1, int.MaxValue)]
[NinjaScriptProperty]
[Display(Name="Strength", Order=1, GroupName="Parameters")]
public int Strength
{ get; set; }
#endregion
}
}

Comment