see attached code.
namespace NinjaTrader.NinjaScript.Strategies
{
public class ExampleStrategy : Strategy
{
// Button and Interface
private Chart chartWindow;
private DependencyObject searchObject;
private bool isToolBarButtonAdded;
private Button OpenExampleButton;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Enter the description for your new custom Strategy here.";
Name = "ExampleStrategy";
Calculate = Calculate.OnEachTick;
EntriesPerDirection = 1;
EntryHandling = EntryHandling.AllEntries;
IsExitOnSessionCloseStrategy = true;
ExitOnSessionCloseSeconds = 30;
IsFillLimitOnTouch = false;
MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
OrderFillResolution = OrderFillResolution.Standard;
Slippage = 0;
StartBehavior = StartBehavior.WaitUntilFlat;
TimeInForce = TimeInForce.Gtc;
TraceOrders = false;
RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
StopTargetHandling = StopTargetHandling.PerEntryExecution;
BarsRequiredToTrade = 20;
}
else if (State == State.Configure)
{
}
else if (State == State.Historical)
{
if (!isToolBarButtonAdded)
Dispatcher.Invoke((Action)(() =>
{
chartWindow = Window.GetWindow(ChartControl.Parent) as Chart;
if (chartWindow == null) return;
foreach (DependencyObject item in chartWindow.MainMenu)
{
if (AutomationProperties.GetAutomationId(item) == "OpenExampleButton")
{
isToolBarButtonAdded = true;
}
}
if (!isToolBarButtonAdded)
{
OpenExampleButton = new Button { Content = "Example", Visibility = Visibility.Collapsed };
foreach (TabItem tab in chartWindow.MainTabControl.Items)
if ((tab.Content as ChartTab).ChartControl == ChartControl && tab == chartWindow.MainTabControl.SelectedItem)
OpenExampleButton.Visibility = Visibility.Visible;
chartWindow.MainMenu.Add(OpenExampleButton);
OpenExampleButton.Click += OpenExampleButtonClick;
AutomationProperties.SetAutomationId(OpenExampleBu tton, "Example");
}
}));
}
else if (State == State.Terminated)
{
if(chartWindow != null)
{
if (OpenExampleButton != null)
{
Dispatcher.Invoke((Action)(() =>
{
chartWindow.MainMenu.Remove(OpenExampleButton);
OpenExampleButton.Click -= OpenExampleButtonClick;
OpenExampleButton = null;
}));
}
chartWindow = null;
}
}
}
private void OpenExampleButtonClick(object sender, RoutedEventArgs e)
{
Globals.RandomDispatcher.BeginInvoke(new Action(() => new ExampleWindow().Show()));
}
protected override void OnBarUpdate()
{
}
}
}
public class ExampleWindow : NTWindow
{
public ExampleWindow()
{
Caption = "Example";
Width = 500;
Height = 500;
TabControl tabControl = new TabControl();
TabControlManager.SetIsMovable(tabControl, false);
TabControlManager.SetCanAddTabs(tabControl, false);
TabControlManager.SetCanRemoveTabs(tabControl, false);
Content = tabControl;
tabControl.AddNTTabPage(new ExamplePage());
}
public class ExampleWindowFactory : INTTabFactory
{
public NTWindow CreateParentWindow()
{
return new ExampleWindow();
}
public NTTabPage CreateTabPage(string typeName, bool isNewWindow = false)
{
return new ExamplePage();
}
}
public class ExamplePage : NTTabPage
{
public ExamplePage()
{
Content = LoadXaml();
}
public override void Cleanup()
{
}
protected override string GetHeaderPart(string variable)
{
return "Example";
}
private DependencyObject LoadXaml()
{
try
{
Page page;
FileStream fs = new FileStream(System.IO.Path.Combine(NinjaTrader.Core .Globals.UserDataDir, @"bin\Custom\Strategies\EXAMPLE.xaml"), FileMode.Open);
page = (Page)XamlReader.Load(fs);
DependencyObject pageContent = page.Content as DependencyObject;
return pageContent;
}
catch (Exception)
{
return null;
}
}
protected override void Restore(XElement element) { }
protected override void Save(XElement element) { }
}
}
XAML
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:t="clr-namespace:NinjaTrader.Gui.Tools;assembly=NinjaTrad er.Gui">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*" />
<ColumnDefinition Width="0.5*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0" Content="Example Button"/>
</Grid>
</Page>
How do I add a Button_Click Method (started several attempts), which can be used within the strategy code? So how whould I for example trigger a buy order by clicking the button? Is the window class declaration in the right spot?
could you please give me an example of how to do that.
regards and thanks
Comment