quickfix-developers Mailing List for QuickFIX (Page 164)
Brought to you by:
orenmnero
You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
|
Feb
(5) |
Mar
(16) |
Apr
(15) |
May
(17) |
Jun
(33) |
Jul
(35) |
Aug
(34) |
Sep
(19) |
Oct
(40) |
Nov
(51) |
Dec
(43) |
| 2003 |
Jan
(45) |
Feb
(79) |
Mar
(124) |
Apr
(121) |
May
(132) |
Jun
(77) |
Jul
(110) |
Aug
(57) |
Sep
(48) |
Oct
(83) |
Nov
(60) |
Dec
(40) |
| 2004 |
Jan
(67) |
Feb
(72) |
Mar
(74) |
Apr
(87) |
May
(70) |
Jun
(96) |
Jul
(75) |
Aug
(147) |
Sep
(128) |
Oct
(83) |
Nov
(67) |
Dec
(42) |
| 2005 |
Jan
(110) |
Feb
(84) |
Mar
(68) |
Apr
(55) |
May
(51) |
Jun
(192) |
Jul
(111) |
Aug
(100) |
Sep
(79) |
Oct
(127) |
Nov
(73) |
Dec
(112) |
| 2006 |
Jan
(95) |
Feb
(120) |
Mar
(138) |
Apr
(127) |
May
(124) |
Jun
(97) |
Jul
(103) |
Aug
(88) |
Sep
(138) |
Oct
(91) |
Nov
(112) |
Dec
(57) |
| 2007 |
Jan
(55) |
Feb
(35) |
Mar
(56) |
Apr
(16) |
May
(20) |
Jun
(77) |
Jul
(43) |
Aug
(47) |
Sep
(29) |
Oct
(54) |
Nov
(39) |
Dec
(40) |
| 2008 |
Jan
(69) |
Feb
(79) |
Mar
(122) |
Apr
(106) |
May
(114) |
Jun
(76) |
Jul
(83) |
Aug
(71) |
Sep
(53) |
Oct
(75) |
Nov
(54) |
Dec
(43) |
| 2009 |
Jan
(32) |
Feb
(31) |
Mar
(64) |
Apr
(48) |
May
(38) |
Jun
(43) |
Jul
(35) |
Aug
(15) |
Sep
(52) |
Oct
(62) |
Nov
(62) |
Dec
(21) |
| 2010 |
Jan
(44) |
Feb
(10) |
Mar
(47) |
Apr
(22) |
May
(5) |
Jun
(54) |
Jul
(19) |
Aug
(54) |
Sep
(16) |
Oct
(15) |
Nov
(7) |
Dec
(8) |
| 2011 |
Jan
(18) |
Feb
(9) |
Mar
(5) |
Apr
(5) |
May
(41) |
Jun
(40) |
Jul
(29) |
Aug
(17) |
Sep
(12) |
Oct
(23) |
Nov
(22) |
Dec
(11) |
| 2012 |
Jan
(8) |
Feb
(24) |
Mar
(5) |
Apr
(5) |
May
(6) |
Jun
(5) |
Jul
(5) |
Aug
(5) |
Sep
(2) |
Oct
(9) |
Nov
(2) |
Dec
(18) |
| 2013 |
Jan
(25) |
Feb
(16) |
Mar
(8) |
Apr
(2) |
May
(16) |
Jun
(17) |
Jul
(2) |
Aug
(13) |
Sep
(3) |
Oct
(4) |
Nov
(1) |
Dec
|
| 2014 |
Jan
(2) |
Feb
|
Mar
(22) |
Apr
(9) |
May
(3) |
Jun
(1) |
Jul
(5) |
Aug
(11) |
Sep
(18) |
Oct
(4) |
Nov
(4) |
Dec
(3) |
| 2015 |
Jan
(2) |
Feb
|
Mar
|
Apr
(3) |
May
(4) |
Jun
(37) |
Jul
|
Aug
(4) |
Sep
(6) |
Oct
(1) |
Nov
(4) |
Dec
(2) |
| 2016 |
Jan
(9) |
Feb
(3) |
Mar
(7) |
Apr
(1) |
May
(8) |
Jun
|
Jul
|
Aug
|
Sep
(7) |
Oct
(3) |
Nov
(16) |
Dec
|
| 2017 |
Jan
(1) |
Feb
(15) |
Mar
(2) |
Apr
(12) |
May
(4) |
Jun
(7) |
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
(23) |
Dec
(8) |
| 2018 |
Jan
(2) |
Feb
(4) |
Mar
(2) |
Apr
(8) |
May
(3) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
(5) |
Nov
(3) |
Dec
|
| 2020 |
Jan
|
Feb
(4) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
(12) |
Aug
(5) |
Sep
(3) |
Oct
(1) |
Nov
|
Dec
(1) |
| 2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2022 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2026 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: John H. <jhe...@bo...> - 2006-02-27 21:10:49
|
Looks like your sequence numbers are out of sync; your counterparty thinks your conversation is up to 425, and you're at 1. You need to have them reset, or somehow get your outgoing sequence number caught up. I have a Java utility I use with QF/J; I don't know whether there's something similar for 1.11.0. =20 BTW, I'd obscure the sender and target comp IDs too. Maybe I'm just paranoid. =20 John ________________________________ From: qui...@li... [mailto:qui...@li...] On Behalf Of Steinberg, Jonathan Sent: Monday, February 27, 2006 3:34 PM To: qui...@li... Subject: [Quickfix-developers] Session Resetting I am having a tough time with a session resetting itself=20 I am using Quickfix 1.11.0, quickifx_net wrappers with c#, VS2003. =20 Here is my config=20 =20 [DEFAULT] HeartBtInt=3D60 StartTime=3D10:00:00 EndTime=3D01:00:00 =20 [SESSION] ConnectionType=3Dinitiator SocketConnectHost=3Dxxx.xx.xxx.xxx=20 SocketConnectPort=3D17988 BeginString=3DFIX.4.0 TargetCompID=3DBOFA SenderCompID=3DBFPG ValidateFieldsOutOfOrder=3DN CheckLatency=3DN UseDataDictionary=3DN SessionQualifier=3DCASHDESK =20 =20 Here is the event log: =20 2006-02-24 05:00:36.587 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 05:00:36.650 Connection succeeded 2006-02-24 05:00:37.757 Initiated logon request 2006-02-24 05:00:37.837 Received logon response 2006-02-24 11:57:45.263 Disconnecting 2006-02-24 11:57:45.653 Socket Error 2006-02-24 11:58:07.747 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 11:58:07.763 Connection succeeded 2006-02-24 11:58:08.777 Initiated logon request 2006-02-24 11:58:08.980 Received logout request 2006-02-24 11:58:09.027 Sending logout response 2006-02-24 11:58:09.027 Disconnecting 2006-02-24 11:58:09.027 Socket Error 2006-02-24 11:58:37.760 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 11:58:38.760 Connection failed 2006-02-24 11:59:07.773 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 11:59:08.727 Connection failed =20 =20 Here are the incoming and outgoing logs: heartbeat out 2006-02-24 11:56:37.037 8=3DFIX.4.09=3D4935=3D034=3D42249=3DBFPG52=3D20060224-16:56:3756=3DBOFA10= =3D177 heartbeat in 2006-02-24 11:56:47.127 8=3DFIX.4.09=3D5435=3D049=3DBOFA56=3DBFPG34=3D41943=3DN52=3D20060224-16:5= 6:4710=3D167 heartbeat out 2006-02-24 11:57:37.170 8=3DFIX.4.09=3D4935=3D034=3D42349=3DBFPG52=3D20060224-16:57:3756=3DBOFA10= =3D179 logout out 2006-02-24 11:57:45.187 8=3DFIX.4.09=3D4935=3D534=3D42449=3DBFPG52=3D20060224-16:57:4556=3DBOFA10= =3D184 login out 2006-02-24 11:58:08.763 8=3DFIX.4.09=3D5935=3DA34=3D149=3DBFPG52=3D20060224-16:58:0856=3DBOFA98=3D= 0108=3D6010=3D120 logout in 2006-02-24 11:58:08.967 8=3DFIX.4.09=3D17835=3D549=3DBOFA56=3DBFPG34=3D42043=3DN52=3D20060224-16:= 58:0958=3DCatastr opic Error:=20 Incoming sequence number (1) is less than expected (425) without PossDupFlag being set. Logging=20 out.10=3D163 logout out 2006-02-24 11:58:09.013 8=3DFIX.4.09=3D4735=3D534=3D249=3DBFPG52=3D20060224-16:58:0856=3DBOFA10=3D= 078 =20 =20 I cannot figure out for the life of me why this session disconnected. =20 Additionally, the other system becomes unavailbable when this happens, and I see the outgoing messages on the follwing Monday (2/27) are logout messages again: 2006-02-27 05:00:26.943 8=3DFIX.4.09=3D4735=3D534=3D149=3DBFPG52=3D20060227-10:00:2656=3DBOFA10=3D= 061 which repeats until the other system resets itself. =20 How can I investigate the reason for the session reset?=20 Thanks for any help =20 =20 Jonathan Steinberg =20 =20 =20 =20 |
|
From: Dale W. <wil...@oc...> - 2006-02-27 21:05:22
|
Hi Francesco, Have you looked at the documentation for the configuration file at http://www.quickfixengine.org/quickfix/doc/html/configuration.html ResetOnLogout will force the sequence numbers back to 1 after a normal=20 logout. ResetOnDisconnect will force the sequence numbers aback to 1 after any=20 disconnect. These flags usually used on connections that do not need to recover=20 messages after a problem (i.e. market data feeds). Dale Fra...@mp... wrote: >QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/= index.html >QuickFIX Support: http://www.quickfixengine.org/services.html > >Hi there, >sorry for the question (maybe obvious), but I have to know how have I to >compile my config file; I'm experiencing this issue: If I connect to the >counterpart late in the morning, after a few order have been made, I see >that I can't retrieve them... Can someone explain to me the meaning of >each of these lines? > >SendResetSeqNumFlag=3D >ResetOnLogout=3D >ResetOnDisconnect=3D > >Thank you for your answers (and for your great job there). > > >Francesco Pispola > > > >http://www.mpsfinance.it >- - - - - - - - - - - - - - - - - - - - - - - - - - - - >Le informazioni contenute nel presente e-mail e nei documenti eventualme= nte >allegati sono confidenziali e sono comunque riservate al destinatario de= lle >stesse. La loro diffusione, distribuzione e/o copia da parte di terz= i =E8 >proibita e pu=F2 costituire violazione della normativa che tutela il di= ritto >alla privacy. Se avete ricevuto questa comunicazione per errore,= Vi >preghiamo di informare immediatamente il mittente del messaggio e= di >distruggere questo e-mail. >- - - - - - - - - - - - - - - - - - - - - - - - - - - - >This e-mail is confidential and it is legally privileged. If you have >received it in error, please notify us immediately by reply e-mail and t= hen >delete this message from your system. Please do not copy it or use it fo= r >any purposes, or disclose its contents to any other person. Mind that to= do >so could be a breach of Italian privacy Law. Thank you for your >co-operation. > > > > >------------------------------------------------------- >This SF.Net email is sponsored by xPML, a groundbreaking scripting langu= age >that extends applications into web and mobile media. Attend the live web= cast >and join the prime developer group breaking into this new coding territo= ry! >http://sel.as-us.falkag.net/sel?cmd=3Dk&kid=110944&bid$1720&dat=121642 >_______________________________________________ >Quickfix-developers mailing list >Qui...@li... >https://lists.sourceforge.net/lists/listinfo/quickfix-developers > =20 > --=20 ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |
|
From: Steinberg, J. <Jon...@bo...> - 2006-02-27 20:34:20
|
I am having a tough time with a session resetting itself I am using Quickfix 1.11.0, quickifx_net wrappers with c#, VS2003. Here is my config [DEFAULT] HeartBtInt=60 StartTime=10:00:00 EndTime=01:00:00 [SESSION] ConnectionType=initiator SocketConnectHost=xxx.xx.xxx.xxx SocketConnectPort=17988 BeginString=FIX.4.0 TargetCompID=BOFA SenderCompID=BFPG ValidateFieldsOutOfOrder=N CheckLatency=N UseDataDictionary=N SessionQualifier=CASHDESK Here is the event log: 2006-02-24 05:00:36.587 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 05:00:36.650 Connection succeeded 2006-02-24 05:00:37.757 Initiated logon request 2006-02-24 05:00:37.837 Received logon response 2006-02-24 11:57:45.263 Disconnecting 2006-02-24 11:57:45.653 Socket Error 2006-02-24 11:58:07.747 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 11:58:07.763 Connection succeeded 2006-02-24 11:58:08.777 Initiated logon request 2006-02-24 11:58:08.980 Received logout request 2006-02-24 11:58:09.027 Sending logout response 2006-02-24 11:58:09.027 Disconnecting 2006-02-24 11:58:09.027 Socket Error 2006-02-24 11:58:37.760 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 11:58:38.760 Connection failed 2006-02-24 11:59:07.773 Connecting to xxx.xx.xx.xxx on port 17988 2006-02-24 11:59:08.727 Connection failed Here are the incoming and outgoing logs: heartbeat out 2006-02-24 11:56:37.037 8=FIX.4.09=4935=034=42249=BFPG52=20060224-16:56:3756=BOFA10=177 heartbeat in 2006-02-24 11:56:47.127 8=FIX.4.09=5435=049=BOFA56=BFPG34=41943=N52=20060224-16:56:4710=167 heartbeat out 2006-02-24 11:57:37.170 8=FIX.4.09=4935=034=42349=BFPG52=20060224-16:57:3756=BOFA10=179 logout out 2006-02-24 11:57:45.187 8=FIX.4.09=4935=534=42449=BFPG52=20060224-16:57:4556=BOFA10=184 login out 2006-02-24 11:58:08.763 8=FIX.4.09=5935=A34=149=BFPG52=20060224-16:58:0856=BOFA98=0108=6010=120 logout in 2006-02-24 11:58:08.967 8=FIX.4.09=17835=549=BOFA56=BFPG34=42043=N52=20060224-16:58:0958=Catastr opic Error: Incoming sequence number (1) is less than expected (425) without PossDupFlag being set. Logging out.10=163 logout out 2006-02-24 11:58:09.013 8=FIX.4.09=4735=534=249=BFPG52=20060224-16:58:0856=BOFA10=078 I cannot figure out for the life of me why this session disconnected. Additionally, the other system becomes unavailbable when this happens, and I see the outgoing messages on the follwing Monday (2/27) are logout messages again: 2006-02-27 05:00:26.943 8=FIX.4.09=4735=534=149=BFPG52=20060227-10:00:2656=BOFA10=061 which repeats until the other system resets itself. How can I investigate the reason for the session reset? Thanks for any help Jonathan Steinberg |
|
From: <Fra...@mp...> - 2006-02-27 08:08:39
|
Hi there, sorry for the question (maybe obvious), but I have to know how have I t= o compile my config file; I'm experiencing this issue: If I connect to th= e counterpart late in the morning, after a few order have been made, I se= e that I can't retrieve them... Can someone explain to me the meaning of= each of these lines? SendResetSeqNumFlag=3D ResetOnLogout=3D ResetOnDisconnect=3D Thank you for your answers (and for your great job there). Francesco Pispola http://www.mpsfinance.it - - - - - - - - - - - - - - - - - - - - - - - - - - - - Le informazioni contenute nel presente e-mail e nei documenti eventualm= ente allegati sono confidenziali e sono comunque riservate al destinatario d= elle stesse. La loro diffusione, distribuzione e/o copia da parte di ter= zi =E8 proibita e pu=F2 costituire violazione della normativa che tutela il d= iritto alla privacy. Se avete ricevuto questa comunicazione per errore= , Vi preghiamo di informare immediatamente il mittente del messaggio = e di distruggere questo e-mail. - - - - - - - - - - - - - - - - - - - - - - - - - - - - This e-mail is confidential and it is legally privileged. If you have received it in error, please notify us immediately by reply e-mail and = then delete this message from your system. Please do not copy it or use it f= or any purposes, or disclose its contents to any other person. Mind that t= o do so could be a breach of Italian privacy Law. Thank you for your co-operation. = |
|
From: Sean K. <sea...@pi...> - 2006-02-24 17:11:29
|
Please ignore this post. Turns out this wasn't the issue.
-----Original Message-----
From: qui...@li... =
[mailto:qui...@li...]On Behalf Of =
Sean Kirkpatrick
Sent: Friday, February 24, 2006 11:30 AM
To: qui...@li...
Subject: [Quickfix-developers] QF 1.11.0 bug in =
DEFINE_FIELD_TIMECLASS_NUM C++ macro
Hello All,=20
There is a minor bug in the DEFINE_FIELD_TIMECLASS_NUM macro in 1.11.0 =
(not sure if it was in previous versions as well).
Field.h - Line 474=20
NAME(const TYPE& value) : TOK##Field(NUM, value) {} \=20
should read:=20
NAME(const TYPE& value) : TOK##Field(NUM, value,false) {} \=20
This will carry through the default of showMilliseconds =3D false when a =
UtcTimeStampField is initialized with a value but milliseconds are not =
desired.
-S=20
|
|
From: Sean K. <sea...@pi...> - 2006-02-24 16:30:27
|
Hello All,
There is a minor bug in the DEFINE_FIELD_TIMECLASS_NUM macro in 1.11.0 =
(not sure if it was in previous versions as well).
Field.h - Line 474
NAME(const TYPE& value) : TOK##Field(NUM, value) {} \
should read:
NAME(const TYPE& value) : TOK##Field(NUM, value,false) {} \
This will carry through the default of showMilliseconds =3D false when a =
UtcTimeStampField is initialized with a value but milliseconds are not =
desired.
-S
|
|
From: Brad H. <Bra...@gb...> - 2006-02-22 21:57:09
|
Hi All, The quickfix bugtracker is painfully slow for me, often taking upwards of a minute to move between screens. Does anyone have this problem or is it just me? Regards, Brad. |
|
From: Steve B. <sb...@sm...> - 2006-02-22 21:22:01
|
Mike, Be sure you're retrieving the message type from the message header rather than the message body. Steve > -----Original Message----- > From: qui...@li...=20 > [mailto:qui...@li...] On=20 > Behalf Of Mike Smith > Sent: Wednesday, February 22, 2006 9:32 PM > To: qui...@li... > Subject: [Quickfix-developers] Extracting specific fields=20 > from a Message object >=20 > QuickFIX Documentation:=20 > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html >=20 > When implementing the public void toAdmin(Message message, SessionID > sessionID) method, I'm running into an issue. I want to pull out the > MsgType of the message into a string field, but keep getting compile > time errors. >=20 > Here is a code snippet... >=20 > MsgType msgType =3D new MsgType(); > Message.getString(msgType); >=20 > Here is the error.... > Error 2 The best overloaded method match for > 'QuickFix.Message.getString(int)' has some invalid arguments > C:\Source\QuickFix-Beta\QuickFixConsole\FIXLog.cs 20 13 > QuickFixConsole >=20 >=20 > I've tried this a number of ways, and can actually get it to=20 > compile, if > I code it this way... >=20 > MsgType msgType =3D new MsgType(); > Message.getFied(msgType); > String x =3D msgType.getValue(); >=20 > But then I get a runtime error saying the Field cannot be found. >=20 > I have verified that MsgType is in the message. When I do > message.ToString(), I can see the full message fine. >=20 > Any tips on how I can pull out specific field values from a Message > object? >=20 > Thanks, > Mike >=20 >=20 >=20 >=20 > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep=20 > through log files > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. =20 > DOWNLOAD SPLUNK! > http://sel.as-us.falkag.net/sel?cmd=3Dk&kid=103432&bid#0486&dat=121642 > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers >=20 |
|
From: Mike S. <MS...@rj...> - 2006-02-22 20:32:48
|
When implementing the public void toAdmin(Message message, SessionID sessionID) method, I'm running into an issue. I want to pull out the MsgType of the message into a string field, but keep getting compile time errors. Here is a code snippet... MsgType msgType =3D new MsgType(); Message.getString(msgType); Here is the error.... Error 2 The best overloaded method match for 'QuickFix.Message.getString(int)' has some invalid arguments C:\Source\QuickFix-Beta\QuickFixConsole\FIXLog.cs 20 13 QuickFixConsole I've tried this a number of ways, and can actually get it to compile, if I code it this way... MsgType msgType =3D new MsgType(); Message.getFied(msgType); String x =3D msgType.getValue(); But then I get a runtime error saying the Field cannot be found. I have verified that MsgType is in the message. When I do message.ToString(), I can see the full message fine. Any tips on how I can pull out specific field values from a Message object? Thanks, Mike |
|
From: Oren M. <or...@qu...> - 2006-02-22 17:29:39
|
QuickFIX makes no assumptions about what session you want to send your
message on. If there is only one session, it doesn't decide to send to
that session even if its the only one. It wants you to be explicit about
what session you intend to send to.
--oren
Mike Smith wrote:
> Alexander,
>
> Thanks for your quick response. I got it to work, but I’m still a bit
> confused.
>
> I tried sendToTarget(message, senderCompID, targetCompID) and that
> didn’t work.
>
> I then tried sendToTarget(message, senderCompID, targetCompID,
> qualifier) and that worked.
>
> I’ve only got one session active, so I would think that
> sendToTarget(message) would work fine.
>
> Also, the qualifier value that I put as the 4^th parameter of
> sendToTarget listed above is the same qualifier value I put when
> calling sendToTarget(message, qualifier), which didn’t work.
>
> Again, it is working now, and I greatly appreciate your help.
>
> Thanks,
>
> Mike
>
> ------------------------------------------------------------------------
>
> *From:* Alexander Gorbachev [mailto:ago...@ac...]
> *Sent:* Wednesday, February 22, 2006 11:03 AM
> *To:* Mike Smith; qui...@li...
> *Subject:* Re: [Quickfix-developers] Session.SendToTarget issue
>
> Hello,
>
> My guess is that you chose the wrong sendToTarget() method signature.
> In your method "GLOBEX" is a session qualifier. If "GLOBEX" is a
> targetCompId, than you need to use the sendToTarget(message,
> senderCompID, targetCompID).
>
> Best regards,
>
> Alexander
>
> ----- Original Message -----
>
> *From:* Mike Smith <mailto:MS...@rj...>
>
> *To:* qui...@li...
> <mailto:qui...@li...>
>
> *Sent:* Wednesday, February 22, 2006 5:44 PM
>
> *Subject:* [Quickfix-developers] Session.SendToTarget issue
>
> I’m just starting out with QuickFix, so I’m sure this is a very
> beginner level question.
>
> I’m coding in c# 2.0 and have setup my solution very much like the
> example executor solution. The only thing is, is that I’m
> instantiating a ThreadedSocketInitiator instead of an Acceptor,
> because I want to send out new orders, cancels, etc. I’m logging
> in fine and heartbeating, but when I build a new order message and
> try to send it, I get the following error.
>
> [QuickFix.SessionNotFound] = {"Exception of type
> 'QuickFix.SessionNotFound' was thrown."}
>
> From looking at the examples, I can’t see why I’m getting this
> error. I’ve verified that the SessionIdentifier is correct and I
> am heartbeating, so I know the session is active.
>
> Below is my code in Application.cs
>
> public class Application: MessageCracker, QuickFix.Application
>
> {
>
> public void onLogon(SessionID sessionID) { }
>
> public void onLogout(SessionID sessionID) { }
>
> public void toApp(Message message, SessionID sessionID) { }
>
> public void fromAdmin(Message message, SessionID sessionID) { }
>
> public void fromApp(Message message, SessionID sessionID) { }
>
> public void toAdmin(Message message, SessionID sessionID)
>
> {
>
> message.setField(new SenderSubID("060"));
>
> message.setField(new SenderLocationID("060"));
>
> message.setField(new TargetSubID("G"));
>
> message.setField(new RawData("HGY"));
>
> message.setField(new RawDataLength(3));
>
> }
>
> public void onCreate(SessionID sessionID) { }
>
> public void SendMessage(Message message)
>
> {
>
> Session.sendToTarget(message, "GLOBEX");
>
> }
>
> }
>
> SendMessage is called from an event handler in the main class.
>
> Here is the main class.
>
> class Program
>
> {
>
> #region "PRIVATE FIELDS"
>
> private Application application = new QuickFixConsole.Application();
>
> #endregion
>
> #region "ENTRYPOINT"
>
> static void Main(string[] args)
>
> {
>
> try
>
> {
>
> Program program = new Program();
>
> SessionSettings settings = new
> SessionSettings("C:\\Source\\backup\\API.NET\\Session.config");
>
> Application application = new QuickFixConsole.Application();
>
> MSSQLStoreFactory storeFactory = new MSSQLStoreFactory(settings);
>
> MessageFactory messageFactory = new DefaultMessageFactory();
>
> ScreenLogFactory logFactory = new ScreenLogFactory(true,true,true);
>
> ThreadedSocketInitiator initiator = new
> ThreadedSocketInitiator(application, storeFactory, settings,
> logFactory, messageFactory);
>
> initiator.start();
>
> Globex globex = new Globex("c:\\Orders", "*.FIX", new
> MessageHandler(program.Program_OnMessage));
>
> globex.StartProcessor();
>
> Console.WriteLine("press <enter> to quit");
>
> Console.Read();
>
> initiator.stop();
>
> }
>
> catch (Exception ex)
>
> {
>
> Console.WriteLine(ex.Message);
>
> }
>
> }
>
> #endregion
>
> #region EVENT HANDLERS
>
> private void Program_OnMessage(Message message)
>
> {
>
> try
>
> {
>
> application.SendMessage(message);
>
> //Session.sendToTarget(message, "GLOBEX");
>
> }
>
> catch (Exception ex)
>
> {
>
> throw ex;
>
> }
>
> }
>
> #endregion
>
> Any and all help is greatly appreciated.
>
> Thanks,
>
> Mike
>
|
|
From: Mike S. <MS...@rj...> - 2006-02-22 17:23:14
|
Alexander,
=20
Thanks for your quick response. I got it to work, but I'm still a bit
confused.
=20
I tried sendToTarget(message, senderCompID, targetCompID) and that
didn't work.
I then tried sendToTarget(message, senderCompID, targetCompID,
qualifier) and that worked.
=20
I've only got one session active, so I would think that
sendToTarget(message) would work fine. =20
=20
Also, the qualifier value that I put as the 4th parameter of
sendToTarget listed above is the same qualifier value I put when calling
sendToTarget(message, qualifier), which didn't work.
=20
Again, it is working now, and I greatly appreciate your help.
=20
Thanks,
Mike
=20
________________________________
From: Alexander Gorbachev [mailto:ago...@ac...]=20
Sent: Wednesday, February 22, 2006 11:03 AM
To: Mike Smith; qui...@li...
Subject: Re: [Quickfix-developers] Session.SendToTarget issue
=20
Hello,
=20
My guess is that you chose the wrong sendToTarget() method signature. In
your method "GLOBEX" is a session qualifier. If "GLOBEX" is a
targetCompId, than you need to use the sendToTarget(message,
senderCompID, targetCompID).
=20
Best regards,
Alexander
=20
----- Original Message -----=20
From: Mike Smith <mailto:MS...@rj...> =20
To: qui...@li...=20
Sent: Wednesday, February 22, 2006 5:44 PM
Subject: [Quickfix-developers] Session.SendToTarget issue
=20
I'm just starting out with QuickFix, so I'm sure this is a very
beginner level question.
=20
I'm coding in c# 2.0 and have setup my solution very much like
the example executor solution. The only thing is, is that I'm
instantiating a ThreadedSocketInitiator instead of an Acceptor, because
I want to send out new orders, cancels, etc. I'm logging in fine and
heartbeating, but when I build a new order message and try to send it, I
get the following error.
=20
[QuickFix.SessionNotFound] =3D {"Exception of type
'QuickFix.SessionNotFound' was thrown."}
=20
From looking at the examples, I can't see why I'm getting this
error. I've verified that the SessionIdentifier is correct and I am
heartbeating, so I know the session is active.
=20
Below is my code in Application.cs
=20
public class Application: MessageCracker, QuickFix.Application
{
public void onLogon(SessionID sessionID) { }
public void onLogout(SessionID sessionID) { }
public void toApp(Message message, SessionID sessionID)
{ }
public void fromAdmin(Message message, SessionID
sessionID) { }
public void fromApp(Message message, SessionID
sessionID) { }
=20
public void toAdmin(Message message, SessionID
sessionID)
{
message.setField(new SenderSubID("060"));
message.setField(new SenderLocationID("060"));
message.setField(new TargetSubID("G"));
message.setField(new RawData("HGY"));
message.setField(new RawDataLength(3));
}
public void onCreate(SessionID sessionID) { }
=20
public void SendMessage(Message message)
{
Session.sendToTarget(message, "GLOBEX");
}
}
=20
SendMessage is called from an event handler in the main class.
=20
Here is the main class.
=20
class Program
{
#region "PRIVATE FIELDS"
=20
private Application application =3D new
QuickFixConsole.Application();
=20
#endregion
=20
#region "ENTRYPOINT"
=20
static void Main(string[] args)
{
try
{
Program program =3D new Program();
SessionSettings settings =3D new
SessionSettings("C:\\Source\\backup\\API.NET\\Session.config");
Application application =3D new
QuickFixConsole.Application();
MSSQLStoreFactory storeFactory =3D new
MSSQLStoreFactory(settings);
MessageFactory messageFactory =3D new
DefaultMessageFactory();
ScreenLogFactory logFactory =3D new
ScreenLogFactory(true,true,true);
ThreadedSocketInitiator initiator =3D new
ThreadedSocketInitiator(application, storeFactory, settings, logFactory,
messageFactory);
initiator.start();
=20
Globex globex =3D new Globex("c:\\Orders",
"*.FIX", new MessageHandler(program.Program_OnMessage));
globex.StartProcessor();
=20
Console.WriteLine("press <enter> to quit");
Console.Read();
initiator.stop();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
=20
#endregion
=20
#region EVENT HANDLERS
=20
private void Program_OnMessage(Message message)
{
try
{
application.SendMessage(message);
//Session.sendToTarget(message, "GLOBEX");
}
catch (Exception ex)
{
throw ex;
}
}
=20
#endregion
=20
Any and all help is greatly appreciated.
=20
Thanks,
Mike
=20
=20
=20
|
|
From: Alexander G. <ago...@ac...> - 2006-02-22 17:02:43
|
Hello,
My guess is that you chose the wrong sendToTarget() method signature. In =
your method "GLOBEX" is a session qualifier. If "GLOBEX" is a =
targetCompId, than you need to use the sendToTarget(message, =
senderCompID, targetCompID).
Best regards,
Alexander
----- Original Message -----=20
From: Mike Smith=20
To: qui...@li...=20
Sent: Wednesday, February 22, 2006 5:44 PM
Subject: [Quickfix-developers] Session.SendToTarget issue
I'm just starting out with QuickFix, so I'm sure this is a very =
beginner level question.
=20
I'm coding in c# 2.0 and have setup my solution very much like the =
example executor solution. The only thing is, is that I'm instantiating =
a ThreadedSocketInitiator instead of an Acceptor, because I want to send =
out new orders, cancels, etc. I'm logging in fine and heartbeating, but =
when I build a new order message and try to send it, I get the following =
error.
=20
[QuickFix.SessionNotFound] =3D {"Exception of type =
'QuickFix.SessionNotFound' was thrown."}
=20
From looking at the examples, I can't see why I'm getting this error. =
I've verified that the SessionIdentifier is correct and I am =
heartbeating, so I know the session is active.
=20
Below is my code in Application.cs
=20
public class Application: MessageCracker, QuickFix.Application
{
public void onLogon(SessionID sessionID) { }
public void onLogout(SessionID sessionID) { }
public void toApp(Message message, SessionID sessionID) { }
public void fromAdmin(Message message, SessionID sessionID) { =
}
public void fromApp(Message message, SessionID sessionID) { }
=20
public void toAdmin(Message message, SessionID sessionID)
{
message.setField(new SenderSubID("060"));
message.setField(new SenderLocationID("060"));
message.setField(new TargetSubID("G"));
message.setField(new RawData("HGY"));
message.setField(new RawDataLength(3));
}
public void onCreate(SessionID sessionID) { }
=20
public void SendMessage(Message message)
{
Session.sendToTarget(message, "GLOBEX");
}
}
=20
SendMessage is called from an event handler in the main class.
=20
Here is the main class.
=20
class Program
{
#region "PRIVATE FIELDS"
=20
private Application application =3D new =
QuickFixConsole.Application();
=20
#endregion
=20
#region "ENTRYPOINT"
=20
static void Main(string[] args)
{
try
{
Program program =3D new Program();
SessionSettings settings =3D new =
SessionSettings("C:\\Source\\backup\\API.NET\\Session.config");
Application application =3D new =
QuickFixConsole.Application();
MSSQLStoreFactory storeFactory =3D new =
MSSQLStoreFactory(settings);
MessageFactory messageFactory =3D new =
DefaultMessageFactory();
ScreenLogFactory logFactory =3D new =
ScreenLogFactory(true,true,true);
ThreadedSocketInitiator initiator =3D new =
ThreadedSocketInitiator(application, storeFactory, settings, logFactory, =
messageFactory);
initiator.start();
=20
Globex globex =3D new Globex("c:\\Orders", "*.FIX", =
new MessageHandler(program.Program_OnMessage));
globex.StartProcessor();
=20
Console.WriteLine("press <enter> to quit");
Console.Read();
initiator.stop();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
=20
#endregion
=20
#region EVENT HANDLERS
=20
private void Program_OnMessage(Message message)
{
try
{
application.SendMessage(message);
//Session.sendToTarget(message, "GLOBEX");
}
catch (Exception ex)
{
throw ex;
}
}
=20
#endregion
=20
Any and all help is greatly appreciated.
=20
Thanks,
Mike
=20
=20
=20
|
|
From: Mike S. <MS...@rj...> - 2006-02-22 16:44:22
|
I'm just starting out with QuickFix, so I'm sure this is a very beginner
level question.
=20
I'm coding in c# 2.0 and have setup my solution very much like the
example executor solution. The only thing is, is that I'm instantiating
a ThreadedSocketInitiator instead of an Acceptor, because I want to send
out new orders, cancels, etc. I'm logging in fine and heartbeating, but
when I build a new order message and try to send it, I get the following
error.
=20
[QuickFix.SessionNotFound] =3D {"Exception of type
'QuickFix.SessionNotFound' was thrown."}
=20
From looking at the examples, I can't see why I'm getting this error.
I've verified that the SessionIdentifier is correct and I am
heartbeating, so I know the session is active.
=20
Below is my code in Application.cs
=20
public class Application: MessageCracker, QuickFix.Application
{
public void onLogon(SessionID sessionID) { }
public void onLogout(SessionID sessionID) { }
public void toApp(Message message, SessionID sessionID) { }
public void fromAdmin(Message message, SessionID sessionID) { }
public void fromApp(Message message, SessionID sessionID) { }
=20
public void toAdmin(Message message, SessionID sessionID)
{
message.setField(new SenderSubID("060"));
message.setField(new SenderLocationID("060"));
message.setField(new TargetSubID("G"));
message.setField(new RawData("HGY"));
message.setField(new RawDataLength(3));
}
public void onCreate(SessionID sessionID) { }
=20
public void SendMessage(Message message)
{
Session.sendToTarget(message, "GLOBEX");
}
}
=20
SendMessage is called from an event handler in the main class.
=20
Here is the main class.
=20
class Program
{
#region "PRIVATE FIELDS"
=20
private Application application =3D new
QuickFixConsole.Application();
=20
#endregion
=20
#region "ENTRYPOINT"
=20
static void Main(string[] args)
{
try
{
Program program =3D new Program();
SessionSettings settings =3D new
SessionSettings("C:\\Source\\backup\\API.NET\\Session.config");
Application application =3D new
QuickFixConsole.Application();
MSSQLStoreFactory storeFactory =3D new
MSSQLStoreFactory(settings);
MessageFactory messageFactory =3D new
DefaultMessageFactory();
ScreenLogFactory logFactory =3D new
ScreenLogFactory(true,true,true);
ThreadedSocketInitiator initiator =3D new
ThreadedSocketInitiator(application, storeFactory, settings, logFactory,
messageFactory);
initiator.start();
=20
Globex globex =3D new Globex("c:\\Orders", "*.FIX", new
MessageHandler(program.Program_OnMessage));
globex.StartProcessor();
=20
Console.WriteLine("press <enter> to quit");
Console.Read();
initiator.stop();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
=20
#endregion
=20
#region EVENT HANDLERS
=20
private void Program_OnMessage(Message message)
{
try
{
application.SendMessage(message);
//Session.sendToTarget(message, "GLOBEX");
}
catch (Exception ex)
{
throw ex;
}
}
=20
#endregion
=20
Any and all help is greatly appreciated.
=20
Thanks,
Mike
=20
=20
=20
|
|
From: Kristin M. <men...@oc...> - 2006-02-21 22:49:20
|
OCI is currently accepting registrations for the following upcoming QuickFIX for C++ Developers public training event. The goals of this training class include: 1. Day One: To provide a general introduction of the FIX protocol, suitable for developers, business analysts, and managers. 2. Days Two & Three: To prepare C++ developers to fully utilize the functionality of the QuickFIX/C++ engine in their own environment. Event Details: Title: Intro to <http://www.ociweb.com/education/services/descrip/FINC01-01.html> FIX & QuickFIX for C++ Developers Dates: March 22-24, 2006 Times: 8:30am-3:30pm Location: OCI Education Center (St. Louis, MO) Online <http://www.ociweb.com/education/services/descrip/finc01-01/untitled?proxied Url=http%3A%2F%2Fwww.ociweb.com%2Feducation%2Fscripts%2Fregister.cgi%3Fcours eCode%3DFINC01-01%26type%3Done%26time%3D2006-03-22%252000%3A00%3A00;func=vie w> Registration Available Please contact me directly for additional information or to inquire about an onsite training event for your team. Best regards, Kristin Menefee Educational Services Manager Object Computing, Inc. (OCI) 314-579-0066 x203 tel 314-579-0065 fax www.ociweb.com/education ---------------------------------------- Great minds discuss ideas; Average minds discuss events; Small minds discuss people. --- Eleanor Roosevelt ---------------------------------------- |
|
From: Alvin W. <AW...@FF...> - 2006-02-21 21:28:33
|
Hi,
Does anyone happen to know if there is any open source library that can
handle (compose and parse) SWIFT message?
Or can anyone recommend a good commercial library? Has anyone heard of
c24?
Thanks
Alvin
**********************************************************************
This e-mail message is intended solely for the use of the addressee.
The message may contain information that is privileged and confidential.
Disclosure to anyone other than the intended recipient is
prohibited. If you are not the intended recipient, please do not
disseminate, distribute or copy this communication, by e-mail or
otherwise. Instead, please notify us immediately by return e-mail
(including the original message with your reply) and then delete
and discard all copies of the message. We have taken precautions to
minimize the risk of transmitting software viruses but nevertheless
advise you to carry out your own virus checks on any attachment to
this message. We accept no liability for any loss or damage caused
by software viruses.
**********************************************************************
|
|
From: Edde <edd...@gm...> - 2006-02-21 15:35:18
|
> > > If I read this correctly, you know you're going to do the recovery > before you start the application. That means that having the > counterparty send the messages sent during transmission time is wasted > effort, right? So I suggest that you clear the expected sequence > number *before* starting the application. That way QuickFIX will > allways request a retransmission from 1 thru infinity, and since > QuickFIX requested the retransmissions it will know what to do with them. Yes, that would probably be the best way to do this so I'll reimplement our system to use this when we have internet connection problems. You still have to address the issue of setting your sending sequence > number if your colleague sent any messages after he captured the file he > put on the FTP server and before the connection died. Do you have a way > to handle that? I don't think this can happen since the seqnums are stored after we've logged out from FIX which means no more messages are received. However, if it does happen I guess you can always bump up the seqnums manually just to be able to logon. Thanks, /Eddie Dale > > -- > ----------------------------------------------------- > Dale Wilson, Senior Software Engineer > Object Computing, Inc. (OCI) > http://www.ociweb.com/ http://www.theaceorb.com/ > ---------------------------------------------------- > > |
|
From: Joerg T. <Joe...@ma...> - 2006-02-21 15:02:32
|
Hi Martin,
> My fix application is using these initiator parameters. I want the=20
> session's seqnum to be reset once every day at start time.
Resetting sequence numbers means to start a new session, ie a FIX session=
starts with=20
number 1 and lasts until the sequence is reset to 1.
> [DEFAULT]
> ConnectionType=3Dinitiator
> ReconnectInterval=3D1
> FileStorePath=3DStore
> FileLogPath=3Dlogs
> UseDataDictionary=3DN
> ResetOnLogout=3DN
> ResetOnDisconnect=3DN
> StartDay=3Dmonday
> EndDay=3Dsaturday
Using StartDay and EndDay you request weeklong sessions, ie session start=
s on Monday
and ends on Saturday. Therefore, the reset is done only on Saturday.
> [SESSION]
> StartTime=3D12:00:00
> EndTime=3D00:00:01
> HeartBtInt=3D10
> BeginString=3DFIX.4.1
> SenderCompID=3DmySenderCompID
> TargetCompID=3DmyTargetID
> SocketConnectHost=3D some.ip
> SocketConnectPort=3Dsome.port
>=20
> What is happening, is that between each weekday, there is no session's=20
> seqnum reset. But on the TargetCompID side, they reset their seqnum=20
> every day. Is there another parameter to add other than ResetOnLogout=20
> or ResetOnDisconnect to get my session's seqnum reset everyday ?
Just remove the "StartDay" and "EndDay" in the DEFAULT section.
Cheers, J=F6rg
--=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
|
|
From: Dale W. <wil...@oc...> - 2006-02-21 14:45:14
|
Edde wrote: > Say that my colleague starts with the trading in the morning when the > market opens and then at lunch time I take over. Our procedure then is > for my colleague to put his seqnums file on a third-party FTP server > and before I start up my system I replace my existing seqnums with the > one he's put on FTP. When I connect using QuickFIX our counterparty > will send me any messages that it has sent during the transition > time but these I just discard. Instead I wait until our system has > completed it's startup and when all is complete I reset my incoming > sequence number (like you said) and do a complete resend of all > messages and thus recreating the whole session. If I read this correctly, you know you're going to do the recovery before you start the application. That means that having the counterparty send the messages sent during transmission time is wasted effort, right? So I suggest that you clear the expected sequence number *before* starting the application. That way QuickFIX will allways request a retransmission from 1 thru infinity, and since QuickFIX requested the retransmissions it will know what to do with them. You still have to address the issue of setting your sending sequence number if your colleague sent any messages after he captured the file he put on the FTP server and before the connection died. Do you have a way to handle that? Dale -- ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |
|
From: Martin T. <mta...@ho...> - 2006-02-21 14:07:04
|
Hi, My fix application is using these initiator parameters. I want the session's seqnum to be reset once every day at start time. [DEFAULT] ConnectionType=initiator ReconnectInterval=1 FileStorePath=Store FileLogPath=logs UseDataDictionary=N ResetOnLogout=N ResetOnDisconnect=N StartDay=monday EndDay=saturday [SESSION] StartTime=12:00:00 EndTime=00:00:01 HeartBtInt=10 BeginString=FIX.4.1 SenderCompID=mySenderCompID TargetCompID=myTargetID SocketConnectHost= some.ip SocketConnectPort=some.port What is happening, is that between each weekday, there is no session's seqnum reset. But on the TargetCompID side, they reset their seqnum every day. Is there another parameter to add other than ResetOnLogout or ResetOnDisconnect to get my session's seqnum reset everyday ? Thanks Martin |
|
From: Edde <edd...@gm...> - 2006-02-21 10:37:44
|
Hi Oren, > I don't see how your current system works. If you are swapping seqnum > files, QuickFIX wouldn't pass you the older messages anyway on account > of their sequence numbers being too low plus being marked PossDup. > QuickFIX will simply throw the old stuff away while only passing you the > new stuff. In effect making the extra resend request sort of > pointless. If you truly wanted to do this resend request, you would > have to reset your incoming sequence number. Let's see if I can try to clear things up a bit. Me and my colleague both work from home about 100km from each other. We both have fairly reliable broadband connections but they're certainly not perfect and dissruptions occur on a weekly basis. Say that my colleague starts with the trading in the morning when the marke= t opens and then at lunch time I take over. Our procedure then is for my colleague to put his seqnums file on a third-party FTP server and before I start up my system I replace my existing seqnums with the one he's put on FTP. When I connect using QuickFIX our counterparty will send me any messages that it has sent during the transition time but these I just discard. Instead I wait until our system has completed it's startup and whe= n all is complete I reset my incoming sequence number (like you said) and do = a complete resend of all messages and thus recreating the whole session. However, I understand from Dale's post that this is abusing the admin layer so a better solution would probably be to store the current state (all trades and active orders) at shutdown and then pass this "state" file along to FTP as well. Then I can recreate the state before connecting to my counterparty and when the connection is made I can simply start processing the messages as they arrive from QuickFIX and not play around with the admi= n layer at all. However, as Joerg pointed out in a later post, I still need a fail-over situation when the reason we swap is that my colleague's internet connectio= n is down. This means he can't put any state files on FTP so I have to recreate the state of the session relying on my counterparty alone. The onl= y way I've come up with to do this is by resending all messages from the star= t of the session but if someone has a better suggestion I'm all ears. > I would really look into writing a simple gateway so your two > applications can share the connection. I've though about this solution as well but the problem is where to put the gateway. If we'd put it at my place or my colleague's we'd rely on both our internet connections to work all the time which is definately not the case. Thanks for helping! Cheers, /Eddie --oren > > Edde wrote: > > > Hi Dale, > > > > Thanks for the quick reply. > > > > The reason we've gone through the hassel of resending all the messages > > is that we're too people working on our trading system. We work from > > two different locations and a couple of times a day we swap who's > > doing the actual trading. The current procedure when we swap is that > > we simply exchange the seqnums file and then since we do the complete > > ResendRequest the one taking over the trading will process the old > > messages and reach the current trading "state". > > However I realize know that I've been on the wrong path by doing this. > > Your first suggestion about reading the messages from the log seems > > pretty good to me. Is there a standardized way of doing this? For > example: > > > > 1) I don't really care about heartbeats etc so is there a > > specification somewhere which messages are significant when > reprocessing? > > 2) Are there any utility methods in QuickFIX to reproduce a FIX > > message from a String/character stream or similar? > > 3) I guess you need to maintain a list of all messages already > > processed so that you don't get duplicate processing of one or more > > messages? > > > > Thanks for your help, > > /Eddie > > > > > > On 2/20/06, *Dale Wilson* <wil...@oc... > > <mailto:wil...@oc...>> wrote: > > > > Hi Eddie > > > > Edde wrote: > > > > > Since it needed to resend 50000 messages this takes some time and > > > while this is in progress our system continues the startup > process. > > > I'm planning to rewrite this code ASAP but at the moment what we > do > > > after a major crash on either end is to clear all our databases > and > > > send a ResendRequest demanding all messages sent in the session: > > > > The problem is that a ResendRequest is an administrative-level > message > > and you are attempting to use it for an application-level purpose. > > TCP/IP will resend packets on occasion as part of it's error > recovery, > > but no one attempts to use this information to "replay" a TCP/IP > > session. THe same should be true for FIX. Communication stacks > work > > because the layers are kept distinct --- each one serving it's own > > purpose and interactinint with the layers above and below it throug= h > a > > well specified API. > > > > Unfortunately in FIX the two layers, admin and app, are not so > > clearly > > delineated and it tempts developers to cross the line. This > > is not the > > first time I have seen someone trying to use a ResendRequest for > this > > purpose. QuickFIX takes care of the administrative layer of the > > protocol for you, but if your application sends its own admin layer > > messages that QuickFIX doesn't know about, it gets confused (and > > rightly > > so!) > > > > You might be able to come up with a hack that works for this > > particular > > version of QuickFIX, but what ever you come up with there's no > > guarantee > > that it will work correctly in future versions of QuickFIX. > > > > That gets us to the question of, "what's the *right* way to fix thi= s > > problem.. > > > > Solution #1: read the day's messages fom the store or from the > > log and > > reprocess them. . > > > > Solution #2: define a "retransmit today's transactions" > message. You > > might define a new custom message type, or consider "twisting" an > > application level message for this purpose. (How about using > > "wildcard" > > order id's in an order status request.? ) You could even define a= n > > "End of retransamint" application level message (or field within a > > message). This, of course, assumes you have some influence on the > > software at the other end of the connection. Note that "misusing" > an > > application level message is much less of a sin than subverting an > > Admin > > message. Among other things it won't confuse QuickFIX. > > > > Solution #3: Trick QuickFIX into sending the resend request you > need > > -- reset the expected incoming sequence number to 1 without > > chaning the > > next sequence number to send. Do this before loggin in so only one > > "resed" will happen. > > > > > > Dale > > > > -- > > ----------------------------------------------------- > > Dale Wilson, Senior Software Engineer > > Object Computing, Inc. (OCI) > > http://www.ociweb.com/ http://www.theaceorb.com/ > > ---------------------------------------------------- > > > > > |
|
From: Dale W. <wil...@oc...> - 2006-02-20 17:04:11
|
Edde wrote: > Hi Dale, > > Thanks for the quick reply. > > The reason we've gone through the hassel of resending all the messages > is that we're too people working on our trading system. We work from > two different locations and a couple of times a day we swap who's > doing the actual trading. A simple solution: Share a disk and put the store directory on the shared disk so both workstations can access it. Dale > The current procedure when we swap is that we simply exchange the > seqnums file and then since we do the complete ResendRequest the one > taking over the trading will process the old messages and reach the > current trading "state". > However I realize know that I've been on the wrong path by doing this. > Your first suggestion about reading the messages from the log seems > pretty good to me. Is there a standardized way of doing this? For example: > > 1) I don't really care about heartbeats etc so is there a > specification somewhere which messages are significant when reprocessing? > 2) Are there any utility methods in QuickFIX to reproduce a FIX > message from a String/character stream or similar? > 3) I guess you need to maintain a list of all messages already > processed so that you don't get duplicate processing of one or more > messages? > > Thanks for your help, > /Eddie > > > On 2/20/06, *Dale Wilson* <wil...@oc... > <mailto:wil...@oc...>> wrote: > > Hi Eddie > > Edde wrote: > > > Since it needed to resend 50000 messages this takes some time and > > while this is in progress our system continues the startup process. > > I'm planning to rewrite this code ASAP but at the moment what we do > > after a major crash on either end is to clear all our databases and > > send a ResendRequest demanding all messages sent in the session: > > The problem is that a ResendRequest is an administrative-level message > and you are attempting to use it for an application-level purpose. > TCP/IP will resend packets on occasion as part of it's error recovery, > but no one attempts to use this information to "replay" a TCP/IP > session. THe same should be true for FIX. Communication stacks work > because the layers are kept distinct --- each one serving it's own > purpose and interactinint with the layers above and below it through a > well specified API. > > Unfortunately in FIX the two layers, admin and app, are not so > clearly > delineated and it tempts developers to cross the line. This > is not the > first time I have seen someone trying to use a ResendRequest for this > purpose. QuickFIX takes care of the administrative layer of the > protocol for you, but if your application sends its own admin layer > messages that QuickFIX doesn't know about, it gets confused (and > rightly > so!) > > You might be able to come up with a hack that works for this > particular > version of QuickFIX, but what ever you come up with there's no > guarantee > that it will work correctly in future versions of QuickFIX. > > That gets us to the question of, "what's the *right* way to fix this > problem.. > > Solution #1: read the day's messages fom the store or from the > log and > reprocess them. . > > Solution #2: define a "retransmit today's transactions" message. You > might define a new custom message type, or consider "twisting" an > application level message for this purpose. (How about using > "wildcard" > order id's in an order status request.? ) You could even define an > "End of retransamint" application level message (or field within a > message). This, of course, assumes you have some influence on the > software at the other end of the connection. Note that "misusing" an > application level message is much less of a sin than subverting an > Admin > message. Among other things it won't confuse QuickFIX. > > Solution #3: Trick QuickFIX into sending the resend request you need > -- reset the expected incoming sequence number to 1 without > chaning the > next sequence number to send. Do this before loggin in so only one > "resed" will happen. > > > Dale > > -- > ----------------------------------------------------- > Dale Wilson, Senior Software Engineer > Object Computing, Inc. (OCI) > http://www.ociweb.com/ http://www.theaceorb.com/ > ---------------------------------------------------- > > -- ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |
|
From: Joerg T. <Joe...@ma...> - 2006-02-20 16:05:15
|
Edde wrote:
> [...]
> So, for each message I receive between 56802 and 66426 QuickFIX
> automatically sends a new ResendRequest demanding all messages in the
> session. Obviously this is not good behaviour and I could work around t=
his
> if there is a way to know when the first ResendRequest has received all=
the
> messages it's expecting.
Hmmm, this reminds me of a behaviour fixed in 1.10.2: This version explic=
itely avoids=20
sending duplicate ResendRequest(N:Infinity) and logs the message "Already=
sent=20
ResendRequest. Not sending another". Maybe a newer version will improve t=
he situation.
While I understand Dales argument, not to abuse the session level for app=
lication level=20
recovery, this scenario could make sense in a fail-over situation.
BTW, a TestRequest with a unique has to be answered by a Heartbeat with t=
his unique id.
If you get this specific heartbeat, you know that the other side must hav=
e processed all=20
messages preceding this TestRequest. Of course, this does not prevent fur=
ther resend=20
processing at any later point of time.
Cheers, J=F6rg
--=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
|
|
From: Oren M. <or...@qu...> - 2006-02-20 15:58:53
|
I don't see how your current system works. If you are swapping seqnum files, QuickFIX wouldn't pass you the older messages anyway on account of their sequence numbers being too low plus being marked PossDup. QuickFIX will simply throw the old stuff away while only passing you the new stuff. In effect making the extra resend request sort of pointless. If you truly wanted to do this resend request, you would have to reset your incoming sequence number. in any case... 1) The Message class has isAdmin and isApp methods. Anything that returns true for isApp should be processed (or thrown out if isAdmin is true, however you want to look at it) 2) The constructor for the Message class takes in a string. 3) Is your system stateless? Is it ok to just process all messages when it loads up? If not you would essentially have to treat every message like it is marked PossResend and handle appropriately. I would really look into writing a simple gateway so your two applications can share the connection. --oren Edde wrote: > Hi Dale, > > Thanks for the quick reply. > > The reason we've gone through the hassel of resending all the messages > is that we're too people working on our trading system. We work from > two different locations and a couple of times a day we swap who's > doing the actual trading. The current procedure when we swap is that > we simply exchange the seqnums file and then since we do the complete > ResendRequest the one taking over the trading will process the old > messages and reach the current trading "state". > However I realize know that I've been on the wrong path by doing this. > Your first suggestion about reading the messages from the log seems > pretty good to me. Is there a standardized way of doing this? For example: > > 1) I don't really care about heartbeats etc so is there a > specification somewhere which messages are significant when reprocessing? > 2) Are there any utility methods in QuickFIX to reproduce a FIX > message from a String/character stream or similar? > 3) I guess you need to maintain a list of all messages already > processed so that you don't get duplicate processing of one or more > messages? > > Thanks for your help, > /Eddie > > > On 2/20/06, *Dale Wilson* <wil...@oc... > <mailto:wil...@oc...>> wrote: > > Hi Eddie > > Edde wrote: > > > Since it needed to resend 50000 messages this takes some time and > > while this is in progress our system continues the startup process. > > I'm planning to rewrite this code ASAP but at the moment what we do > > after a major crash on either end is to clear all our databases and > > send a ResendRequest demanding all messages sent in the session: > > The problem is that a ResendRequest is an administrative-level message > and you are attempting to use it for an application-level purpose. > TCP/IP will resend packets on occasion as part of it's error recovery, > but no one attempts to use this information to "replay" a TCP/IP > session. THe same should be true for FIX. Communication stacks work > because the layers are kept distinct --- each one serving it's own > purpose and interactinint with the layers above and below it through a > well specified API. > > Unfortunately in FIX the two layers, admin and app, are not so > clearly > delineated and it tempts developers to cross the line. This > is not the > first time I have seen someone trying to use a ResendRequest for this > purpose. QuickFIX takes care of the administrative layer of the > protocol for you, but if your application sends its own admin layer > messages that QuickFIX doesn't know about, it gets confused (and > rightly > so!) > > You might be able to come up with a hack that works for this > particular > version of QuickFIX, but what ever you come up with there's no > guarantee > that it will work correctly in future versions of QuickFIX. > > That gets us to the question of, "what's the *right* way to fix this > problem.. > > Solution #1: read the day's messages fom the store or from the > log and > reprocess them. . > > Solution #2: define a "retransmit today's transactions" message. You > might define a new custom message type, or consider "twisting" an > application level message for this purpose. (How about using > "wildcard" > order id's in an order status request.? ) You could even define an > "End of retransamint" application level message (or field within a > message). This, of course, assumes you have some influence on the > software at the other end of the connection. Note that "misusing" an > application level message is much less of a sin than subverting an > Admin > message. Among other things it won't confuse QuickFIX. > > Solution #3: Trick QuickFIX into sending the resend request you need > -- reset the expected incoming sequence number to 1 without > chaning the > next sequence number to send. Do this before loggin in so only one > "resed" will happen. > > > Dale > > -- > ----------------------------------------------------- > Dale Wilson, Senior Software Engineer > Object Computing, Inc. (OCI) > http://www.ociweb.com/ http://www.theaceorb.com/ > ---------------------------------------------------- > > |
|
From: Edde <edd...@gm...> - 2006-02-20 15:24:15
|
Hi Dale, Thanks for the quick reply. The reason we've gone through the hassel of resending all the messages is that we're too people working on our trading system. We work from two different locations and a couple of times a day we swap who's doing the actual trading. The current procedure when we swap is that we simply exchange the seqnums file and then since we do the complete ResendRequest the one taking over the trading will process the old messages and reach the current trading "state". However I realize know that I've been on the wrong path by doing this. Your first suggestion about reading the messages from the log seems pretty good to me. Is there a standardized way of doing this? For example: 1) I don't really care about heartbeats etc so is there a specification somewhere which messages are significant when reprocessing? 2) Are there any utility methods in QuickFIX to reproduce a FIX message fro= m a String/character stream or similar? 3) I guess you need to maintain a list of all messages already processed so that you don't get duplicate processing of one or more messages? Thanks for your help, /Eddie On 2/20/06, Dale Wilson <wil...@oc...> wrote: > > Hi Eddie > > Edde wrote: > > > Since it needed to resend 50000 messages this takes some time and > > while this is in progress our system continues the startup process. > > I'm planning to rewrite this code ASAP but at the moment what we do > > after a major crash on either end is to clear all our databases and > > send a ResendRequest demanding all messages sent in the session: > > The problem is that a ResendRequest is an administrative-level message > and you are attempting to use it for an application-level purpose. > TCP/IP will resend packets on occasion as part of it's error recovery, > but no one attempts to use this information to "replay" a TCP/IP > session. THe same should be true for FIX. Communication stacks work > because the layers are kept distinct --- each one serving it's own > purpose and interactinint with the layers above and below it through a > well specified API. > > Unfortunately in FIX the two layers, admin and app, are not so clearly > delineated and it tempts developers to cross the line. This is not the > first time I have seen someone trying to use a ResendRequest for this > purpose. QuickFIX takes care of the administrative layer of the > protocol for you, but if your application sends its own admin layer > messages that QuickFIX doesn't know about, it gets confused (and rightly > so!) > > You might be able to come up with a hack that works for this particular > version of QuickFIX, but what ever you come up with there's no guarantee > that it will work correctly in future versions of QuickFIX. > > That gets us to the question of, "what's the *right* way to fix this > problem.. > > Solution #1: read the day's messages fom the store or from the log and > reprocess them. . > > Solution #2: define a "retransmit today's transactions" message. You > might define a new custom message type, or consider "twisting" an > application level message for this purpose. (How about using "wildcard" > order id's in an order status request.? ) You could even define an > "End of retransamint" application level message (or field within a > message). This, of course, assumes you have some influence on the > software at the other end of the connection. Note that "misusing" an > application level message is much less of a sin than subverting an Admin > message. Among other things it won't confuse QuickFIX. > > Solution #3: Trick QuickFIX into sending the resend request you need > -- reset the expected incoming sequence number to 1 without chaning the > next sequence number to send. Do this before loggin in so only one > "resed" will happen. > > > Dale > > -- > ----------------------------------------------------- > Dale Wilson, Senior Software Engineer > Object Computing, Inc. (OCI) > http://www.ociweb.com/ http://www.theaceorb.com/ > ---------------------------------------------------- > > |
|
From: Dale W. <wil...@oc...> - 2006-02-20 14:16:27
|
Hi Eddie Edde wrote: > Since it needed to resend 50000 messages this takes some time and > while this is in progress our system continues the startup process. > I'm planning to rewrite this code ASAP but at the moment what we do > after a major crash on either end is to clear all our databases and > send a ResendRequest demanding all messages sent in the session: The problem is that a ResendRequest is an administrative-level message and you are attempting to use it for an application-level purpose. TCP/IP will resend packets on occasion as part of it's error recovery, but no one attempts to use this information to "replay" a TCP/IP session. THe same should be true for FIX. Communication stacks work because the layers are kept distinct --- each one serving it's own purpose and interactinint with the layers above and below it through a well specified API. Unfortunately in FIX the two layers, admin and app, are not so clearly delineated and it tempts developers to cross the line. This is not the first time I have seen someone trying to use a ResendRequest for this purpose. QuickFIX takes care of the administrative layer of the protocol for you, but if your application sends its own admin layer messages that QuickFIX doesn't know about, it gets confused (and rightly so!) You might be able to come up with a hack that works for this particular version of QuickFIX, but what ever you come up with there's no guarantee that it will work correctly in future versions of QuickFIX. That gets us to the question of, "what's the *right* way to fix this problem.. Solution #1: read the day's messages fom the store or from the log and reprocess them. . Solution #2: define a "retransmit today's transactions" message. You might define a new custom message type, or consider "twisting" an application level message for this purpose. (How about using "wildcard" order id's in an order status request.? ) You could even define an "End of retransamint" application level message (or field within a message). This, of course, assumes you have some influence on the software at the other end of the connection. Note that "misusing" an application level message is much less of a sin than subverting an Admin message. Among other things it won't confuse QuickFIX. Solution #3: Trick QuickFIX into sending the resend request you need -- reset the expected incoming sequence number to 1 without chaning the next sequence number to send. Do this before loggin in so only one "resed" will happen. Dale -- ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |