Interesting. I was hoping for (b) because that's how it works in 2.35 where all the timestamps for tick/tock/run are the same.

Here's another log with priceClose(0) displayed.

As you can see, Bar 976 tick/TOCK has a timestamp of 1430, and yet the priceClose(0) of 3753.72 is actually from the end of Bar 976. This means regardless of timestamp tick/tock is getting prices at the end of Bar 976, which is 1432.

If you agree that this is the correct behavior, then I would submit that contactUpdate inside of tock should ALSO pull the contract chain at 1432, as options prices are mathematically linked to the UL price.

Imagine the BarPeriod=60, the UL price and corresponding options chain, inside tock, will be 1 hour apart!!! That's a big problem.

There was not a problem in 2.35 and prior versions.

Thanks.

Code

[2058] Bar[975] tick -- priceClose()[3707.86] [SPX] LastMonth[1] RunMonth[1] NewMonth[0]... 
[2058] Bar[975] TOCK -- priceClose()[3707.86] [SPX] LastMonth[1] RunMonth[1] NewMonth[0]... 
[975: Mon 21-02-01 14:30] 3727.72/3727.72\3703.61/3707.86 -0.01
[1430] Bar[975] run() -- price=3707.86

[1430] Bar[976] tick -- priceClose()[3753.72] [SPX] LastMonth[1] RunMonth[2] NewMonth[1]... 
[1430] Bar[976] TOCK -- priceClose()[3753.72] [SPX] LastMonth[1] RunMonth[2] NewMonth[1]... USE NEW T8: C:\Zorro\History\SPX-Options\\SPX_202102_m1.t8
[976: Mon 21-02-01 14:32] 3751.48/3753.72\3751.48/3753.72 -0.01
[1432] Bar[976] run() -- price=3753.72