One boundary I'd make explicit is when a closing signal can actually fill. If that closing value arrives only after the close, shifting the signal one row still assumes a fill at a price already gone. I'd compare that result with the next available tradable quote, with matching timestamps for both legs.