Version 2.41 2026.02.10
1. CollectPositions loop fix
Replaced i++ with i-- so the loop correctly iterates from PositionsTotal()-1 down to 0.

2. Symbol filter
Added PositionGetString(POSITION_SYMBOL) == chartSymbol.
Only positions on the chart symbol are collected. Risk and catastrophic checks now use the correct symbol.

3. Margin handling
New input: MarginAlertLevel = 100.0 (0 = disabled).
New dashboard label: Margin, showing:
Margin: $X free when no positions
Margin: X% | $X free when there are positions
Alert when margin level falls below the threshold (only once until it recovers).
Margin label turns red when below the threshold.

4. State persistence
hourStart and initialPrice saved to global variables.
State survives EA restarts so price speed recovers within the same hour.
Symbol names with / (e.g. XAU/USD) are sanitized for global variable names.
LoadPersistedState() in OnInit, SavePersistedState() when the hour window resets in CalculatePriceSpeed().

Version updated to 2.41.