Запрос рыночных данных - исключение FieldNotFound - PullRequest
0 голосов
/ 12 августа 2011

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

(К ним относятся: 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)

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

1 Ответ

0 голосов
/ 13 августа 2011

Обнаружена проблема:

Метод 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
...