Ok, I think I understand the idea. You need no arrays or linked lists for this. You can just store the group identifier, like 'M5Buy', in a free variable in the trade struct. For moving a trade from one group to another one, just change its group identifier. This would require only a few lines of code. You can access the list of all open trades with a for(open_trades) loop.

Anyway, to answer your questions - arrays:

1.i - no, the changes are permanent.
1.ii - yes.
2. - yes, the size of a dynamic array must be stored somewhere, it can not be determined from the array pointer.
3. - yes
4. - yes

Linked lists:

1. yes
2. yes
3. yes
4. no, it's not easier.