Quantcast
Channel: Market Calls
Viewing all articles
Browse latest Browse all 2070

Ninjatrader 8 – Button Trading OpenSource Code

$
0
0

Here is the open-source code for building a simple button-based API call to the Algomojo Platform. Now one can use Ninjatrader 8 to build customized trading requirements using Algomojo API.

Requirements

Installing the Algomojo Arrow Bridge

Copy the C# Bridge and Paste it in the Ninjatrader 8 Folder as mentioned below

MyDocuments\NinjaTrader 8\bin\Custom\AMNT64BRIDGE.dll

Add References to AMNT64BRIDGE.dll from NinjaEditor

Goto Control Center -> New -> Ninjscript Editor

Installing the Ninjascript Addon

Step 1: Download the Ninjascript Algomojo Button Addon

After you have downloaded 3rd Party Add-On, they can be imported from the NinjaTrader Control Center.

Step 2: From the Control Center window select the menu Tools > ImportNinjaScript Add-On… to open the “Import” dialog window as shown below

Step 3: Select the file Algomojo Buttons.zip you want to import

Step 4: Press the “Import” button

Add Dll References manually

Ninjascript Code

#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 AMNT64BRIDGE;
#endregion

//This namespace holds Indicators in this folder and is required. Do not change it. 
namespace NinjaTrader.NinjaScript.Indicators
{
	public class Algomojo : Indicator
	{
		
        private string pricetype;
		private string amo;
        private double price;
        private int disclosed_quantity;
        private double trigger_price;
		
        
		private System.Windows.Controls.Button myBuyButton;
        private System.Windows.Controls.Button mySellButton;
		private System.Windows.Controls.Button myShortButton;
        private System.Windows.Controls.Button myCoverButton;
		private System.Windows.Controls.Button myExitAllButton;
        
        private System.Windows.Controls.Grid   myGrid;
		ExchangeEnumIndicator exchange = ExchangeEnumIndicator.NSE;
	    ProdTypeEnumIndicator product = ProdTypeEnumIndicator.MIS;
		BrokerCodeEnumIndicator broker = BrokerCodeEnumIndicator.an;
		SplitOrderEnumIndicator splitorder = SplitOrderEnumIndicator.NO;
		
		public string PlaceOrder(string action, int orderqty)
		{
			 Type algo = Type.GetTypeFromProgID("AMAMIBRIDGE.main");
			 if(algo == null) throw new InvalidOperationException(
    			"Invalid prog-id: " + "AMAMIBRIDGE.main");
			 dynamic algomojo = Activator.CreateInstance(algo);
			 
			 string api_data = "{ \"broker\": \""+broker.ToString()+"\",   \"strategy\":\""+strategy+"\",  \"exchange\":\""+exchange.ToString()+"\",         \"symbol\":\""+symbol+"\",       \"action\":\""+action+"\",       \"product\":\""+product.ToString()+"\",          \"pricetype\":\""+pricetype.ToString()+"\",       \"quantity\":\""+orderqty.ToString()+"\",           \"price\":\""+price.ToString()+"\",      \"disclosed_quantity\":\""+disclosed_quantity.ToString()+"\",         \"trigger_price\":\""+trigger_price.ToString()+"\",     \"amo\":\""+amo+"\",    \"splitorder\":\""+splitorder.ToString()+"\",   \"split_quantity\":\""+split_quantity.ToString()+"\"   }"; 
			
			 Log("API Request : "+api_data, LogLevel.Information);
					  
			 string result = algomojo.AMDispatcher(apikey,apisecret,"PlaceOrder",api_data,"am",version);  
			 Log("API Response : "+result, LogLevel.Information);
			 PlaySound(NinjaTrader.Core.Globals.InstallDir + @"\sounds\Alert4.wav");
			 return result;
			
		}
		
		
		public string ExitOrder(string action, int position_size)
		{
			 Type algo = Type.GetTypeFromProgID("AMAMIBRIDGE.main");
			 if(algo == null) throw new InvalidOperationException(
    			"Invalid prog-id: " + "AMAMIBRIDGE.main");
			 dynamic algomojo = Activator.CreateInstance(algo);
			 
			 string api_data = "{ \"broker\": \""+broker.ToString()+"\",   \"strategy\":\""+strategy+"\",  \"exchange\":\""+exchange.ToString()+"\",         \"symbol\":\""+symbol+"\",       \"action\":\""+action+"\",       \"product\":\""+product.ToString()+"\",          \"pricetype\":\""+pricetype.ToString()+"\",       \"quantity\":\""+"0"+"\",           \"price\":\""+price.ToString()+"\", 	\"position_size\":\""+position_size.ToString()+"\",     \"disclosed_quantity\":\""+disclosed_quantity.ToString()+"\",         \"trigger_price\":\""+trigger_price.ToString()+"\",     \"amo\":\""+amo+"\",    \"splitorder\":\""+splitorder.ToString()+"\",   \"split_quantity\":\""+split_quantity.ToString()+"\"   }"; 
			
			 Log("API Request : "+api_data, LogLevel.Information);
					  
			 string result = algomojo.AMDispatcher(apikey,apisecret,"PlaceSmartOrder",api_data,"am",version);  
			 Log("API Response : "+result, LogLevel.Information);
			 PlaySound(NinjaTrader.Core.Globals.InstallDir + @"\sounds\Alert4.wav");
			 return result;
			
		}
		
		public string Squareoffall()
		{
			 Type algo = Type.GetTypeFromProgID("AMAMIBRIDGE.main");
			 if(algo == null) throw new InvalidOperationException(
    			"Invalid prog-id: " + "AMAMIBRIDGE.main");
			 dynamic algomojo = Activator.CreateInstance(algo);
			 
			 string api_data = "{ \"broker\": \""+broker.ToString()+"\"   }"; 
			
			 Log("API Request : "+api_data, LogLevel.Information);
					  
			 string result = algomojo.AMDispatcher(apikey,apisecret,"SquareOffAllPosition",api_data,"am",version);  
			 Log("API Request : "+result, LogLevel.Information);
			 PlaySound(NinjaTrader.Core.Globals.InstallDir + @"\sounds\Alert4.wav");
			 return result;
			
		}
		
			private void OnMyButtonClick(object sender, RoutedEventArgs rea)
			{
				  System.Windows.Controls.Button button = sender as System.Windows.Controls.Button;
				  
				  if(button.Name.Equals("MyBuyButton"))
				  {									 
						PlaceOrder("BUY",quantity);  
				  }
				
				  if(button.Name.Equals("MySellButton"))
				  {
						ExitOrder("SELL",0);
				  }
				  if(button.Name.Equals("MyCoverButton"))
				  {									 
						ExitOrder("BUY",0);  
				  }
				
				  if(button.Name.Equals("MyShortButton"))
				  {
						PlaceOrder("SELL",quantity);
				  }
				  if(button.Name.Equals("MyExitAllButton"))
				  {									 
						Squareoffall();  
				  }
				
				  
			
			}
		
		protected override void OnStateChange()
		{
			if (State == State.SetDefaults)
			{
				Description									= @"Place your orders from Ninjatrader Button Trading.";
				Name										= "Algomojo Button Trading";
				Calculate									= Calculate.OnBarClose;
				IsOverlay									= true;
				IsOverlay									= true;
				DisplayInDataBox							= true;
				DrawOnPricePanel							= true;
				DrawHorizontalGridLines						= true;
				DrawVerticalGridLines						= true;
				PaintPriceMarkers							= true;
				ScaleJustification							= NinjaTrader.Gui.Chart.ScaleJustification.Right;

				pricetype = "MARKET";
                
                strategy ="Ninjatrader 8";		
				apikey					="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
				apisecret               ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
				quantity = 1;
				version = "v1";
				symbol					="INFY-EQ";
				price 					= 0; 
				disclosed_quantity 		= 0;
				trigger_price 			= 0;
				amo 					= "NO";
				split_quantity      	= 1;
				
				 
			}
			else if (State == State.Configure)
			{
			}
			 else if (State == State.DataLoaded)
            {

            }
			else if(State==State.Historical)
			{
				ChartControl.Dispatcher.InvokeAsync((() =>
   			 {
        // Grid already exists
        if (UserControlCollection.Contains(myGrid))
          return;
        // Add a control grid which will host our custom buttons
        myGrid = new System.Windows.Controls.Grid
      	  {
          Name = "MyCustomGrid",
          // Align the control to the top right corner of the chart
          HorizontalAlignment = HorizontalAlignment.Left,
          VerticalAlignment = VerticalAlignment.Top,
        };
 
        // Define the two columns in the grid, one for each button
        System.Windows.Controls.ColumnDefinition column1 = new System.Windows.Controls.ColumnDefinition();
        System.Windows.Controls.ColumnDefinition column2 = new System.Windows.Controls.ColumnDefinition();
		  System.Windows.Controls.ColumnDefinition column3 = new System.Windows.Controls.ColumnDefinition();
		  System.Windows.Controls.ColumnDefinition column4 = new System.Windows.Controls.ColumnDefinition();
		  System.Windows.Controls.ColumnDefinition column5 = new System.Windows.Controls.ColumnDefinition();
 
        // Add the columns to the Grid
        myGrid.ColumnDefinitions.Add(column1);
        myGrid.ColumnDefinitions.Add(column2);
		myGrid.ColumnDefinitions.Add(column3);
		myGrid.ColumnDefinitions.Add(column4);
		myGrid.ColumnDefinitions.Add(column5);
 
        // Define the custom Buy Button control object
        myBuyButton = new System.Windows.Controls.Button
        {
          Name = "MyBuyButton",
          Content = "Long entry",
          Foreground = Brushes.White,
          Background = Brushes.Green
        };
		 mySellButton = new System.Windows.Controls.Button
        {
          Name = "MySellButton",
          Content = "Long Exit",
          Foreground = Brushes.White,
          Background = Brushes.Red
        };
		
		myShortButton = new System.Windows.Controls.Button
        {
          Name = "MyShortButton",
          Content = "Short entry",
          Foreground = Brushes.White,
          Background = Brushes.OrangeRed
        };
		myCoverButton = new System.Windows.Controls.Button
        {
          Name = "MyCoverButton",
          Content = "Short Exit",
          Foreground = Brushes.White,
          Background = Brushes.Goldenrod
        };
		
		myExitAllButton = new System.Windows.Controls.Button
        {
          Name = "MyExitAllButton",
          Content = "Squareoff All",
          Foreground = Brushes.White,
          Background = Brushes.Crimson
        };
		
		
        myBuyButton.Click += OnMyButtonClick;
	    mySellButton.Click += OnMyButtonClick;
		myShortButton.Click += OnMyButtonClick;
	    myCoverButton.Click += OnMyButtonClick;
		myExitAllButton.Click += OnMyButtonClick;
	    
        System.Windows.Controls.Grid.SetColumn(myBuyButton, 0);
		System.Windows.Controls.Grid.SetColumn(mySellButton, 1);
		System.Windows.Controls.Grid.SetColumn(myShortButton, 2);
		System.Windows.Controls.Grid.SetColumn(myCoverButton, 3);
		System.Windows.Controls.Grid.SetColumn(myExitAllButton, 4);
		
        myGrid.Children.Add(myBuyButton);
	    myGrid.Children.Add(mySellButton);
		myGrid.Children.Add(myShortButton);
	    myGrid.Children.Add(myCoverButton);
		myGrid.Children.Add(myExitAllButton);
	    
        UserControlCollection.Add(myGrid);
 
    }));
  }
 
  else if (State == State.Terminated)
  {
    if (ChartControl == null)
        return;
    ChartControl.Dispatcher.InvokeAsync((() =>
    {
        if (myGrid != null)
        {
          if (myBuyButton != null)
          {
              myGrid.Children.Remove(myBuyButton);
              myBuyButton.Click -= OnMyButtonClick;
              myBuyButton = null;
          }
		   if (mySellButton != null)
          {
              myGrid.Children.Remove(mySellButton);
              mySellButton.Click -= OnMyButtonClick;
              mySellButton = null;
          }
		  if (myShortButton != null)
          {
              myGrid.Children.Remove(myShortButton);
              myShortButton.Click -= OnMyButtonClick;
              myShortButton = null;
          }
		   if (myCoverButton != null)
          {
              myGrid.Children.Remove(myCoverButton);
              myCoverButton.Click -= OnMyButtonClick;
              myCoverButton = null;
          }
		  if (myExitAllButton != null)
          {
              myGrid.Children.Remove(myExitAllButton);
              myExitAllButton.Click -= OnMyButtonClick;
              myExitAllButton = null;
          }
		  
        }
    }));
			}
        
		}

		protected override void OnBarUpdate()
		{
			//Add your custom indicator logic here.
			
		}
		
		public override string DisplayName
		{
			get { return Name; }
		}
		
        public enum ExchangeEnumIndicator
		 {
			 NSE,NFO,BSE,CDS,MCX
		 }
		 public enum ProdTypeEnumIndicator
		 {
			MIS,NRML,CNC
		 }
		 public enum BrokerCodeEnumIndicator
		 {
			 an,ab,fs,fy,tc,up,zb,ze
		 }
		 public enum SplitOrderEnumIndicator
		 {
			 NO,YES
		 }
		#region Properties
		 
		[Description("Property defined in Indicator")]
		 [Display(Name="Exchange", Order=6, GroupName="Parameters")]
		 public  NinjaTrader.NinjaScript.Indicators.Algomojo.ExchangeEnumIndicator
		 Exchange
		 {
		 get { return exchange; }
		 set { exchange = value; }
		 }
		 
	    [Description("Property defined in Indicator")]
		 [Display(Name="ProdType", Order=5, GroupName="Parameters")]
		 public  NinjaTrader.NinjaScript.Indicators.Algomojo.ProdTypeEnumIndicator
		 ProdType
		 {
		 get { return product; }
		 set { product = value; }
		 }
		 
		 [Description("Property defined in Indicator")]
		 [Display(Name="SplitOrder", Order=9, GroupName="Parameters")]
		 public  NinjaTrader.NinjaScript.Indicators.Algomojo.SplitOrderEnumIndicator
		 SplitOrder
		 {
		 get { return splitorder; }
		 set { splitorder = value; }
		 }
		 
		[NinjaScriptProperty]
		[Display(Name="Apikey", Description="Enter your Apikey here", Order=1, GroupName="Parameters")]
		public string apikey
		{ get; set; }

		[NinjaScriptProperty]
		[Display(Name="Apisecret", Description="Enter your Apisecret here", Order=2, GroupName="Parameters")]
		public string apisecret
		{ get; set; }
		
		[NinjaScriptProperty]
		[Display(Name="Broker", Description="Enter your Broker Shortcode", Order=3, GroupName="Parameters")]
		public  NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator
		BrokerCode
		 {
		 get { return broker; }
		 set { broker = value; }
		 }
		 		 
			
		
		[NinjaScriptProperty]
		[Display(Name="Version", Description="Enter Algomojo API Version", Order=4, GroupName="Parameters")]
		public string version
		{ get; set; }
		
		[NinjaScriptProperty]
		[Display(Name="Strategy Name", Description="Enter your Strategy Name", Order=5, GroupName="Parameters")]
		public string strategy
		{ get; set; }

		[NinjaScriptProperty]
		[Display(Name="Symbol", Description="Enter Trading Symbol", Order=7, GroupName="Parameters")]
		public string symbol
		{ get; set; }

		[NinjaScriptProperty]
		[Range(1, int.MaxValue)]
		[Display(Name="Quantity", Order=8, GroupName="Parameters")]
		public int quantity
		{ get; set; }

		[NinjaScriptProperty]
		[Range(0, int.MaxValue)]
		[Display(Name="Split Quantity", Order=10,GroupName="Parameters")]
		public int split_quantity
		{ get; set; }

		
		#endregion

	}
}

#region NinjaScript generated code. Neither change nor remove.

namespace NinjaTrader.NinjaScript.Indicators
{
	public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
	{
		private Algomojo[] cacheAlgomojo;
		public Algomojo Algomojo(string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string strategy, string symbol, int quantity, int split_quantity)
		{
			return Algomojo(Input, apikey, apisecret, brokerCode, version, strategy, symbol, quantity, split_quantity);
		}

		public Algomojo Algomojo(ISeries<double> input, string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string strategy, string symbol, int quantity, int split_quantity)
		{
			if (cacheAlgomojo != null)
				for (int idx = 0; idx < cacheAlgomojo.Length; idx++)
					if (cacheAlgomojo[idx] != null && cacheAlgomojo[idx].apikey == apikey && cacheAlgomojo[idx].apisecret == apisecret && cacheAlgomojo[idx].BrokerCode == brokerCode && cacheAlgomojo[idx].version == version && cacheAlgomojo[idx].strategy == strategy && cacheAlgomojo[idx].symbol == symbol && cacheAlgomojo[idx].quantity == quantity && cacheAlgomojo[idx].split_quantity == split_quantity && cacheAlgomojo[idx].EqualsInput(input))
						return cacheAlgomojo[idx];
			return CacheIndicator<Algomojo>(new Algomojo(){ apikey = apikey, apisecret = apisecret, BrokerCode = brokerCode, version = version, strategy = strategy, symbol = symbol, quantity = quantity, split_quantity = split_quantity }, input, ref cacheAlgomojo);
		}
	}
}

namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
	public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
	{
		public Indicators.Algomojo Algomojo(string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string strategy, string symbol, int quantity, int split_quantity)
		{
			return indicator.Algomojo(Input, apikey, apisecret, brokerCode, version, strategy, symbol, quantity, split_quantity);
		}

		public Indicators.Algomojo Algomojo(ISeries<double> input , string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string strategy, string symbol, int quantity, int split_quantity)
		{
			return indicator.Algomojo(input, apikey, apisecret, brokerCode, version, strategy, symbol, quantity, split_quantity);
		}
	}
}

namespace NinjaTrader.NinjaScript.Strategies
{
	public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
	{
		public Indicators.Algomojo Algomojo(string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string strategy, string symbol, int quantity, int split_quantity)
		{
			return indicator.Algomojo(Input, apikey, apisecret, brokerCode, version, strategy, symbol, quantity, split_quantity);
		}

		public Indicators.Algomojo Algomojo(ISeries<double> input , string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string strategy, string symbol, int quantity, int split_quantity)
		{
			return indicator.Algomojo(input, apikey, apisecret, brokerCode, version, strategy, symbol, quantity, split_quantity);
		}
	}
}

#endregion

Indicator Settings

Enter the API Key, API SecretKey, Broker and other order parameters according to the requirement.

Ninjascript Output Window

Goto Ninjascript Control Center -> New -> Ninjascript Output to view the API request/API response parameters.

The post Ninjatrader 8 – Button Trading OpenSource Code appeared first on Marketcalls.


Viewing all articles
Browse latest Browse all 2070

Trending Articles