Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

Partner 728x90

Collapse

slotTime giving wrong values

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    slotTime giving wrong values

    Hello
    I am trying to get the dateTime of a clicked bar.
    I have used slotTime from your help files but it seems to be giving a different time.
    Can you tell me where I am going wrong?

    thank you

    Code:
    #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.Core;
    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;
    using SharpDX.DirectWrite;
    
    #endregion
    
    /*
    Based on NT8 public codes
    https://ninjatraderecosystem.com/user-app-share-download/Riskruler/
    */
    namespace NinjaTrader.NinjaScript.Indicators.MyIndicators
    {
    public class RiskForum : Indicator
    {
    #region Variables and On State Change
    private Point clickPoint = new Point();
    private bool clickSet = false;
    private double myR = 0;
    private double myStop = 0;
    private double myEntry = 0;
    
    
    private SimpleFont txtFont = new NinjaTrader.Gui.Tools.SimpleFont("Arial", 11){ Bold = true };
    private int barIdx = 0;
    private int barPrev = 0;
    
    SharpDX.Direct2D1.SolidColorBrush BrushDx;
    
    protected override void OnStateChange()
    {
    if (State == State.SetDefaults)
    {
    Description = @"Draws lines for Stop, Entry and Target levels on middle Mouse-Click";
    Name = "RiskForum";
    Calculate = Calculate.OnPriceChange;
    IsOverlay = true;
    DisplayInDataBox = false;
    DrawOnPricePanel = true;
    DrawHorizontalGridLines = false;
    DrawVerticalGridLines = false;
    PaintPriceMarkers = false;
    ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right;
    IsSuspendedWhileInactive = true;
    }
    
    else if (State == State.DataLoaded)
    {
    ChartControl.ChartPanels[0].MouseDown += MiddleMouseButtonExample_MouseDown;
    }
    else if (State == State.Terminated)
    {
    if (ChartControl != null)
    ChartControl.ChartPanels[0].MouseDown -= MiddleMouseButtonExample_MouseDown;
    }
    }
    #endregion
    private DateTime slotTime = DateTime.Now;
    
    
    
    #region On bar update
    protected override void OnBarUpdate()
    {
    if(State == State.Historical)
    return;
    //if(IsFirstTickOfBar)
    //if(slotTime != null)
    //Draw.Dot(this,"myDot",true,barIdx,Close[0],Brushes.Red,true);
    
    
    }
    
    #endregion
    
    #region mouse
    public void MiddleMouseButtonExample_MouseDown(object sender, MouseButtonEventArgs e)
    {
    if (e.MiddleButton == MouseButtonState.Pressed)
    {
    
    clickPoint.X = ChartingExtensions.ConvertToHorizontalPixels(e.Get Position(ChartPanel as IInputElement).X, ChartControl.PresentationSource);
    clickPoint.Y = ChartingExtensions.ConvertToVerticalPixels(e.GetPo sition(ChartPanel as IInputElement).Y, ChartControl.PresentationSource);
    
    if (clickPoint.Y > 0)
    {
    clickSet = true;
    barIdx = -1;
    }
    // trigger the chart invalidate so that the render loop starts even if there is no data being received
    ChartControl.InvalidateVisual();
    e.Handled = true;
    }
    }
    
    #endregion
    
    
    
    
    #region On Render original and working
    
    protected override void OnRender(ChartControl chartControl, ChartScale chartScale)
    {
    float startY = -1;
    float startX = ChartControl.CanvasLeft +2;
    float endX = -1;
    // if the click is set we have a dpi converted x and y position.
    if (clickSet)
    {
    if (barIdx < 0)
    {
    int clickPixelX = (int)clickPoint.X;
    int clickPixelY = (int)clickPoint.Y;
    double valueClick = chartScale.GetValueByY(clickPixelY);
    barIdx = ChartBars.GetBarIdxByX(chartControl, clickPixelX);
    slotTime = chartControl.GetTimeByX(barIdx);
    Print("Slot Time = "+slotTime);
    Print("Now = "+DateTime.Now);
    
    } ///stop > 0
    }
    }
    #endregion
    
    
    
    }
    }
    
    #region NinjaScript generated code. Neither change nor remove.
    
    namespace NinjaTrader.NinjaScript.Indicators
    {
    public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
    {
    private MyIndicators.RiskForum[] cacheRiskForum;
    public MyIndicators.RiskForum RiskForum()
    {
    return RiskForum(Input);
    }
    
    public MyIndicators.RiskForum RiskForum(ISeries<double> input)
    {
    if (cacheRiskForum != null)
    for (int idx = 0; idx < cacheRiskForum.Length; idx++)
    if (cacheRiskForum[idx] != null && cacheRiskForum[idx].EqualsInput(input))
    return cacheRiskForum[idx];
    return CacheIndicator<MyIndicators.RiskForum>(new MyIndicators.RiskForum(), input, ref cacheRiskForum);
    }
    }
    }
    
    namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
    {
    public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
    {
    public Indicators.MyIndicators.RiskForum RiskForum()
    {
    return indicator.RiskForum(Input);
    }
    
    public Indicators.MyIndicators.RiskForum RiskForum(ISeries<double> input )
    {
    return indicator.RiskForum(input);
    }
    }
    }
    
    namespace NinjaTrader.NinjaScript.Strategies
    {
    public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
    {
    public Indicators.MyIndicators.RiskForum RiskForum()
    {
    return indicator.RiskForum(Input);
    }
    
    public Indicators.MyIndicators.RiskForum RiskForum(ISeries<double> input )
    {
    return indicator.RiskForum(input);
    }
    }
    }
    
    #endregion

    #2
    Hello Mindset,

    Thank you for your post.

    You're using the wrong value to get the time. GetTimeByX is looking for the X coordinate and you're giving it a bar index. Try this instead:

    slotTime = chartControl.GetTimeByX(clickPixelX);

    Please let us know if we may be of further assistance to you.
    Kate W.NinjaTrader Customer Service

    Comment


      #3
      Much appreciated Kate. Thank you.

      Comment

      Latest Posts

      Collapse

      Topics Statistics Last Post
      Started by Mongo, Today, 11:05 AM
      2 responses
      7 views
      0 likes
      Last Post Mongo
      by Mongo
       
      Started by guillembm, Today, 11:25 AM
      0 responses
      3 views
      0 likes
      Last Post guillembm  
      Started by Tim-c, Today, 10:58 AM
      1 response
      3 views
      0 likes
      Last Post NinjaTrader_Jesse  
      Started by traderqz, Yesterday, 09:06 AM
      4 responses
      27 views
      0 likes
      Last Post traderqz  
      Started by traderqz, Today, 12:06 AM
      4 responses
      8 views
      0 likes
      Last Post traderqz  
      Working...
      X