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

Draw only once

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

    Draw only once

    Hi all,

    I have this simple kind of "if":

    protected override void OnBarUpdate()
    {
    // Use this method for calculating your indicator values. Assign a value to each
    // plot below by replacing 'Close[0]' with your own formula.
    Plot0.Set(Close[0]);

    if (CurrentBar < 26)return;
    if (CrossAbove(CCI(14), 5,5)&&XYZ[0]>XYZ[1] )
    {
    ///Do something
    DrawArrowUp("Dot"+ CurrentBar , false, 1,High[0]- 8*TickSize, Color.Gold);
    }

    The problem is that it will draw the arrow below EVERY bar that match the above condition when all what I want ids to draw it only one (first time conditions met)

    Help to fix the code will be greatly appreciated.

    #2
    Hello Tzachi,

    Thanks for your inquiry.

    You can accomplish such a task by creating a doOnce bool and including that with your if statement.

    I've attached a hypothetical example below:

    Code:
    private bool doOnce = true;
    
    protected override void OnBarUpdate()
    {
    	if(VariableA > VariableB && doOnce == true)
    	{
    		// Do something
    		doOnce = false; // Set to false so we don't do it again.
    	}
    	
    	if(SomeConditionToReset)
    	{
    		doOnce = true; // Reset the doOnce bool when we want to allow it to trigger again
    	}
    }
    Our publicly available Basic Programming Syntax documentation should provide enough reference for this task: https://ninjatrader.com/support/help...sic_syntax.htm

    Please let me know if you have any questions.
    Last edited by NinjaTrader_Jim; 11-27-2017, 01:47 PM.
    JimNinjaTrader Customer Service

    Comment


      #3
      Many thanks for your quick reply.

      When I added "private doOnce = true;"

      and the condition into the If... I get an error below:

      Invalid token '=' in class, struct, or interface member declaration

      Comment


        #4
        Oops!

        I forgot to include the type with the declaration.

        Should be: private bool doOnce = true;
        JimNinjaTrader Customer Service

        Comment


          #5
          Thank you.

          Now no error but when have:

          if (XYZ [0] > XYZ[1] && doOnce == true)
          {

          DrawArrowUp("Dot"+ CurrentBar , false, 1,High[0]- 8*TickSize, Color.Gold);
          doOnce = false;
          }
          I get no arrows at all.
          Last edited by Tzachi; 11-27-2017, 02:05 PM.

          Comment


            #6
            Hello Tzachi,

            Please use Print() statements to monitor your logic as it executes. Likely, the arrow drew on the first time the condition became true, and since the bool is no longer set to true, the arrow never draws again.

            You will want to create Print statements that tell you the values of the variables you use in your if statement before the if statement is reached so you can see how it is evaluated.

            I've included a forum post for more information on debugging your code:

            Debugging - https://ninjatrader.com/support/foru...ead.php?t=3418

            Please let us know if we can be of further assistance.
            JimNinjaTrader Customer Service

            Comment


              #7
              Via Print method I found out that it did print the arrow up one time, (like 20 days ago), the first time when conditions agreed upon as it should do - but never again.

              Any Idea why it was not resetting to look for the conditions later on?

              Comment


                #8
                You need to create a condition that resets the doOnce bool variable back to true.

                Code:
                if(SomeConditionToReset)
                {
                	doOnce = true; // Reset the doOnce bool when we want to allow it to trigger again
                }
                JimNinjaTrader Customer Service

                Comment


                  #9
                  BEAUTIFUL

                  Works as I wished for.

                  Many thanks.

                  Comment

                  Latest Posts

                  Collapse

                  Topics Statistics Last Post
                  Started by xiinteractive, 04-09-2024, 08:08 AM
                  3 responses
                  11 views
                  0 likes
                  Last Post NinjaTrader_Erick  
                  Started by Johnny Santiago, 10-11-2019, 09:21 AM
                  95 responses
                  6,193 views
                  0 likes
                  Last Post xiinteractive  
                  Started by Irukandji, Today, 09:34 AM
                  1 response
                  3 views
                  0 likes
                  Last Post NinjaTrader_Clayton  
                  Started by RubenCazorla, Today, 09:07 AM
                  1 response
                  6 views
                  0 likes
                  Last Post RubenCazorla  
                  Started by TraderBCL, Today, 04:38 AM
                  3 responses
                  26 views
                  0 likes
                  Last Post NinjaTrader_Jesse  
                  Working...
                  X