3

QuickFixJ に問題があります。問題は、ログオン メッセージを正しく送信できないことです。さらに、メッセージの流れを設定する方法を理解するのに苦労しています。取引を実行しようとしているのではなく、市場データを取得するだけです。

エラー:

20140123-22:55:56: No responder, not sending message:  

ここに私のすべての詳細があります:

着信: ネコ着信/*

8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231?220140123-22:55:56.470

発信:

20140123-22:55:50: Session FIXT.1.1:REDACTED-MD->NDXMD schedule is weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC
20140123-22:55:50: Created session: FIXT.1.1:REDACTED-MD->NDXMD
20140123-22:55:53: Initiated logon request
20140123-22:55:56: No responder, not sending message: 8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231
8=FIXT.1.19=8135=A34=149=REDACTED-MD52=20140123-22:55:52.64356=NDXMD98=0108=30141=Y1137=910=114
8=FIXT.1.19=8335=549=NDXMD56=REDACTED-MD52=20140123-22:55:53.75134=158=Missing field. Type 55310=054
8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231

そして私の標準出力は次のとおりです:J

an 23, 2014 10:55:37 PM REDACTED.REDACTEDMain main
INFO: REDACTED startup
Jan 23, 2014 10:55:49 PM quickfix.SessionSchedule <init>
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC
Successfully called onCreate for sessionId : FIXT.1.1:REDACTEDB-MD->NDXMD
Jan 23, 2014 10:55:50 PM quickfix.mina.NetworkingOptions logOption
INFO: Socket option: SocketTcpNoDelay=true
Jan 23, 2014 10:55:50 PM quickfix.mina.NetworkingOptions logOption
INFO: Socket option: SocketSynchronousWrites=false
Jan 23, 2014 10:55:50 PM quickfix.mina.NetworkingOptions logOption
INFO: Socket option: SocketSynchronousWriteTimeout=30000
Jan 23, 2014 10:55:51 PM quickfix.mina.initiator.IoSessionInitiator <init>
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] [web-fix.REDACTED.com/194.107.REDACTED:7170]
Jan 23, 2014 10:55:51 PM quickfix.mina.SessionConnector startSessionTimer
INFO: SessionTimer started
Sleeping for start() ....
Jan 23, 2014 10:55:51 PM quickfix.mina.initiator.InitiatorIoHandler sessionCreated
INFO: MINA session created for FIXT.1.1:REDACTEDB-MD->NDXMD: local=/10.215.87.15:34197, class org.apache.mina.transport.socket.nio.SocketSessionImpl, remote=web-fix.REDACTED.com/194.107.REDACTED:7170
Inside toAdmin
Message: 8=FIXT.1.19=8135=A34=149=REDACTEDB-MD52=20140123-22:55:52.64356=NDXMD98=0108=30141=Y1137=910=114
XML: <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<message>
<header>
<field tag="8"><![CDATA[FIXT.1.1]]></field>
<field tag="9"><![CDATA[81]]></field>
<field tag="34"><![CDATA[1]]></field>
<field tag="35"><![CDATA[A]]></field>
<field tag="49"><![CDATA[REDACTEDB-MD]]></field>
<field tag="52"><![CDATA[20140123-22:55:52.643]]></field>
<field tag="56"><![CDATA[NDXMD]]></field>
</header>
<body>
<field tag="98"><![CDATA[0]]></field>
<field tag="108"><![CDATA[30]]></field>
<field tag="141"><![CDATA[Y]]></field>
<field tag="1137"><![CDATA[9]]></field>
</body>
<trailer>
<field tag="10"><![CDATA[114]]></field>
</trailer>
</message>

Header: quickfix.fixt11.Message$Header@10f268de
Trailer: quickfix.Message$Trailer@1ac2cf83
Jan 23, 2014 10:55:53 PM quickfix.mina.AbstractIoHandler messageReceived
SEVERE: Invalid message: Can't determine ApplVerID for message
Jan 23, 2014 10:55:53 PM quickfix.Session disconnect
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] Disconnecting: IO Session closed
Successfully logged out for sessionId : FIXT.1.1:REDACTEDB-MD->NDXMD
Inside toAdmin
Message: 8=FIXT.1.19=11035=A34=249=REDACTEDB-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=232
XML: <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<message>
<header>
<field tag="8"><![CDATA[FIXT.1.1]]></field>
<field tag="9"><![CDATA[110]]></field>
<field tag="34"><![CDATA[2]]></field>
<field tag="35"><![CDATA[A]]></field>
<field tag="49"><![CDATA[REDACTEDB-MD]]></field>
<field tag="52"><![CDATA[20140123-22:55:56.372]]></field>
<field tag="56"><![CDATA[NDXMD]]></field>
</header>
<body>
<field tag="98"><![CDATA[0]]></field>
<field tag="108"><![CDATA[30]]></field>
<field tag="141"><![CDATA[Y]]></field>
<field tag="553"><![CDATA[REDACTED100]]></field>
<field tag="554"><![CDATA[REDACTED]]></field>
<field tag="1137"><![CDATA[9]]></field>
</body>
<trailer>
<field tag="10"><![CDATA[232]]></field>
</trailer>
</message>

Header: quickfix.fixt11.Message$Header@49f8d077
Trailer: quickfix.Message$Trailer@6e3e5a91
Logon Message Sent : false

問題のソースは次のとおりです。

 try {
        Application app = new AFIX();
        SessionSettings settings          = new SessionSettings("sessionSettings.txt");
        FileStoreFactory fileStoreFactory = new FileStoreFactory(settings);
        FileLogFactory logFactory         = new FileLogFactory(settings);
        MessageFactory messageFactory     = new DefaultMessageFactory();
        SocketInitiator socketInitiator   = new SocketInitiator(app,
                fileStoreFactory, settings, logFactory, messageFactory);
        socketInitiator.start();
        try {
            System.out.println("Sleeping for start() ....");
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        SessionID sessionId = socketInitiator.getSessions().get(0);
        AFIX.sendLogonRequest(sessionId);

        int i = 0;
        do {
            try {
                Thread.sleep(1000);
                System.out.println(socketInitiator.isLoggedOn());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            i++;
        } while ((!socketInitiator.isLoggedOn()) && (i < 25));

    } catch (ConfigError e) {

... ... ...

 public static void sendLogonRequest(SessionID sessionId)
        throws SessionNotFound {

    quickfix.fixt11.Logon logon = new quickfix.fixt11.Logon();
    quickfix.Message.Header header = logon.getHeader();

    header.setField(new quickfix.field.BeginString("FIXT.1.1"));
    header.setField(new quickfix.field.MsgType("A"));

    Properties p = loadProperties();
    logon.set(new quickfix.field.Username(p.getProperty("username")));
    logon.set(new quickfix.field.Password(p.getProperty("password")));

    logon.set(new quickfix.field.HeartBtInt(30));
    logon.set(new quickfix.field.ResetSeqNumFlag(true));
    logon.set(new quickfix.field.DefaultApplVerID("9"));
    logon.set(new quickfix.field.EncryptMethod(0));

    boolean sent = Session.sendToTarget(logon, sessionId);
    System.out.println("Logon Message Sent : " + sent);
}

そして最後に私の設定:

猫のセッション設定.txt

[DEFAULT]# Settings which apply to all the Sessions.
ConnectionType=initiator
LogonTimeout=30
ReconnectInterval=30
UseDataDictionary=Y
ResetOnLogon=Y
FileStorePath=incoming
FileLogPath=outgoing

[SESSION]# Settings specifically for one session
BeginString=FIXT.1.1 
DefaultApplVerID=9
AppDataDictionary=FIX50.xml
SenderCompID=REDACTED-MD
TargetCompID=NDXMD
StartDay=sunday
EndDay=friday
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
CheckLatency=N
MaxLatency=240
SocketConnectPort=7170
SocketConnectHost=web-fix.REDACTED.com

UseDataDictionary=Y
DataDictionary=lib/quickfixj-all-1.5.3.jar!/FIX50SP2.xml

どんな助けでも大歓迎です!

4

3 に答える 3

4

OrderMatch アプリの例を見てください。

(これはイニシエーターではなくアクセプターですが、実際には問題ではありません。)

Logon メッセージを手動で作成して送信しないことがわかります。initiator.startエンジンは(または)で自動的にそれを行いますacceptor.start。(ログを参照してください: "レスポンダーがありません、メッセージを送信していません" -- これは、エンジンが適切なログオンを行う前に、手動でログオン行を送信しようとしていることです)。

socketInitiator.start();基本的には、ブロックの と の間のすべてのコードを取得し、その全体を削除します。代わりに、ある種のスリープ アクション (コンソール入力の待機など) を入れてください。

まだ他の問題があるかもしれませんが、それは私が今見ているものです。

于 2014-01-23T23:35:52.980 に答える
2

認証情報を送信するには、Application から継承された toAdmin メソッドをオーバーライドします。
まず、ヘッダーに保持されている MsgType を確認し、ログオン メッセージであることを確認します。次に、その時点で関連するフィールドをメッセージに追加できます。その後、quickfix エンジンは、必要なものすべてを含むメッセージを送信します。

ログオン後に何かをするのを待っている場合は、MessageCracker インターフェイスを実装します。

アプリケーションから fromApp メソッドをオーバーライドし、msg で crack を呼び出します。次に、MessageCracker の onLogon メソッドをオーバーライドします。ログオンしていることがわかるので、その時点から残りのコードを実行できます。

于 2014-01-24T10:08:05.707 に答える
1

FIXT.1.1に適用可能

解決方法: メッセージの ApplVerID を判別できません

toAdmin() メソッドで、 Session.lookupSession(sessionId).setTargetDefaultApplicationVersionID(new ApplVerID("9")); の行の下に追加します。

これで問題が解決し、ログアウト メッセージが fromAdmin() メソッドに渡されます。

于 2017-04-10T11:52:35.673 に答える