@@ -1032,14 +1032,17 @@ public async Task BacktestEventTimesAreMonotonicallyIncreasing()
10321032 DateTime ? lastOrderTime = null ;
10331033 DateTime ? lastTradeTime = null ;
10341034 DateTime ? lastPnLTime = null ;
1035+ DateTimeOffset ? lastCandleTime = null ;
10351036
10361037 var tradeTimeErrors = new List < string > ( ) ;
10371038 var pnlTimeErrors = new List < string > ( ) ;
10381039 var orderTimeErrors = new List < string > ( ) ;
1040+ var candleTimeErrors = new List < string > ( ) ;
10391041
10401042 var orderCount = 0 ;
10411043 var tradeCount = 0 ;
10421044 var pnlCount = 0 ;
1045+ var candleCount = 0 ;
10431046
10441047 strategy . OrderReceived += ( sub , order ) =>
10451048 {
@@ -1068,6 +1071,21 @@ public async Task BacktestEventTimesAreMonotonicallyIncreasing()
10681071 lastTradeTime = time ;
10691072 } ;
10701073
1074+ connector . CandleReceived += ( sub , candle ) =>
1075+ {
1076+ if ( candle . State != CandleStates . Finished )
1077+ return ;
1078+
1079+ var time = candle . OpenTime ;
1080+ candleCount ++ ;
1081+
1082+ if ( lastCandleTime . HasValue && time < lastCandleTime . Value )
1083+ {
1084+ candleTimeErrors . Add ( $ "Candle[{ candleCount } ] OpenTime decreased: { lastCandleTime . Value : O} -> { time : O} ") ;
1085+ }
1086+ lastCandleTime = time ;
1087+ } ;
1088+
10711089 strategy . PnLReceived2 += ( s , pf , time , realized , unrealized , commission ) =>
10721090 {
10731091 pnlCount ++ ;
@@ -1100,16 +1118,17 @@ public async Task BacktestEventTimesAreMonotonicallyIncreasing()
11001118 Fail ( "Backtest did not complete in time" ) ;
11011119 }
11021120
1103- var totalEvents = orderCount + tradeCount + pnlCount ;
1121+ var totalEvents = orderCount + tradeCount + pnlCount + candleCount ;
11041122 IsTrue ( totalEvents > 0 , "Expected to receive some events" ) ;
11051123
1106- Console . WriteLine ( $ "Events: Orders={ orderCount } , Trades={ tradeCount } , PnL={ pnlCount } ") ;
1124+ Console . WriteLine ( $ "Events: Orders={ orderCount } , Trades={ tradeCount } , PnL={ pnlCount } , Candles= { candleCount } ") ;
11071125
1108- // Check within-type monotonicity for orders, trades, and PnL
1126+ // Check within-type monotonicity for orders, trades, PnL, and candles
11091127 var allErrors = new List < string > ( ) ;
11101128 allErrors . AddRange ( orderTimeErrors ) ;
11111129 allErrors . AddRange ( tradeTimeErrors ) ;
11121130 allErrors . AddRange ( pnlTimeErrors ) ;
1131+ allErrors . AddRange ( candleTimeErrors ) ;
11131132
11141133 if ( allErrors . Count > 0 )
11151134 {
0 commit comments