Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagehtml/xml
 <CopyField SourceField = "11" TargetField = "95005" />

There are two (mandatory) attributes: “SourceField” and “TargetField”. The action tries to copy tags within current FIX message. Absence of the source leads to whole rule failure.

Code Block
languagehtml/xml
 <CopyField SourceField="126" TargetField="432" Method="UTCToLocalDate"/>

The “Method” attribute contains the method name that uses for conversion during copying. The “UTCToLocalTime” means that the conversation from UTC time to LocalDate will be performed.

 

Code Block
languagehtml/xml
 <CopyField SourceField="18" TargetField="18" Method="Trim"/>

The “Trim” method trims spaces and tabs from SourceField and copies the resulted value into TargetField.

 

<RemoveField>  action

 

<RemoveField>
                <Val>7729</Val>
                <Val>7730</Val>
                <Val>7731</Val>
</RemoveField>
Code Block
languagehtml/xml
 

 

The action tries to remove given list of tags from the processed FIX message. Absence of the tag does not cause fail.

 

...


<MoveField> action

 

<TryMoveField SourceField ="11" TargetField ="95005" />
Code Block
languagehtml/xml
 

The action is short form for the following sequence of actions: <TryCopyField>, <RemoveField>. It is possible to use default value for missed tags. Use optional attribute “DefaultValue” for this case<CopyField>, <RemoveField>.

 

 

 

<AddOrUpdateField> action

 

Code Block
languagehtml/xml
 

There are two attributes: “Field” and “Value”. The action tries to insert tag into current FIX message. If tag exists, old value is overwritten

 

 

...

<AddField> action

 

<MoveField SourceField ="11" TargetField ="95005" />

The action is short form for the following sequence of actions: <CopyField>, <RemoveField>.

 

 

 

<AddOrUpdateField> action

 

<AddOrUpdateField
Code Block
languagehtml/xml
<AddField Field="56" Value="NONE"/>

There are two (mandatory) attributes: “Field” and “Value”. The action tries to insert inserts tag into current FIX message. If tag exists, old value is overwritten. 

 

<AddField> action

 

<AddField Field="56" Value="NONE"/>

There are two (mandatory) attributes: “Field” and “Value”. The action inserts tag into current FIX message. In case of presence of tag action fails.

In case of presence of tag action fails.

 

<ConditionalFieldAction> action

...

<ConditionalFieldAction> action evaluates Case’s SourceValues against “Field” tag. Based on result of the evaluation it copies “Value” to “Field”. “Field” attribute is optional; “SourceField” will be used if it is omitted.

 

<ConditionalFieldAction SourceField
Code Block
languagehtml/xml
<ConditionalFieldAction SourceField="167">
       

  <Case SourceValue=
”OPT”>

                <AddOrUpdateField Field=”461” Value=”OXXXX” />

        </Case>
        <Case SourceValue=”FUT”>

                < AddOrUpdateField Field=”461” Value=”FXXXX” />
        </Case>
        <Case SourceValue=”USTB”>
                < AddOrUpdateField Value=”TBILL” />
        </Case>
        <Case SourceValue=”RP”>

                < AddOrUpdateField Value=”REPO” />
        </Case>

</ConditionalFieldAction >
"OPT">
    <AddOrUpdateField Field="461" Value="OXXXX" />
  </Case>
  <Case SourceValue="FUT">
    <AddOrUpdateField Field="461" Value="FXXXX" />
  </Case>
  <Case SourceValue="USTB">
    <AddOrUpdateField Value="TBILL" />
  </Case>
  <Case SourceValue="RP">
    <AddOrUpdateField Value="REPO" />
  </Case>
</ConditionalFieldAction>

If (SecType (167) = 'OPT') CFICode (461) = 'OXXXX'.

If (SecType (167) = 'FUT') CFICode (461) = 'FXXXX'.

If (SecType (167) = 'USTB') SecType (167) = 'TBILL'.

If (SecType (167) = 'RP') SecType (167) = 'REPO'.

 

 

 

...

<RemoveFromField> action

 

...

Code Block
languagehtml/xml
<RemoveFromField Field="
18
55">

        <Val>T</Val>
        <Val>R</Val>
</DeleteStringFromField>

  <Val>.TO</Val>
  <Val>.V</Val>
</RemoveFromField>

This action removes values from a multi value string. Absence of the values does not cause fail.

<DeleteStringFromField Field="18" Delimiter=”|”>

        <Val>T</Val>

        <Val>R</Val>

</DeleteStringFromField>

The “Delimiter” attribute contains the delimiter used in multi value string. It is optional; default value is space.

 

1.1.9.     <AppendStringToField> action

 

<AppendStringToField Field="18">

        <Val>T</Val>
        <Val>R</Val>
</AppendStringToField>

This action combines a multi value string from given list of values.

In the example, values ‘T’ and ‘R’ will be added to existing tag 18.

<AppendStringToField Field="18" Delimiter =”|”>

        <Val>T</Val>

        <Val>R</Val>

</AppendStringToField>

The “Delimiter” attribute contains the delimiter used in multi value string. It is optional; default value is space.

1.1.10.   <KeepFields> action

 

<KeepFields Tags=”151, 14, 30” />

 

The “Tags” attribute is a list of tags, which are to be copied as is. This action is a short form for the sequence of TryCopyField actions with the SourceField attribute equals the TargetField one:

<TryCopyField SourceField=”151” TargetField=”151” />
<TryCopyField SourceField=”14” TargetField=”14” />
<TryCopyField SourceField=”30” TargetField=”30” />.

 

 

 

1.1.11.   <WeedField> action

 

<WeedField Field="18" />

 

This action replaces special characters in the given tag on the space character. The special characters are \t, \n, \r, \v, \f, \’ ,”. Absence of the tag does not cause fail.

1.1.12.   <CopySuffix> action

 

"<CopySuffix SourceField="55" TargetField ="65" />"

TSX specific action. It takes the suffix from SourceField and set it into TargetField.

 

1.1.13.   <AddEntry> action

 

<AddEntry Group=”453”>

        <Val Field=”448” Value=”MC0023711111” />

        <Val Field=”447” Value=”D” />

        <Val Field=”452” Value=”1” />

</AddEntry>

There are one (mandatory) attribute: “Group” that defined a repeating group. The action adds entry into this repeating group. Group tag is incremented after the addition.

<AddEntry Group=”453”>

        <Val Field=”448” SourceField=”109” />

        <Val Field=”447” Value=”D” />

        <Val Field=”452” Value=”1” />

</AddEntry>

The ‘SourceField’ attribute means that the value from tag 109 will be copied to the 448 tag.

1.1.14.   <UpdateEntry> action

 

<UpdateEntry Entry=”453[1]”>

        <Val Field=”448” SourceField=”109”/Val>

        <Val Field=”447” Value=”D”/Val>

        <Val Field=”452” Value=”1”/Val>

</UpdateEntry>

There are one (mandatory) attribute: “Entry” that defined an entry within a repeating group. The action adds or updates entry within the repeating group.

1.1.15.   <StopProcessing> action

 

<StopProcessing/>

 

The action just stops processing of current FIX message. The rest of the rules will be skip.

 

<StopProcessing ResultCode="94" Description="“Required tag missing: Price" />

More advanced version of the “StopProcessing” action; ResultCode and Description are used at BL layer (see <CreateReject /> action in BL configuration) to generate a reject message.

1.1.16.   <GenerateExternalClOrdID> action (RBC specific)

 

<GenerateExternalClOrdID Field="11" Action="compress" />

Here is an RBC specific action to generate client order id’s.

<GenerateExternalClOrdID Field="11" Action="decompress" />

 

1.1.17.   <GenerateExecID> action (RBC specific)

 

<GenerateExecID />

Here is an RBC specific action to generate ExecID’s.

Action impementation will set both 17 and 19 tags.

1.1.18.   <ConvertSymToCDN> action (RBC specific)

 

<ConvertSymToCDN />

Here is an RBC specific action. It converts the Symbol(55) as per Canadian symbology using the following table:

 

1.1.19.   <CustomAction> action (advanced)

 

<CustomAction Module=”custom.dll” Function = “CustomCLanguageFunction”/>

 

There are two mandatory attributes under <CustomAction> element. The first one – “Module” - contains the name of the external binary module. The second one – “Function” – defines C-linkage function name that will process this action. It returns Boolean value and gets FIX message as a parameter.

 

<CustomAction> element  will be introduced in Phase Two or on demand.

 

1.2.         Conditions and Actions referencing

 

There is common situation when conditions (or actions) are the same in two or more rules. To eliminate duplication just use <GlobalDef>, <ActionRef> and <ConditionRef> elements. See the following examples.

<GlobalDef>
        <Action Name = “RemoveAndAdd3000”>
                <RemoveField>
                        <Val>1028</Val>
                        <Val>1029</Val>
                        <Val>1030</Val>
                </RemoveField>
                <AddField Field=”3000” Value=”NONE”/>
        </Action>
        <Condition Name="IsOrderFlow">
                    <Inclusion>
                                <FieldEqualsTo Field = "35">
                                                <Val>D</Val>
                                                <Val>G</Val>
                                                <Val>F</Val>
                                                <Val>8</Val>
                                                <Val>9</Val>
                                </FieldEqualsTo>
                    </Inclusion>
                  <Exclusion/>
        </Condition>

</ GlobalDef >

….

<Rule Name=”RuleWithActionRef”>
        <Condition>

              <ConditionRef Name= “IsOrderFlow” />

        </Condition>
        <ActionIfTrue>
                    <ActionRef Name = "RemoveAndAdd3000" />
                    <MoveField SourceField ="11" TargetField ="95005" />
                  <StopProcessing/>
        </ActionIfTrue>               
</Rule>

 

In the very beginning of configuration file there is a <GlobalDef> element. It contains Action definition named as “RemoveAndAdd3000”. A bit further there is a rule named “RuleWithActionRef” which contains an action that referenced to the”RemoveAndAdd3000” action.

 

<ConditionRef> element has the same purposes but for conditions. See the “IsOrderCondition” under the GlobalDef element in this example.

 

 

 

...

 


<KeepFields> action

 

<KeepFields Tags=”151, 14, 30” />

 

The “Tags” attribute is a list of tags, which are to be copied as is. This action is a short form for the sequence of TryCopyField actions with the SourceField attribute equals the TargetField one:

<TryCopyField SourceField=”151” TargetField=”151” />
<TryCopyField SourceField=”14” TargetField=”14” />
<TryCopyField SourceField=”30” TargetField=”30” />.

 

 

 

<WeedField> action

 

<WeedField Field="18" />

This action replaces special characters in the given tag on the space character. The special characters are \t, \n, \r, \v, \f, \’ ,”. Absence of the tag does not cause fail.

 

<StopProcessing> action

 

<StopProcessing/>

 

The action just stops processing of current FIX message. The rest of the rules will be skip.

 

<StopProcessing ResultCode="94" Description="“Required tag missing: Price" />

More advanced version of the “StopProcessing” action; ResultCode and Description are used at BL layer (see <CreateReject /> action in BL configuration) to generate a reject message.

 


Multiple message transformation configurations

It is possible to define more than one file with rules. The exact list of file names is set up via BL XML configuration file. Rules are applied for processed message in the order they are appeared in the files.

 

...

Groups of rules and rule routing

Group of rules is a set of rules and / or other groups. It is possible to route FIX messages from concrete FIX session to given group of rules. Routing is set up via BL XML configuration.

 

 

<DllHandlers>        

...

Code Block
languagehtml/xml
<DllHandlers>
 <Handler Name="FixConvert" Description="FixConvert" DllName="
fixconvert
BLLanguageExtension.dll" RulesDir="D:/Products/FIXEdge/FixConvert/conf"
 />

</DllHandlers>

Here is fragment of BL config. There is “RBCCM” FixConverthandler declaration with additional parameter – path to the folder where all RBCCM FixConvert configs are.

 

 

Code Block
languagehtml/xml
<RuleGroup Name=
”CommonRules”>
                <UseRule Order = “0”>Add1000</UseRule>
                <UseRule Order = “1”>Add1001</UseRule>
                <UseRule Order = “2”>Add1002</UseRule>
</RuleGroup> 
"CommonRules">
  <UseRule>Add1000</UseRule>
  <UseRule>Add1001</UseRule>
  <UseRule>Add1002</UseRule>
</RuleGroup>

Here is a group named “CommonRules”.  <UseRule> element is referenced to concrete rules.

There is an optional integer attribute (“Order”) that defines the sequence of applied rules.

Code Block
languagehtml/xml
<RuleGroup Name=
”TNXRules”>
               
"TNXRules">
  <UseGroup>CommonRules</UseGroup>

               

  <UseRule Order =
“0”>TNXSpecific001<
 "0">TNXSpecific001</UseRule>

               

  <UseRule Order =
“1”>TNXSpecific002<
 "1">TNXSpecific002</UseRule>

               

  <UseRule Order =
“2”>TNXSpecific003<
 "2">TNXSpecific003</UseRule>


</RuleGroup>
 

Here is a group named “TNXRules”.  It contains the “CommonRules” group defined previously and 3 additional TNX specific rules. 

<UseGroup> element is referenced to concrete group of rules.

Code Block
languagehtml/xml
<RuleGroup Name=
”BMXRules”>
               
"BMXRules">
  <UseGroup>CommonRules</UseGroup>

               

  <UseRule Order =
“0”>BMXSpecific001<
 "0">BMXSpecific001</UseRule>

               

  <UseRule Order =
“1”>BMXSpecific002<
 "1">BMXSpecific002</UseRule>


</RuleGroup>

 

 

Here is a group named “BMXRules”.  It contains the “CommonRules” group defined previously and 2 additional BMX specific rules. 

 

...

BL configuration fragment::

Code Block
languagehtml/xml
<DllHandlers>
       

  <Handler Name="FixConvert" Description="FixConvert" DllName="fixconvert.dll" />

</DllHandlers>

<Rule>

        <Source>

        <FixSession

<Rule>
  <Source>
    <FixSession SenderCompID="TNX" TargetCompID=".*" />
       

  </Source>

        <Action>

             <HandlerAction

  <Action>
    <HandlerAction Name="FixConvert" RuleGroup =
”TNXRules”
"TNXRules" />
       

  </Action>

</Rule>

This BL-config rule runs all TNX rules agains all messages from TNX.