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

MultiTimeFrame coding - variable results

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

    MultiTimeFrame coding - variable results

    Let me start by saying this is my first post to this forum and therefore I apologise in advance for any errors in posting or etiquette (accidental of course)..

    This is going to be lengthy I think as I reckon I'll need to get a lot of information across in order to solicit the level of help I need. However, I wouldn't be surprised if I'm doing something so obviously wrong that I get an 'obivous' solution but I'll be grateful whichever way.

    Background on Me

    I've been programming on NinjaTrader 7 for over 2 years and after a false start moved over to NinjaTrader 8 about six months ago.My background is a C programmer a long time ago so I am self taught in C# (and object orientation in general) and so wouldn't be surprised that I make obvious language mistakes.

    Background on the Problem

    I've written lots of MTF indicators and by and large I've thought they were OK except that I have noticed what I would call inconsistencies on the slightly more convoluted ones i.e. often those that call my or other peoples custom indicators. I have done simple tests on MTF SMA that seem to work fine.

    My preferred bar type is BetterRenko. I have considered whether this is an issue but having looked at my stuff on other bar types I still see the problem.

    The Problem

    So .... I have an indicator that plots trend lines between swing points. These trend lines can be 'high' or 'low' based on joining high or low swings. It also plots a marker on the chart and publishes an integer series when one of these trend lines is crossed.

    My MTF indicator looks for the simple published integer series (-1, 0, +1) on each of three timeframes or in my case bar sizes - a 3, 4 and 5 tick. It then plots a marker (red or green hash) below the current 3 tick chart for each timeframe where a trendline cross is detected. The problem I see is that the MTF indicator often plots markers for the 4 or 5 tick integer series where I can see on a separate chart that no cross (and hence an integer 0 would be published) has occurred.

    Just to compound this I also detect 'fast' renko bars (shown by a red or green triangle on the main chart) which are occurring on the way toward a trendline (yellow triangle) and publish a similar marker (-1, 0, +1) for these. The MTF indicator looks at these similarly and prints a red or green triangle marker below the 3 tick chart. This also produces similar 'error' prints.

    Example

    (See attached image of 3 tick chart)

    Note that the 3 tick markers are displayed by the MTF indicator on the top two plots of the panel below the chart. The next four plots are for the other two timeframes. The idea is that I can see when these events happen simultaneously or close together.

    The problem is that when I look at the 4 tick chart (image also attached), the markers on the middle two rows aren't always correct and are sometimes(often) fake.

    The Code

    I've attached the full MTF indicator but not the base TrendLine indicator. Happy to do that but compiling them will be fun as they depend on a number of other things. In the first instance I was hoping that someone might comment on the basic MTF OnBarUpdate code to make sure I'm doing it right. The core code is:

    Code:
    		
    protected override void OnBarUpdate()
    {
    	int TrendLineCross = TrendLine.TrendLineCross[0];
    	int FastApproach = TrendLine.FastApproach[0];
    	Brush CrossColor = (TrendLineCross > 0) ? Brushes.Green : Brushes.Red;
    	Brush FastApproachColor = (FastApproach > 0) ? Brushes.Green : Brushes.Red;
    			
    	if (BarsInProgress == 1)
    	{
    		if (TrendLineCross != 0) 
    		{
    			PlotBrushes[SlowCrossPlot][0] = CrossColor;
    			SlowCross[0] = 3;
    		}
    		if (FastApproach != 0) 
    		{
    			PlotBrushes[SlowFastApproachPlot][0] = FastApproachColor;
    			SlowFastApproach[0] = 2;
    		}				
    	}
    			
    	if (BarsInProgress == 2)
    	{
    		if (TrendLineCross != 0) 
    		{
    			PlotBrushes[VerySlowCrossPlot][0] = CrossColor;
    			VerySlowCross[0] = 1;
    		}
    		if (FastApproach != 0) 
    		{
    			PlotBrushes[VerySlowFastApproachPlot][0] = FastApproachColor;
    			VerySlowFastApproach[0] = 2;
    		}				
    				
    	}
    			
    	if (BarsInProgress == 0)
    	{
    		if (TrendLineCross != 0) 
    		{
    			PlotBrushes[FastCrossPlot][0] = CrossColor;
    			FastCross[0] = 5;
    		}
    		if (FastApproach != 0) 
    		{
    			PlotBrushes[FastFastApproachPlot][0] = FastApproachColor;
    			FastFastApproach[0] = 4;
    		}				
    				
    	}
    }
    The MTF plot series are pretty self evident. Note I use an object TrendLine to define the call to the underlying indicator that publishes the required integer series. This can be called at the start of the OnBarUpdate call before determining which bar series is being processed.

    Anyway, that's it for now - I would be very grateful if someone could look at the basic MTF setup, which I think is straightforward and comment on its correctness or otherwise. This issue has been bugging me for a long time and I have even considered switching to a completely different platform in order to move forward but, as you can imagine, having invested considerable time in NinjaTrader and also considering that it may well be something I am doing wrong, then I come to this forum first.

    Yours in anticipation,

    Steve

    smaTrendLineMTF.cs

    Click image for larger version

Name:	6E 03-18 (3 BetterRenko) 2017_12_29.png
Views:	1
Size:	91.3 KB
ID:	908913

    Click image for larger version

Name:	6E 03-18 (4 BetterRenko) 2017_12_29.png
Views:	1
Size:	66.1 KB
ID:	908914

    #2
    Maybe I should have read more .....

    Just scanning round and found this thread: https://ninjatrader.com/support/foru...&highlight=MTF
    ..... which states in post #2 "A multi-series indicator will hold the same number of data points for plots as the primary series. Setting values to plots should be done in the primary series in OnBarUpdate(). "

    I recall from my code I'm updating the plots in the different timeframes - I wonder if this is a problem ..... checking.

    Comment


      #3
      save yourself a ton of time and simply use autotrend indicator for NT8 available here in the forums. Then, if you want to make slight adjustments to calculations, just do so in the indicator code - that's what I did.

      Comment


        #4
        Thanks for your reply lmatiukas - I will look at that indicator. However, my enquiry is to do with MTF coding as I am as sure as I can be that there is some underlying fault - either in my code or NT. The use if my TrendLine indicator is merely an example.

        It seems to me that an MTF indicator that monitors markers from a called indicator generates different results from when that 'sub' indicator is displayed directly on the relevant timeframe charts.

        In the first instance I am hoping that someone with perhaps more experience of MTF coding than myself can comment on the basic technique I've used. In the meantime I'm going to do some more checking around my last post .......

        Comment


          #5
          RE: Maybe I should have read more .....

          OK. So I changed the code to not update the plots outside the
          (BarsInProgress == 0)
          area. The code now looks as follows:

          Code:
          protected override void OnBarUpdate()
          {
          	int TrendLineCross = TrendLine.TrendLineCross[0];
          	int FastApproach = TrendLine.FastApproach[0];
          			
          	if (BarsInProgress == 1)
          	{
          		gSlowCross = TrendLineCross;
          		gSlowFastApproach = FastApproach;
          	}
          		
          	if (BarsInProgress == 2)
          	{
          		gVerySlowCross = TrendLineCross;
          		gVerySlowFastApproach = FastApproach;
          	}
          			
          	if (BarsInProgress == 0)
          	{
          		if (TrendLineCross != 0) 
          		{
          			PlotBrushes[FastCrossPlot][0] = LongShortColor(TrendLineCross);
          			FastCross[0] = 5;
          		}
          		if (FastApproach != 0) 
          		{
          			PlotBrushes[FastFastApproachPlot][0] = LongShortColor(FastApproach);
          			FastFastApproach[0] = 4;
          		}				
          				
          		if (gSlowCross != 0) 
          		{
          			PlotBrushes[SlowCrossPlot][0] = LongShortColor(gSlowCross);
          			SlowCross[0] = 3;
          			gSlowCross = 0;
          		}
          		if (gSlowFastApproach != 0) 
          		{
          			PlotBrushes[SlowFastApproachPlot][0] = LongShortColor(gSlowFastApproach);
          			SlowFastApproach[0] = 2;
          			gSlowFastApproach = 0;
          		}				
          
          		if (gVerySlowCross != 0) 
          		{
          			PlotBrushes[VerySlowCrossPlot][0] = LongShortColor(gVerySlowCross);
          			VerySlowCross[0] = 1;
          			gVerySlowCross = 0;
          		}
          		if (gVerySlowFastApproach != 0) 
          		{
          			PlotBrushes[VerySlowFastApproachPlot][0] = LongShortColor(gVerySlowFastApproach);
          			VerySlowFastApproach[0] = 2;
          			gVerySlowFastApproach = 0;
          		}				
          				
          	}
          }
          This change is definitely valid. Some marker prints do change by a bar which looks correct. HOWEVER - I still see marker prints where the higher timeframe chart shows there is no marker.

          I know if I was reading a thread like this I would have al sorts of questions including around the underlying indicator code which I haven't yet shown. That's why I'm simply asking at this stage if my MTF code looks sensible? Any comments appreciated.

          Steve

          Comment


            #6
            OK - gloves off to get this sorted!

            I realise that there are too many unanswered questions left by my previous posts so I've bitten the bullet to demonstrate the issue.

            New code based on old. I have a simple GoldenCross indicator that shows a marker when a 20 SMA crosses a 50. It posts high or low cross and publishes a marker +1, 0, -1 accordingly. I now have a GoldenCrossMTF based on almost exactly the same code as shown below.

            To make it super clear, the MTF indicator displays markers (in a separate panel) using the bar size values used. On BetterRenko I use an MTFBrickFactor of 1.4 to produce a 3, 4 & 5 MTF set. On Tick set it to 3 or something to give usable values.

            I've posted a 100 Tick chart and 300 (MTFBrickFactor 3) just to confirm to myself that it is not something to do with BetterRenko. On the 100 Tick chart the MTF panel shows 100 tick at the bottom, then 300, then 900. Look at the 300 chart posted and see the mismatch in printed and non-printed markers.

            It demonstrates the problem completely. The MTF code shows markers for the current timeframe perfectly. However on the higher timeframes, it shows markers where there are none and doesn't show them where there are.

            Please, please, please help me to see where I am going wrong ....... it's driving me crazy!>!>!>!?!?!?

            This code has no dependencies so should build easily.
            Attached Files

            Comment


              #7
              Hello stevea94,

              To quickly assist, it is very helpful to add prints to your code that print all of the values and times that illustrate the issue.

              With the output and print we can quickly assist in helping to understand the behavior or to report an issue to our development if there is an issue.

              Below are two links on the forums. The first is to demonstrate how to use prints to understand behavior. The second uses this information to dig into the differences between real-time and replay data.

              Citizens of the NinjaTrader Community, A common question we hear from clients is 'why are results from backtest different from real-time or from market replay?'. Live orders are filled on an exchange with a trading partner on an agreed upon price based on market dynamics. Backtest orders are not using these market dynamics.


              Please add prints to your script, include the print code with your post, and include the output from the output window and I would be happy to assist you with analyzing the output.
              Chelsea B.NinjaTrader Customer Service

              Comment


                #8
                More debug .....

                Thanks for your engagement with this NinjaTrader_ChelseaB.

                I've added simple crossover prints to the base GoldenCross indicator and prints for each timeframe of the GoldenCrossMTF indicator. To make it a little clearer I've added an extra flag to the base GoldenCross indicator to tell it when it is being called by the MTF indicator. This allows it to print a slightly more detailed debug line showing the bar size that it is called in.

                Example output:

                GoldenCrossMTF MTFBrickFactor: 1.40
                GoldenCrossMTF Adding Slow Bars: 17, BrickSize: 4
                GoldenCrossMTF Adding VerySlow Bars: 17, BrickSize: 5
                GoldenCross - Cross UP at 28/12/2017-08:54:23
                GoldenCross - Cross DOWN at 28/12/2017-12:41:00
                GoldenCross - Cross UP at 28/12/2017-16:11:40
                GoldenCross - Cross DOWN at 28/12/2017-16:15:31
                GoldenCross - Cross UP at 28/12/2017-18:55:26
                GoldenCross - Cross DOWN at 29/12/2017-11:29:26
                GoldenCross - Cross UP at 29/12/2017-14:48:24
                GoldenCross - Cross DOWN at 29/12/2017-14:59:17
                GoldenCross - Cross UP at 29/12/2017-15:49:53
                GoldenCross - Cross DOWN at 29/12/2017-19:31:51
                GoldenCross MTF called timeframe: 3 - Cross UP at 28/12/2017-08:54:23
                GoldenCrossMTF Timeframe: 3 - Cross UP at 28/12/2017-08:54:23
                GoldenCrossMTF Timeframe: 4 - Cross UP at 28/12/2017-08:54:23
                GoldenCrossMTF Timeframe: 5 - Cross UP at 28/12/2017-08:54:45
                GoldenCross MTF called timeframe: 3 - Cross DOWN at 28/12/2017-12:41:00
                GoldenCrossMTF Timeframe: 3 - Cross DOWN at 28/12/2017-12:41:00
                GoldenCrossMTF Timeframe: 4 - Cross DOWN at 28/12/2017-12:41:00
                GoldenCross MTF called timeframe: 3 - Cross UP at 28/12/2017-16:11:40
                GoldenCrossMTF Timeframe: 3 - Cross UP at 28/12/2017-16:11:40
                GoldenCross MTF called timeframe: 3 - Cross DOWN at 28/12/2017-16:15:31
                GoldenCrossMTF Timeframe: 3 - Cross DOWN at 28/12/2017-16:15:31
                GoldenCrossMTF Timeframe: 4 - Cross DOWN at 28/12/2017-16:15:31
                GoldenCrossMTF Timeframe: 5 - Cross DOWN at 28/12/2017-16:17:00
                GoldenCross MTF called timeframe: 3 - Cross UP at 28/12/2017-18:55:26
                GoldenCrossMTF Timeframe: 3 - Cross UP at 28/12/2017-18:55:26
                GoldenCrossMTF Timeframe: 5 - Cross UP at 28/12/2017-18:56:07
                GoldenCross MTF called timeframe: 3 - Cross DOWN at 29/12/2017-11:29:26
                GoldenCrossMTF Timeframe: 3 - Cross DOWN at 29/12/2017-11:29:26
                GoldenCrossMTF Timeframe: 4 - Cross DOWN at 29/12/2017-11:34:27
                GoldenCross MTF called timeframe: 3 - Cross UP at 29/12/2017-14:48:24
                GoldenCrossMTF Timeframe: 3 - Cross UP at 29/12/2017-14:48:24
                GoldenCrossMTF Timeframe: 4 - Cross UP at 29/12/2017-14:48:24
                GoldenCrossMTF Timeframe: 5 - Cross UP at 29/12/2017-14:48:24
                GoldenCross MTF called timeframe: 3 - Cross DOWN at 29/12/2017-14:59:17
                GoldenCrossMTF Timeframe: 3 - Cross DOWN at 29/12/2017-14:59:17
                GoldenCross MTF called timeframe: 3 - Cross UP at 29/12/2017-15:49:53
                GoldenCrossMTF Timeframe: 3 - Cross UP at 29/12/2017-15:49:53
                GoldenCross MTF called timeframe: 3 - Cross DOWN at 29/12/2017-19:31:51
                GoldenCrossMTF Timeframe: 3 - Cross DOWN at 29/12/2017-19:31:51
                The top three lines show the MF indicator starting up and adding in the 4 & 5 barsize series.

                The next 10 lines show the output of the GoldenCross indicator that is displaying directly on the chart.

                We then start to see the mixed output of the MTF indicator and the MTF calls to the base GoldenCross indicator. What is interesting here is that the base indicator only shows calls in the primary bar series timeframe i.e. 3. Yet at the same time we see that the MTF indicator is also showing that crosses have been detected in timeframes 4 & 5 at various points.

                What's going on here - I have no idea?

                I also note, although this is an issue for later, that since adjusting the code to NOT set the plots in the added timeframes, the plots for those now happen a bar late as they are processed on the next bar of the primary series. I guess I'll have to re-adjust for this later which seems an unnecessary extra step.

                However, in the first instance I'd really like to understand why I'm not seeing the output from the base GoldenCross indicator in the added timeframes (4 & 5) AND why the GoldenCrossMTF indicator seems to be making up entries for those same timeframes.

                I've added in the latest code as requested.

                Thanks in anticipation.

                Steve

                P.S. One thing on my mind is that I use the same object to call my base indicator from within the OnBarUpdate function in the MTF indicator without specifying which bar series to operate on. Could it be that this doesn't give enough information to NinjaTrader to allow it to process the right bars?
                Attached Files

                Comment


                  #9
                  That's that then.

                  Mmmmm ........ looks like that is it.

                  So the use of an object for accessing an indicator by a calling MTF indicator that is initialised in OnStateChange doesn't work. And on reflection I suppose (like these things often are) it's pretty obvious.

                  Instead of using an object, I simply use the indicator call directly in OnBarUpdate and all of a sudden my calls to the base indicator show up correctly and all of my fake marker prints disappear.

                  The offending line:

                  Code:
                  int ThisGoldenCross = GoldenCross.GoldenCross[0];
                  where GoldenCross is a previously defined object, is replaced by:

                  Code:
                  int ThisGoldenCross = smaGoldenCross(FastPeriod, SlowPeriod, true).GoldenCross[0];
                  Now the output (slightly reformatted but crucially now working) looks like:

                  GoldenCross timeframe: 4 - Cross UP at 26/12/2017-09:14:50
                  GoldenCross timeframe: 4 - Cross DOWN at 26/12/2017-10:41:47
                  GoldenCross timeframe: 4 - Cross UP at 26/12/2017-14:06:07
                  GoldenCross timeframe: 4 - Cross DOWN at 27/12/2017-08:24:51
                  GoldenCross timeframe: 4 - Cross UP at 27/12/2017-14:35:29
                  GoldenCross timeframe: 4 - Cross DOWN at 27/12/2017-16:29:20
                  GoldenCross timeframe: 4 - Cross UP at 28/12/2017-02:25:46
                  GoldenCross timeframe: 4 - Cross DOWN at 28/12/2017-16:00:34
                  GoldenCross timeframe: 4 - Cross UP at 28/12/2017-19:34:30
                  GoldenCross timeframe: 4 - Cross DOWN at 29/12/2017-13:53:57
                  GoldenCross timeframe: 4 - Cross UP at 29/12/2017-17:16:10
                  GoldenCrossMTF BarType: 17, BrickSize: 3, MTFBrickFactor: 1.40
                  GoldenCrossMTF Adding Slow BarType: 17, BrickSize: 4
                  GoldenCrossMTF Adding VerySlow BarType: 17, BrickSize: 5
                  GoldenCross timeframe: 3 - Cross UP at 28/12/2017-08:54:23
                  GoldenCross timeframe: 3 - Cross DOWN at 28/12/2017-12:41:00
                  GoldenCross timeframe: 3 - Cross UP at 28/12/2017-16:11:40
                  GoldenCross timeframe: 3 - Cross DOWN at 28/12/2017-16:15:31
                  GoldenCross timeframe: 3 - Cross UP at 28/12/2017-18:55:26
                  GoldenCross timeframe: 3 - Cross DOWN at 29/12/2017-11:29:26
                  GoldenCross timeframe: 3 - Cross UP at 29/12/2017-14:48:24
                  GoldenCross timeframe: 3 - Cross DOWN at 29/12/2017-14:59:17
                  GoldenCross timeframe: 3 - Cross UP at 29/12/2017-15:49:53
                  GoldenCross timeframe: 3 - Cross DOWN at 29/12/2017-19:31:51
                  GoldenCross timeframe: 3 (MTF called) - Cross UP at 28/12/2017-08:54:23
                  GoldenCrossMTF Timeframe: 3 - Cross UP at 28/12/2017-08:54:23
                  GoldenCross timeframe: 3 (MTF called) - Cross DOWN at 28/12/2017-12:41:00
                  GoldenCrossMTF Timeframe: 3 - Cross DOWN at 28/12/2017-12:41:00
                  GoldenCross timeframe: 4 (MTF called) - Cross UP at 28/12/2017-12:51:32
                  GoldenCrossMTF Timeframe: 4 - Cross UP at 28/12/2017-12:51:32
                  GoldenCross timeframe: 4 (MTF called) - Cross DOWN at 28/12/2017-14:46:00
                  GoldenCrossMTF Timeframe: 4 - Cross DOWN at 28/12/2017-14:46:00
                  GoldenCross timeframe: 5 (MTF called) - Cross UP at 28/12/2017-15:28:49
                  GoldenCrossMTF Timeframe: 5 - Cross UP at 28/12/2017-15:28:49
                  GoldenCross timeframe: 5 (MTF called) - Cross DOWN at 28/12/2017-15:46:15
                  GoldenCrossMTF Timeframe: 5 - Cross DOWN at 28/12/2017-15:46:15
                  GoldenCross timeframe: 3 (MTF called) - Cross UP at 28/12/2017-16:11:40
                  GoldenCrossMTF Timeframe: 3 - Cross UP at 28/12/2017-16:11:40
                  GoldenCross timeframe: 3 (MTF called) - Cross DOWN at 28/12/2017-16:15:31
                  GoldenCrossMTF Timeframe: 3 - Cross DOWN at 28/12/2017-16:15:31
                  GoldenCross timeframe: 3 (MTF called) - Cross UP at 28/12/2017-18:55:26
                  GoldenCrossMTF Timeframe: 3 - Cross UP at 28/12/2017-18:55:26
                  GoldenCross timeframe: 4 (MTF called) - Cross UP at 28/12/2017-19:34:30
                  GoldenCrossMTF Timeframe: 4 - Cross UP at 28/12/2017-19:34:30
                  GoldenCross timeframe: 5 (MTF called) - Cross UP at 29/12/2017-01:27:55
                  GoldenCrossMTF Timeframe: 5 - Cross UP at 29/12/2017-01:27:55
                  GoldenCross timeframe: 3 (MTF called) - Cross DOWN at 29/12/2017-11:29:26
                  GoldenCrossMTF Timeframe: 3 - Cross DOWN at 29/12/2017-11:29:26
                  GoldenCross timeframe: 4 (MTF called) - Cross DOWN at 29/12/2017-13:53:57
                  GoldenCrossMTF Timeframe: 4 - Cross DOWN at 29/12/2017-13:53:57
                  GoldenCross timeframe: 3 (MTF called) - Cross UP at 29/12/2017-14:48:24
                  GoldenCrossMTF Timeframe: 3 - Cross UP at 29/12/2017-14:48:24
                  GoldenCross timeframe: 3 (MTF called) - Cross DOWN at 29/12/2017-14:59:17
                  GoldenCrossMTF Timeframe: 3 - Cross DOWN at 29/12/2017-14:59:17
                  GoldenCross timeframe: 3 (MTF called) - Cross UP at 29/12/2017-15:49:53
                  GoldenCrossMTF Timeframe: 3 - Cross UP at 29/12/2017-15:49:53
                  GoldenCross timeframe: 4 (MTF called) - Cross UP at 29/12/2017-17:16:10
                  GoldenCrossMTF Timeframe: 4 - Cross UP at 29/12/2017-17:16:10
                  GoldenCross timeframe: 3 (MTF called) - Cross DOWN at 29/12/2017-19:31:51
                  GoldenCrossMTF Timeframe: 3 - Cross DOWN at 29/12/2017-19:31:51
                  Top 11 lines show the base GoldenCross indicator started on the 4 barsize chart. Next three lines show GoldenCrossMTF starting up. Next 10 (again) show the base indicator output from the primary series (3) chart. And then we are in to the MTF output showing clearly the calls to GoldenCross in the 3, 4 and 5 barsize series.

                  And signing off, I suppose this is yet another example of how just going through a process with a little prodding from others can help one find what one is looking for. Thanks to the prodder (NinjaTrader_ChelseaB) - now back to the booze as midnight on New Years eve rapidly approaches here in the UK.

                  Happy New Year!

                  Steve

                  Comment

                  Latest Posts

                  Collapse

                  Topics Statistics Last Post
                  Started by ghoul, Today, 06:02 PM
                  3 responses
                  13 views
                  0 likes
                  Last Post NinjaTrader_Manfred  
                  Started by jeronymite, 04-12-2024, 04:26 PM
                  3 responses
                  44 views
                  0 likes
                  Last Post jeronymite  
                  Started by Barry Milan, Yesterday, 10:35 PM
                  7 responses
                  20 views
                  0 likes
                  Last Post NinjaTrader_Manfred  
                  Started by AttiM, 02-14-2024, 05:20 PM
                  10 responses
                  180 views
                  0 likes
                  Last Post jeronymite  
                  Started by DanielSanMartin, Yesterday, 02:37 PM
                  2 responses
                  13 views
                  0 likes
                  Last Post DanielSanMartin  
                  Working...
                  X