The usage in your trade enumeration loop is correct, only the rest is wrong.

Setting Tradevar in your code would normally crash, since you're writing into an undefined pointer. For preventing such crashes, Zorro keeps valid pointers for all internal variables. So you can in fact write into trade variables even with no trade, although it makes no sense. In your case you're probably getting the variables of the last valid trade pointer. That's why you see the written values at random in some of your trades.

You can manually set a trade pointer, it's ThisTrade, from an entered trade and then access all variables of this trade. That would work, but it's not the 'official' method.