Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

EnterLongLimit and EnterShortLimit fail

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

    EnterLongLimit and EnterShortLimit fail

    Hi,

    Can anyone let me know as to in what circumstances EnterLongLimit and EnterShortLimit can fail? I'm very often getting nulls from those functions. Is there any programmatic way of getting more details as to what exactly fails?
    I've got the default (1 minute) and 4 additional (daily) series. Every day I select one of these daily series and submit a limit order i.e.
    EnterShortLimit(seriesIndex , true, contract, price, "short_entry");

    Quite often a null is returned and there doesn't seem to be any information what went wrong.
    Any help much appreciated

    Cheers,
    Ipso

    #2
    Hello ipso33,

    Originally posted by ipso33 View Post
    Hi,
    Can anyone let me know as to in what circumstances EnterLongLimit and EnterShortLimit can fail?
    Cheers,
    Ipso
    Yes, you can enable TraceOrders = true; in the strategies Initialize() method, and view output related to this using Tools > Output window. You are likely running into internal order handling rules, detailed here:
    Ryan M.NinjaTrader Customer Service

    Comment


      #3
      Originally posted by NinjaTrader_RyanM View Post
      Hello ipso33,

      Yes, you can enable TraceOrders = true; in the strategies Initialize() method, and view output related to this using Tools > Output window. You are likely running into internal order handling rules, detailed here:
      http://www.ninjatrader.com/support/h...d_approach.htm
      Thanks a lot. Looks like I'm somehow failing to remove orders that I don't need any more. Is there any way of iterating over all orders that have been submitted and are still in the system?

      Cheers,
      Ipso

      Comment


        #4
        There may be some C# techniques for this, but is beyond our scope of support. A related thread on our forums is available here:
        Support for the development of custom automated trading strategies using NinjaScript.


        CancelOrder() is looking for an IOrder object passed in, and this sample can help with the approach to using it:
        When using NinjaTrader's Enter() and Exit() methods, the default behavior is to automatically expire them at the end of a bar unless they are resubmitted to keep them alive. Sometimes you may want more flexibility in this behavior and wish to submit orders as live-until-cancelled. When orders are submitted as live-until
        Ryan M.NinjaTrader Customer Service

        Comment


          #5
          Originally posted by NinjaTrader_RyanM View Post
          There may be some C# techniques for this, but is beyond our scope of support.
          Ryan, thanks a lot for your help. Having been looking into the trace order log for most of the day today, I've become quite puzzled with this:

          11/02/2011 22:15:00 Entered internal PlaceOrder() method at 11/02/2011 22:15:00: BarsInProgress=4 Action=Buy OrderType=Limit Quantity=2 LimitPrice=955.3 StopPrice=0 SignalName='long_4' FromEntrySignal=''

          Cancelled custom managed order at 14/02/2011 15:55:00: Order='NT-00015/Backtest' Name='long_4' State=Working Instrument='EMD 09-11' Action=Buy Limit price=955.3 Stop price=0 Quantity=2 Strategy='TestFill' Type=Limit Tif=Gtc Oco='' Filled=0 Fill price=0 Token='17dfad8464184acb8e702681def67a52' Gtd='01/12/2099 00:00:00'

          14/02/2011 22:15:00 Entered internal PlaceOrder() method at 14/02/2011 22:15:00: BarsInProgress=4 Action=Buy OrderType=Limit Quantity=2 LimitPrice=966.2 StopPrice=0 SignalName='long_4' FromEntrySignal=''

          14/02/2011 22:15:00 Ignored PlaceOrder() method at 14/02/2011 22:15:00: Action=Buy OrderType=Limit Quantity=2 LimitPrice=966.2 StopPrice=0 SignalName='long_4' FromEntrySignal='' Reason='Exceeded entry signals limit based on EntryHandling and EntriesPerDirection properties'

          The sequence of events in my code is as follows:

          1) at 8:30 am open a long limit for the 4th series:

          m_order = EnterLongLimit(4, true, lots, price, "long_4");

          2) at 3:55 pm cancel the limit order (if not filled)

          CancelOrder(m_order);

          3) repeat the same next day.

          For me, it looks like the order for this instrument gets cancelled ("Cancelled custom managed order at ...") but somehow it still prevents a new long limit being accepted for this instrument. Could you shed some light as to what I might have done wrong here? May it be it's a NJ bug?? It's quite important to note that this behaviour doesn't occur for the 0th or 1st bar series.

          Thanks a lot!

          The timestamps may be a bit misleading. I'm logging all activities on the 1 min chart and there the timestamps are correct (i.e. all long limit submissions at 8:30 am and the cancel at 3:55 pm the same day)

          Cheers,
          Ipso

          Comment


            #6
            The message reported by TraceOrders for ignoring is:

            Reason='Exceeded entry signals limit based on EntryHandling and EntriesPerDirection properties'

            Have you checked these properties and feel NinjaTrader should be allowing these entries? If you feel there is a bug in NinjaTrader, please provide a simplified script and steps so that we can see the same on our end. Thank you.
            Ryan M.NinjaTrader Customer Service

            Comment


              #7
              Originally posted by NinjaTrader_RyanM View Post
              If you feel there is a bug in NinjaTrader, please provide a simplified script and steps so that we can see the same on our end. Thank you.
              Hi Ryan,

              I really hope it's my fault and it's easy to fix!

              The primary instrument is ES 09-11

              The settings are as here:



              What I want to achieve is:
              1) at 8.35 am submit a limit order
              2) at 3:55 pm close a position if order filled, cancel the order otherwise.
              3) repeat the next day

              Please have a look at line 65 - it says what to do to see the erroneous behaviour . I do hope it's my fault and you'll be able to point it out!


              Here's the code:

              Code:
              #region Using declarations
              using System;
              using System.ComponentModel;
              using System.Diagnostics;
              using System.Drawing;
              using System.Drawing.Drawing2D;
              using System.Xml.Serialization;
              using NinjaTrader.Cbi;
              using NinjaTrader.Data;
              using NinjaTrader.Indicator;
              using NinjaTrader.Gui.Chart;
              using NinjaTrader.Strategy;
              #endregion
              
              // This namespace holds all strategies and is required. Do not change it.
              namespace NinjaTrader.Strategy
              {
                  [Description("")]
                  public class TestStrategy : Strategy
                  {
              		private string contract2 = "YM 09-11";
              		private string contract3 = "TF 09-11";
              		private string contract4 = "EMD 09-11";
              		
              		#region Members
              		private bool m_logEnabled;
              		private IOrder m_order;
              		private int m_lots;
              		private int m_selectedInstrumentIndex;
              		#endregion
              
                      /// <summary>
                      /// This method is used to configure the strategy and is called once before any strategy method is called.
                      /// </summary>
                      protected override void Initialize()
                      {
              			// add time series
              			Add(PeriodType.Day, 1);
              			Add(contract2, PeriodType.Day, 1);
              			Add(contract3, PeriodType.Day, 1);
              			Add(contract4, PeriodType.Day, 1);
              			
              			m_order = null;
              			
              			m_logEnabled = true;
              			
              			m_lots = 2;
              			
                          CalculateOnBarClose = true;
              			TraceOrders        = true; 
                      }
              
                      /// <summary>
                      /// Called on each bar update event (incoming tick)
                      /// </summary>
                      protected override void OnBarUpdate()
                      {
              			if( BarsInProgress != 0 )
              				return;
              			
              			if( Time[0].Hour == 8 && Time[0].Minute == 35 )
              			{
              				Random random = new Random();
              				
                                              // CHANGE THIS TO ANYTHING > 1 TO SEE ERRORS
              				m_selectedInstrumentIndex = 1;//random.Next(1, 5);
              				
              				if( m_selectedInstrumentIndex != 0 )
              				{
              					switch ( random.Next() % 2 )	
              					{
              						case 0 :
              							double price = Closes[m_selectedInstrumentIndex][1];
              							logInfo("Longlimit: " + m_lots + ", at: " + price + ", name: long_" + m_selectedInstrumentIndex);
              							
              							m_order = EnterLongLimit(m_selectedInstrumentIndex, true, m_lots, price, "long_" + m_selectedInstrumentIndex); 
              							
              							if( m_order == null ) logInfo("**************** m_order == null **********************");
              							break;
              						case 1 :
              							price = Closes[m_selectedInstrumentIndex][1];
              							logInfo("Shortlimit: " + m_lots + ", at: " + price + ", name: short_" + m_selectedInstrumentIndex);
              							m_order = EnterShortLimit(m_selectedInstrumentIndex, true, m_lots, price, "short_" + m_selectedInstrumentIndex); 
              							
              							if( m_order == null ) logInfo("**************** m_order == null **********************");
              							
              							break;
              					}
              				}
              			}
              			else if( Time[0].Hour == 15 && Time[0].Minute == 55 )
              			{
              				if( Positions[m_selectedInstrumentIndex].MarketPosition != MarketPosition.Flat )
              				{
              					logInfo("Closing position at session close for instrumentIndex = " + m_selectedInstrumentIndex);
              					Positions[m_selectedInstrumentIndex].Close();
              				}
              					
              				if( m_order != null )
              				{
              					logInfo("Cancelling remaining limit order at session close for index = " + m_selectedInstrumentIndex);
              					CancelOrder(m_order);
              				}
              				else
              				{
              					logInfo("m_order == null");	
              				}
              			}
                      }
              		
              		protected override void OnExecution(IExecution execution) 
              		{ 
              			if( m_order != null && execution.Order != null && m_order.Token == execution.Order.Token ) 
              			{
              				Log(execution.ToString(), LogLevel.Information);	
              			}
              		}
              		
              		
              		private void logInfo(string text)
              		{
              			if(m_logEnabled) Log(Times[0][0].ToString() + " " + text, LogLevel.Information);	
              		}
                  }
              }
              Last edited by ipso33; 08-23-2011, 12:19 PM.

              Comment


                #8
                Sorry, I'm not sure what you feel NinjaTrader is doing incorrectly. The earlier message you posted is normal and expected when you try to submit an additional entry beyond what is allowed, depending on EntryHandling and EntriesPerDirection properties.

                You have it set to 1 EntryPerDirection and entry handling at AllEntries, which means only 1 entry per direction, regardless of signal name. What was the position at the time you submitted the order? Print (Position.MarketPosition);

                If your position is long at the time you submit an additional buy entry order, then it ignores the order every time (with the properties set as they are).
                Ryan M.NinjaTrader Customer Service

                Comment


                  #9
                  Hi Ryan

                  Originally posted by NinjaTrader_RyanM View Post
                  Sorry, I'm not sure what you feel NinjaTrader is doing incorrectly.
                  As per my understanding it ignores a limit order when there are neither open positions nor other limit orders.

                  Originally posted by NinjaTrader_RyanM View Post
                  The earlier message you posted is normal and expected when you try to submit an additional entry beyond what is allowed, depending on EntryHandling and EntriesPerDirection properties. You have it set to 1 EntryPerDirection and entry handling at AllEntries, which means only 1 entry per direction, regardless of signal name.
                  This is true assuming there is already a position open but there is not. That's what I find confusing. I'd find it a bit less confusing if I submitted a market order rather than limit.
                  If I add this :

                  Code:
                  foreach(Position p in Positions)
                  {
                    logInfo("position = " + p.MarketPosition);	
                  }
                  it prints out "position = Flat" five times, which is what I expect.

                  Given the code I sent, is there anything in it that would cause dangling positions or orders that are not visible using Ninja Trader API? The logic is pretty simple and IMHO there's really nothing that would allow such a situation.

                  Thanks for your help.

                  Edit:

                  some log entries that show this:

                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 Positions at session start
                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 08:35:00 Longlimit: 2, at: 951.8, name: long_4
                  23/08/2011 21:44:08|1|4|Execution='NT-00012' Instrument='EMD 09-11' Account='Backtest' Name='long_4' Exchange=Default Price=951.8 Quantity=2 Market position=Long Commission=0 Order='NT-00013' Time='11/02/2011 22:15:00'
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 Positions at session close
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 position = Long
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 Closing position at session close for instrumentIndex = 4
                  23/08/2011 21:44:08|1|4|11/02/2011 15:55:00 Cancelling remaining limit order at session close for index = 4
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 Positions at session start
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 08:35:00 Longlimit: 2, at: 955.3, name: long_4
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 Positions at session close
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 position = Flat
                  23/08/2011 21:44:08|1|4|14/02/2011 15:55:00 Cancelling remaining limit order at session close for index = 4
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 Positions at session start
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 position = Flat
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 Longlimit: 2, at: 966.2, name: long_4
                  23/08/2011 21:44:08|1|4|15/02/2011 08:35:00 **************** m_order == null
                  Last edited by ipso33; 08-23-2011, 01:46 PM.

                  Comment


                    #10
                    As per my understanding it ignores a limit order when there are neither open positions nor other limit orders.
                    Great, thanks for confirming. Next, will need to take the strategy and strip out anything that isn't critical in reproducing the issue, and verify using only supported properties. If multiseries is critical in reproducing, you can verify Positions for each series with the Positions[0] array http://www.ninjatrader.com/support/h.../positions.htm

                    Will need to hard code any added series in Initialize() as well.

                    You strategy has a lot of custom order management, so will need to see it simplified a good bit before we can investigate potential bug report with entry handling here. Strip out any switch statements, any random code, any custom methods, use only supported/documented techniques, and provide the steps so that we can see the same thing when running the strategy here.
                    Last edited by NinjaTrader_RyanM1; 08-23-2011, 02:07 PM.
                    Ryan M.NinjaTrader Customer Service

                    Comment


                      #11
                      Originally posted by NinjaTrader_RyanM View Post
                      Great, thanks for confirming. Next, will need to take the strategy and strip out anything that isn't critical in reproducing the issue, and verify using only supported properties.
                      Will need to hard code any added series in Initialize() as well.

                      You strategy has a lot of custom order management, so will need to see it simplified a good bit before we can investigate potential bug report with entry handling here. Strip out any switch statements, any random code, any custom methods, use only supported/documented techniques, and provide the steps so that we can see the same thing when running the strategy here.
                      Thanks. Hopefully the code below meets all the requirements set out above.

                      Code:
                      #region Using declarations
                      using System;
                      using System.ComponentModel;
                      using System.Diagnostics;
                      using System.Drawing;
                      using System.Drawing.Drawing2D;
                      using System.Xml.Serialization;
                      using NinjaTrader.Cbi;
                      using NinjaTrader.Data;
                      using NinjaTrader.Indicator;
                      using NinjaTrader.Gui.Chart;
                      using NinjaTrader.Strategy;
                      #endregion
                      
                      namespace NinjaTrader.Strategy
                      {
                          [Description("")]
                          public class TestStrategy : Strategy
                          {
                      		private string contract2 = "YM 09-11";
                      		private string contract3 = "TF 09-11";
                      		private string contract4 = "EMD 09-11";
                      		
                      		private IOrder m_order;
                      
                              protected override void Initialize()
                              {
                      			Add(PeriodType.Day, 1);
                      			Add(contract2, PeriodType.Day, 1);
                      			Add(contract3, PeriodType.Day, 1);
                      			Add(contract4, PeriodType.Day, 1);
                      			
                      			m_order = null;
                      			
                                  CalculateOnBarClose = true;
                      			TraceOrders        = true; 
                              }
                      
                              protected override void OnBarUpdate()
                              {
                      			if( BarsInProgress != 0 )
                      				return;
                      			
                      			if( Time[0].Hour == 8 && Time[0].Minute == 35 )
                      			{
                      				m_order = EnterShortLimit(4, true, 1, Closes[4][1], "short_4"); 
                      			}
                      			else if( Time[0].Hour == 15 && Time[0].Minute == 55 )
                      			{
                      				if( Positions[4].MarketPosition != MarketPosition.Flat )
                      				{
                      					Positions[4].Close();
                      				}
                      					
                      				if( m_order != null )
                      				{
                      					CancelOrder(m_order);
                      				}
                      			}
                              }
                          }
                      }

                      Comment


                        #12
                        Thanks for the assistance isolating this. Almost there, but will need to hard code all added series, and Position.Close() is not supported. To exit a position by a market order, need to use ExitLong() or ExitShort().
                        Ryan M.NinjaTrader Customer Service

                        Comment


                          #13
                          Originally posted by NinjaTrader_RyanM View Post
                          Thanks for the assistance isolating this. Almost there, but will need to hard code all added series, and Position.Close() is not supported. To exit a position by a market order, need to use ExitLong() or ExitShort().
                          What do you mean by saying Position.Close() not supported? Why is it part of the public interface of a public class then? Before answering please take into account that you're talking to a libraries designer

                          Thanks again for your help!

                          Here's the code:
                          Code:
                          #region Using declarations
                          using System;
                          using System.ComponentModel;
                          using System.Diagnostics;
                          using System.Drawing;
                          using System.Drawing.Drawing2D;
                          using System.Xml.Serialization;
                          using NinjaTrader.Cbi;
                          using NinjaTrader.Data;
                          using NinjaTrader.Indicator;
                          using NinjaTrader.Gui.Chart;
                          using NinjaTrader.Strategy;
                          #endregion
                          
                          namespace NinjaTrader.Strategy
                          {
                              [Description("")]
                              public class TestStrategy : Strategy
                              {
                          		private IOrder m_order;
                          
                                  protected override void Initialize()
                                  {
                          			Add(PeriodType.Day, 1);
                          			Add("YM 09-11", PeriodType.Day, 1);
                          			Add("TF 09-11", PeriodType.Day, 1);
                          			Add("EMD 09-11", PeriodType.Day, 1);
                          			
                          			m_order = null;
                          			
                                      CalculateOnBarClose = true;
                          			TraceOrders        = true; 
                                  }
                          
                                  protected override void OnBarUpdate()
                                  {
                          			if( BarsInProgress != 0 )
                          				return;
                          			
                          			if( Time[0].Hour == 8 && Time[0].Minute == 35 )
                          			{
                          				m_order = EnterShortLimit(4, true, 1, Closes[4][1], "short_4"); 
                          			}
                          			else if( Time[0].Hour == 15 && Time[0].Minute == 55 )
                          			{
                          				if( Positions[4].MarketPosition == MarketPosition.Long )
                          				{
                          					ExitLong();
                          				}
                          				else if( Positions[4].MarketPosition == MarketPosition.Short )
                          				{
                          					ExitShort(4, 1, "short_4", "");
                          				}
                          					
                          				if( m_order != null )
                          				{
                          					CancelOrder(m_order);
                          				}
                          			}
                                  }
                              }
                          }
                          Last edited by ipso33; 08-23-2011, 03:24 PM.

                          Comment


                            #14
                            We support documented NinjaScript in our help guide and reference samples on these forums. There is a lot more you can do in C# than we can provide support for. There are also items like Position.Close() that may be available but are not documented/supported. Users are free to use but at their own risk as the exact behavior may not be described, may break with a future release, or may have unintended consequences. Basically, if it's not documented, we cannot offer support for it.

                            Thanks for including this updated snippet. I will attempt to reproduce what you were seeing and update tomorrow.

                            One item I would change here is assigning null to your IOrder within Initialize(). Initialize() is called for ALL scripts, when working in Right Click > indicators screen or any of the strategy interfaces. For this reason it's typically reserved for setting script level properties and instantiating data series objects. You can include an initial value in the variables declaration.

                            private IOrder m_order = null;

                            If there are certain parts of your script you want executed only once, there is OnStartUp() handler for this:
                            Ryan M.NinjaTrader Customer Service

                            Comment


                              #15
                              Hi Ryan,

                              Thanks again - as always your answers are real eye-openers! Hope to see some feedback on the issue. In the meantime I've found a workaround. I've added 1-minute EMD series in addition to the existing 1-day series. Now I'm still looking for limit order price on dailies but submit and cancel limit orders on the 1-minute TF. Everything works just fine this way.

                              The changes I've made in bold below.

                              Code:
                              #region Using declarations
                              using System;
                              using System.ComponentModel;
                              using System.Diagnostics;
                              using System.Drawing;
                              using System.Drawing.Drawing2D;
                              using System.Xml.Serialization;
                              using NinjaTrader.Cbi;
                              using NinjaTrader.Data;
                              using NinjaTrader.Indicator;
                              using NinjaTrader.Gui.Chart;
                              using NinjaTrader.Strategy;
                              #endregion
                              
                              namespace NinjaTrader.Strategy
                              {
                                  [Description("")]
                                  public class TestStrategy : Strategy
                                  {
                              		private IOrder m_order = null;
                              
                                      protected override void Initialize()
                                      {
                              			Add(PeriodType.Day, 1);
                              			Add("YM 09-11", PeriodType.Day, 1);
                              			Add("TF 09-11", PeriodType.Day, 1);
                              			Add("EMD 09-11", PeriodType.Day, 1);
                              			[B]Add("EMD 09-11", PeriodType.Minute, 1);[/B]
                              			
                                          CalculateOnBarClose = true;
                              			TraceOrders        = true; 
                                      }
                              
                                      protected override void OnBarUpdate()
                                      {
                              			if( BarsInProgress != 0 )
                              				return;
                              			
                              			if( Time[0].Hour == 8 && Time[0].Minute == 35 )
                              			{
                              				m_order = EnterShortLimit([B]5[/B], true, 1, Closes[4][1], "short_4"); 
                              				
                              			}
                              			else if( Time[0].Hour == 15 && Time[0].Minute == 55 )
                              			{
                              				if( Positions[[B]5[/B]].MarketPosition == MarketPosition.Short )
                              				{
                              					ExitShort([B]5[/B], 1, "short_4", "");
                              				}
                              					
                              				if( m_order != null )
                              				{
                              					CancelOrder(m_order);
                              				}
                              			}
                                      }
                                  }
                              }

                              Comment

                              Latest Posts

                              Collapse

                              Topics Statistics Last Post
                              Started by fx.practic, 10-15-2013, 12:53 AM
                              5 responses
                              5,404 views
                              0 likes
                              Last Post Bidder
                              by Bidder
                               
                              Started by Shai Samuel, 07-02-2022, 02:46 PM
                              4 responses
                              95 views
                              0 likes
                              Last Post Bidder
                              by Bidder
                               
                              Started by DJ888, Yesterday, 10:57 PM
                              0 responses
                              7 views
                              0 likes
                              Last Post DJ888
                              by DJ888
                               
                              Started by MacDad, 02-25-2024, 11:48 PM
                              7 responses
                              159 views
                              0 likes
                              Last Post loganjarosz123  
                              Started by Belfortbucks, Yesterday, 09:29 PM
                              0 responses
                              8 views
                              0 likes
                              Last Post Belfortbucks  
                              Working...
                              X