Как преобразовать строку в FIXMessage? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь изменить значение цены из сообщения QuickFix44.MarketDataSnapshotFullRefresh (тип W).

Я успешно преобразовал необработанное сообщение FIXMessage в строковый тип. Но есть ли способ вернуть его обратно в FIXMessage из строки после изменения значения?

Вот код, который я сделал до сих пор:

public void alterMarkup(QuickFix44.MarketDataSnapshotFullRefresh snapshot) 
{
    // convert FIXMessage to string type
    String message = System.Convert.ToString(snapshot);

    // retrieve the value to modify
    String a = message.Substring(message.LastIndexOf("269=0") + 10);
    String bid_value = a.Substring(0, a.IndexOf("\u0001"));

    String b = message.Substring(message.LastIndexOf("269=1") + 10);
    String ask_value = b.Substring(0, b.IndexOf("\u0001"));

    // alter the price
    Decimal deci_bid = System.Convert.ToDecimal(bid_value) + 0.1m;

    // NoMDEntries Group
    QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries group = new QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries();         

    group.setField(new QuickFix.MDEntryType(System.Convert.ToChar(QuickFix.MDEntryType.BID)));
    group.setField(new QuickFix.MDEntryPx(System.Convert.ToDouble(deci_bid)));
    group.setField(new QuickFix.MDEntrySize(0));
    group.setField(new QuickFix.MDEntryDate());
    group.setField(new QuickFix.MDEntryTime(DateTime.UtcNow));
    group.setField(new QuickFix.TradingSessionID());
    group.setField(new QuickFix.TradingSessionSubID());
    group.setField(new QuickFix.QuoteCondition(System.Convert.ToString(QuickFix.QuoteCondition.OPEN_ACTIVE)));
    group.setField(new QuickFix.MDEntryOriginator());
    group.setField(new QuickFix.QuoteEntryID());
    group.setField(new QuickFix.QuoteType(QuickFix.QuoteType.TRADEABLE)); 

    Console.WriteLine(snapshot);

    snapshot.replaceGroup(System.Convert.ToUInt32(deci_bid), group.field(), group);

    // print out from second time to compare
    Console.WriteLine(snapshot);
}

Я распечатал сообщения и перевел их на https://fixparser.targetcompid.com/.

Это оригинальное сообщение: Original message

Это измененное сообщение: Modified message

Из изображений мы можем заметить, что значение поля должно быть вставлено одно за другим. Если нет, он будет показывать только ноль там.

P.S. Есть ли способ изменить только MDEntryPx (как для BID, так и для OFFER) вместо изменения всей группы.

Я новичок в QuickFIX. Любая помощь будет оценена.

1 Ответ

1 голос
/ 10 апреля 2019

Почему вы пытаетесь преобразовать его в строку и обратно?

Это все правильные способы установки значения поля:

snapshot.MDEntryType = new MDEntryType('0');
snapshot.MDEntryType = new MDEntryType(MDEntryType.BID); //enum instead of char
snapshot.Set(new MDEntryType('0')) //can also use enum

Это все в документации.

...