non-event encapsulating method
https://ninjatrader.com/support/forum/forum/ninjatrader-8/indicator-development/101315-set-quantityupdown-value-from-keyboardunknown
csharp
3 years ago
13 kB
32
Indexable
Never
#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.Gui.Tools; using NinjaTrader.Data; using NinjaTrader.NinjaScript; using NinjaTrader.Core.FloatingPoint; using NinjaTrader.NinjaScript.DrawingTools; using System.Windows.Media.Imaging; using System.Windows.Controls; #endregion //This namespace holds Indicators in this folder and is required. Do not change it. namespace NinjaTrader.NinjaScript.Indicators { public class BuyMktSellMktHotkeysQS : Indicator { private Account myAccount; // QS Define a Chart object to refer to the chart on which the indicator resides private Chart chartWindow; // QS Define a Button NinjaTrader.Gui.Tools.QuantityUpDown Quantity_Selector = null; // QS private bool Is_ToolBar_Controls_Added; // QS private QuantityUpDown myQuantityUpDown; protected override void OnStateChange() { if (State == State.SetDefaults) { Description = @"Enter the description for your new custom Indicator here."; Name = "BuyMktSellMktHotkeysQS"; 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; AccountName = "Sim101"; } else if (State == State.Configure) { } else if (State == State.Historical) { //Call the custom addButtonToToolbar method in State.Historical to ensure it is only done when applied to a chart // -- not when loaded in the Indicators window if (!Is_ToolBar_Controls_Added) Add_Controls_To_Toolbar(); } else if (State == State.DataLoaded) { if (ChartControl != null) { ChartControl.PreviewKeyDown += ChartControl_PreviewKeyDown; ChartControl.PreviewKeyUp += ChartControl_PreviewKeyUp; } // Find our account lock (Account.All) myAccount = Account.All.FirstOrDefault(a => a.Name == AccountName); // Subscribe to account item and order updates if (myAccount != null) { myAccount.OrderUpdate += OnOrderUpdate; myAccount.ExecutionUpdate += OnExecutionUpdate; myAccount.PositionUpdate += OnPositionUpdate; } } else if (State == State.Terminated) { if (ChartControl != null) { ChartControl.PreviewKeyDown -= ChartControl_PreviewKeyDown; ChartControl.PreviewKeyUp -= ChartControl_PreviewKeyUp; } if (myAccount != null) { myAccount.OrderUpdate -= OnOrderUpdate; myAccount.ExecutionUpdate -= OnExecutionUpdate; myAccount.PositionUpdate -= OnPositionUpdate; } //Call a custom method to dispose of any leftover objects in State.Terminated DisposeCleanUp(); } } protected override void OnBarUpdate() { //Add your custom indicator logic here. } #region Add Controls To Tollbar private void Add_Controls_To_Toolbar() { // Use this.Dispatcher to ensure code is executed on the proper thread ChartControl.Dispatcher.InvokeAsync((Action)(() => { //Obtain the Chart on which the indicator is configured chartWindow = Window.GetWindow(this.ChartControl.Parent) as Chart; if (chartWindow == null) { Print("chartWindow == null"); return; } Quantity_Selector = new NinjaTrader.Gui.Tools.QuantityUpDown(); //Quantity_Selector.ValueChanged += On_Quantity_Selector_ValueChanged; Quantity_Selector.PreviewKeyDown += On_Quantity_Selector_PreviewKeyDown; chartWindow.MainMenu.Add(Quantity_Selector); Is_ToolBar_Controls_Added = true; })); } #endregion // private void On_Quantity_Selector_ValueChanged(object sender, RoutedEventArgs e) // { // NinjaTrader.Gui.Tools.QuantityUpDown qs = sender as NinjaTrader.Gui.Tools.QuantityUpDown; // if( sender != null ) // { // Print( qs.Value ); // } // } // private void On_Quantity_Selector_PreviewKeyDown(object sender, KeyEventArgs e) // { // e.Handled = true; // NinjaTrader.Gui.Tools.QuantityUpDown qs = sender as NinjaTrader.Gui.Tools.QuantityUpDown; // if( e.Key >= Key.D0 && e.Key <= Key.D9) qs.Content = (string)qs.Content + e.Key; // } // private bool oneKey = false; // private void On_Quantity_Selector_PreviewKeyDown(object sender, KeyEventArgs e) // { // if (e.Key == Key.D0 && !oneKey) // { // oneKey = true; // Print("oneKey Down"); // string number = e.Key.ToString(); // number = number.Replace("D", ""); // int num = int.Parse(number); // NinjaTrader.Gui.Tools.QuantityUpDown qs = e as NinjaTrader.Gui.Tools.QuantityUpDown; // if (qs != null) qs.Value = num; // } // } private void On_Quantity_Selector_PreviewKeyDown() { myQuantityUpDown.PreviewKeyDown += (o, e) => { if ((e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)) { e.Handled = true; string number = e.Key.ToString(); number = number.Replace("NumPad", ""); number = number.Replace("D", ""); int num = int.Parse(number); NinjaTrader.Gui.Tools.QuantityUpDown qs = o as NinjaTrader.Gui.Tools.QuantityUpDown; if (qs != null) qs.Value = num; } }; } // private void OneKeyDown(object sender, System.Windows.Input.KeyEventArgs e) // { // string number = e.Key.ToString(); // number = number.Replace("D", ""); // int num = int.Parse(number); // myQuantityUpDown.Value = num; // } // private void On_Quantity_Selector_PreviewKeyDown(object sender, KeyEventArgs e) // { // Print("0 e.Handled " + e.Handled); // Print("0 Key.D0 " + Key.D0 + " " + e.Key); // if (e.Key == Key.D0) // { // Print("1 e.Handled " + e.Handled); // Print("1 Key.D0 " + Key.D0 + " " + e.Key); // e.Handled = true; // } // } // Print("0 e.Handled " + e.Handled); // Print("0 Key.D0 " + Key.D0 + " " + e.Key); // Print("0 Key.D9 " + Key.D9 + " " + e.Key); // myQuantityUpDown.PreviewKeyDown += (o, p) => // { // if (e.Key == Key.Delete || e.Key == Key.Back) // { // e.Handled = true; // myQuantityUpDown.Value = 0; // Print("1 e.Handled " + e.Handled); // Print("1 Key.D0 " + Key.D0 + " " + e.Key); // Print("1 Key.D9 " + Key.D9 + " " + e.Key); // } // if ((e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)) // { // e.Handled = true; // string number = e.Key.ToString(); // string newnumber = myQuantityUpDown.Value.ToString(); // number = number.Replace("NumPad", ""); // number = number.Replace("D", ""); // int num = int.Parse(newnumber + number); // myQuantityUpDown.Value = num; // Print("2 e.Handled " + e.Handled); // Print("2 Key.D0 " + Key.D0 + " " + e.Key); // Print("2 Key.D9 " + Key.D9 + " " + e.Key); // } // Print("3 e.Handled " + e.Handled); // Print("3 Key.D0 " + Key.D0 + " " + e.Key); // Print("3 Key.D9 " + Key.D9 + " " + e.Key); // }; // } #region DisposeCleanUp private void DisposeCleanUp() { //ChartWindow Null Check if (chartWindow != null) { //Dispatcher used to Assure Executed on UI Thread ChartControl.Dispatcher.InvokeAsync((Action)(() => { if( Quantity_Selector != null ) chartWindow.MainMenu.Remove(Quantity_Selector); })); } } #endregion private void OnOrderUpdate(object sender, OrderEventArgs e) { NinjaTrader.Code.Output.Process("", PrintTo.OutputTab1); NinjaTrader.Code.Output.Process("OrderUpdate", PrintTo.OutputTab1); // Output the order NinjaTrader.Code.Output.Process(e.Order.ToString(), PrintTo.OutputTab1); } private void OnExecutionUpdate(object sender, ExecutionEventArgs e) { NinjaTrader.Code.Output.Process("", PrintTo.OutputTab1); NinjaTrader.Code.Output.Process("ExecutionUpdate", PrintTo.OutputTab1); // Output the execution NinjaTrader.Code.Output.Process(string.Format("Instrument: {0} Quantity: {1} Price: {2}", e.Execution.Instrument.FullName, e.Quantity, e.Price), PrintTo.OutputTab1); } private void OnPositionUpdate(object sender, PositionEventArgs e) { NinjaTrader.Code.Output.Process("", PrintTo.OutputTab1); NinjaTrader.Code.Output.Process("PositionUpdate", PrintTo.OutputTab1); // Output the order NinjaTrader.Code.Output.Process(e.Position.ToString(), PrintTo.OutputTab1); } protected void ChartControl_PreviewKeyDown(object sender, KeyEventArgs e) { TriggerCustomEvent(o => { Order buyMktOrder = null; if (Keyboard.IsKeyDown(Key.NumPad7)) { buyMktOrder = myAccount.CreateOrder(Instrument, OrderAction.Buy, OrderType.Market, OrderEntry.Manual, TimeInForce.Day, 1, 0, 0, "", "buyMktOrder"+DateTime.Now.ToString(), DateTime.MaxValue, null); } myAccount.Submit(new[] { buyMktOrder }); }, null); e.Handled = true; TriggerCustomEvent(p => { Order sellMktOrder = null; if (Keyboard.IsKeyDown(Key.NumPad8)) { sellMktOrder = myAccount.CreateOrder(Instrument, OrderAction.Sell, OrderType.Market, OrderEntry.Manual, TimeInForce.Day, 1, 0, 0, "", "sellMktOrder"+DateTime.Now.ToString(), DateTime.MaxValue, null); } myAccount.Submit(new[] { sellMktOrder }); }, null); e.Handled = true; } private void ChartControl_PreviewKeyUp(object sender, KeyEventArgs e) { } [TypeConverter(typeof(NinjaTrader.NinjaScript.AccountNameConverter))] public string AccountName { get; set; } } } #region NinjaScript generated code. Neither change nor remove. namespace NinjaTrader.NinjaScript.Indicators { public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase { private BuyMktSellMktHotkeysQS[] cacheBuyMktSellMktHotkeysQS; public BuyMktSellMktHotkeysQS BuyMktSellMktHotkeysQS() { return BuyMktSellMktHotkeysQS(Input); } public BuyMktSellMktHotkeysQS BuyMktSellMktHotkeysQS(ISeries<double> input) { if (cacheBuyMktSellMktHotkeysQS != null) for (int idx = 0; idx < cacheBuyMktSellMktHotkeysQS.Length; idx++) if (cacheBuyMktSellMktHotkeysQS[idx] != null && cacheBuyMktSellMktHotkeysQS[idx].EqualsInput(input)) return cacheBuyMktSellMktHotkeysQS[idx]; return CacheIndicator<BuyMktSellMktHotkeysQS>(new BuyMktSellMktHotkeysQS(), input, ref cacheBuyMktSellMktHotkeysQS); } } } namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns { public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase { public Indicators.BuyMktSellMktHotkeysQS BuyMktSellMktHotkeysQS() { return indicator.BuyMktSellMktHotkeysQS(Input); } public Indicators.BuyMktSellMktHotkeysQS BuyMktSellMktHotkeysQS(ISeries<double> input ) { return indicator.BuyMktSellMktHotkeysQS(input); } } } namespace NinjaTrader.NinjaScript.Strategies { public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase { public Indicators.BuyMktSellMktHotkeysQS BuyMktSellMktHotkeysQS() { return indicator.BuyMktSellMktHotkeysQS(Input); } public Indicators.BuyMktSellMktHotkeysQS BuyMktSellMktHotkeysQS(ISeries<double> input ) { return indicator.BuyMktSellMktHotkeysQS(input); } } } #endregion