If this is your first visit, you will have to register before you can post. To view messages, please scroll below and select the forum that you would like to visits. Questions? Be sure to check out the Forum FAQ.

Comment

I've attached the complete file - If you attach it e.g to the current GC contract, you'll see that the output is not correct since it's calculating the wrong low and high values for the given period. You can see in the Ninjascript Output what values are calculated.

Then look for the following line:

// if((Count - CurrentBar) > 2) return;

un-comment it and you'll see now that the values are calculated correctly, however the plots are not processed any longer.

This will compare the number of bars available in the script to the number of bars it has processed and if it is greater than 2. This is essentially checking if you are processing historical data since Count will not increase until Realtime data is processed and new bars are built. I typically would not recommend this type of check involving Count and would suggest to use Bars.Count or BarsArray[0].Count so the reference is valid with Multi Time Frame NinjaScripts. Checking if (State == State.Historical) return; would be a close parallel to this condition.

Comment

In the video I am printing the CurrentBar when MAX is called, and then I am looking for that Bar Index on the Chart when I have the Data Box open.

From there, I check the highest value of that bar and I go check 3 more bars back since I am testing with a period of 4. The High of that bar (Bar Index 4131) was 1228 and the high of the 3 bars prior were 1227.9. Since, I was testing with a period of 4 for MAX, and 1228 is greater than the 1227.9 value from the previous bars, 1228 was the MAX.

Comment

This script is using SharpDX for custom rendering, correct? The plots in the data box and the chart should be correct for the plot values, but the drawing of the lines does not look the same.

We have some example SharpDX code that loops through all plots that are added and customizing the rendering similar to what you are trying to accomplish. I would recommend testing with that code and if you need to debug it, you could look into printing what plotValue is being used in the loop for each plot that you want to look into.

For example:

Code:

protected override void OnRender(ChartControl chartControl, ChartScale chartScale)
{
// get the starting and ending bars from what is rendered on the chart
float startX = chartControl.GetXByBarIndex(ChartBars, ChartBars.FromIndex);
float endX = chartControl.GetXByBarIndex(ChartBars, ChartBars.ToIndex);
// Loop through each Plot Values on the chart
for (int seriesCount = 0; seriesCount < Values.Length; seriesCount++)
{
// get the value at the last bar on the chart (if it has been set)
if (Values[seriesCount].IsValidDataPointAt(ChartBars.ToIndex))
{
double plotValue = Values[seriesCount].GetValueAt(ChartBars.ToIndex);
if(seriesCount == 1)Print(plotValue);
...

Comment

Thanx for your time and help. I figured the issue must be within the OnRender logic ...

I'm now using the exact same code like the one used within the standard Pivot indicator, since I basically want it to behave the same way. HOWEVER, it is still displaying incorrect values and not adjusting them properly once the calculated values change. It's still displaying the wrong lines, even though the data in the DataBox is different. Any help would be appreciated. Thanks

Comment

The levels where the lines are drawn are going to be based entirely off of what is sent to the RenderTarget.DrawLine() methods. The coordinates should be back traced to where they are assigned using ChartControl.GetXByBarIndex and ChartScale.GetYByValue.

The sample code linked in my previous message (I did not include the full link and updated my post. Link here) demonstrates setting your own plot values and drawing your own lines in OnRender(). I would recommend setting up this test code in a new script and then modify the plots so you can verify that you are able to create your own custom plots and draw them appropriately.

Once you can confirm that you are getting the results you expect, I would then recommend testing the same with your indicator. After you are able to draw custom plots appropriately in these two steps, it should not be difficult to correct the existing lines so they behave the same.

Comment

Releasing drawn lines prior to writing new ones. Is there a recommended method to release drawn lines for Min Max when using Draw Horizontal Line before drawing new ones so they do not build up in the history?

Futures, foreign currency and options trading contains substantial risk and is not for every investor. An investor could potentially lose all or more than the initial investment. Risk capital is money that can be lost without jeopardizing ones financial security or lifestyle. Only risk capital should be used for trading and only those with sufficient risk capital should consider trading. Past performance is not necessarily indicative of future results. View Full Risk Disclosure.

CFTC Rules 4.41 - Hypothetical or Simulated performance results have certain limitations, unlike an actual performance record, simulated results do not represent actual trading. Also, since the trades have not been executed, the results may have under-or-over compensated for the impact, if any, of certain market factors, such as lack of liquidity. Simulated trading programs in general are also subject to the fact that they are designed with the benefit of hindsight. No representation is being made that any account will or is likely to achieve profit or losses similar to those shown.

This website is hosted and operated by NinjaTrader, LLC (“NT”), a software development company which owns and supports all proprietary technology relating to and including the NinjaTrader trading platform. NT is an affiliated company to NinjaTrader Brokerage (“NTB”), which is a NFA registered introducing broker (NFA #0339976) providing brokerage services to traders of futures and foreign exchange products. This website is intended for educational and informational purposes only and should not be viewed as a solicitation or recommendation of any product, service or trading strategy. No offer or solicitation to buy or sell securities, securities derivative or futures products of any kind, or any type of trading or investment advice, recommendation or strategy, is made, given, or in any manner endorsed by any NT affiliate and the information made available on this Web site is not an offer or solicitation of any kind. Specific questions related to a brokerage account should be sent to your broker directly. The content and opinions expressed on this website are those of the authors and do not necessarily reflect the official policy or position of NT or any of its affiliates.

Vendors along with their websites, products and services, collectively referred to as (“Vendor Content”), are independent persons or companies that are in no manner affiliated with NT or any if its affiliates. NT or any of its affiliates are not responsible for, do not approve, recommend or endorse any Vendor Content referenced on this website and it’s your sole responsibility to evaluate Vendor Content. Please be aware that any performance information provided by a vendor should be considered hypothetical and must contain the disclosures required by NFA Rule 2-29(c). If you are interested in learning more about, or investigating the quality of, any such Vendor Content you must contact the vendor, provider or seller of such Vendor Content. No person employed by, or associated with, NT or any of its affiliates is authorized to provide any information about any such Vendor Content.