Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Strategy Debugging, Entry Time, Max losers, profit target check

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

    Strategy Debugging, Entry Time, Max losers, profit target check

    I am trying to verify my strategy is executing all requests. It is also not following my set trading time, it is trading all hours. Can someone please verify the below code looks correct. It is running and generating results, just not running at set time periods. I want to check that the MaxConsecLoser and profit targets are working correctly. I know you use a print command but I'm a little unsure on how to code it & interpret results. Thanks

    protected override void OnBarUpdate()
    {
    if ((ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))
    && (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
    && (Position.MarketPosition != MarketPosition.Flat)
    && (Performance.AllTrades.TradesPerformance.MaxConsec Loser < MaxLosers)
    )
    {
    priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit - priorTradesCumProfit;
    }
    // At the start of a new session
    if (Bars.FirstBarOfSession)
    {
    // Store the strategy's prior cumulated realized profit and number of trades
    priorTradesCount = Performance.AllTrades.Count;
    priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit;

    /*
    NOTE:
    Using .AllTrades will include both historical virtual trades
    as well as real-time trades.
    If you want to only count profits from real-time trades
    please use .RealtimeTrades.
    */
    }

    if (
    // ... we have made more than $PrftGoal profit...
    (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
    )
    {
    return;
    }
    // Condition set 1

    #2
    Hello TOOLMachine462,

    While I have not yet tested your code, I noticed your first condition block contains ambiguous logic. Where you have

    Code:
               	[FONT=Courier New]if ((ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))  
    				&& (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
    				&& (Position.MarketPosition != MarketPosition.Flat)
    				&& (Performance.AllTrades.TradesPerformance.MaxConsec  Loser < MaxLosers)
    				)[/FONT]
    I am going to replace everything conditional with pseudo-code to demonstrate what I mean. Now it just so happens that the part of your code I am pointing out here works, but there are two possible ways to interpret this, and if you add much more logic, it would then be impossible to predict what you mean and thus impossible to predict what your code will do.

    This is probably what you meant,

    Code:
               	[FONT=Courier New]if (
           (time range 1 || time range 2[/FONT][FONT=Courier New][FONT=Courier New])
    [/FONT]    				&& (profit target met)
        				&& (we are in a flat position)
        				&& (we haven't exceeded our loser limit)
        				)
    {
      stop processing immediately;
    }
    [/FONT]
    However your compiler could have interpreted it like this, because of the way a logical or works,

    Code:
               	[FONT=Courier New]if (
           (time range 1)
        || (
               (time range 2[/FONT][FONT=Courier New][FONT=Courier New])
    [/FONT]        				&& (profit target met)
            				&& (we are in a flat position)
            				&& (we haven't exceeded our loser limit)
            )
        				)
    {
      stop processing immediately;
    }
    [/FONT]
    So I would recommend, to prevent your code from breaking in the future, that you re-write it the first way, which looks like this :

    Code:
    [FONT=Courier New]if ( [B]([/B] (ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0)) [B])[/B]  
    				&& (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
    				&& (Position.MarketPosition != MarketPosition.Flat)
    				&& (Performance.AllTrades.TradesPerformance.MaxConsec  Loser < MaxLosers)
    				)[/FONT]
    So if we re-write it like that, that makes it easy to point out the second thing I noticed. This code,

    Code:
    [FONT=Courier New]   (ToTime(Time[0]) >= ToTime(8, 30, 0))
    || (ToTime(Time[0]) < ToTime(14, 45, 0))[/FONT]
    Won't do what you want it to. This is because every possible time of day is covered. I will make a short table to demonstrate what I mean :

    • If it's before 8:30 in the morning, it's also before 14:45 in the afternoon, so your second condition is true
    • If it's 8:30 exactly, both your conditions are true
    • If it's between 8:30 and 14:45, both your conditions are true
    • If it's 14:45 or later, it's also after 8:30, so your first condition is true

    Therefore, this block of code is always true no matter what. I believe, instead, you wanted to restrict trading to 8:30. You can do that in pseudo code like this,


    Code:
    [FONT=Courier New]if (it's not between 08:30 and 14:45)[/FONT]
    [FONT=Courier New]return;[/FONT]
    [FONT=Arial][/FONT]


    We can replace "it's not" by "!" and the rest with a conditional to give us

    Code:
    [FONT=Courier New]if [B]( ! ([/B] (ToTime(Time[0]) >= ToTime(8, 30, 0)) || (ToTime(Time[0]) < ToTime(14, 45, 0)) [B]) )[/B][/FONT]
    Finally, going back to our pseudo-code, we have this now,

    Code:
               	[FONT=Courier New]if (
           (it isn't between 08:30 and 14:15[/FONT][FONT=Courier New][FONT=Courier New])
    [/FONT]    				&& (profit target met)
        				&& (we are in a flat position)
        				&& [B](we haven't exceeded our loser limit)[/B]
        				)
    {
      [B]stop processing immediately;[/B]
    }
    [/FONT]
    That one I emphasized seems out of place. I would think that if wehad exceeded our loser limit, we would want to stop processing immediately. If that is the case, then we will want to do this,

    Code:
    [FONT=Courier New](Performance.AllTrades.TradesPerformance.MaxConsec  Loser [B]>=[/B] MaxLosers)[/FONT]
    Putting all that together gives us this,

    Code:
    [FONT=Courier New]if ( [B](!([/B] (ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))  [B]))[/B]
    				&& (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
    				&& (Position.MarketPosition != MarketPosition.Flat)
    				&& (Performance.AllTrades.TradesPerformance.MaxConsec  Loser [B]>=[/B] MaxLosers)
    				)[/FONT]
    Please let us know if the above does not end up doing what you would like, or if you have any other questions we can help with.
    Jessica P.NinjaTrader Customer Service

    Comment


      #3
      Originally posted by TOOLMachine462 View Post
      I am trying to verify my strategy is executing all requests. It is also not following my set trading time, it is trading all hours. Can someone please verify the below code looks correct. It is running and generating results, just not running at set time periods. I want to check that the MaxConsecLoser and profit targets are working correctly. I know you use a print command but I'm a little unsure on how to code it & interpret results. Thanks

      protected override void OnBarUpdate()
      {
      if ((ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))
      && (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
      && (Position.MarketPosition != MarketPosition.Flat)
      && (Performance.AllTrades.TradesPerformance.MaxConsec Loser < MaxLosers)
      )
      {
      priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit - priorTradesCumProfit;
      }
      // At the start of a new session
      if (Bars.FirstBarOfSession)
      {
      // Store the strategy's prior cumulated realized profit and number of trades
      priorTradesCount = Performance.AllTrades.Count;
      priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit;

      /*
      NOTE:
      Using .AllTrades will include both historical virtual trades
      as well as real-time trades.
      If you want to only count profits from real-time trades
      please use .RealtimeTrades.
      */
      }

      if (
      // ... we have made more than $PrftGoal profit...
      (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
      )
      {
      return;
      }
      // Condition set 1
      Your time filter:
      Code:
      (ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))
      is always true. It looks like you are looking for "&&" not "||" as your logic operator?

      Comment


        #4
        Originally posted by NinjaTrader_JessicaP View Post
        Hello TOOLMachine462,

        While I have not yet tested your code, I noticed your first condition block contains ambiguous logic. Where you have

        Code:
                   	[FONT=Courier New]if ((ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))  
        				&& (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
        				&& (Position.MarketPosition != MarketPosition.Flat)
        				&& (Performance.AllTrades.TradesPerformance.MaxConsec  Loser < MaxLosers)
        				)[/FONT]
        I am going to replace everything conditional with pseudo-code to demonstrate what I mean. Now it just so happens that the part of your code I am pointing out here works, but there are two possible ways to interpret this, and if you add much more logic, it would then be impossible to predict what you mean and thus impossible to predict what your code will do.

        This is probably what you meant,

        Code:
                   	[FONT=Courier New]if (
               (time range 1 || time range 2[/FONT][FONT=Courier New][FONT=Courier New])
        [/FONT]    				&& (profit target met)
            				&& (we are in a flat position)
            				&& (we haven't exceeded our loser limit)
            				)
        {
          stop processing immediately;
        }
        [/FONT]
        However your compiler could have interpreted it like this, because of the way a logical or works,

        Code:
                   	[FONT=Courier New]if (
               (time range 1)
            || (
                   (time range 2[/FONT][FONT=Courier New][FONT=Courier New])
        [/FONT]        				&& (profit target met)
                				&& (we are in a flat position)
                				&& (we haven't exceeded our loser limit)
                )
            				)
        {
          stop processing immediately;
        }
        [/FONT]
        So I would recommend, to prevent your code from breaking in the future, that you re-write it the first way, which looks like this :

        Code:
        [FONT=Courier New]if ( [B]([/B] (ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0)) [B])[/B]  
        				&& (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
        				&& (Position.MarketPosition != MarketPosition.Flat)
        				&& (Performance.AllTrades.TradesPerformance.MaxConsec  Loser < MaxLosers)
        				)[/FONT]
        So if we re-write it like that, that makes it easy to point out the second thing I noticed. This code,

        Code:
        [FONT=Courier New]   (ToTime(Time[0]) >= ToTime(8, 30, 0))
        || (ToTime(Time[0]) < ToTime(14, 45, 0))[/FONT]
        Won't do what you want it to. This is because every possible time of day is covered. I will make a short table to demonstrate what I mean :

        • If it's before 8:30 in the morning, it's also before 14:45 in the afternoon, so your second condition is true
        • If it's 8:30 exactly, both your conditions are true
        • If it's between 8:30 and 14:45, both your conditions are true
        • If it's 14:45 or later, it's also after 8:30, so your first condition is true

        Therefore, this block of code is always true no matter what. I believe, instead, you wanted to restrict trading to 8:30. You can do that in pseudo code like this,


        Code:
        [FONT=Courier New]if (it's not between 08:30 and 14:45)[/FONT]
        [FONT=Courier New]return;[/FONT]
        [FONT=Arial][/FONT]


        We can replace "it's not" by "!" and the rest with a conditional to give us

        Code:
        [FONT=Courier New]if [B]( ! ([/B] (ToTime(Time[0]) >= ToTime(8, 30, 0)) || (ToTime(Time[0]) < ToTime(14, 45, 0)) [B]) )[/B][/FONT]
        Finally, going back to our pseudo-code, we have this now,

        Code:
                   	[FONT=Courier New]if (
               (it isn't between 08:30 and 14:15[/FONT][FONT=Courier New][FONT=Courier New])
        [/FONT]    				&& (profit target met)
            				&& (we are in a flat position)
            				&& [B](we haven't exceeded our loser limit)[/B]
            				)
        {
          [B]stop processing immediately;[/B]
        }
        [/FONT]
        That one I emphasized seems out of place. I would think that if wehad exceeded our loser limit, we would want to stop processing immediately. If that is the case, then we will want to do this,

        Code:
        [FONT=Courier New](Performance.AllTrades.TradesPerformance.MaxConsec  Loser [B]>=[/B] MaxLosers)[/FONT]
        Putting all that together gives us this,

        Code:
        [FONT=Courier New]if ( [B](!([/B] (ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0))  [B]))[/B]
        				&& (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
        				&& (Position.MarketPosition != MarketPosition.Flat)
        				&& (Performance.AllTrades.TradesPerformance.MaxConsec  Loser [B]>=[/B] MaxLosers)
        				)[/FONT]
        Please let us know if the above does not end up doing what you would like, or if you have any other questions we can help with.
        That should never process your code block: the time filter will now always be false.

        Comment


          #5
          Thanks for the catch.

          However, I think we're both wrong. If the OP just uses && instead of ||, their condition will do the exact opposite of what I think this user wants, as it will only exit out of their strategy between 8:30 and 14:15, and NOT before or after hours.

          So that block should be

          ! (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0))

          In short I think this needs to be a NAND
          Last edited by NinjaTrader_JessicaP; 04-22-2016, 11:15 AM.
          Jessica P.NinjaTrader Customer Service

          Comment


            #6
            Thank you for your reply! I am confused because I copied all the code you are saying needs to be changed from posts by NT support people. I don't understand how it is wrong in mine but they posted it as answers on the forum. I will try your code and verify results.

            Is it resetting the trades count and profit loss every new session?

            Thanks.

            Comment


              #7
              TOOLMachine462, kogonam caught a logic error I made, but also had one of his own. It is very easy to make mistakes with this kind of thing, as logical operations can become very complicated, and I am grateful for kogonam's correction.

              I am combining both of our catches into a code block you can copy.

              if ( (!( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) )) && (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal) && (Position.MarketPosition != MarketPosition.Flat) && (Performance.AllTrades.TradesPerformance.MaxConsec Loser >= MaxLosers)
              )
              Last edited by NinjaTrader_JessicaP; 04-22-2016, 11:19 AM.
              Jessica P.NinjaTrader Customer Service

              Comment


                #8
                I need return command after this correct?

                Originally posted by NinjaTrader_JessicaP View Post
                TOOLMachine462, kogonam caught a logic error I made, but also had one of his own. It is very easy to make mistakes with this kind of thing, as logical operations can become very complicated, and I am grateful for kogonam's correction.

                I am combining both of our catches into a code block you can copy.

                if ( (!( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) )) && (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal) && (Position.MarketPosition != MarketPosition.Flat) && (Performance.AllTrades.TradesPerformance.MaxConsec Loser >= MaxLosers)
                )
                Last edited by TOOLMachine462; 04-22-2016, 12:01 PM.

                Comment


                  #9
                  After reviewing your whole code sample, I realize some of the code I was providing does not match your goals.

                  I believe the following will achieve your goals.

                  Code:
                  [FONT=Courier New]   protected override void OnBarUpdate()
                  {
                      // it's outside of trading hours
                      if (
                              !((ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0))
                              )
                      {
                          return;
                      }
                  
                      // ... we have made more than $PrftGoal profit...
                      if (
                              (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
                              )
                      {
                          return;
                      }
                  
                     if (
                                 (Performance.AllTrades.TradesPerformance.Currency.  CumProfit - priorTradesCumProfit >= PrftGoal)
                              && (Position.MarketPosition != MarketPosition.Flat)
                              && (Performance.AllTrades.TradesPerformance.MaxConsec  Loser < MaxLosers)
                              )
                      {
                          priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C  umProfit - priorTradesCumProfit;
                      }
                  
                      // At the start of a new session
                      if (Bars.FirstBarOfSession)
                      {
                          // Store the strategy's prior cumulated realized profit and number of trades
                          priorTradesCount = Performance.AllTrades.Count;
                          priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C  umProfit;
                  
                          /*
                          NOTE:
                          Using .AllTrades will include both historical virtual trades
                          as well as real-time trades.
                          If you want to only count profits from real-time trades
                          please use .RealtimeTrades.
                          */
                          }
                  
                          // Condition set 1 [/FONT]
                  Last edited by NinjaTrader_JessicaP; 04-22-2016, 12:17 PM.
                  Jessica P.NinjaTrader Customer Service

                  Comment


                    #10
                    Originally posted by NinjaTrader_JessicaP View Post
                    Thanks for the catch.

                    However, I think we're both wrong. If the OP just uses && instead of ||, their condition will do the exact opposite of what I think this user wants, as it will only exit out of their strategy between 8:30 and 14:15, and NOT before or after hours.

                    So that block should be

                    ! (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0))

                    In short I think this needs to be a NAND
                    Um, no. I was correcting his code there, not yours. Yours has been recast, and your comment may well be right if done against your code. Look again at his original code, and you will see that the filter that contains the time-filter gates one and only one complete block. I surmise that he wants to run that code during trading hours, in which case, the correct formulation is what I wrote.

                    Here is his original. See that there is a complete closed block with the filter.
                    Code:
                    if ((ToTime(Time[0]) >= ToTime(8, 30, 0))||(ToTime(Time[0]) < ToTime(14, 45, 0)) 
                    && (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
                    && (Position.MarketPosition != MarketPosition.Flat)
                    && (Performance.AllTrades.TradesPerformance.MaxConsec Loser < MaxLosers)
                    )
                    {
                    priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit - priorTradesCumProfit;
                    }
                    That would need a "&&" instead of a "||" to confine the time-filter to true between 0830hrs and 1445hrs.

                    Comment


                      #11
                      I think I got it. How do I post in a code box?

                      // At the start of a new session
                      if (Bars.FirstBarOfSession)
                      {
                      // Store the strategy's prior cumulated realized profit
                      priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit;

                      /*
                      NOTE:
                      Using .AllTrades will include both historical virtual trades
                      as well as real-time trades.
                      If you want to only count profits from real-time trades
                      please use .RealtimeTrades.
                      */
                      }

                      if (
                      // ... we have made more than $PrftGoal profit or lost more than MaxLoss...
                      (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
                      || Performance.AllTrades.TradesPerformance.Currency.C umProfit - priorTradesCumProfit <= -MaxLoss
                      )
                      {
                      return;
                      }

                      if ( (( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) ))
                      && (Position.MarketPosition == MarketPosition.Flat)
                      )

                      Comment


                        #12
                        Originally posted by TOOLMachine462 View Post
                        I think I got it. How do I post in a code box?

                        // At the start of a new session
                        if (Bars.FirstBarOfSession)
                        {
                        // Store the strategy's prior cumulated realized profit
                        priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.C umProfit;

                        /*
                        NOTE:
                        Using .AllTrades will include both historical virtual trades
                        as well as real-time trades.
                        If you want to only count profits from real-time trades
                        please use .RealtimeTrades.
                        */
                        }

                        if (
                        // ... we have made more than $PrftGoal profit or lost more than MaxLoss...
                        (Performance.AllTrades.TradesPerformance.Currency. CumProfit - priorTradesCumProfit >= PrftGoal)
                        || Performance.AllTrades.TradesPerformance.Currency.C umProfit - priorTradesCumProfit <= -MaxLoss
                        )
                        {
                        return;
                        }

                        if ( (( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) ))
                        && (Position.MarketPosition == MarketPosition.Flat)
                        )
                        You use the button controls at the top of the composition box. Hover your mouse over each control to see what it does. If you prefer, you can manually write the necessary tags.

                        Comment


                          #13
                          Originally posted by koganam View Post
                          ...That would need a "&&" instead of a "||" to confine the time-filter to true between 0830hrs and 1445hrs.
                          I believe we have always agreed on that, and I can also admit that I missed some other things that you caught.

                          I would like to avoid confusing this customer, and would like to provide a consistent answer to them from both of us. Could I ask you to review the code I posted in post #9 where I addressed the concerns with my code in post #8 you pointed out in post #10 and let both of us know if it is correct?

                          Originally posted by TOOLMachine462
                          I think I got it. How do I post in a code box?
                          ...
                          if ( (( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) ))
                          && (Position.MarketPosition == MarketPosition.Flat)
                          Adding to koganam's answer, you can also surround your code with [ code ] [ /code ] tags. You will want probably want to highlight your code and manually set the font to a monospace font such as courier as well as this bulletin board software does not manually do that for you.

                          That said, what you plan on doing immediately after your code sample cuts off is important. With the way you laid that out, you will need to do (and this is what kogonam mentioned in post #10 to me)

                          Code:
                          [B][FONT=Courier New]// note that code here works before, during, and after hours[/FONT][/B][FONT=Courier New]
                          
                          if ( (( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) )) 
                                          && (Position.MarketPosition == MarketPosition.Flat) 
                                      )     
                          {
                          [B]    // code you want to execute between 8:30 and 14:45 goes here[/B]
                          }
                          [/FONT]
                          
                          [B][FONT=Courier New]// note that code here works before, during, and after hours[/FONT][/B]
                          You may want to move some of your other code to the "code you want to execute between 8:30 and 14:45 section to do things this way.

                          Otherwise, if you want ALL your code to only execute between 8:30 and 14:45, you will need this at the beginning of OnBarUpdate,

                          Code:
                          [FONT=Courier New]
                          if (! (( (ToTime(Time[0]) >= ToTime(8, 30, 0)) && (ToTime(Time[0]) < ToTime(14, 45, 0)) )) 
                                      )     
                          {
                              return;
                          }
                          [/FONT]
                          Either way the code sample you provided is incomplete.

                          Please let us know if you have any further questions.
                          Last edited by NinjaTrader_JessicaP; 04-25-2016, 08:10 AM.
                          Jessica P.NinjaTrader Customer Service

                          Comment

                          Latest Posts

                          Collapse

                          Topics Statistics Last Post
                          Started by fitspressoburnfat, Today, 04:25 AM
                          0 responses
                          2 views
                          0 likes
                          Last Post fitspressoburnfat  
                          Started by Skifree, Today, 03:41 AM
                          1 response
                          4 views
                          0 likes
                          Last Post Skifree
                          by Skifree
                           
                          Started by usazencort, Today, 01:16 AM
                          0 responses
                          1 view
                          0 likes
                          Last Post usazencort  
                          Started by kaywai, 09-01-2023, 08:44 PM
                          5 responses
                          604 views
                          0 likes
                          Last Post NinjaTrader_Jason  
                          Started by xiinteractive, 04-09-2024, 08:08 AM
                          6 responses
                          23 views
                          0 likes
                          Last Post xiinteractive  
                          Working...
                          X