Skip to content

Determine CME SBE message token by actingVersion #484

Closed
@chinsaiki

Description

@chinsaiki

In CME SBE xml, attribute "sinceVersion" of the messageHeader may have a smaller value than attribute "sinceVersion" of the field. For example, "sinceVersion" of the messageHeader is "2", but is "8" of the field "MDEntrySize":

    <ns2:message name="MDIncrementalRefreshSessionStatistics35" id="35" description="MDIncrementalRefreshSessionStatistics" blockLength="11" semanticType="X" sinceVersion="2">
        <field name="TransactTime" id="60" type="uInt64" description="Start of event processing time in number of nanoseconds since Unix epoch" offset="0" semanticType="UTCTimestamp"/>
        <field name="MatchEventIndicator" id="5799" type="MatchEventIndicator" description="Bitmap field of eight Boolean type indicators reflecting the end of updates for a given Globex event" offset="8" semanticType="MultipleCharValue"/>
        <group name="NoMDEntries" id="268" description="Number of entries in Market Data message" blockLength="24" dimensionType="groupSize">
            <field name="MDEntryPx" id="270" type="PRICE" description="Market Data entry price" offset="0" semanticType="Price"/>
            <field name="SecurityID" id="48" type="Int32" description="Security ID " offset="8" semanticType="int"/>
            <field name="RptSeq" id="83" type="uInt32" description="MD Entry sequence number per instrument update" offset="12" semanticType="int"/>
            <field name="OpenCloseSettlFlag" id="286" type="OpenCloseSettlFlag" description="Flag describing IOP and Open Price entries" offset="16" semanticType="int"/>
            <field name="MDUpdateAction" id="279" type="MDUpdateAction" description="Market Data update action " offset="17" semanticType="int"/>
            <field name="MDEntryType" id="269" type="MDEntryTypeStatistics" description="Market Data entry type   " offset="18" semanticType="char"/>
            <field name="MDEntrySize" id="271" type="Int32NULL" description="Indicative Opening Quantity " offset="19" sinceVersion="8" semanticType="Qty"/>
        </group>
    </ns2:message>

But in OtfExample (cpp), messageTokens is decoded by templateId and actingVersion :
std::shared_ptr<std::vector<Token>> messageTokens = irDecoder.message(templateId, actingVersion);
and the actingVersion must equal to the value of the attribute "sinceVersion" of messageHeader:

if (token.signal() == Signal::BEGIN_MESSAGE && token.fieldId() == id && token.tokenVersion() == version)
{
   result = tokens;
}

That causes the massges with new fields and higher actingVersion cannot be specified correctly. So I wander whether the condition above should be:

token.tokenVersion() <= version

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions