I am trying to use a button in my chart to change settings, I am not having much luck, I wrote a simple test project to show the issue..
If you press the button the forcerefresh should cause the script to move the line to the right 200 bars each time.. But it doesnt.
Any help would be appreciated.
#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.Gui; using NinjaTrader.Gui.Chart; using NinjaTrader.Gui.SuperDom; using NinjaTrader.Data; using NinjaTrader.NinjaScript; using NinjaTrader.Core.FloatingPoint; using NinjaTrader.NinjaScript.DrawingTools; //Added using System.Windows.Controls; using System.Windows.Automation; using System.Windows.Automation.Provider; #endregion //This namespace holds Indicators in this folder and is required. Do not change it. namespace NinjaTrader.NinjaScript.Indicators.KhaosCounts { public class button : Indicator { private Chart chartWindow; private DependencyObject searchObject; private bool isToolBarButtonAdded; private Button exampleButton; private int oBarNumber =100; protected override void OnStateChange() { if (State == State.SetDefaults) { Name = "SampleAddChartButton"; Calculate = Calculate.OnEachTick; IsOverlay = true; DisplayInDataBox = true; DrawOnPricePanel = true; DrawHorizontalGridLines = true; DrawVerticalGridLines = true; PaintPriceMarkers = true; ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right; //Disable this property if your indicator requires custom values that cumulate with each new market data event. //See Help Guide for additional information. IsSuspendedWhileInactive = true; } else if (State == State.Historical) { if (!isToolBarButtonAdded) Dispatcher.Invoke((Action)(() => { chartWindow = Window.GetWindow(ChartControl.Parent) as Chart; if (chartWindow == null) return; chartWindow.MainTabControl.SelectionChanged += MySelectionChangedHandler; foreach (DependencyObject item in chartWindow.MainMenu) { if (AutomationProperties.GetAutomationId(item) == "exampleButton") { isToolBarButtonAdded = true; } } if (!isToolBarButtonAdded) { exampleButton = new Button { Content = "Example Button", }; chartWindow.MainMenu.Add(exampleButton); chartWindow.MainTabControl.SelectionChanged += MySelectionChangedHandler; exampleButton.Click += ExampleButtonClick; AutomationProperties.SetAutomationId(exampleButton, "exampleButton"); } })); } else if (State == State.Terminated) { if(chartWindow != null) { if (exampleButton != null) { Dispatcher.Invoke((Action)(() => { chartWindow.MainMenu.Remove(exampleButton); exampleButton.Click -= ExampleButtonClick; exampleButton = null; })); } chartWindow.MainTabControl.SelectionChanged -= MySelectionChangedHandler; chartWindow = null; } } } private void ExampleButtonClick(object sender, RoutedEventArgs e) { Print("Button is working"); oBarNumber +=200; ForceRefresh(); Print (oBarNumber); } private void MySelectionChangedHandler(object sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count <= 0) return; TabItem tabItem = e.AddedItems[0] as TabItem; if (tabItem == null) return; ChartTab temp = tabItem.Content as ChartTab; if (temp != null) { if (exampleButton != null) exampleButton.Visibility = temp.ChartControl == ChartControl ? Visibility.Visible : Visibility.Collapsed; } } protected override void OnBarUpdate() { if (IsFirstTickOfBar) { if (CurrentBar <33) {return;} if (CurrentBar == oBarNumber) Draw.VerticalLine(this, "VerticalLine_Bullish"+CurrentBar, 2, Brushes.DarkGreen, DashStyleHelper.Dash, 1, true); } } } } #region NinjaScript generated code. Neither change nor remove. namespace NinjaTrader.NinjaScript.Indicators { public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase { private KhaosCounts.button[] cachebutton; public KhaosCounts.button button() { return button(Input); } public KhaosCounts.button button(ISeries<double> input) { if (cachebutton != null) for (int idx = 0; idx < cachebutton.Length; idx++) if (cachebutton[idx] != null && cachebutton[idx].EqualsInput(input)) return cachebutton[idx]; return CacheIndicator<KhaosCounts.button>(new KhaosCounts.button(), input, ref cachebutton); } } } namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns { public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase { public Indicators.KhaosCounts.button button() { return indicator.button(Input); } public Indicators.KhaosCounts.button button(ISeries<double> input ) { return indicator.button(input); } } } namespace NinjaTrader.NinjaScript.Strategies { public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase { public Indicators.KhaosCounts.button button() { return indicator.button(Input); } public Indicators.KhaosCounts.button button(ISeries<double> input ) { return indicator.button(input); } } } #endregion
Comment