Запрос рыночных данных — исключение FieldNotFound

Я постоянно получаю FieldNotFound исключение при попытке подписаться на котировки символа Форекс. Хотя я добавил все необходимые теги и не только.

(А именно: MDReqID, SubscriptionRequestType, MarketDepth, NoMDEntryTypes, MDEntryType, NoRelatedSym, Symbol. Как указано здесь: http://www.onixs.biz/tools/fixdictionary/4.2/msgType_V_86.html)

Вот мой код:

Dim l_msg As New QuickFix42.MarketDataRequest(
 New MDReqID(System.Guid.NewGuid.ToString),
 New SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES),
 New MarketDepth(1))

l_msg.setField(New MDUpdateType(1))
l_msg.setField(New AggregatedBook(False))
l_msg.setField(New NoMDEntryTypes(2))
l_msg.setField(New MDEntryType("0"c))    
l_msg.setField(New NoRelatedSym(1))
l_msg.setField(New Symbol("EUR/USD"))

Session.sendToTarget(l_msg, SENDER_COMP_ID.Value, TARGET_COMP_ID.Value)

Что мне здесь не хватает?


person MichaelS    schedule 12.08.2011    source источник


Ответы (1)


Нашел проблему:

Метод toApp проверяет наличие дубликатов с помощью PossDupFlag. И если он не существует, создается исключение FieldNotFound.

Решение состоит в том, чтобы либо обернуть его условием, проверяющим, существует ли PossDupFlag, либо добавить это поле в сообщение перед отправкой:

Public Sub toApp(p_msg As QuickFix.Message, Param1 As QuickFix.SessionID) Implements QuickFix.Application.toApp
        Try
            Dim l_possDupFlag As New QuickFix.PossDupFlag

            If p_msg.isSetField(l_possDupFlag) Then
                p_msg.getHeader().getField(l_possDupFlag)
                If (l_possDupFlag.getValue()) Then
                    Dim donotsendEx As New QuickFix.DoNotSend
                    Throw donotsendEx
                End If
            End If            

        Catch ex As QuickFix.FieldNotFound
            Log.WriteLine("toApp", ex.ToString)
        Catch ex As Exception
            Log.WriteLine("toApp", ex.ToString)
        End Try
    End Sub
person MichaelS    schedule 12.08.2011