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 System.Windows.Controls;
#endregion
// This namespace holds Add ons in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.AddOns
{
public class RemoveChartTraderButtons : NinjaTrader.NinjaScript.AddOnBase
{
region Constants and Instance Variables
private const string CHART_TRADER_AUTOMATION_ID = "ChartWindowChartTraderControl";
private const string CHART_TRADER_MAIN_GRID_NAME = "grdMain";
private const string TARGET_WORKSPACE_NAME = "space1";
#endregion
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"RemoveChartTraderButtons";
Name = "RemoveChartTraderButtons";
}
else if (State == State.Configure)
{
}
}
region OnWindowCreated
protected override void OnWindowCreated(Window window)
{
// Check if the active workspace is the target workspace
if (NinjaTrader.Core.Globals.ActiveWorkspace != TARGET_WORKSPACE_NAME)
return;
// Only apply to Chart windows
if (window as Chart == null) return;
// Find Chart Trader from the calling chart window by its Automation ID
ChartTrader chartTrader = window.FindFirst(CHART_TRADER_AUTOMATION_ID) as ChartTrader;
if (chartTrader == null) return; // something is seriously wrong if chartTrader is null
// Find the main Chart Trader grid where the default buttons and controls reside
Grid mainGrid = chartTrader.FindName(CHART_TRADER_MAIN_GRID_NAME) as Grid;
if (mainGrid != null) // something is seriously wrong if mainGrid is null
{
var grid = mainGrid.Children[0] as System.Windows.Controls.Grid;
foreach (var child in grid.Children)
{
System.Windows.Controls.Button button = child as System.Windows.Controls.Button;
if (button != null)
{
// Only collapse buttons that are not the Close button
if (button.Name != "btnClose")
{
button.Visibility = Visibility.Collapsed;
}
}
}
// Disable right-click Buy/Sell options (to deactivate manual trades)
chartTrader.ContextMenuOpening += (sender, args) =>
{
var contextMenu = chartTrader.ContextMenu;
if (contextMenu != null)
{
// Loop through menu items and disable trade-related options
foreach (var menuItem in contextMenu.Items)
{
if (menuItem is MenuItem item)
{
// Check if the item header includes trade-related keywords
if (item.Header != null &&
(item.Header.ToString().Contains("Buy") ||
item.Header.ToString().Contains("Sell") ||
item.Header.ToString().Contains("Order") ||
item.Header.ToString().Contains("Limit") ||
item.Header.ToString().Contains("Market")))
{
item.IsEnabled = false; // Disable the item
item.Visibility = Visibility.Collapsed; // Hide the item
}
}
}
}
};
}
}
#endregion
}
}
i have this NT addon that I made to remove all buttons except close on chart trader to prevent me from manual trades, it should only work on a specfic workspace called space1.It works but only for newly made chart windows after i load this script. When i restart NT , it either shows all buttons on all spaces, or just the close button on all spaces. How to fix this/ where is the flaw in this code
Comment