Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

Partner 728x90

Collapse

Stochastic K & D slope color change

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

    Stochastic K & D slope color change

    Hello. Need some help again. Trying to add slope color change option for stochastic periodD and periodK. Tried to copy someone's indicator and add changes. Only to get tons of errors. Then tried to just add same thing to NT8 stochastic. And I got the same result. Can some one help please. Here's what I did. Please let me know what I need to change or is there easier option. Can't export the script due to coding errors. and they seem to start around the line where I try to add rising and falling lines.

    // Plots PeriodD color when rising or falling
    if (IsRising(D)) <<<<------ I get errors starting at this line
    {
    PlotBrushes[0][0] = DUp;
    }
    else if (IsFalling(D))
    {
    PlotBrushes[0][0] = DDown;

    // Plots PeriodK color when rising or falling
    if (IsRising(K))
    {
    PlotBrushes[1][0] = KUp;
    }
    else if (IsFalling(K))
    {
    PlotBrushes[1] = Kdown;
    }

    Thank you.


    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;
    #endregion
    
    //This namespace holds Indicators in this folder and is required. Do not change it. 
    namespace NinjaTrader.NinjaScript.Indicators
    {
    	public class StochasticUpDown : Indicator
    	{
    		private Series<double>		den;
    		private Series<double>		fastK;
    		private MIN					min;
    		private MAX					max;
    		private Series<double>		nom;
    		private SMA					smaFastK;
    		private SMA					smaK;
    
    		protected override void OnStateChange()
    		{
    			if (State == State.SetDefaults)
    			{
    				Description					= NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionStochastics;
    				Name						= NinjaTrader.Custom.Resource.NinjaScriptIndicatorNameStochastics;
    				IsSuspendedWhileInactive	= true;
    				PeriodD						= 7;
    				PeriodK						= 14;
    				Smooth						= 3;
    
    				AddPlot(Brushes.DodgerBlue,		NinjaTrader.Custom.Resource.StochasticsD);
    				AddPlot(Brushes.Goldenrod,		NinjaTrader.Custom.Resource.StochasticsK);
                    AddPlot(Brushes.Violet, "DUp");
    				AddPlot(Brushes.Turquoise, "DDown");
    				AddPlot(Brushes.LightGreen, "KUp");
    				AddPlot(Brushes.Red, "KDown");
    				AddLine(Brushes.Red,	20,	NinjaTrader.Custom.Resource.NinjaScriptIndicatorLower);
    				AddLine(Brushes.Green,	80,	NinjaTrader.Custom.Resource.NinjaScriptIndicatorUpper);
    				AddLine(Brushes.Black, 45, Plotstyle.Dot, "NLower");
    				AddLine(Brushes.Black, 55, Plotstyle.Dot, "NUpper");
    			}
    			else if (State == State.DataLoaded)
    			{
    				den			= new Series<double>(this);
    				nom			= new Series<double>(this);
    				fastK		= new Series<double>(this);
    				min			= MIN(Low, PeriodK);
    				max			= MAX(High, PeriodK);
    				smaFastK	= SMA(fastK, Smooth);
    				smaK		= SMA(K, PeriodD);
    			}
    		}
    
    		protected override void OnBarUpdate()
    		{
    			double min0 = min[0];
    			nom[0]		= Close[0] - min0;
    			den[0]		= max[0] - min0;
    
    			if (den[0].ApproxCompare(0) == 0)
    				fastK[0] = CurrentBar == 0 ? 50 : fastK[1];
    			else
    				fastK[0] = Math.Min(100, Math.Max(0, 100 * nom[0] / den[0]));
    
    			// Slow %K == Fast %D
    			K[0] = smaFastK[0];
    			D[0] = smaK[0];
    		}
    		
    		// Plots PeriodD color when rising or falling
    			if (IsRising(D))
    			{
    				PlotBrushes[0][0] = DUp;
    			}
    			else if (IsFalling(D))
    			{
    				PlotBrushes[0][0] = DDown;
    				
    				// Plots PeriodK color when rising or falling
    			if (IsRising(K))
    			{
    				PlotBrushes[1][0] = KUp;
    			}
    			else if (IsFalling(K))
    			{
    				PlotBrushes[1] = Kdown;
    			}
    		
    
    		#region Properties
    		[Browsable(false)]
    		[XmlIgnore()]
    		public Series<double> D
    		{
    			get { return Values[0]; }
    		}
    
    		[Browsable(false)]
    		[XmlIgnore()]
    		public Series<double> K
    		{
    			get { return Values[1]; }
    		}
    		[Browsable(false)]
    		[XmlIgnore]
    		public Series<double> DUp
    		{
    			get { return Values[2]; }
    		}
    
    		[Browsable(false)]
    		[XmlIgnore]
    		public Series<double> DDown
    		{
    			get { return Values[3]; }
    		}
    
    		[Browsable(false)]
    		[XmlIgnore]
    		public Series<double> KUp
    		{
    			get { return Values[4]; }
    		}
    
    		[Browsable(false)]
    		[XmlIgnore]
    		public Series<double> KDown
    		{
    			get { return Values[5]; }
    		}
    
    
    		[Range(1, int.MaxValue), NinjaScriptProperty]
    		[Display(ResourceType = typeof(Custom.Resource), Name = "PeriodD", GroupName = "NinjaScriptParameters", Order = 0)]
    		public int PeriodD
    		{ get; set; }
    
    		[Range(1, int.MaxValue), NinjaScriptProperty]
    		[Display(ResourceType = typeof(Custom.Resource), Name = "PeriodK", GroupName = "NinjaScriptParameters", Order = 1)]
    		public int PeriodK
    		{ get; set; }
    
    		[Range(1, int.MaxValue), NinjaScriptProperty]
    		[Display(ResourceType = typeof(Custom.Resource), Name = "Smooth", GroupName = "NinjaScriptParameters", Order = 2)]
    		public int Smooth
    		{ get; set; }
    		#endregion
    	}
    }
    
    #region NinjaScript generated code. Neither change nor remove.
    
    namespace NinjaTrader.NinjaScript.Indicators
    {
    	public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
    	{
    		private StochasticUpDown[] cacheStochasticUpDown;
    		public StochasticUpDown StochasticUpDown(int periodD, int periodK, int smooth)
    		{
    			return StochasticUpDown(Input, periodD, periodK, smooth);
    		}
    
    		public StochasticUpDown StochasticUpDown(ISeries<double> input, int periodD, int periodK, int smooth)
    		{
    			if (cacheStochasticUpDown != null)
    				for (int idx = 0; idx < cacheStochasticUpDown.Length; idx++)
    					if (cacheStochasticUpDown[idx] != null && cacheStochasticUpDown[idx].PeriodD == periodD && cacheStochasticUpDown[idx].PeriodK == periodK && cacheStochasticUpDown[idx].Smooth == smooth && cacheStochasticUpDown[idx].EqualsInput(input))
    						return cacheStochasticUpDown[idx];
    			return CacheIndicator<StochasticUpDown>(new StochasticUpDown(){ PeriodD = periodD, PeriodK = periodK, Smooth = smooth }, input, ref cacheStochasticUpDown);
    		}
    	}
    }
    
    namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
    {
    	public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
    	{
    		public Indicators.StochasticUpDown StochasticUpDown(int periodD, int periodK, int smooth)
    		{
    			return indicator.StochasticUpDown(Input, periodD, periodK, smooth);
    		}
    
    		public Indicators.StochasticUpDown StochasticUpDown(ISeries<double> input , int periodD, int periodK, int smooth)
    		{
    			return indicator.StochasticUpDown(input, periodD, periodK, smooth);
    		}
    	}
    }
    
    namespace NinjaTrader.NinjaScript.Strategies
    {
    	public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
    	{
    		public Indicators.StochasticUpDown StochasticUpDown(int periodD, int periodK, int smooth)
    		{
    			return indicator.StochasticUpDown(Input, periodD, periodK, smooth);
    		}
    
    		public Indicators.StochasticUpDown StochasticUpDown(ISeries<double> input , int periodD, int periodK, int smooth)
    		{
    			return indicator.StochasticUpDown(input, periodD, periodK, smooth);
    		}
    	}
    }
    
    #endregion

    #2
    Hello Peter79,

    Thanks for your post.

    You have defined Kup, Dup, Kdown and Ddown as plots and then are trying to assign the plots to the exiting plots and this will not work. I think you want to really create these as brushes instead. For example, at the top of the indicator you will see a list of "private" variable definitions, in that area you could add: private Brush Kup = Brushes.LightGreen; and so on for the other 3 brushes. You would also need to remove the 4 added plots as well as the added plot properties in #Region properties.

    TheAddLine(0 statements are incorrect as they reference a "plotStyle" which cannot be used in a line. Instead you would need to use a DashStyleHelper. Here is an example: AddLine(new Stroke(Brushes.Black, DashStyleHelper.Dot, 1, 100), 45, "NLower");
    References:



    Starting with the first if(IsRising(D)) all of the code you added is outside of the OnBarUpdate() and needs to be moving within the OnBarUpdate() as defined by the OnBarUpdates opening and closing braces { } I suggest moving that section of your added code above the } on line 87.

    There are also some syntax errors, for example, where you are referring to KDown and Kdown which would be two different things and will generate errors such as the name "KDown" does not exist in the current context which is usually a sign of syntax type errors.
    Paul H.NinjaTrader Customer Service

    Comment


      #3
      Thank you Paul. That worked great.

      Comment


        #4
        I've been trying to do the same thing. What did you change for it to work?

        Comment


          #5
          Here's the whole thing, as it would be too hard for me to explain what I changed. I will also try to upload it to indicators. But I've never done it. I also have extra lines in the middle at 45 and 55. You can just remove them from the code, make them transparent or change to whatever you want.

          AddLine(Brushes.Black, 45, "NLower"); <<<===This one
          AddLine(Brushes.Black, 55, "NUpper"); <<<===And that one

          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;
          #endregion
          
          //This namespace holds Indicators in this folder and is required. Do not change it. 
          namespace NinjaTrader.NinjaScript.Indicators
          {
          	public class StochasticUpDown : Indicator
          	{
          		private Series<double>		den;
          		private Series<double>		fastK;
          		private MIN					min;
          		private MAX					max;
          		private Series<double>		nom;
          		private SMA					smaFastK;
          		private SMA					smaK;
          
          		protected override void OnStateChange()
          		{
          			if (State == State.SetDefaults)
          			{
          				Description					= @"Colors PeriodD and PeriodK plot when rising or falling";
          				Name						= "StochasticUpDown";
          				Calculate					= Calculate.OnPriceChange;
          				IsSuspendedWhileInactive	= true;
          				PeriodD						= 7;
          				PeriodK						= 14;
          				Smooth						= 3;
          
          				AddPlot(Brushes.DodgerBlue,		NinjaTrader.Custom.Resource.StochasticsD);
          				AddPlot(Brushes.Goldenrod,		NinjaTrader.Custom.Resource.StochasticsK);
                          DUp = Brushes.Green;
          				DDown = Brushes.Red;
          				KUp = Brushes.Magenta;
          				KDown = Brushes.Black;
          				AddLine(Brushes.Red,	20,	NinjaTrader.Custom.Resource.NinjaScriptIndicatorLower);
          				AddLine(Brushes.Green,	80,	NinjaTrader.Custom.Resource.NinjaScriptIndicatorUpper);
          				AddLine(Brushes.Black, 45, "NLower");
          				AddLine(Brushes.Black, 55, "NUpper");
          			}
          			else if (State == State.DataLoaded)
          			{
          				den			= new Series<double>(this);
          				nom			= new Series<double>(this);
          				fastK		= new Series<double>(this);
          				min			= MIN(Low, PeriodK);
          				max			= MAX(High, PeriodK);
          				smaFastK	= SMA(fastK, Smooth);
          				smaK		= SMA(K, PeriodD);
          			}
          		}
          
          		protected override void OnBarUpdate()
          		{
          			{
          			double min0 = min[0];
          			nom[0]		= Close[0] - min0;
          			den[0]		= max[0] - min0;
          
          			if (den[0].ApproxCompare(0) == 0)
          				fastK[0] = CurrentBar == 0 ? 50 : fastK[1];
          			else
          				fastK[0] = Math.Min(100, Math.Max(0, 100 * nom[0] / den[0]));
          
          			// Slow %K == Fast %D
          			K[0] = smaFastK[0];
          			D[0] = smaK[0];
          			}
          		
          		// Plots PeriodD color when rising or falling
          			if (IsRising(D))
          			{
          				PlotBrushes[0][0] = DUp;
          			}
          			else if (IsFalling(D))
          			{
          				PlotBrushes[0][0] = DDown;
          			}	
          				// Plots PeriodK color when rising or falling
          			if (IsRising(K))
          			{
          				PlotBrushes[1][0] = KUp;
          			}
          			else if (IsFalling(K))
          			{
          				PlotBrushes[1][0] = KDown;
          			}
          			
          		}
          
          		#region Properties
          		[Browsable(false)]
          		[XmlIgnore()]
          		public Series<double> D
          		{
          			get { return Values[0]; }
          		}
          
          		[Browsable(false)]
          		[XmlIgnore()]
          		public Series<double> K
          		{
          			get { return Values[1]; }
          		}
          		
          		
          		[Range(1, int.MaxValue), NinjaScriptProperty]
          		[Display(ResourceType = typeof(Custom.Resource), Name = "PeriodD", GroupName = "NinjaScriptParameters", Order = 0)]
          		public int PeriodD
          		{ get; set; }
          
          		[Range(1, int.MaxValue), NinjaScriptProperty]
          		[Display(ResourceType = typeof(Custom.Resource), Name = "PeriodK", GroupName = "NinjaScriptParameters", Order = 1)]
          		public int PeriodK
          		{ get; set; }
          
          		[Range(1, int.MaxValue), NinjaScriptProperty]
          		[Display(ResourceType = typeof(Custom.Resource), Name = "Smooth", GroupName = "NinjaScriptParameters", Order = 2)]
          		public int Smooth
          		{ get; set; }
          		
          		[NinjaScriptProperty]
          		[XmlIgnore]
          		[Display(Name = "DUp", Description = "Color for PeriodD when rising", Order = 3, GroupName = "Parameters")]
          		public Brush DUp
          		{ get; set; }
          
          		[Browsable(false)]
          		public string DUpSerializable
          		{
          			get { return Serialize.BrushToString(DUp); }
          			set { DUp = Serialize.StringToBrush(value); }
          		}
          
          		[NinjaScriptProperty]
          		[XmlIgnore]
          		[Display(Name = "DDown", Description = "Color for PeriodD when falling", Order = 4, GroupName = "Parameters")]
          		public Brush DDown
          		{ get; set; }
          
          		[Browsable(false)]
          		public string DDownSerializable
          		{
          			get { return Serialize.BrushToString(DDown); }
          			set { DDown = Serialize.StringToBrush(value); }
          		}
          		
          		[NinjaScriptProperty]
          		[XmlIgnore]
          		[Display(Name = "KUp", Description = "Color for PeriodK when falling", Order = 5, GroupName = "Parameters")]
          		public Brush KUp
          		{ get; set; }
          
          		[Browsable(false)]
          		public string KUpSerializable
          		{
          			get { return Serialize.BrushToString(KUp); }
          			set { KUp = Serialize.StringToBrush(value); }
          		}
          		
          		[NinjaScriptProperty]
          		[XmlIgnore]
          		[Display(Name = "KDown", Description = "Color for PeriodK when falling", Order = 6, GroupName = "Parameters")]
          		public Brush KDown
          		{ get; set; }
          
          		[Browsable(false)]
          		public string KDownSerializable
          		{
          			get { return Serialize.BrushToString(KDown); }
          			set { KDown = Serialize.StringToBrush(value); }
          		}
          		#endregion
          	}
          }
          
          #region NinjaScript generated code. Neither change nor remove.
          
          namespace NinjaTrader.NinjaScript.Indicators
          {
          	public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
          	{
          		private StochasticUpDown[] cacheStochasticUpDown;
          		public StochasticUpDown StochasticUpDown(int periodD, int periodK, int smooth, Brush dUp, Brush dDown, Brush kUp, Brush kDown)
          		{
          			return StochasticUpDown(Input, periodD, periodK, smooth, dUp, dDown, kUp, kDown);
          		}
          
          		public StochasticUpDown StochasticUpDown(ISeries<double> input, int periodD, int periodK, int smooth, Brush dUp, Brush dDown, Brush kUp, Brush kDown)
          		{
          			if (cacheStochasticUpDown != null)
          				for (int idx = 0; idx < cacheStochasticUpDown.Length; idx++)
          					if (cacheStochasticUpDown[idx] != null && cacheStochasticUpDown[idx].PeriodD == periodD && cacheStochasticUpDown[idx].PeriodK == periodK && cacheStochasticUpDown[idx].Smooth == smooth && cacheStochasticUpDown[idx].DUp == dUp && cacheStochasticUpDown[idx].DDown == dDown && cacheStochasticUpDown[idx].KUp == kUp && cacheStochasticUpDown[idx].KDown == kDown && cacheStochasticUpDown[idx].EqualsInput(input))
          						return cacheStochasticUpDown[idx];
          			return CacheIndicator<StochasticUpDown>(new StochasticUpDown(){ PeriodD = periodD, PeriodK = periodK, Smooth = smooth, DUp = dUp, DDown = dDown, KUp = kUp, KDown = kDown }, input, ref cacheStochasticUpDown);
          		}
          	}
          }
          
          namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
          {
          	public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
          	{
          		public Indicators.StochasticUpDown StochasticUpDown(int periodD, int periodK, int smooth, Brush dUp, Brush dDown, Brush kUp, Brush kDown)
          		{
          			return indicator.StochasticUpDown(Input, periodD, periodK, smooth, dUp, dDown, kUp, kDown);
          		}
          
          		public Indicators.StochasticUpDown StochasticUpDown(ISeries<double> input , int periodD, int periodK, int smooth, Brush dUp, Brush dDown, Brush kUp, Brush kDown)
          		{
          			return indicator.StochasticUpDown(input, periodD, periodK, smooth, dUp, dDown, kUp, kDown);
          		}
          	}
          }
          
          namespace NinjaTrader.NinjaScript.Strategies
          {
          	public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
          	{
          		public Indicators.StochasticUpDown StochasticUpDown(int periodD, int periodK, int smooth, Brush dUp, Brush dDown, Brush kUp, Brush kDown)
          		{
          			return indicator.StochasticUpDown(Input, periodD, periodK, smooth, dUp, dDown, kUp, kDown);
          		}
          
          		public Indicators.StochasticUpDown StochasticUpDown(ISeries<double> input , int periodD, int periodK, int smooth, Brush dUp, Brush dDown, Brush kUp, Brush kDown)
          		{
          			return indicator.StochasticUpDown(input, periodD, periodK, smooth, dUp, dDown, kUp, kDown);
          		}
          	}
          }
          
          #endregion

          Comment


            #6
            Just uploaded it to indicators. StochasticUpDown

            Comment


              #7
              Hi, is the indicator above available anywhere? or can someone advise if there's any other stochastic indicator that changes color when it starts turning? I'm desperately looking for something like that for my strategy which worked well on pro real time. any help is much appreciated

              Comment


                #8
                Hello marimari,

                Thanks for your post.

                I do not know if the indicator was posted or not but you can certainly check out any of the custom stochastic indicators in the User Apps section. For your convenience, here is a link to the page: https://ninjatraderecosystem.com/use...8&fwp_paged=12 Please note: The NinjaTrader Ecosystem website is for educational and informational purposes only and should not be considered a solicitation to buy or sell a futures contract or make any other type of investment decision. The add-ons listed on this website are not to be considered a recommendation and it is the reader's responsibility to evaluate any product, service, or company. NinjaTrader Ecosystem LLC is not responsible for the accuracy or content of any product, service or company linked to on this website.
                Paul H.NinjaTrader Customer Service

                Comment


                  #9
                  Hi marimari, what version of NT do you need it for? I did mine for NT7, but I have one for NT8 in my files as well.

                  Comment


                    #10
                    Originally posted by Peter79 View Post
                    Hi marimari, what version of NT do you need it for? I did mine for NT7, but I have one for NT8 in my files as well.
                    Hi Peter,
                    I'm using NT7. Appreciate your help. Thank you

                    Comment


                      #11
                      Hi Peter,
                      Appreciate if you could share the indicator you have. Thank you

                      Comment


                        #12
                        Sorry didn't get notification about new post till this morning. The stochastic color I downloaded from somewhere, might have even been from this forum, and I think it colors the lines once they cross 80 and 20 lines. The stochasticUpDown is the one I did and it colors both D and K based on slope. I'm not 100% sure as I don't use NT anymore. I switched to Sierra Chart almost a year ago. If there's any problems, let me know.

                        Also the code I posted in post#5 is the final working version. So you can also create the indicator in NT just by coping from post#5 and past.
                        Attached Files

                        Comment


                          #13
                          Originally posted by Peter79 View Post
                          Sorry didn't get notification about new post till this morning. The stochastic color I downloaded from somewhere, might have even been from this forum, and I think it colors the lines once they cross 80 and 20 lines. The stochasticUpDown is the one I did and it colors both D and K based on slope. I'm not 100% sure as I don't use NT anymore. I switched to Sierra Chart almost a year ago. If there's any problems, let me know.

                          Also the code I posted in post#5 is the final working version. So you can also create the indicator in NT just by coping from post#5 and past.
                          Hi Peter,

                          This is very close to what I'm looking for. However it would be really great if in addition to coloring the D line, it can also color the slope of the K line up and down differently.
                          Last edited by marimari; 09-11-2019, 07:05 PM.

                          Comment


                            #14
                            Do we have an updated Version to these indicators? as they are not compatible with the latest Versions NT8 8.0.20.0

                            Comment


                              #15
                              Hello borge,

                              Thank you for your reply.

                              As these are user-created indicators, I would suggest contacting the original poster, Peter79, via private message to see if they have updated. If not, I would be happy to supply you with information on NinjaScript consultants who could assist you in updating the code.

                              Please let us know if we may be of further assistance to you.
                              Kate W.NinjaTrader Customer Service

                              Comment

                              Latest Posts

                              Collapse

                              Topics Statistics Last Post
                              Started by Aviram Y, Today, 05:29 AM
                              0 responses
                              2 views
                              0 likes
                              Last Post Aviram Y  
                              Started by quantismo, 04-17-2024, 05:13 PM
                              3 responses
                              25 views
                              0 likes
                              Last Post NinjaTrader_Gaby  
                              Started by ScottWalsh, 04-16-2024, 04:29 PM
                              7 responses
                              34 views
                              0 likes
                              Last Post NinjaTrader_Gaby  
                              Started by cls71, Today, 04:45 AM
                              0 responses
                              6 views
                              0 likes
                              Last Post cls71
                              by cls71
                               
                              Started by mjairg, 07-20-2023, 11:57 PM
                              3 responses
                              216 views
                              1 like
                              Last Post PaulMohn  
                              Working...
                              X