It's really up to you how you implement these modifiers and it heavily depends on your game, the type of stats and items you have. Aggregating by grouped type is probably the safest option, because values won't spike as fast as with an iterative approach. A calculation based on the order when you obtained a buff is probably a bad idea, because the user might get different stats with the same buffs (obtained in different order) and wonder why that's the case.
As far as I know, popular games like Diablo 2 aggregate by grouped type. Pretty much what you did in your first example.
However there are some things to consider:
- Armor and Weapon pieces usually have separate percentage-based calculations (eg. +60% damage on the weapon will be calculated for the weapon only (
fixed-damage * 1.6
) whereas +% damage modifiers on the armor will come into the calculation later. So basically the weapon(s) get evaluated first, resulting in the "base-damage" for the total damage calculation from skills, buffs and armor stats.
- An enemy could have a -40% physical damage modifier, which will only be evaluated once you hit that enemy. You'll deal
total-damage * 0.6
damage to the enemy. Enemy effects on you (eg. a curse or a buff vs. an enemy type) will be factored into your base stat calculation.
There's a pretty detailed list of how calculations work in Diablo 2 on the Arreat Summit website (scroll to "Character Attributes"). This might be a good starting-point for your own formulas.