But setting AssetMarketEnd to 1601 will then include the 1600-1630 bar (because open at 1600 will be within market hours)!?

BR_NOSHIFT and BR_LOCAL treating AssetMarketEnd differently makes them unusable together (+ BR_LEISURE) - which is the most common use case.

The market "ends" at 1600 - so i don't want to include the 1600-1630 bar into any calculations AND i would like to trade at market close, at 1600.

I understand the difference in treating time borders between bar timestamps and other 'time periods". Inconsistent, but changing might break prior code. Get that.

But BR_NOSHIFT is just a recently introduced functionality, just a flag; can be set/unset at will without any regard to legacy limitations.

PLEASE make BR_NOSHIFT AND BR_LOCAL interoperable. Or suggest a workable alternative.

Thank you!