using System; using NinjaTrader.Cbi; 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 System.Windows.Input; namespace NinjaTrader.NinjaScript.Indicators { public class MouseBarIndex : Indicator { protected override void OnStateChange() { switch (State) { case State.SetDefaults: Description = @"MouseBarIndex"; Name = "MouseBarIndex"; IsChartOnly = true; Calculate = Calculate.OnBarClose; IsOverlay = true; break; case State.DataLoaded: ChartControl.MouseMove += OnMouseMove; break; case State.Terminated: ChartControl.MouseMove -= OnMouseMove; break; } } void OnMouseMove(object sender, MouseEventArgs e) { ChartControl.Dispatcher.Invoke(() => { TriggerCustomEvent((state) => { var x = (int)e.GetPosition(ChartControl).X; var barIndex = ChartBars.GetBarIdxByX(ChartControl, x); Print(string.Format("X: {0}, BarIndex: {1}", x, barIndex)); }, 0, null); }); } } } #region NinjaScript generated code. Neither change nor remove. namespace NinjaTrader.NinjaScript.Indicators { public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase { private MouseBarIndex[] cacheMouseBarIndex; public MouseBarIndex MouseBarIndex() { return MouseBarIndex(Input); } public MouseBarIndex MouseBarIndex(ISeries<double> input) { if (cacheMouseBarIndex != null) for (int idx = 0; idx < cacheMouseBarIndex.Length; idx++) if (cacheMouseBarIndex[idx] != null && cacheMouseBarIndex[idx].EqualsInput(input)) return cacheMouseBarIndex[idx]; return CacheIndicator<MouseBarIndex>(new MouseBarIndex(), input, ref cacheMouseBarIndex); } } } namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns { public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase { public Indicators.MouseBarIndex MouseBarIndex() { return indicator.MouseBarIndex(Input); } public Indicators.MouseBarIndex MouseBarIndex(ISeries<double> input ) { return indicator.MouseBarIndex(input); } } } namespace NinjaTrader.NinjaScript.Strategies { public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase { public Indicators.MouseBarIndex MouseBarIndex() { return indicator.MouseBarIndex(Input); } public Indicators.MouseBarIndex MouseBarIndex(ISeries<double> input ) { return indicator.MouseBarIndex(input); } } } #endregion
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!
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
NinjaTrader
Get the index of the bar under the cursor
Collapse
X
-
Get the index of the bar under the cursor
Hi, How do I obtain the index of the bar under the mouse cursor, from within the MouseMove event? I've tried using the code below, but the results have been consistently wrong:
Code:Last edited by bboyle1234; 12-04-2016, 06:41 PM.Tags: None
-
Hello bboyle1234,
I've got a similar script that could likely be adapted very easily.
Below is a link to the forum thread where I have posted this example.
This logic is added to the MouseLeftButtonDown event, you could likely change the method to OnMouseMove.Last edited by NinjaTrader_ChelseaB; 12-06-2016, 09:15 AM.Chelsea B.NinjaTrader Customer Service
-
Thanks ChelseaB,
Your suggestion helped. For the benefit of other readers, here is code I came up with:
Extension methods for MouseEventArgs:
Code:using NinjaTrader.Gui.Chart; using SharpDX; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace MyNamespace { public static class MouseEventArgsExtensions { public static Vector2 GetChartControlPixelsCoordinates(this MouseEventArgs e, ChartControl chartControl) { var position = e.GetPosition(chartControl); return new Vector2(ChartingExtensions.ConvertToHorizontalPixels(position.X, chartControl.PresentationSource), ChartingExtensions.ConvertToVerticalPixels(position.Y, chartControl.PresentationSource)); } public static int GetBarIndex(this MouseEventArgs e, ChartControl chartControl, ChartBars chartBars) { return chartBars.GetBarIdxByX(chartControl, (int)e.GetChartControlPixelsCoordinates(chartControl).X); } public static void GetChartClickData(this MouseEventArgs e, ChartControl chartControl, ChartBars chartBars, ChartScale chartScale, out int barIndex, out DateTime timeLocal, out double price) { var position = e.GetChartControlPixelsCoordinates(chartControl); barIndex = chartBars.GetBarIdxByX(chartControl, (int)position.X); timeLocal = chartControl.GetTimeByX((int)position.X); price = chartScale.GetValueByY(position.Y); } } }
- Likes 1
Comment
Latest Posts
Collapse
Topics | Statistics | Last Post | ||
---|---|---|---|---|
Started by wzgy0920, 04-20-2024, 06:09 PM
|
2 responses
27 views
0 likes
|
Last Post
by wzgy0920
Yesterday, 10:43 PM
|
||
Started by wzgy0920, 02-22-2024, 01:11 AM
|
5 responses
32 views
0 likes
|
Last Post
by wzgy0920
Yesterday, 10:33 PM
|
||
Started by wzgy0920, 04-23-2024, 09:53 PM
|
2 responses
49 views
0 likes
|
Last Post
by wzgy0920
Yesterday, 10:29 PM
|
||
Started by Kensonprib, 04-28-2021, 10:11 AM
|
5 responses
193 views
0 likes
|
Last Post
by Hasadafa
Yesterday, 10:19 PM
|
||
Started by GussJ, 03-04-2020, 03:11 PM
|
11 responses
3,235 views
0 likes
|
Last Post Yesterday, 08:07 PM |
Comment