Salve a tutti,
grazie per il lavro che svolgete qui.
Volevo chiedere se qualcuno riusciva capire dal codice il funzionamento di questo indicatore di volumi PVP.Per capire come funziona veramente e magari tradurlo se non difficile in prorealtime.
grazie ancora.
// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
/// <summary>
/// Peak volume price
/// </summary>
[Description("Peak volume price")]
public class PVP : Indicator
{
#region Variables
// Wizard generated variables
// User defined variables (add any user defined variables below)
#endregion
/// <summary>
/// This method is used to configure the indicator and is called once before any bar data is loaded.
/// </summary>
protected override void Initialize()
{
Add(new Plot(Color.FromKnownColor(KnownColor.Black), PlotStyle.Line, "PVPLine"));
CalculateOnBarClose = false;
Overlay = true;
PriceTypeSupported = false;
}
/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{
double MaxVolume = 0;
double MaxPrice = 0.0;
for (int x = 0; x <= Bars.BarsSinceSession; x++)
{
if (Volume[x] > MaxVolume)
{
MaxVolume = Volume[x];
MaxPrice = Close[x];
}
}
PVPLine.Set(MaxPrice);
}
#region Properties
[Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
[XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove
public DataSeries PVPLine
{
get { return Values[0]; }
}
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
public partial class Indicator : IndicatorBase
{
private PVP[] cachePVP = null;
private static PVP checkPVP = new PVP();
/// <summary>
/// Peak volume price
/// </summary>
/// <returns></returns>
public PVP PVP()
{
return PVP(Input);
}
/// <summary>
/// Peak volume price
/// </summary>
/// <returns></returns>
public PVP PVP(Data.IDataSeries input)
{
if (cachePVP != null)
for (int idx = 0; idx < cachePVP.Length; idx++)
if (cachePVP[idx].EqualsInput(input))
return cachePVP[idx];
PVP indicator = new PVP();
indicator.BarsRequired = BarsRequired;
indicator.CalculateOnBarClose = CalculateOnBarClose;
indicator.Input = input;
indicator.SetUp();
PVP[] tmp = new PVP[cachePVP == null ? 1 : cachePVP.Length + 1];
if (cachePVP != null)
cachePVP.CopyTo(tmp, 0);
tmp[tmp.Length - 1] = indicator;
cachePVP = tmp;
Indicators.Add(indicator);
return indicator;
}
}
}
// This namespace holds all market analyzer column definitions and is required. Do not change it.
namespace NinjaTrader.MarketAnalyzer
{
public partial class Column : ColumnBase
{
/// <summary>
/// Peak volume price
/// </summary>
/// <returns></returns>
[Gui.Design.WizardCondition("Indicator")]
public Indicator.PVP PVP()
{
return _indicator.PVP(Input);
}
/// <summary>
/// Peak volume price
/// </summary>
/// <returns></returns>
public Indicator.PVP PVP(Data.IDataSeries input)
{
return _indicator.PVP(input);
}
}
}
// This namespace holds all strategies and is required. Do not change it.
namespace NinjaTrader.Strategy
{
public partial class Strategy : StrategyBase
{
/// <summary>
/// Peak volume price
/// </summary>
/// <returns></returns>
[Gui.Design.WizardCondition("Indicator")]
public Indicator.PVP PVP()
{
return _indicator.PVP(Input);
}
/// <summary>
/// Peak volume price
/// </summary>
/// <returns></returns>
public Indicator.PVP PVP(Data.IDataSeries input)
{
if (InInitialize && input == null)
throw new ArgumentException("You only can access an indicator with the default input/bar series from within the 'Initialize()' method");
return _indicator.PVP(input);
}
}
}
#endregion