Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Indicator Wrapping problem

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Indicator Wrapping problem

    Hi,

    My strategy uses helper classes, and some of these classes use indicators. Since I instantiate classes from the strategy, I cant pass an indicator reference.. So I decided to create a wrapper of an indicator, but the wrapper cant seem to receive oneachtick events...

    Its easier for me just to put a code example...

    Here is a class that wraps the EMA

    Code:
    	#region Khaos_Virtual_Indicator_EMA
    	public class Khaos_Virtual_Indicator_EMA
    	{
    		
    		private NinjaScriptBase NinjaScriptBase;
    		private Indicator Indicator;
    		private int Period;
    		
    
    		public Series<double> Value { get; private set; }
    		
    		
    		
    		public Khaos_Virtual_Indicator_EMA(NinjaScriptBase NinjaScriptBase, int Period)
    		{
    			this.NinjaScriptBase = NinjaScriptBase;
    			this.Period = Period;
    			Value = new Series<double>(NinjaScriptBase);
    			Indicator = new Indicator();
    			Indicator.Calculate = Calculate.OnEachTick;
    		}
    		
    		
    		public Series<double> TickTock(ISeries <double> Input)
    		{
    			
    			
    			try
    			{
    			
    		Value[0] = Indicator.EMA(Input,this.Period)[0];
    				
    				
    				
    			return Value;
    				
    			}
    			
    			catch (Exception e)
    			{
    				NinjaScriptBase.Log ("Cought Error Khaos Moving Average = " + e.ToString(), NinjaTrader.Cbi.LogLevel.Warning);
    				NinjaScriptBase.Print(NinjaScriptBase.Time[0] +  " " + e.ToString());
    				return Value;
    			}				
    		}
    	}
    	#endregion

    And for illustration purposes, I created an indicator that will utilize this class.. here...

    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 Khaos_Elements;
    #endregion
    
    //This namespace holds Indicators in this folder and is required. Do not change it. 
    namespace NinjaTrader.NinjaScript.Indicators.KhaosIndicators
    {
    	public class Test : Indicator
    	{
    
    		private Khaos_Virtual_Indicator_EMA Khaos_Virtual_Indicator_EMA;	
    		protected override void OnStateChange()
    		{
    			if (State == State.SetDefaults)
    			{
    				Description									= @"test";
    				Name										= "Test";
    				Calculate									= Calculate.OnEachTick;
    				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					= false;
    				AddPlot(Brushes.Orange, "Signal");
    
    			}
    			else if (State == State.Configure)
    			{
    
    				Khaos_Virtual_Indicator_EMA = new Khaos_Virtual_Indicator_EMA((NinjaScriptBase)this,2);
    			}
    		}
    
    		protected override void OnBarUpdate()
    		{
    			if (CurrentBar < 15) {return;}
    			Khaos_Virtual_Indicator_EMA.TickTock(Close);
    			Signal[0] = Khaos_Virtual_Indicator_EMA.Value[0];
    
    		}
    
    		#region Properties
    
    		[Browsable(false)]
    		[XmlIgnore]
    		public Series<double> Signal
    		{
    			get { return Values[0]; }
    		}
    
    		#endregion
    
    	}
    }
    
    #region NinjaScript generated code. Neither change nor remove.
    
    namespace NinjaTrader.NinjaScript.Indicators
    {
    	public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
    	{
    		private KhaosIndicators.Test[] cacheTest;
    		public KhaosIndicators.Test Test()
    		{
    			return Test(Input);
    		}
    
    		public KhaosIndicators.Test Test(ISeries<double> input)
    		{
    			if (cacheTest != null)
    				for (int idx = 0; idx < cacheTest.Length; idx++)
    					if (cacheTest[idx] != null &&  cacheTest[idx].EqualsInput(input))
    						return cacheTest[idx];
    			return CacheIndicator<KhaosIndicators.Test>(new KhaosIndicators.Test(), input, ref cacheTest);
    		}
    	}
    }
    
    namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
    {
    	public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
    	{
    		public Indicators.KhaosIndicators.Test Test()
    		{
    			return indicator.Test(Input);
    		}
    
    		public Indicators.KhaosIndicators.Test Test(ISeries<double> input )
    		{
    			return indicator.Test(input);
    		}
    	}
    }
    
    namespace NinjaTrader.NinjaScript.Strategies
    {
    	public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
    	{
    		public Indicators.KhaosIndicators.Test Test()
    		{
    			return indicator.Test(Input);
    		}
    
    		public Indicators.KhaosIndicators.Test Test(ISeries<double> input )
    		{
    			return indicator.Test(input);
    		}
    	}
    }
    
    #endregion
    So strangely, I wont get an update on the indicator for each tick...

    Any help would be appreciated. Thanks in advance.

    #2
    Hello KhaosTrader,

    As this thread is similar to another thread that was created,

    Support for the development of custom automated trading strategies using NinjaScript.


    I will be sending my reply to both threads there.
    Jessica P.NinjaTrader Customer Service

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by NullPointStrategies, Yesterday, 05:17 AM
    0 responses
    58 views
    0 likes
    Last Post NullPointStrategies  
    Started by argusthome, 03-08-2026, 10:06 AM
    0 responses
    133 views
    0 likes
    Last Post argusthome  
    Started by NabilKhattabi, 03-06-2026, 11:18 AM
    0 responses
    73 views
    0 likes
    Last Post NabilKhattabi  
    Started by Deep42, 03-06-2026, 12:28 AM
    0 responses
    45 views
    0 likes
    Last Post Deep42
    by Deep42
     
    Started by TheRealMorford, 03-05-2026, 06:15 PM
    0 responses
    50 views
    0 likes
    Last Post TheRealMorford  
    Working...
    X