2016-06-26 2 views
0

Im quickfix를 사용하여 수정 엔진에 연결하고 데이터를 수신합니다. 그러나 들어오는 시장 데이터는 태그가 두 번 나타난다는 내 앱에 의해 거절 당하고 있습니다. Quickfix에서 그룹에 새 열을 추가하는 방법?

20160624-12:44:36.770 : 8=FIX.4.49=21835=W34=2649=CfhDemoPrices52=20160624-12:44:37.79356=PrimoDEMOFIX55=GBPUSD262=PrimoApp13268=2269=0270=1.37203271=1500000290=164=20160628278=30/34-920771269=1270=1.37228271=1500000290=1278=30/34-92077610=038 
20160624-12:44:36.798 : 8=FIX.4.49=12635=334=2749=PrimoDEMOFIX52=20160624-12:44:36.79456=CfhDemoPrices45=2658=Tag appears more than once371=278372=W373=1310=139 

분석의 많은 후, 우리는 태그 (278) (MDEntryID가) fix44에서 NoMDEntries에 포함되지 않은 것을 발견했다. 해당 그룹의 필드를 내 quickfix에 포함시키고 다시 작성하려고합니다. 그걸 어떻게하는 지 아는가? 또는이 문제를 해결하기위한 귀하의 제안을 알려주십시오.

+0

다른 질문에서 이미 [this link] (http://quickfixn.org/tutorial/custom-fields-groups-and-messages.html)를 지적했습니다. DD 파일의 구조는 매우 간단합니다. NoMDEntries 그룹에 278을 추가하는 방법을 알아낼 수 있어야합니다. 할 수 없다면, 당신이 갇혀있는 곳을 말하십시오. –

+0

DD 파일에서 필요한 변경을 이미 마쳤습니다. "MarketDataSnapshotFullRefresh"msgtype = "W"msgcat = "app"> \t <필드 이름 = "MDEntryID"필수 = "N"/> \t <필드 이름 ="MDEntryType "필수 ="N "/> MDEntrySize "required ="N "/> 여전히 예상대로 작동하지 않습니다. –

+0

그 이유는 그룹을 확장하는 NoMDEntries 클래스에 필드를 추가해야하기 때문입니다. 그러나 그 때문에 나는 빠른 수정의 소스 코드가 필요할지도 모른다. 내가 맞습니까? –

답변

0

반복 그룹 작동 방식을 모르기 때문에 DD를 잘못 수정했습니다.

메시지의 표준 FIX44 DD입니다. 태그 번호를 나타내는 몇 가지 설명을 추가했습니다. 내부의 반복 그룹

<message name="MarketDataSnapshotFullRefresh" msgtype="W" msgcat="app"> 
    <field name="MDReqID" required="N" /> 
    <component name="Instrument" required="Y" /> 
    <group name="NoUnderlyings" required="N"> 
     <component name="UnderlyingInstrument" required="N" /> 
    </group> 
    <group name="NoLegs" required="N"> 
     <component name="InstrumentLeg" required="N" /> 
    </group> 
    <field name="FinancialStatus" required="N" /> 
    <field name="CorporateAction" required="N" /> 
    <field name="NetChgPrevDay" required="N" /> 
    <group name="NoMDEntries" required="Y">  <!-- 268 --> 
     <field name="MDEntryType" required="Y" /> <!-- 269 --> 
     <field name="MDEntryPx" required="N" /> <!-- 270 --> 
     <field name="Currency" required="N" /> 
     <field name="MDEntrySize" required="N" /> <!-- 271 --> 
     <field name="MDEntryDate" required="N" /> 

     ... and so on ... 

필드 소정의 순서로한다. QF가 그룹을 처리 할 때 예기치 않은 필드가 발견되면 그룹이 끝났다고 가정합니다.

DD가 송신자가 보내는 순서와 일치하지 않으므로 엔진이 오작동합니다.

귀하의 보낸 사람이 순서대로 필드를 보내는 :

268-> (group 1) 269 270 271 290 64 278 
     (group 2) 269 270 271 290 278 

합니다 (이 위의 거부 메시지에서 직접입니다.)

귀하의 DD 그러나 269 278 271 270을 기대하고있다. 278을 치자 마자 그룹이 끝나고 이상한 일이 일어나기 시작합니다.

DD를 기본값으로 되돌리고 나서 NoMDEntries 구성 요소에 64/SettlDate 및 278/MDEntryID를 추가하십시오. 제공해 주신 증거를 감안할 때, 거래 상대방이 해당 필드를 그룹 끝에 추가 한 것은 확실합니다.

분명히 이들은 상대방이 DD에게 행한 유일한 수정 사항은 아닙니다. 문서를 받아서 읽으십시오. 그런 다음 DD를 적절하게 수정하십시오.

+0

정말 고마워요. 나는 이것을 분명히 시험해보고 그 결과를 알려줄 것입니다. 질문이 하나 더 있는데 그것은 내 이해를위한 것입니다. 빠른 수정에는 NOMDEntries 그룹이라는 클래스가 있으며이 클래스에는 몇 가지 변수 집합이 있습니다. 그리고 디버깅 동안 나는 fix44에 MDEntryID가 없다는 것을 발견했습니다. 이로 인해 문제가 발생하거나 DD 만 수정하면 278 태그 오류가 해결 될 수 있습니다. –

+0

고마워요. 지금 일하고있다. 이제 반복되는 태그가 작동하는 방식과 유지해야하는 주문을 이해합니다. 이걸 가르쳐 주셔서 고맙습니다. 정말 도움이되었습니다. –

+0

NoMDEntriesGroup 클래스는 DD에서 생성됩니다. 당신은 * QF를 재생성하고 재구성 할 필요는 없지만, 당신이하지 않으면 당신은 64와 278을 얻는 꽤 좋은 방법을 가지지 못할 것입니다. 일반 GetStringField (278) 또는 GetIntField 또는 무엇이든 사용해야합니다 (해당 메서드 이름이 정확하지 않을 수도 있지만 이해할 수있을 것입니다). –