Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

How to gather last 4 values of Swing indicator

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

    #16
    Originally posted by NinjaTrader_Jesse View Post
    Hello PaulMohn,

    That may be the lookback period being used, from the code I don't see anything specifically wrong. You may need to debug the situation and experiment to see what changes the result.
    Solution under fixed in previous post.

    Comment


      #17
      I need the value and number of bars ago of the last 5 highs and lows of the swing indicator. I've tried to compile the code mentionned as fixed by PaulMohn in a strategy but without success (it seems it's for NT7), i've then adapted it to NT8 but still I'm unable to compile it. Can anyone help me ?


      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.Indicators;
      using NinjaTrader.NinjaScript.DrawingTools;
      #endregion

      //This namespace holds Strategies in this folder and is required. Do not change it.
      namespace NinjaTrader.NinjaScript.Strategies
      {
      public class swing : Strategy
      {
      private Swing Swing1;
      private int streng;
      private int last1HighBar;
      private int last1LowBar;
      private int last2HighBar;
      private int last2LowBar;
      private int last3HighBar;
      private int last3LowBar;
      private int last4HighBar;
      private int last4LowBar;
      private int last5HighBar;
      private int last5LowBar;
      private double th5swingHighPrice;
      private double th5swingLowPrice ;
      private double th4swingHighPrice;
      private double th4swingLowPrice ;
      private double rd3swingHighPrice ;
      private double rd3swingLowPrice;
      private double nd2swingHighPrice ;
      private double nd2swingLowPrice ;
      private double st1swingHighPrice;
      private double st1swingLowPrice ;
      private double th5swingPrice ;
      private double th4swingPrice;
      private double rd3swingPrice;
      private double nd2swingPrice;
      private double st1swingPrice ;
      private double NaN;


      protected override void OnStateChange()
      {
      if (State == State.SetDefaults)
      {
      Description = @"Enter the description for your new custom Strategy here.";
      Name = "swing";
      Calculate = Calculate.OnBarClose;
      EntriesPerDirection = 1;
      EntryHandling = EntryHandling.AllEntries;
      IsExitOnSessionCloseStrategy = true;
      ExitOnSessionCloseSeconds = 30;
      IsFillLimitOnTouch = false;
      MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
      OrderFillResolution = OrderFillResolution.Standard;
      Slippage = 0;
      StartBehavior = StartBehavior.WaitUntilFlat;
      TimeInForce = TimeInForce.Gtc;
      TraceOrders = false;
      RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
      StopTargetHandling = StopTargetHandling.PerEntryExecution;
      BarsRequiredToTrade = 20;
      // Disable this property for performance gains in Strategy Analyzer optimizations
      // See the Help Guide for additional information
      IsInstantiatedOnEachOptimizationIteration = true;
      streng = 5;
      }

      else if (State == State.Configure)
      {
      }
      else if (State == State.DataLoaded)
      {
      Swing1 = Swing(Close, 5);
      last1HighBar = Swing(streng).SwingHighBar(1,1,200);
      last1LowBar = Swing(streng).SwingLowBar(1,1,200);
      last2HighBar = Swing(streng).SwingHighBar(1,2,200);
      last2LowBar = Swing(streng).SwingLowBar(1,2,200);
      last3HighBar = Swing(streng).SwingHighBar(1,3,200);
      last3LowBar = Swing(streng).SwingLowBar(1,3,200);
      last4HighBar = Swing(streng).SwingHighBar(1,4,200);
      last4LowBar = Swing(streng).SwingLowBar(1,4,200);
      last5HighBar = Swing(streng).SwingHighBar(1,5,200);
      last5LowBar = Swing(streng).SwingLowBar(1,5,200);
      NAN = 1;


      }

      protected override void OnBarUpdate()
      {
      if (BarsInProgress != 0)
      return;

      if (CurrentBars[0] < 3)
      return;
      th5swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,5,200) )];
      th5swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,5,200) )];
      th4swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,4,200) )];
      th4swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,4,200) )];
      rd3swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,3,200) )];
      rd3swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,3,200) )];
      nd2swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,2,200) )];
      nd2swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,2,200) )];
      st1swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,1,200) )];
      st1swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,1,200) )];
      th5swingPrice = ( last3HighBar() < last3LowBar() ) ? rd3swingHighPrice :
      ( last3LowBar() < last3HighBar() ) ? rd3swingLowPrice : NaN;
      th4swingPrice = ( last2HighBar() > last2LowBar() ) ? nd2swingHighPrice :
      ( last2LowBar() > last2HighBar() ) ? nd2swingLowPrice : NaN;
      rd3swingPrice = ( last2HighBar() < last2LowBar() ) ? nd2swingHighPrice :
      ( last2LowBar() < last2HighBar() ) ? nd2swingLowPrice : NaN;
      nd2swingPrice = ( lastHighBar() > lastLowBar() ) ? st1swingHighPrice :
      ( lastLowBar() > lastHighBar() ) ? st1swingLowPrice : NaN;
      st1swingPrice = ( last1HighBar() < last1LowBar() ) ? st1swingHighPrice :
      ( last1LowBar() < last1HighBar() ) ? st1swingLowPrice : NaN;

      Print("Swing(strength).SwingLowBar(1,5,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,5 ,200)) );
      Print("Swing(strength).SwingHighBar(1,5,200): "+Convert.ToString(Swing1(strength).SwingHighB ar(1 ,5,200)) );
      Print("Swing(strength).SwingLowBar(1,4,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,4 ,200)) );
      Print("Swing(strength).SwingHighBar(1,4,200): "+Convert.ToString(Swing1(strength).SwingHighB ar(1 ,4,200) ));
      Print("Swing(strength).SwingLowBar(1,3,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,3 ,200) ));
      Print("Swing(strength).SwingHighBar(1,3,200): "+Convert.ToString(Swing(strength).SwingHighBa r(1, 3,200) ));
      Print("Swing(strength).SwingLowBar(1,2,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,2 ,200) ));
      Print("Swing(strength).SwingHighBar(1,2,200): "+Convert.ToString(Swing1(strength).SwingHighB ar(1 ,2,200) ));
      Print("Swing(strength).SwingLowBar(1,1,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,1 ,200) ));
      Print("Swing(strength).SwingHighBar(1,1,200): "+Convert.ToString(Swing(strength).SwingHighBa r(1, 1,200) ));
      Print("th5swingPrice: " +Convert.ToString(th5swingPrice ));
      Print("th4swingPrice: " +Convert.ToString(th4swingPrice ));
      Print("rd3swingPrice: " +Convert.ToString(rd3swingPrice ));
      Print("nd2swingPrice: " +Convert.ToString(nd2swingPrice ));
      Print("st1swingPrice: " +Convert.ToString(st1swingPrice ));
      Print("th5swingPrice: " +Convert.ToString(th5swingPrice ));
      Print("th4swingPrice: " +Convert.ToString(th4swingPrice ));
      Print("rd3swingPrice: " +Convert.ToString(rd3swingPrice ));
      Print("nd2swingPrice: " +Convert.ToString(nd2swingPrice ));
      Print("st1swingPrice: " +Convert.ToString(st1swingPrice ));
      }
      }
      }

      Comment


        #18
        Hello bluesoul40,

        If you are getting an error we would need to know what error to assist with that. I would suggest just making a new script and use the sample from the help guide as a starting point since we know that compiles. After doing that you can replicate that as many times as you need.

        Join the official NinjaScript Developer Community for comprehensive resources, documentation, and community support. Build custom indicators and automated strategies for the NinjaTrader platforms with our extensive guides and APIs.

        Comment


          #19
          i've updated the strategy as some variables were not declared:




          namespace NinjaTrader.NinjaScript.Strategies
          {
          public class swing : Strategy
          {
          private Swing Swing1;
          private int streng;
          private int last1HighBar;
          private int last1LowBar;
          private int last2HighBar;
          private int last2LowBar;
          private int last3HighBar;
          private int last3LowBar;
          private int last4HighBar;
          private int last4LowBar;
          private int last5HighBar;
          private int last5LowBar;
          private double th5swingHighPrice;
          private double th5swingLowPrice ;
          private double th4swingHighPrice;
          private double th4swingLowPrice ;
          private double rd3swingHighPrice ;
          private double rd3swingLowPrice;
          private double nd2swingHighPrice ;
          private double nd2swingLowPrice ;
          private double st1swingHighPrice;
          private double st1swingLowPrice ;
          private double th5swingPrice ;
          private double th4swingPrice;
          private double rd3swingPrice;
          private double nd2swingPrice;
          private double st1swingPrice ;
          private double NaN;


          protected override void OnStateChange()
          {
          if (State == State.SetDefaults)
          {
          Description = @"Enter the description for your new custom Strategy here.";
          Name = "swing";
          Calculate = Calculate.OnBarClose;
          EntriesPerDirection = 1;
          EntryHandling = EntryHandling.AllEntries;
          IsExitOnSessionCloseStrategy = true;
          ExitOnSessionCloseSeconds = 30;
          IsFillLimitOnTouch = false;
          MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
          OrderFillResolution = OrderFillResolution.Standard;
          Slippage = 0;
          StartBehavior = StartBehavior.WaitUntilFlat;
          TimeInForce = TimeInForce.Gtc;
          TraceOrders = false;
          RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
          StopTargetHandling = StopTargetHandling.PerEntryExecution;
          BarsRequiredToTrade = 20;
          // Disable this property for performance gains in Strategy Analyzer optimizations
          // See the Help Guide for additional information
          IsInstantiatedOnEachOptimizationIteration = true;
          streng = 5;
          NAN = 1;
          th5swingHighPrice = 1;
          th5swingLowPrice = 1;
          th4swingHighPrice = 1;
          th4swingLowPrice = 1;
          rd3swingHighPrice = 1;
          rd3swingLowPrice = 1;
          nd2swingHighPrice = 1;
          nd2swingLowPrice = 1;
          st1swingHighPrice = 1;
          st1swingLowPrice = 1;
          th5swingPrice = 1;
          th4swingPrice = 1;
          rd3swingPrice = 1;
          nd2swingPrice = 1;
          }

          else if (State == State.Configure)
          {
          }
          else if (State == State.DataLoaded)
          {
          Swing1 = Swing(Close, 5);
          last1HighBar = Swing1(streng).SwingHighBar(1,1,200);
          last1LowBar = Swing1(streng).SwingLowBar(1,1,200);
          last2HighBar = Swing1(streng).SwingHighBar(1,2,200);
          last2LowBar = Swing1(streng).SwingLowBar(1,2,200);
          last3HighBar = Swing1(streng).SwingHighBar(1,3,200);
          last3LowBar = Swing1(streng).SwingLowBar(1,3,200);
          last4HighBar = Swing1(streng).SwingHighBar(1,4,200);
          last4LowBar = Swing1(streng).SwingLowBar(1,4,200);
          last5HighBar = Swing1(streng).SwingHighBar(1,5,200);
          last5LowBar = Swing1(streng).SwingLowBar(1,5,200);


          }

          protected override void OnBarUpdate()
          {
          if (BarsInProgress != 0)
          return;

          if (CurrentBars[0] < 3)
          return;
          th5swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,5,200) )];
          th5swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,5,200) )];
          th4swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,4,200) )];
          th4swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,4,200) )];
          rd3swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,3,200) )];
          rd3swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,3,200) )];
          nd2swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,2,200) )];
          nd2swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,2,200) )];
          st1swingHighPrice = High[Math.Max(0, Swing(strength).SwingHighBar(1,1,200) )];
          st1swingLowPrice = Low[Math.Max(0, Swing(strength).SwingLowBar(1,1,200) )];
          th5swingPrice = ( last3HighBar() < last3LowBar() ) ? rd3swingHighPrice :
          ( last3LowBar() < last3HighBar() ) ? rd3swingLowPrice : NaN;
          th4swingPrice = ( last2HighBar() > last2LowBar() ) ? nd2swingHighPrice :
          ( last2LowBar() > last2HighBar() ) ? nd2swingLowPrice : NaN;
          rd3swingPrice = ( last2HighBar() < last2LowBar() ) ? nd2swingHighPrice :
          ( last2LowBar() < last2HighBar() ) ? nd2swingLowPrice : NaN;
          nd2swingPrice = ( lastHighBar() > lastLowBar() ) ? st1swingHighPrice :
          ( lastLowBar() > lastHighBar() ) ? st1swingLowPrice : NaN;
          st1swingPrice = ( last1HighBar() < last1LowBar() ) ? st1swingHighPrice :
          ( last1LowBar() < last1HighBar() ) ? st1swingLowPrice : NaN;

          Print("Swing(strength).SwingLowBar(1,5,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,5 ,200)) );
          Print("Swing(strength).SwingHighBar(1,5,200): "+Convert.ToString(Swing1(strength).SwingHighB ar(1 ,5,200)) );
          Print("Swing(strength).SwingLowBar(1,4,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,4 ,200)) );
          Print("Swing(strength).SwingHighBar(1,4,200): "+Convert.ToString(Swing1(strength).SwingHighB ar(1 ,4,200) ));
          Print("Swing(strength).SwingLowBar(1,3,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,3 ,200) ));
          Print("Swing(strength).SwingHighBar(1,3,200): "+Convert.ToString(Swing(strength).SwingHighBa r(1, 3,200) ));
          Print("Swing(strength).SwingLowBar(1,2,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,2 ,200) ));
          Print("Swing(strength).SwingHighBar(1,2,200): "+Convert.ToString(Swing1(strength).SwingHighB ar(1 ,2,200) ));
          Print("Swing(strength).SwingLowBar(1,1,200): " +Convert.ToString(Swing1(strength).SwingLowBar(1,1 ,200) ));
          Print("Swing(strength).SwingHighBar(1,1,200): "+Convert.ToString(Swing(strength).SwingHighBa r(1, 1,200) ));
          Print("th5swingPrice: " +Convert.ToString(th5swingPrice ));
          Print("th4swingPrice: " +Convert.ToString(th4swingPrice ));
          Print("rd3swingPrice: " +Convert.ToString(rd3swingPrice ));
          Print("nd2swingPrice: " +Convert.ToString(nd2swingPrice ));
          Print("st1swingPrice: " +Convert.ToString(st1swingPrice ));
          Print("th5swingPrice: " +Convert.ToString(th5swingPrice ));
          Print("th4swingPrice: " +Convert.ToString(th4swingPrice ));
          Print("rd3swingPrice: " +Convert.ToString(rd3swingPrice ));
          Print("nd2swingPrice: " +Convert.ToString(nd2swingPrice ));
          Print("st1swingPrice: " +Convert.ToString(st1swingPrice ));
          }
          }
          }

          Attached Files

          Comment


            #20
            Hello bluesoul40,

            The errors you have shown for unexpected character generally come from copying and pasting from other sources. I would still suggest the same thing here to make a new script and then use the help guide sample as a starting point. The file you are using now has some form of incorrect formatting or an incorrect character somewhere in the document.

            Comment


              #21
              Here is the information I was looking for from this post https://forum.ninjatrader.com/forum/...w-values/page2
              It took me a while to get it


              High[Math.Max(0, Swing(5).SwingHighBar(0, 1, 200))] // this is the high price of the most recent swing high
              Swing(5).SwingHighBar(0, 1, 200) // this is the bar number of the most recent swing high​
              Low[Math.Max(0, Swing(5).SwingLowBar(0, 1, 200))] // this is the low price of the most recent swing low
              Last edited by bluesoul40; 04-14-2025, 11:41 AM.

              Comment

              Latest Posts

              Collapse

              Topics Statistics Last Post
              Started by NullPointStrategies, Today, 05:17 AM
              0 responses
              50 views
              0 likes
              Last Post NullPointStrategies  
              Started by argusthome, 03-08-2026, 10:06 AM
              0 responses
              126 views
              0 likes
              Last Post argusthome  
              Started by NabilKhattabi, 03-06-2026, 11:18 AM
              0 responses
              69 views
              0 likes
              Last Post NabilKhattabi  
              Started by Deep42, 03-06-2026, 12:28 AM
              0 responses
              42 views
              0 likes
              Last Post Deep42
              by Deep42
               
              Started by TheRealMorford, 03-05-2026, 06:15 PM
              0 responses
              46 views
              0 likes
              Last Post TheRealMorford  
              Working...
              X