One timing check I would add: moving WebRequest to OnTimer does not make it asynchronous. The same EA still waits for the response, so its local position management can be delayed too. I would test a deliberately slow API with a bounded timeout, then check how long management pauses and whether stale instructions are rejected when the response finally arrives. Broker-held stops and a local trailing rule are different protections during that pause.