Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

get the bid ask volume inside the bar from the example

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

    #16
    Hello PaulMohn,

    I would have suggested the same thing to display a notch where the POC would lie:
    1. Add a plot, use a PlotStyle like Hash
    2. Assign the POC value in SetValues()
    Note that if the indicator has IsOverlay set to false, the plots will exist in the indicator panel rather than the price panel.

    Comment


      #17
      Hello Jim, I got a new indicator in the User Apps Share for SimplePOC – Non TickReplay POC Script Use, mainly thanks to your recent help and Jesse's. Thanks!

      Comment


        #18
        Originally posted by PaulMohn View Post
        Hello Jim, I got a new indicator in the User Apps Share for SimplePOC – Non TickReplay POC Script Use, mainly thanks to your recent help and Jesse's. Thanks!
        Hi Paul,

        The SimplePOC does not plot on my NT8 (I followed and observed all your comments on the EcoSystem website) ... I have the latest 8.0.26.0 release. Am I missing something ?

        omololu

        Comment


          #19
          Originally posted by omololu View Post

          Hi Paul,

          The SimplePOC does not plot on my NT8 (I followed and observed all your comments on the EcoSystem website) ... I have the latest 8.0.26.0 release. Am I missing something ?

          omololu
          Hi omololu

          I did further tests and it seems not to plot on sub-minute timeframe, but on 1min and above it seems ok.
          Here's a demo

          What's the Chart timeframe you're testing the indicator on ?
          If 1min and above, try refreshing the chart and wait the last 10 seconds of the Bar to see if it plots. Thanks!

          I'll ask why it's not working on sub-minute timeframe.

          NinjaTrader_Jim any idea why it is so? Thanks!

          Comment


            #20
            Hello NinjaTrader_Jim

            I got a request for a way to remove the 2nd panel.

            Chelsea got this solution
            (A quick tip. You can hide a panel without removing it. To do this, right-click the price margin of the panel (that you do not want to hide) and select Maximize. This will minimize all other panels so that are not in view. They are still there but they are hidden. I am not aware of anyway to trigger this from code.)

            How to turn a chart panel completely off


            This works but it does remove all other panels which can be unwelcome if you need other panels.

            How would you get the regular volume not to show in the 2nd panel while still getting the POC to work? I've tried setting the regular volume to display only in the 1st panel/same as input series but the scaling isn't right.
            I also tried setting it to invisible but then the POC doesn't show anymore.

            Isn't there a way to still use the regular volume as plot but at the same time make it "not displayable" in the chart/panels? Thanks!
            Last edited by PaulMohn; 05-19-2022, 06:44 AM.

            Comment


              #21
              Hello PaulMohn,

              IsOverlay would be used to control if the indicator should add a new panel, and this must be set in State.SetDefaults. A separate version could be made that does not add the panel (has IsOverlay set to true.)

              I see an index out of range error in noted from the OnBarUpdate method. (Errors can be seen in the log tab of the Control Center.)

              The script would need to be debugged to find the offending lines of code, and to see what the specific index that is being referenced when the error is hit, and what the size of the array/series is at the time you are referencing that index.

              Comment


                #22
                Thanks for the reply. The issue with IsOverlay set to true is the same as with my prior tests
                I've tried setting the regular volume to display only in the 1st panel/same as input series but the scaling isn't right (i.e. the price series gets all scrunched up).
                Would a second version with IsOverlay set to true not scrunch up the price series? Or is there a way to only use a "virtual" regular volume plot (that would only be used to compute the POC but not actually plot/display on the chart? A bit like secondary series just called but not displayed?) Thanks!

                I see an index out of range error in noted from the OnBarUpdate method. (Errors can be seen in the log tab of the Control Center.)

                The script would need to be debugged to find the offending lines of code, and to see what the specific index that is being referenced when the error is hit, and what the size of the array/series is at the time you are referencing that index.
                Ah, you mean for the seconds timeframe issue, I'll look into it thanks!

                Comment


                  #23
                  Hello PaulMohn,

                  Yes, changing IsOverlay would cause the chart to shrink with AutoScale. A different Scale Justification could be set so the plot is overlaid or uses the left Scale instead of the Right.

                  Plots are Series<double>'s that have built-in code used to draw them on the chart. Writing to a private Series<double> instead of the plot's Series would prevent the plot from drawing but the panel would still be added from IsOverlay=false.
                  Last edited by NinjaTrader_Jim; 05-19-2022, 07:55 AM.

                  Comment


                    #24
                    Ok, thanks for the private Series<double> tip, I'll test making a 2nd distinct version with it asa.

                    I tested the seconds timeframe issue and in deed there's this indexing error in the Log Tab
                    Time Category Message
                    19/05/2022 15:51:04 Default Indicator 'SimplePOC': Error on calling 'OnBarUpdate' method on bar -1: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
                    I've printed all variables in the OnBarUpdate
                    which give this result

                    BarsArray[1].Count - 1 - CurrentBars[1] : 5707
                    BarsArray[0].IsTickReplay : False
                    State == State.Realtime : False
                    CurrentBars[0] > 0 : False
                    lastBar != CurrentBars[0] : True
                    State == State.Historical : True

                    B. indexOffset : 5707
                    b1. indexOffset == 0 : False
                    b2. indexOffset > 0 : True
                    inTransition : False
                    State == State.Realtime && indexOffset > 1 : False

                    C. BarsArray[1].Count - 1 - CurrentBars[1] : 5707
                    c1. BarsArray[0].IsTickReplay : False
                    c2. State == State.Realtime : False
                    c3. CurrentBars[0] > 0 : False
                    c4. lastBar != CurrentBars[0] : True
                    c.5 State == State.Historical : True

                    Indicator 'SimplePOC': Error on calling 'OnBarUpdate' method on bar -1: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
                    Prints in OnBarUpdate
                    PHP Code:
                    protected override void OnBarUpdate()
                          {
                    //       if (CurrentBar <= 2) return;
                    
                    
                            Print("BarsArray[1].Count - 1 - CurrentBars[1] : " +(BarsArray[1].Count - 1 - CurrentBars[1]));
                            Print("BarsArray[0].IsTickReplay : " +BarsArray[0].IsTickReplay);
                            Print("State == State.Realtime : " +(State == State.Realtime));
                            Print("CurrentBars[0] > 0 : " +(CurrentBars[0] > 0));
                            Print("lastBar != CurrentBars[0] : " +(lastBar != CurrentBars[0]));
                            Print("State == State.Historical : " +(State == State.Historical));
                    
                            if (BarsInProgress == 0)
                            {
                    
                              // This lets us know what processing mode we are in
                              // if indexOffset == 0 then we are in 'realtime processing mode'
                              // if indexOffset is > 0 then we are in 'historical processing mode'
                              int indexOffset = BarsArray[1].Count - 1 - CurrentBars[1];
                    
                              Print("indexOffset : " +indexOffset);
                              Print("indexOffset == 0 : " +(indexOffset == 0));
                              Print("indexOffset > 0 : " +(indexOffset > 0));
                    
                              // If we are not Calculate.OnBarClose and we are in Realtime processing mode
                              if (IsFirstTickOfBar && Calculate != Calculate.OnBarClose && (State == State.Realtime || BarsArray[0].IsTickReplay))
                              {
                                // We always get the last tick after the primary triggers OBU so we update the last bar
                                if (CurrentBars[0] > 0)
                                  SetValues(1);
                    
                                // We have the last tick of the bar added so now we can reset
                                if (BarsArray[0].IsTickReplay || State == State.Realtime && indexOffset == 0)
                                  ResetValues(false);
                              }
                    
                              // We only set the value on the primary to preserve external programmatic access to plot as well as indicator-as-input cases
                              SetValues(0);
                    
                              // If we are Calculate.OnBarClose or we are in Historical processing mode, we are already update to date on the 1 tick series so we reset here
                              if (Calculate == Calculate.OnBarClose || (lastBar != CurrentBars[0] && (State == State.Historical || State == State.Realtime && indexOffset > 0)))
                                ResetValues(false);
                    
                              lastBar = CurrentBars[0];
                    
                            }
                            else if (BarsInProgress == 1)
                            {
                              // The more granular series will open the new session so we have to reset any session related stuff here
                              if (BarsArray[1].IsFirstBarOfSession)
                                ResetValues(true);
                    
                              // We only calculate values from the 1 tick series
                              CalculateValues(false);
                            }
                          } 
                    

                    Prints in CalculateValues
                    PHP Code:
                          private void CalculateValues(bool forceCurrentBar)
                          {
                            // This lets us know what processing mode we are in
                            // if indexOffset == 0 and State is Realtime then we are in 'realtime processing mode'
                            // if indexOffset is > 0 then we are in 'historical processing mode'
                            int   indexOffset   = BarsArray[1].Count - 1 - CurrentBars[1];
                            bool   inTransition   = State == State.Realtime && indexOffset > 1;
                    
                            // For Calculate.OnBarClose in realtime processing we have to advance the index on the tick series to not be one tick behind
                            // The means, at the end of the 'transition' (where State is Realtime but we are still in historical processing mode) -> we have to calculate two ticks (CurrentBars[1] and CurrentBars[1] + 1)
                            if (!inTransition && lastInTransition && !forceCurrentBar && Calculate == Calculate.OnBarClose)
                              CalculateValues(true);
                    
                            bool   useCurrentBar = State == State.Historical || inTransition || Calculate != Calculate.OnBarClose || forceCurrentBar;
                    
                            // This is where we decide what index to use
                            int   whatBar     = useCurrentBar ? CurrentBars[1] : Math.Min(CurrentBars[1] + 1, BarsArray[1].Count - 1);
                    
                            // This is how we get the right tick values
                            double volume     = BarsArray[1].GetVolume(whatBar);
                            double price     = BarsArray[1].GetClose(whatBar);    
                    
                            // Accumulate volume
                            if (price == price)
                            {
                              combined += volume;
                              if (TempCombinedVolumeDict.ContainsKey(price))
                                TempCombinedVolumeDict[price] += volume;
                              else
                                TempCombinedVolumeDict.Add(price, volume);
                            }
                    
                    
                    
                            Dictionary<double, double> dctTemp = new Dictionary<double, double>();
                    
                            KeyValuePair<double, double> max = new KeyValuePair<double, double>();
                    
                            for (double p = Low[0]; p <= High[0]; p += TickSize)
                            {
                              if (TempCombinedVolumeDict.ContainsKey(p))
                    //         Print(String.Format("Ask: {0} {1} {2}", p, TempCombinedVolumeDict[p], Time[0]));
                    
                              foreach (KeyValuePair<double, double> pair in TempCombinedVolumeDict.OrderBy(key => key.Value))
                              {
                                dctTemp.Add(pair.Key, pair.Value);
                    //           Print(String.Format("Ask: {0} {1} {2}", pair.Key, pair.Value, Time[0]));
                              }
                    
                    //         KeyValuePair<double, double> max = new KeyValuePair<double, double>();
                              foreach (var kvp in dctTemp)
                              {
                              if (kvp.Value > max.Value)
                                max = kvp;
                              }
                    
                    //         Print(String.Format("max: {0} {1}", max.Key, max.Value, Time[0]));
                    
                    
                            Print("B. indexOffset : " +indexOffset);
                            Print("b1. indexOffset == 0 : " +(indexOffset == 0));
                            Print("b2. indexOffset > 0 : " +(indexOffset > 0));
                            Print("inTransition : " +(inTransition));
                            Print("State == State.Realtime && indexOffset > 1 : " +(State == State.Realtime && indexOffset > 1));
                    
                            Print("C. BarsArray[1].Count - 1 - CurrentBars[1] : " +(BarsArray[1].Count - 1 - CurrentBars[1]));
                            Print("c1. BarsArray[0].IsTickReplay : " +BarsArray[0].IsTickReplay);
                            Print("c2. State == State.Realtime : " +(State == State.Realtime));
                            Print("c3. CurrentBars[0] > 0 : " +(CurrentBars[0] > 0));
                            Print("c4. lastBar != CurrentBars[0] : " +(lastBar != CurrentBars[0]));
                            Print("c.5 State == State.Historical : " +(State == State.Historical));
                    
                            }
                    
                            DateTime myStartTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromSeconds(7));
                    
                            DateTime myEndTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromSeconds(2));
                    
                            if (Time[0] >= myStartTime && Time[0] <= myEndTime)
                            {
                            //OnBarClose
                              Draw.Line(this, "tag1"+CurrentBar, true, 0, max.Key, 0, max.Key + (1 * TickSize), Brushes.White, DashStyleHelper.Dash, 5);
                            }
                    
                            lastInTransition   = inTransition;
                    
                          } 
                    

                    I'm not sure how to make sense of the prints. Any tip on what I should be looking for/where to look in specific? Thanks!

                    Comment


                      #25
                      Originally posted by NinjaTrader_Jim View Post
                      Hello PaulMohn,

                      Yes, changing IsOverlay would cause the chart to shrink with AutoScale. A different Scale Justification could be set so the plot is overlaid or uses the left Scale instead of the Right.
                      Got that working thanks!
                      A different Scale Justification could be set so the plot is overlaid

                      Last edited by PaulMohn; 05-19-2022, 09:15 AM.

                      Comment


                        #26
                        Hello Jim and thanks for the reply. Your post got cancelled but I could get to the DateTime constructor reference you recommended.
                        https://docs.microsoft.com/en-us/dot...tframework-4.8

                        I'm not sure I can know the issue as I don't have your full reply available any more.

                        But from what the doc shows, I think you meant using a more granular DateTime statement (a sub-second one). Is that right?
                        If so I think of using this milliseconds constructor
                        DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32)

                        I see there's a FromMilliseconds() method available
                        https://www.tutorialspoint.com/times...ethod-in-chash

                        So should it work with

                        DateTime myStartTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromMilliseconds(7000));

                        DateTime myEndTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromMilliseconds(2000));

                        Or did you suggest something different? Thanks!

                        I just tested with

                        DateTime myStartTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromMilliseconds(7000));

                        DateTime myEndTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromMilliseconds(2000));

                        And there's still the indexing error.

                        Time Category Message
                        19/05/2022 21:29:45 Default Indicator 'SimplePOC': Error on calling 'OnBarUpdate' method on bar -1: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
                        What else did you recommended? Thanks!
                        Last edited by PaulMohn; 05-19-2022, 01:32 PM.

                        Comment


                          #27
                          Hello PaulMohn,

                          Please consider editting your posts and leaving your posts concise with only information relevant to the question at hand.

                          Posting multiple times with lots of content in each posts makes it difficult to understand where you are at and makes it difficult for us (and others browsing the forum) to help.

                          I'm not sure what happened with the last post, but please see below for how to troubleshoot an index out of range error:

                          You are looking at an index Out Of Range Error.

                          You need to know:
                          1. what line the error is thrown on
                          2. what the index that is being referenced in that line
                          3. what the size of the series or array is that you are referencing
                          This will make it clear how the indicator hit the error. (You know the size of the array/series and you know why the index used is out of bounds.)

                          You would then need to draft changes to prevent the error from occurring. I will not be able to suggest direct changes to your code, but going back to compare against the working examples can help to give direction where your script may be hitting an error.

                          Comment


                            #28
                            Hello Jim and thanks for the Indexing error debug process steps. I'll test it now. About your DateTime Constructor previous mention, could you please tell why you mentioned it? As I'm still not sure how to use it if one other DateTime is required. Thanks!


                            1. what line the error is thrown on
                            I've researched index Out Of Range Error
                            https://stackoverflow.com/questions/...ix-it/24812680
                            https://stackoverflow.com/questions/...o-i-f/20940980
                            https://www.freecodecamp.org/news/li...message-solved



                            I've Attached NT8 to Visual Studio Successfully
                            demo 1

                            What is the fix for the Watch window not accepting variables input in Visual Studio?
                            demo 2
                            https://docs.microsoft.com/en-us/vis...s?view=vs-2022
                            Doesn't NT8 allow for its variables to be picked up by Visual Studio?

                            I plan Stepping Into (F11) OnBarUpdate() and then CalculateValues() to spot which of those methods is throwing the error (or both).
                            Then I'll step over (F10) each line one by one to find the one line/the lines throwing the error.
                            Is that the right approach or do you suggest a better one?

                            2. what the index that is being referenced in that line
                            I think the index is -1 from the error message
                            Time Category Message
                            19/05/2022 21:29:45 Default Indicator 'SimplePOC': Error on calling 'OnBarUpdate' method on bar -1: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
                            Or do you mean another index? If you mean another, how would you find it in Visual Studio? Thanks!

                            3. what the size of the series or array is that you are referencing
                            I'm not sure how to find that out.
                            From my previous prints I got this value:
                            BarsArray[1].Count - 1 - CurrentBars[1] : 5707

                            How would you suggest finding it out? Thanks!
                            Last edited by PaulMohn; 05-20-2022, 09:30 AM.

                            Comment


                              #29
                              Hello PaulMohn,

                              I think we are getting into the weeds with issues specific to your own script.

                              Since the examples I provided are working, you can compare implementations and see where my example works and your code does not, and that could be a path forward.

                              I'm not sure how I can help with your DateTime question, it does not seem relevant here.

                              The point I am making with the index out of range error is that you need to know where the code is hitting the error, why it is hitting the error, and what the code should be doing instead. These are advanced examples and have many moving parts to keep track of.

                              Series objects have a Count property to tell you the size of the series. Array's have a Length property to tell you the length of the array. If you reference an element that dopes not exist, or an index that is not valid (like a negative number) we will get an error.

                              If you are using variables that generate the index that gives the error, reference how the working example handles the situation.

                              Comment


                                #30
                                Thanks for the tips and letting me refocus on my part of the script since indeed after checking your script does not throw the error, that was very helpful. I think I can manage without Visual Studio if my snippets only are throwing the error.

                                I've been over my script from Bottom to Top from the snippets I added following your recommendation.
                                Demo 4

                                Demo 3

                                I've printed these (Only the 3rd one is throwing the error)
                                PHP Code:
                                // Print("BarsArray[0] : " +(BarsArray[0]) + "Time[0] : " + Time[0]);
                                // Print("CurrentBars[0] : " +(CurrentBars[0]) + "Time[0] : " + Time[0]);
                                Print("BarsArray[0].GetTime(CurrentBars[0]) : " +(BarsArray[0].GetTime(CurrentBars[0]) + "Time[0] : " + Time[0])); 
                                

                                Prints Output (reduced to the essential)
                                BarsArray[0] : Instrument='CL 07-22' From='2022-05-17' To='2022-05-20' period='30 Second' IsTickReplay=False Count='350' firstTime=20/05/2022 16:23:30.000 lastTime=20/05/2022 19:18:00.000 Time[0] : 20/05/2022 19:17:57
                                CurrentBars[0] : -1 Time[0] : 20/05/2022 16:23:03

                                BarsArray[0] :
                                Instrument='CL 07-22'
                                From='2022-05-17'
                                To='2022-05-20'
                                period='30 Second'
                                IsTickReplay=False
                                Count='350'
                                firstTime=20/05/2022 16:23:30.000
                                lastTime=20/05/2022 19:18:00.000
                                Time[0] : 20/05/2022 19:17:57

                                CurrentBars[0] : 351 Time[0] : 20/05/2022 19:18:34
                                Indicator 'SimplePOC': Error on calling 'OnBarUpdate' method on bar -1: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
                                I see a -1 index first appearing at
                                CurrentBars[0] : -1 Time[0] : 20/05/2022 16:23:03

                                and last at
                                CurrentBars[0] : -1 Time[0] : 20/05/2022 16:23:29
                                CurrentBars[0] : 0 Time[0] : 20/05/2022 16:23:30

                                I see firstTime is at
                                firstTime=20/05/2022 16:23:30.000

                                It seems the -1 index occurs before firstTime. What can we make out of this?

                                Your debugging steps recommendation
                                1. what line the error is thrown on
                                They are my dateTime variables values

                                // DateTime myStartTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromMilliseconds(7000));

                                // DateTime myEndTime = BarsArray[0].GetTime(CurrentBars[0]).Subtract(TimeSpan.FromMilliseconds(2000));

                                2. what the index that is being referenced in that line
                                the index is -1, from
                                CurrentBars[0] : -1 Time[0] : 20/05/2022 16:23:03
                                until
                                CurrentBars[0] : -1 Time[0] : 20/05/2022 16:23:29
                                CurrentBars[0] : 0 Time[0] : 20/05/2022 16:23:30

                                3. what the size of the series or array is that you are referencing
                                Not, sure, but I think in my prints it goes from
                                CurrentBars[0] : -1 Time[0] : 20/05/2022 16:23:03
                                To
                                CurrentBars[0] : 351 Time[0] : 20/05/2022 19:18:34

                                So 352 bars.

                                What next step do you recommend? Thanks!

                                I think the solution would need somehow to limit the number of bars back to the ones occurring after firstTime / 20/05/2022 16:23:30.000.
                                but how would you specify it in the DateTime variable (if that is the solution)? Thanks!

                                I thought of testing this check
                                if (CurrentBars[0] < BarsArray[0].GetTime(CurrentBars[0]).firstTime) return;

                                but I get this compile error
                                NinjaScript File Error Code Line Column
                                SimplePOC.cs 'System.DateTime' does not contain a definition for 'firstTime' and no extension method 'firstTime' accepting a first argument of type 'System.DateTime' could be found (are you missing a using directive or an assembly reference?) CS1061 244 63
                                How would the firstTime parameter be used?
                                I don't find any reference in the doc Thanks!

                                Made further tests and ended up fixing the Index error by following your hint about .Count (for lists)and .Length (for Arrays).
                                Strange enough, the BarsArray[0] only accepts a Count not a Length.

                                So looking for an alternative to using the startTime value (BarsArray[0].startTime), I tested printing
                                BarsArray[0].Length (the doc talk of an array but i think it must be a list since .Length does't work, is it a List?), which threw a compiling error
                                then
                                BarsArray[0].Count , which return a value.

                                Then I compared CurrentBars[0] to BarsArray[0].Count in prints
                                Print("0. CurrentBars[0] : " +CurrentBars[0]);
                                Print("1. BarsArray[0].Count : " + BarsArray[0].Count);

                                Which gave a difference of one (BarsArray[0].Count being 1 bar behind CurrentBars[0])
                                0. CurrentBars[0] : 24
                                1. BarsArray[0].Count : 25
                                I then used this CurrentBars[0] Check
                                if (CurrentBars[0] < BarsArray[0].Count) return;

                                which solves the indexing error
                                Demo 5

                                but now the POC doesn't plot anymore. Any idea why it doesn't plot anymore?

                                Also I think I understand why BarsArray[0].Count is greater by 1 than CurrentBars[0].
                                BarsArray[0].Count starts at index 0 since it's a list/Array, while CurrentBars[0] starts at index 1. That's why the former is 1 unit larger.
                                If so, CurrentBars[0] lack a unit (is absent) for the 1st element of BarsArray[0].Count. That would be the reason for the error. Is that correct? If not please correct.
                                If CurrentBars[0] does start at index 1 and not index 0, please explain why. Isn't it a list/array too? Thanks!
                                Last edited by PaulMohn; 05-20-2022, 01:53 PM.

                                Comment

                                Latest Posts

                                Collapse

                                Topics Statistics Last Post
                                Started by Geovanny Suaza, 02-11-2026, 06:32 PM
                                0 responses
                                579 views
                                0 likes
                                Last Post Geovanny Suaza  
                                Started by Geovanny Suaza, 02-11-2026, 05:51 PM
                                0 responses
                                334 views
                                1 like
                                Last Post Geovanny Suaza  
                                Started by Mindset, 02-09-2026, 11:44 AM
                                0 responses
                                101 views
                                0 likes
                                Last Post Mindset
                                by Mindset
                                 
                                Started by Geovanny Suaza, 02-02-2026, 12:30 PM
                                0 responses
                                554 views
                                1 like
                                Last Post Geovanny Suaza  
                                Started by RFrosty, 01-28-2026, 06:49 PM
                                0 responses
                                551 views
                                1 like
                                Last Post RFrosty
                                by RFrosty
                                 
                                Working...
                                X