Python quickfix 的配置
Python Configs for quickfix
这是启动器配置:
[SESSION]
ConnectionType=initiator
BeginString=FIX.4.1
SenderCompID=PS
TargetCompID=ND
SocketNodelay=Y
SocketConnectHost=48.40.87.16
SocketAcceptPort=9840
StartTime=07:00:00
EndTime=22:00:00
FileStorePath=C:/Temp/quickfix/store/initiator
FileLogPath=C:/Temp/quickfix/logs/initiator
ReconnectInterval=30
HeartBtInt=20
SocketReuseAddress=Y
UseDataDictionary=N
# DataDictionary=datadictionary/FIX41.xml
这是接受器配置
[SESSION]
ConnectionType=acceptor
BeginString=FIX.4.1
TargetCompID=ND
SenderCompID=PS
SocketNodelay=Y
SocketAcceptPort=9840
StartTime=07:00:00
EndTime=22:00:00
FileStorePath=C:/Temp/quickfix/store/acceptor
FileLogPath=C:/Temp/quickfix/logs/acceptor
SocketReuseAddress=Y
UseDataDictionary=N
我要发送一条非常简单的消息:
def create_message(self):
print ("Composing Message")
message = fix.Message();
header = message.getHeader();
header.setField(fix.BeginString("FIX.4.1"))
header.setField(fix.SenderCompID("PS"))
header.setField(fix.TargetCompID("ND"))
header.setField(fix.MsgType("D"))
message.setField(fix.OrigClOrdID("123"))
message.setField(fix.ClOrdID("321"))
message.setField(fix.Symbol("LNUX"))
message.setField(fix.Side('B'))
message.setField(fix.Text("Really Cancel My Order!"))
return message
def test_fix(self):
print ("Testing Fix")
message = self.create_message()
fix.Session.sendToTarget(message, self.sessionID)
print ("Testing FIX ends")
我在启动器 FIX.4.1-PS-ND.body 上的输出确实有它发送的消息。但是我在接受器上什么也没看到。 (1) 我做错了什么/ (2) 发起者如何知道 "ND" 的确切位置(在这种情况下 - TargetCompID=ND)?
我假设您希望发起者和接受者相互连接。这不适用于您的配置,因为它们都具有 same TargetCompID
和 SenderCompID
。
为此,需要在连接的每一端交换 TargetCompID
和 SenderCompID
。
所以接受者需要有:
SenderCompID=ND
TargetCompID=PS
只要两端没有连接,调用Session.sendToTarget
就会导致消息只写到消息存储中,不发送出去。它会在会话连接后立即发送。
顺便说一句,您的发起人不需要 SocketAcceptPort
,而是 SocketConnectPort
。
这应该有望连接两端。如果不是,请粘贴错误消息。
已解决:
我犯了一个非常愚蠢的错误。
SocketConnectHost=48.40.87.16
这个IP地址应该是承兑人的IP地址。这实际上也回答了我的 (2) 问题。
这是启动器配置:
[SESSION]
ConnectionType=initiator
BeginString=FIX.4.1
SenderCompID=PS
TargetCompID=ND
SocketNodelay=Y
SocketConnectHost=48.40.87.16
SocketAcceptPort=9840
StartTime=07:00:00
EndTime=22:00:00
FileStorePath=C:/Temp/quickfix/store/initiator
FileLogPath=C:/Temp/quickfix/logs/initiator
ReconnectInterval=30
HeartBtInt=20
SocketReuseAddress=Y
UseDataDictionary=N
# DataDictionary=datadictionary/FIX41.xml
这是接受器配置
[SESSION]
ConnectionType=acceptor
BeginString=FIX.4.1
TargetCompID=ND
SenderCompID=PS
SocketNodelay=Y
SocketAcceptPort=9840
StartTime=07:00:00
EndTime=22:00:00
FileStorePath=C:/Temp/quickfix/store/acceptor
FileLogPath=C:/Temp/quickfix/logs/acceptor
SocketReuseAddress=Y
UseDataDictionary=N
我要发送一条非常简单的消息:
def create_message(self):
print ("Composing Message")
message = fix.Message();
header = message.getHeader();
header.setField(fix.BeginString("FIX.4.1"))
header.setField(fix.SenderCompID("PS"))
header.setField(fix.TargetCompID("ND"))
header.setField(fix.MsgType("D"))
message.setField(fix.OrigClOrdID("123"))
message.setField(fix.ClOrdID("321"))
message.setField(fix.Symbol("LNUX"))
message.setField(fix.Side('B'))
message.setField(fix.Text("Really Cancel My Order!"))
return message
def test_fix(self):
print ("Testing Fix")
message = self.create_message()
fix.Session.sendToTarget(message, self.sessionID)
print ("Testing FIX ends")
我在启动器 FIX.4.1-PS-ND.body 上的输出确实有它发送的消息。但是我在接受器上什么也没看到。 (1) 我做错了什么/ (2) 发起者如何知道 "ND" 的确切位置(在这种情况下 - TargetCompID=ND)?
我假设您希望发起者和接受者相互连接。这不适用于您的配置,因为它们都具有 same TargetCompID
和 SenderCompID
。
为此,需要在连接的每一端交换 TargetCompID
和 SenderCompID
。
所以接受者需要有:
SenderCompID=ND
TargetCompID=PS
只要两端没有连接,调用Session.sendToTarget
就会导致消息只写到消息存储中,不发送出去。它会在会话连接后立即发送。
顺便说一句,您的发起人不需要 SocketAcceptPort
,而是 SocketConnectPort
。
这应该有望连接两端。如果不是,请粘贴错误消息。
已解决:
我犯了一个非常愚蠢的错误。 SocketConnectHost=48.40.87.16
这个IP地址应该是承兑人的IP地址。这实际上也回答了我的 (2) 问题。