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
#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
Comment