Как указать провайдера / AllocAccount в NewOrderSingle - PullRequest
0 голосов
/ 17 июня 2019

Я пишу пример приложения для быстрого исправления и пытаюсь создать NewOrderSingle.Однако я получаю сообщение In от App -> OnMessgge .--> executeReport ->

8 = FIX.4.4 | 9 = 277 | 35 = 8 | 34 = 2 | 49 = FXALL| 52 = 20190617-11: 04:. 09,955 | 56 = PayPal | 6 = 0 | 11 = APPL12456S | 14 = 0 | 15 = САПР | 17 = REJECT-1003511248 | 31 | = 0 32 = 0 | 37 = REJECT.-1003511248 | 38 = 2 | 39 = 8 | 40 = 1 | 54 = 1 | 55 = USD / CAD | 58 = Неверный аккаунт (сопоставление аккаунта пользователя недействительно) | 60 = 20190617-11: 04: 09.928 | 64 = 20190628| 103 = 99 | 150 = 8 | 151 = 0 | 10 = 141 |

Вот мой запрос NewOrderSingle-

NewOrderSingle newOrder = new NewOrderSingle();
newOrder.set(new TransactTime(new Date()));

newOrder.set(new Symbol("USD/CAD"));
newOrder.set(new ClOrdID("APPL12456S"));
newOrder.set(new OrderQty(2));
// newOrder.set(new SettlDate("01-22-2019"));
newOrder.set(new SettlDate("20190628"));
newOrder.set(new HandlInst(HandlInst.MANUAL_ORDER));
newOrder.set(new Price(200.9d));

newOrder.set(new Currency("CAD"));
newOrder.set(new NoAllocs(1));
newOrder.set(new Side(Side.BUY));
newOrder.set(new OrdType(OrdType.MARKET));
newOrder.setField(new AllocAccount("test"));
newOrder.setField(new AllocShares(new Double("150")));
System.out.println("New order message send-before - ");

boolean sent = Session.lookupSession(sessionID).sendToTarget(newOrder, sessionID);
System.out.println("New order message send-after - " + sent);

Я указал AllocAccount, но не уверен, что янужно указать что-нибудь еще.Несколько вопросов

  1. Как мне указать пароль, соответствующий этой учетной записи.
  2. Как сервер узнает, что только авторизованные пользователи имеют доступ к этой учетной записи.
  3. Также есть способ сделать связь синхронной.Просмотр этого сообщения в файле журнала -

    15: 55: 23.318 [DefaultThreadPool-1] INFO quickfix.mina.NetworkingOptions Опция сокета: SocketSynchronousWrites = false

1 Ответ

2 голосов
/ 17 июня 2019

Это сообщение об ошибке:

58=Invalid Account (User Account Mapping not valid

исходит от вашего контрагента, а не от самой FIX. Они получили ваше сообщение, но им не понравилась информация, которую вы указали в полях.

FIX предназначен только для передачи сообщений, а не для гарантии того, что вы не испортили то, что вставили в них!

Вам необходимо просмотреть документацию вашего контрагента или, возможно, обратиться к его технической поддержке. Если бы мне пришлось угадывать, я бы сказал, что ваше значение «test» в AllocAccount не является именем действительной учетной записи.

На ваши вопросы:

  1. Как указать пароль, соответствующий этой учетной записи.

    Обычно вы используете тег 554 в сообщении для входа. Однако вам не нужно это для вашего контрагента. Вы уже подключены!

    Если у вас есть дополнительные вопросы, прочитайте документацию вашего контрагента еще раз.

  2. Как сервер узнает, что только авторизованные пользователи имеют доступ к этой учетной записи.

    Есть несколько способов. Они могут занести в белый список ваш IP-домен. Они могут заставить вас использовать имя пользователя / пароль в сообщении для входа. Они могут заставить вас использовать сертификат SSL. Что бы они ни делали, вы сделали это, , потому что вы уже подключились!

    Если у вас есть дополнительные вопросы, прочитайте документацию вашего контрагента еще раз.

  3. Также есть способ сделать связь синхронной. (включает сообщение об ошибке)

    Честно говоря, я не знаю, что означает это сообщение об ошибке, и я работаю с различными QuickFIXs в течение 10 лет. И это на самом деле не источник ваших проблем. Пока игнорируй.

...