The problem is that the injected "tradeEntry" context variable was not set before invoking the method. When you used @In(create=true), Seam instantiated the component for you and suck it in the context before injecting it into TradeManagerBean. Naturally, this calls the default constructor so all the fields are initialized accordingly: all nulls, etc.
How about having addTradeEntry() method should fill in the fields in TradeEntry?
I thought filling the fields in the backing bean was supposedly the job of Seam/JSF engine. How is it that the fields were still null after the form had been submitted?