Here is the open-source code for building a simple buy and sell 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 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 > Import> NinjaScript 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 strg_name;
private string Tsym;
private string user_apikey;
private string api_secret;
private int qty;
private string ordertype;
//private string exch;
private string strategies;
private string cTag;
private string s_prdt_ali;
private double Price;
private int discqty;
private double TrigPrice;
private bool start=false;
private System.Windows.Controls.Button myBuyButton;
private System.Windows.Controls.Button mySellButton;
private System.Windows.Controls.Grid myGrid;
ExchangeEnumIndicator exch = ExchangeEnumIndicator.NSE;
ProdTypeEnumIndicator Product = ProdTypeEnumIndicator.MIS;
BrokerCodeEnumIndicator Broker = BrokerCodeEnumIndicator.ab;
private void OnMyButtonClick(object sender, RoutedEventArgs rea)
{
System.Windows.Controls.Button button = sender as System.Windows.Controls.Button;
if(button.Name.Equals("MyBuyButton"))
{
// Print("Buy Button Pressed");
// string message = "Simple MessageBox";
// string title = "Title";
Type algo = Type.GetTypeFromProgID("AMAMIBRIDGE.main");
if(algo == null) throw new InvalidOperationException(
"Invalid prog-id: " + "AMAMIBRIDGE.main");
dynamic algomojo = Activator.CreateInstance(algo);
//Main am = new Main();
string api_data ="{\"strg_name\":\""+strg_name+"\",\"s_prdt_ali\":\""+s_prdt_ali+"\",\"Tsym\":\""+Symbol+"\",\"exch\":\""+exch+"\",\"Ttranstype\":\""+"B"+"\",\"Ret\":\""+"DAY"+"\",\"prctyp\":\""+"MKT"+"\",\"qty\":\""+Quantity.ToString()+"\",\"discqty\":\""+discqty.ToString()+"\",\"MktPro\":\""+"NA"+"\",\"Price\":\""+Price.ToString()+"\",\"TrigPrice\":\""+TrigPrice.ToString()+"\",\"Pcode\":\""+ProdType.ToString()+"\",\"AMO\":\""+"NO"+"\"}";
Print(api_data);
//MessageBox.Show(api_data, "API Data");
string result = algomojo.AMDispatcher(Apikey,Apisecret,"PlaceOrder",api_data,Broker.ToString(),version);
Print(result);
//MessageBox.Show(result, "Order Response");
}
if(button.Name.Equals("MySellButton"))
{
start=true;
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 ="{\"strg_name\":\""+strg_name+"\",\"s_prdt_ali\":\""+s_prdt_ali+"\",\"Tsym\":\""+Symbol+"\",\"exch\":\""+exch+"\",\"Ttranstype\":\""+"S"+"\",\"Ret\":\""+"DAY"+"\",\"prctyp\":\""+"MKT"+"\",\"qty\":\""+Quantity.ToString()+"\",\"discqty\":\""+discqty.ToString()+"\",\"MktPro\":\""+"NA"+"\",\"Price\":\""+Price.ToString()+"\",\"TrigPrice\":\""+TrigPrice.ToString()+"\",\"Pcode\":\""+ProdType.ToString()+"\",\"AMO\":\""+"NO"+"\"}";
Print(api_data);
string result = algomojo.AMDispatcher(Apikey,Apisecret,"PlaceOrder",api_data,Broker.ToString(),version);
Print(result);
}
}
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Place your orders from Ninjatrader Button Trading.";
Name = "Algomojo";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
IsOverlay = true;
DisplayInDataBox = true;
DrawOnPricePanel = true;
DrawHorizontalGridLines = true;
DrawVerticalGridLines = true;
PaintPriceMarkers = true;
ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right;
ordertype = "MKT";
strategies = "NT8";
strg_name ="Ninjatrader 8";
s_prdt_ali="BO:BO||CNC:CNC||CO:CO||MIS:MIS||NRML:NRML";
Apikey ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
Apisecret ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
Quantity = 1;
version = "1.0";
Symbol ="INFY-EQ";
DiscQty = 0;
TriggerPrice = 0;
Price = 0;
}
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();
// Add the columns to the Grid
myGrid.ColumnDefinitions.Add(column1);
myGrid.ColumnDefinitions.Add(column2);
// Define the custom Buy Button control object
myBuyButton = new System.Windows.Controls.Button
{
Name = "MySellButton",
Content = "SELL",
Foreground = Brushes.White,
Background = Brushes.Red
};
mySellButton = new System.Windows.Controls.Button
{
Name = "MyBuyButton",
Content = "BUY",
Foreground = Brushes.White,
Background = Brushes.Green
};
myBuyButton.Click += OnMyButtonClick;
mySellButton.Click += OnMyButtonClick;
System.Windows.Controls.Grid.SetColumn(myBuyButton, 0);
System.Windows.Controls.Grid.SetColumn(myBuyButton, 1);
myGrid.Children.Add(myBuyButton);
myGrid.Children.Add(mySellButton);
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;
}
}
}));
}
}
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,CO
}
public enum BrokerCodeEnumIndicator
{
ab,tj,zb
}
#region Properties
[Description("Property defined in Indicator")]
[Display(Name="Exchange", Order=5, GroupName="Parameters")]
public NinjaTrader.NinjaScript.Indicators.Algomojo.ExchangeEnumIndicator
Exchange
{
get { return exch; }
set { exch = 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; }
}
[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="Symbol", Description="Enter tradeing Symbol", Order=5, GroupName="Parameters")]
public string Symbol
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Quantity", Order=6, GroupName="Parameters")]
public int Quantity
{ get; set; }
[NinjaScriptProperty]
[Range(0, int.MaxValue)]
[Display(Name="DiscQty", Order=7,GroupName="Parameters")]
public int DiscQty
{ get; set; }
[NinjaScriptProperty]
[Range(0, double.MaxValue)]
[Display(Name="TriggerPrice", Order=8, GroupName="Parameters")]
public double TriggerPrice
{ 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 symbol, int quantity, int discQty, double triggerPrice)
{
return Algomojo(Input, apikey, apisecret, brokerCode, version, symbol, quantity, discQty, triggerPrice);
}
public Algomojo Algomojo(ISeries<double> input, string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string symbol, int quantity, int discQty, double triggerPrice)
{
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].Symbol == symbol && cacheAlgomojo[idx].Quantity == quantity && cacheAlgomojo[idx].DiscQty == discQty && cacheAlgomojo[idx].TriggerPrice == triggerPrice && cacheAlgomojo[idx].EqualsInput(input))
return cacheAlgomojo[idx];
return CacheIndicator<Algomojo>(new Algomojo(){ Apikey = apikey, Apisecret = apisecret, BrokerCode = brokerCode, version = version, Symbol = symbol, Quantity = quantity, DiscQty = discQty, TriggerPrice = triggerPrice }, 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 symbol, int quantity, int discQty, double triggerPrice)
{
return indicator.Algomojo(Input, apikey, apisecret, brokerCode, version, symbol, quantity, discQty, triggerPrice);
}
public Indicators.Algomojo Algomojo(ISeries<double> input , string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string symbol, int quantity, int discQty, double triggerPrice)
{
return indicator.Algomojo(input, apikey, apisecret, brokerCode, version, symbol, quantity, discQty, triggerPrice);
}
}
}
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 symbol, int quantity, int discQty, double triggerPrice)
{
return indicator.Algomojo(Input, apikey, apisecret, brokerCode, version, symbol, quantity, discQty, triggerPrice);
}
public Indicators.Algomojo Algomojo(ISeries<double> input , string apikey, string apisecret, NinjaTrader.NinjaScript.Indicators.Algomojo.BrokerCodeEnumIndicator brokerCode, string version, string symbol, int quantity, int discQty, double triggerPrice)
{
return indicator.Algomojo(input, apikey, apisecret, brokerCode, version, symbol, quantity, discQty, triggerPrice);
}
}
}
#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.