簡體   English   中英

如何使用QuickFIX / J發送FIX消息

[英]How to send FIX message with QuickFIX/J

我需要一個簡單的例子來說明如何初始化會話並發送一條FIX消息。 我有這個初始代碼:

SessionSettings settings = new SessionSettings( new FileInputStream("fix.cfg"));

Application application = new Application(settings);
MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings);
LogFactory logFactory = new ScreenLogFactory( true, true, true);
MessageFactory messageFactory = new DefaultMessageFactory();

Initiator initiator = new SocketInitiator(application, messageStoreFactory, settings, logFactory, messageFactory);
initiator.start();

從上面的代碼中,我看到你有一個啟動器應用程序(客戶端),你還需要創建一個acceptor應用程序(服務器)。 貝婁我已經附上了兩個可以做你想做的課程。

首先,我將列出acceptor應用程序:

public class ServerApplication implements Application {

@Override
public void onCreate(SessionID sessionID) {
}

@Override
public void onLogon(SessionID sessionID) {
}

@Override
public void onLogout(SessionID sessionID) {
}

@Override
public void toAdmin(Message message, SessionID sessionID) {
}

@Override
public void fromAdmin(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, RejectLogon {
}

@Override
public void toApp(Message message, SessionID sessionID) throws DoNotSend {
}

@Override
public void fromApp(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {
    System.out.println("FromApp: " + message);
}

public static void main(String[] args) throws ConfigError, FileNotFoundException, InterruptedException, SessionNotFound {
    SessionSettings settings = new SessionSettings("res/acceptor.config");

    Application application = new ServerApplication();
    MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings);
    LogFactory logFactory = new ScreenLogFactory( true, true, true);
    MessageFactory messageFactory = new DefaultMessageFactory();

    Acceptor initiator = new SocketAcceptor(application, messageStoreFactory, settings, logFactory, messageFactory);
    initiator.start();

    CountDownLatch latch = new CountDownLatch(1);
    latch.await();
}

}

這是一個服務器應用程序,它將保持啟動狀態並偵聽來自連接到它的客戶端的消息。 這是它使用的配置文件(acceptor.properties):

[default]
ApplicationID=server
FileStorePath=storage/messages/
ConnectionType=acceptor
StartTime=00:01:00 Europe/Bucharest
EndTime=23:59:00 Europe/Bucharest
HeartBtInt=30
UseDataDictionary=Y
DataDictionary=FIX42.xml
ValidateUserDefinedFields=N
ValidateIncomingMessage=N
RefreshOnLogon=Y

[session]
BeginString=FIX.4.2
SocketAcceptPort=9877
SenderCompID=server
TargetCompID=client
AcceptorTemplate=N
lockquote

接下來是客戶端應用程序代碼。 它嘗試連接到服務器,然后它將向它發送一條消息:

public class ClientApplication implements Application {

private static volatile SessionID sessionID;

@Override
public void onCreate(SessionID sessionID) {
    System.out.println("OnCreate");
}

@Override
public void onLogon(SessionID sessionID) {
    System.out.println("OnLogon");
    ClientApplication.sessionID = sessionID;
}

@Override
public void onLogout(SessionID sessionID) {
    System.out.println("OnLogout");
    ClientApplication.sessionID = null;
}

@Override
public void toAdmin(Message message, SessionID sessionID) {
    System.out.println("ToAdmin");
}

@Override
public void fromAdmin(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, RejectLogon {
    System.out.println("FromAdmin");
}

@Override
public void toApp(Message message, SessionID sessionID) throws DoNotSend {
    System.out.println("ToApp: " + message);
}

@Override
public void fromApp(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {
    System.out.println("FromApp");
}

public static void main(String[] args) throws ConfigError, FileNotFoundException, InterruptedException, SessionNotFound {
    SessionSettings settings = new SessionSettings("res/initiator.config");

    Application application = new ClientApplication();
    MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings);
    LogFactory logFactory = new ScreenLogFactory( true, true, true);
    MessageFactory messageFactory = new DefaultMessageFactory();

    Initiator initiator = new SocketInitiator(application, messageStoreFactory, settings, logFactory, messageFactory);
    initiator.start();

    while (sessionID == null) {
        Thread.sleep(1000);
    }

    final String orderId = "342";
    NewOrderSingle newOrder = new NewOrderSingle(new ClOrdID(orderId), new HandlInst('1'), new Symbol("6758.T"),
            new Side(Side.BUY), new TransactTime(new Date()), new OrdType(OrdType.MARKET));
    Session.sendToTarget(newOrder, sessionID);
    Thread.sleep(5000);
}

}

它的配置文件(initiator.config)幾乎與用於acceptor的配置文件相同:

[default]
ApplicationID=client
FileStorePath=storage/messages/
ConnectionType=initiator
StartTime=00:01:00 Europe/Bucharest
EndTime=23:59:00 Europe/Bucharest
HeartBtInt=30
UseDataDictionary=Y
DataDictionary=FIX42.xml
ValidateUserDefinedFields=N
ValidateIncomingMessage=N
RefreshOnLogon=Y

[session]
BeginString=FIX.4.2
SocketConnectHost=localhost
SocketConnectPort=9877
SenderCompID=client
TargetCompID=server

配置文件都錯過了一些選項,但出於測試目的就足夠了。 每個類都有一個主要方法,僅用於測試您想要的案例。 通常你會處理它們的啟動或停止方式有點不同。 服務器應用程序偵聽消息/連接並且永遠不會停止,而客戶端應用程序在發送第一條消息后立即停止。

QuickFIX / J的安裝包括ExecutorBanzai 你可以在這里閱讀。

QuickFIX附帶了幾個示例應用程序。 這些應用程序位於quickfix / examples目錄中。 它們並不是為了展示出良好的應用程序設計,也不是為了在真實的生產系統中使用。 它們僅作為如何使用QuickFIX構建應用程序的教程提供。

Executor是一個非常簡單的訂單執行模擬器。 它僅支持限價訂單並始終完全填寫。

Banzai是一個簡單的交易客戶。 它可以與Executor一起使用,以查看在訂單執行的買賣方面使用QuickFIX / J的簡單示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM