Re: [Quickfix-developers] Custom message
Brought to you by:
orenmnero
|
From: Joerg T. <Joe...@ma...> - 2006-03-14 10:30:49
|
Hi Mike,
I missed some bits below:
"extends Message" refers to the definition of Message in the _same_ packa=
ge, ie
quickfix.fix40.Message in the case below.
If you have the new message in an own package, the line
public class CustomMessage extends Message
should be
public class CustomMessage extends quickfix.fixNN.Message
where NN is the appropriate FIX version the exchange is using (40..44).
Cheers, J=F6rg
>> I'm trying to connect to an exchange and they have a custom Trader Log=
in
>> message with a message type of CG. Has anybody created a custom messa=
ge
>> before? If so, could you send me a code sample or give me a few tips?
>=20
>=20
> I assume this message is outbound, ie to be sent to the exchange.
>=20
> The FIX messages for QF are generated by some XSLT and Ruby scripts fro=
m=20
> the FIX data dictionary. You could use these scripts to generate your=20
> own messages from a modified FIX4*.xml file, but I do not know how much=
=20
> tweaking is still needed to do this.
>=20
> If you just need one message, just copy a small message, ie=20
> NewOrderSingle and adapt it to your needs. I.e. for java code in=20
> quickfix/src/java/src/quickfix/fix40/NewOrderSingle.java:
>=20
> package quickfix.fix40;
> import quickfix.FieldNotFound;
> import quickfix.Group;
> import quickfix.field.*;
>=20
> public class NewOrderSingle extends Message
> {
> public NewOrderSingle()
> {
> getHeader().setField(new MsgType("D"));
> }
> public NewOrderSingle(
> quickfix.field.ClOrdID aClOrdID,
> quickfix.field.HandlInst aHandlInst,
> quickfix.field.Symbol aSymbol,
> quickfix.field.Side aSide,
> quickfix.field.OrderQty aOrderQty,
> quickfix.field.OrdType aOrdType ) {
>=20
> getHeader().setField(new MsgType("D"));
> set(aClOrdID);
> set(aHandlInst);
> set(aSymbol);
> set(aSide);
> set(aOrderQty);
> set(aOrdType);
> }
>=20
> public void set(quickfix.field.ClOrdID value)
> { setField(value); }
> public quickfix.field.ClOrdID get(quickfix.field.ClOrdID value)
> throws FieldNotFound
> { getField(value); return value; }
>=20
> ...
>=20
> Copy this to your code tree and adapt it, eg:
>=20
> package smith.mike...;
> import quickfix.FieldNotFound;
> import quickfix.Group;
> import quickfix.field.*;
>=20
> public class CustomMessage extends Message
> {
> public CustomMessage()
> {
> getHeader().setField(new MsgType("CG"));
> }
> public CustomMessage(
> quickfix.field.XXX field1, ... ) {
>=20
> getHeader().setField(new MsgType("CG"));
> set(field1);
> ...
> }
>=20
> public void set(quickfix.field.XXX value)
> { setField(value); }
> public quickfix.field.XXX get(quickfix.field.XXX value)
> throws FieldNotFound
> { getField(value); return value; }
>=20
> ...
>=20
> If you have repeating group, this is a bit more complicated.
>=20
> Now you can say
>=20
> message =3D new CustomMessage( value1, .... );
> Session.sendToTarget( message, sessionId ); ...
>=20
> If you want to receive such message, you have to update your data=20
> dictionary to include it
> and create your own MessageFactory to tell QF how to messages with=20
> MsgType=3DCG to a Java object.
>=20
> Please apply this to C# or C++ analogeously.
>=20
> Cheers, J=F6rg
>=20
--=20
Joerg Thoennes
http://macd.com
Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH
Fax : +49 (0)241 44597-10 Lothringer Str. 52, D-52070 Aachen
|