Probably all messages could be converted from
_enc.EncodeString(version);
_enc.EncodeString(contract.Symbol);
_enc.EncodeStringcontract.Exchange);
to something more declarative like:
msg = new TWSProtocolMessage {
{ 16 },
{ ctx.Contract.Symbol },
{ ctx.Contract.Exchange },
};
etc.