We normally force our applications to use InvariantCulture, it seems FANET spawns each thread with machine culture. Is there any setting to set CultureInfo to a default value instead of machine culture?
It's not a FA issue. It's common behaviour of .Net threading api (http://msdn.microsoft.com/library/system.globalization.cultureinfo.currentculture%28v=vs.110%29.aspx). So if you are using .Net Framework >= 4.5, you can use DefaultThreadCurrentCulture property, otherwise you can manually firstly check (to avoid locks) and set locale in each FA callback.
Is there any option to switch on\off validation of tag value type (e.g. if a received massage contains 38=ten)?
Yes, there is the option
You also can use
from FIX Antenna's C++ API.
This option enables validation of field values format.
It works only if validation enabled (SessionExtraParameters::ValidationParameters::isEnabled_ is switched on).
Is it possible to start more than one instance of FIX Antenna C++?
Yes, it is. Inside one process it is possible to start only one instance of the FIX Engine. Number of processes with FIX Engine started is not limited.
Is it possible to create more than one instance of FIX Antenna C++ using the same logging directory?
Yes. However it is not recommended. Please note LogFileName parameter should be unique.
How to create FIX50, FIX50SP1 or FIX50SP2 session?
Following code demonstrates how to create session for FIX50, FIX50SP1 or FIX50SP2 protocol.
/* Creating FIX50 session. Replace FIX50 with FIX50SP1 or FIX50SP2 if required. */
Engine::Session* session = Engine::FixEngine::singleton()->createSession(&appl, "sender", "target", Engine::FIX50 );
May I put session log files to the log directory and expect that FIX Antenna C++ will analyze them when a new session with the same parameters is created?
Yes. FIX Antenna C++ loads all session information on session creation time.
FIX Antenna C++ was incorrectly terminated. I don't want the session to be restored on next start. What should I do for a clean start?
Delete session log files from logs folder by mask:
How can I do the customization (add user-defined fields, messages or change field and message definitions)?
User Defined Fields (the tag numbers 5000 to 9999) are handled like ordinary fields. User-defined FIX messages (e.g. U1, U2) are also handled like ordinary messages. All other messages can be customized in the way explained in the Protocol customization quick start
How to fix the "Repeating group fields out of order" error?
8=FIX.4.3 | 9=285 | 35=X | 49=FIXERBRIDGETRD1 | 34=1 | 57=B2BTEST1 | 52=99990909-17:17:17 | 268=4 | 269=2 | 270=9539.500000 | 271=1 | 272=20041208 | 273=13:34:10.000 | 290=1 | 269=4 | 27 0 =9539.500000 | 271=4294967295 | 272=20041208 | 273=13:34:10.000 | 290=1 | 269=Z | 270=9528.000000 | 271=401 | 290=1 | 269=Y | 270=0.000000 | 271=0 | 290=1 | 10=019 |
[ERROR] Repeating group fields out of order [RefSeqNum: 1, RefTagID: 269, RefMsgType: X]
Solution: The reason of this problem cannot be detected easily. The required fields of both FIX message itself and (AdditionalFields) group must be filled out with corresponding values and any gap or change in tag order leads to an error (it is true for both standard and custom messages). Therefore, both standard and additional group fields must be checked for validity and then processed again. Extra attention must be paid to the order of fields in the repeating FIX group. For this particular example: tag 290 is placed before tag 269 (wrong tag order).Place the 290 tag and its value after the tag 269 and process the message again to solve the problem.
How to remove Repeating Group?
Use one of the following methods. "tag" parameter is tag of leading field (field which contains size of the group).
- FIXMessage::remove( int tag ) to remove group from FIX message
- TagValue::remove( int tag ) to remove group from repeating group entry or from FIX message
- FIXGroup::remove( int tag ) to remove group from repeating group entry
How to change order of tags in a FIX message?
The order of tags in a FIX message is defined by their position in FIX protocol dictionaries. For example, if you would like to change default order of tags 44 (Price) and 15 (Currency) in Advertisement messages (35=7), then swap the position of tags under corresponding section:
Is it possible to send messages in onLogonEvent handler?
When session-acceptor receives a Logon message, the onLogonEvent is fired. Sending messages in this event handler causes session none graceful termination. The reason is that the FIX protocol requires the first message to be Logon. It is prohibited to send messages in onLogonEvent handler.
How to extend FIX message with repeating group defined in FIX protocol?
The AdditionalFields mechanism requires repeating the group specification fully. It is not enough to add a repeating group leading tag to add this group to the FIX message - all tags of this group have to be enumerated as well. For example the correct extension of the BF message is: Validation.AdditionalFields = FIX44:BF:386(336,625?)
Is it possible to use FixMessage and FixGroup after FixEngine::destroy() call?
It is prohibited to continue using FIXMessage and FixGroup objects after engine::destroy() call, you may only destroy them.
What is format of FIX dictionary (fixdict.xml) file?
Format of the FIX dictionary file (a.k.a fixdict.xml) is defined by set of XSD files:
Format of the conditionally required expression is similar to Pascal syntax. Example:
T$1414 > 0 and existtags(T$1415) or T$1415 in ('A', 'B')
Set of available functions/operators:
- existtags( T$<tag>, T$<tag>, ... )
- =, !=, <, >, >=, <=
- and, or, not
- T$<tag> - returns field value. Example: T$123.
Sample of XML protocol file: Creating protocol customization
Is there a way to enable ‘automatic reconnection’ in the case that the FIX-sessions drops? I want to reconnect as soon as the server or the connection is available again.
You can set reconnect count to -1. This will force FIX Antenna to reconnect infinitely. To interrupt reconnection call Session:: disconnectNonGracefully method.
How can I get message (std::vector<const Engine::TagValue*>) as string or set of fields? I have found only getFields() function, but it doesn’t implemented. I am also interesting how can I get any field by tag. For example I am trying to call getField(279) function and then toString() and I have got error message “Not supported: CharFiledValue::toString Tag 279.” How should I convert or get tag values?
There is currently no method to convert TagValue to string. Only FIXMessage can be represented as string.
When you are receiving “Not supported: CharFiledValue::toString” you should change your code to call FIXMessage::getAsChar. In general you should check type of the field in the FIX dictionary file and use appropriate getter method. Almost all FIX types and C++ types have same names. Exception is FIX::float. In C++ it is Engine::Decimal.
How to create multiple sessions with same Sender/Target?
In version 18.104.22.168 of FIX Antenna and newer, you should first create Engine::SessionId structure by passing Sender, Target and unique Session Qualifier to its constructor. Then call one of overloaded methods createSession() which accepts Engine::SessionId structure as one of arguments. See section "Session identifier" of the documentation for more details
What is Session Qualifier?
Session Qualifier is an extra identifier, which together with SenderCompID and TargetCompID uniquely identify session. In particular, this allow user creating several sessions with the same Sender/Target pair. See section "Session identifier" of the documentation for more details
Is it possible that FIX Antenna truncate some data?
Yes, it is. FIX Session can truncate tags that not defined in the fix dictionary if the option IgnoreUnknownFields = true.
But it is recommended to use this option. It avoids FIX Antenna using of heap memory during working with message fields.
If you want to avoid truncation some tags, you can put them to the FIX dictionary to corresponging message.
The session *.in log file contains received message without any truncation (as it was received from socket).
Is there any end of day command, which resets sequence numbers, truncates database etc. for specific session on FA.NET?
Yes, there is Session::ResetSeqNum method. If you wish to reset sequences, you should call:
This methods creates new message storage file and resets message sequence numbers to initial value (in=1, out=1).
How to fix a problem when an application cannot receive multicast data (IGMP reports) through a VPN connection
This problem can be occurred on a client computer that is running Windows 7, Windows Server 2008 R2, Windows Vista, or Windows Server 2008. To resolve this issue you can download a hotfix from Microsoft, for more information read this articles:
I am getting the 'Exception from HRESULT: 0x80131515' when I try run my application built with FixAntenna .Net on Windows 7 (and higher).
You need to unlock the FixAntenna library.
To do it, please, refer to the article:
May I use environment variables as values of configuration parameters
Yes, please see How to configure properties with environment variables article for more details.