#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;
#endregion
//This namespace holds Indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators
{
[Gui.CategoryOrder("Setup (by NeoTraderBot)", 1)]
[Gui.CategoryOrder("Trading intervals (by NeoTraderBot)", 2)]
[Gui.CategoryOrder("Appearence (by NeoTraderBot)", 3)]
public class _NTB_UserDefinedParameters : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Just a demonstration on how to include User Defined Parameters";
Name = "_NTB_UserDefinedParameters";
Calculate = Calculate.OnBarClose;
IsOverlay = false;
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;
avgType = NeoTraderBot.MAType.SMA;
period = 9;
percBand = 2.0;
msg = @"Example of a msg to display on the chart!";
daytradingMode = true;
DontTradeOn = DateTime.Now;
TradingStartAfter = DateTime.Parse("09:00", System.Globalization.CultureInfo.InvariantCulture);
TradingCloseAt = DateTime.Parse("12:00", System.Globalization.CultureInfo.InvariantCulture);
plotColor = Brushes.Orange;
}
else if (State == State.Configure)
{
}
}
protected override void OnBarUpdate()
{
//Add your custom indicator logic here.
}
#region Properties
[Display(Name="MA Type", Description="Example of Dropbox parameter with enum", Order=1, GroupName="Setup (by NeoTraderBot)")]
public NeoTraderBot.MAType avgType
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Periods", Description="Number of period for MA", Order=2, GroupName="Setup (by NeoTraderBot)")]
public int period
{ get; set; }
[NinjaScriptProperty]
[Range(1, double.MaxValue)]
[Display(Name="% band around VWAP", Description="Just an example of double parameter", Order=3, GroupName="Setup (by NeoTraderBot)")]
public double percBand
{ get; set; }
[NinjaScriptProperty]
[Display(Name="Enable Daytrading mode", Order=4, GroupName="Setup (by NeoTraderBot)")]
public bool daytradingMode
{ get; set; }
[NinjaScriptProperty]
[PropertyEditor("NinjaTrader.Gui.Tools.DateTimeEditorKey")]
[Display(Name="Dont Trade on", Description="Just an example of Date parameter", Order=1, GroupName="Trading intervals (by NeoTraderBot)")]
public DateTime DontTradeOn
{ get; set; }
[NinjaScriptProperty]
[PropertyEditor("NinjaTrader.Gui.Tools.TimeEditorKey")]
[Display(Name="Start trading after", Description="Time after the strategy will start to trade", Order=2, GroupName="Trading intervals (by NeoTraderBot)")]
public DateTime TradingStartAfter
{ get; set; }
[NinjaScriptProperty]
[PropertyEditor("NinjaTrader.Gui.Tools.TimeEditorKey")]
[Display(Name="Trading close at", Description="Time at the strategy will stop trading and close open positions", Order=3, GroupName="Trading intervals (by NeoTraderBot)")]
public DateTime TradingCloseAt
{ get; set; }
[NinjaScriptProperty]
[Display(Name="Display message", Description="Just an example of string parameter", Order=1, GroupName="Appearence (by NeoTraderBot)")]
public string msg
{ get; set; }
[NinjaScriptProperty]
[XmlIgnore]
[Display(Name="Plot color", Description="Example how to use brush as a parameter", Order=2, GroupName="Appearence (by NeoTraderBot)")]
public Brush plotColor
{ get; set; }
[Browsable(false)]
public string Teste6Serializable
{
get { return Serialize.BrushToString(plotColor); }
set { plotColor = Serialize.StringToBrush(value); }
}
#endregion
}
}
namespace NeoTraderBot
{
public enum MAType
{
SMA,
EMA,
WMA,
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private _NTB_UserDefinedParameters[] cache_NTB_UserDefinedParameters;
public _NTB_UserDefinedParameters _NTB_UserDefinedParameters(int period, double percBand, bool daytradingMode, DateTime dontTradeOn, DateTime tradingStartAfter, DateTime tradingCloseAt, string msg, Brush plotColor)
{
return _NTB_UserDefinedParameters(Input, period, percBand, daytradingMode, dontTradeOn, tradingStartAfter, tradingCloseAt, msg, plotColor);
}
public _NTB_UserDefinedParameters _NTB_UserDefinedParameters(ISeries input, int period, double percBand, bool daytradingMode, DateTime dontTradeOn, DateTime tradingStartAfter, DateTime tradingCloseAt, string msg, Brush plotColor)
{
if (cache_NTB_UserDefinedParameters != null)
for (int idx = 0; idx < cache_NTB_UserDefinedParameters.Length; idx++)
if (cache_NTB_UserDefinedParameters[idx] != null && cache_NTB_UserDefinedParameters[idx].period == period && cache_NTB_UserDefinedParameters[idx].percBand == percBand && cache_NTB_UserDefinedParameters[idx].daytradingMode == daytradingMode && cache_NTB_UserDefinedParameters[idx].DontTradeOn == dontTradeOn && cache_NTB_UserDefinedParameters[idx].TradingStartAfter == tradingStartAfter && cache_NTB_UserDefinedParameters[idx].TradingCloseAt == tradingCloseAt && cache_NTB_UserDefinedParameters[idx].msg == msg && cache_NTB_UserDefinedParameters[idx].plotColor == plotColor && cache_NTB_UserDefinedParameters[idx].EqualsInput(input))
return cache_NTB_UserDefinedParameters[idx];
return CacheIndicator<_NTB_UserDefinedParameters>(new _NTB_UserDefinedParameters(){ period = period, percBand = percBand, daytradingMode = daytradingMode, DontTradeOn = dontTradeOn, TradingStartAfter = tradingStartAfter, TradingCloseAt = tradingCloseAt, msg = msg, plotColor = plotColor }, input, ref cache_NTB_UserDefinedParameters);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators._NTB_UserDefinedParameters _NTB_UserDefinedParameters(int period, double percBand, bool daytradingMode, DateTime dontTradeOn, DateTime tradingStartAfter, DateTime tradingCloseAt, string msg, Brush plotColor)
{
return indicator._NTB_UserDefinedParameters(Input, period, percBand, daytradingMode, dontTradeOn, tradingStartAfter, tradingCloseAt, msg, plotColor);
}
public Indicators._NTB_UserDefinedParameters _NTB_UserDefinedParameters(ISeries input , int period, double percBand, bool daytradingMode, DateTime dontTradeOn, DateTime tradingStartAfter, DateTime tradingCloseAt, string msg, Brush plotColor)
{
return indicator._NTB_UserDefinedParameters(input, period, percBand, daytradingMode, dontTradeOn, tradingStartAfter, tradingCloseAt, msg, plotColor);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators._NTB_UserDefinedParameters _NTB_UserDefinedParameters(int period, double percBand, bool daytradingMode, DateTime dontTradeOn, DateTime tradingStartAfter, DateTime tradingCloseAt, string msg, Brush plotColor)
{
return indicator._NTB_UserDefinedParameters(Input, period, percBand, daytradingMode, dontTradeOn, tradingStartAfter, tradingCloseAt, msg, plotColor);
}
public Indicators._NTB_UserDefinedParameters _NTB_UserDefinedParameters(ISeries input , int period, double percBand, bool daytradingMode, DateTime dontTradeOn, DateTime tradingStartAfter, DateTime tradingCloseAt, string msg, Brush plotColor)
{
return indicator._NTB_UserDefinedParameters(input, period, percBand, daytradingMode, dontTradeOn, tradingStartAfter, tradingCloseAt, msg, plotColor);
}
}
}
#endregion