c++ - 由于密码丢失,QuickFix 登录失败

标签 c++ quickfix

我正在使用 quickfix C++ 实现来连接到 FIX 服务器,一切正常,除了当我尝试连接时它说字段缺少用户名。为了纠正这个问题,我在 toAdmin 方法中添加了以下代码

void Application::toAdmin( FIX::Message& message, const FIX::SessionID& sessionID)
{
    if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
    {
        FIX44::Logon & logon_message = dynamic_cast<FIX44::Logon&>(message);
        logon_message.setField(FIX::Username("username"));
        logon_message.setField(FIX::Password("password"));
    }
 std::cout<<message.toString();
 }
}

但是会导致异常。要检查它是否正常工作,还尝试使用 std::cout<<message.ToString(); 打印消息

但没有任何效果。

最佳答案

我想你快到了。这是我在 C# 中启动与 FXCM 的 FIX session 的解决方案(应该很容易移植 C++ 实现)。

1- 使用 QuickFix Examples.TradeClient 项目。

2- 确保您的 fix.cfg 文件存在于 TradeClient/bin/Debug 目录中。

3- 确保您的字典 (FIXFXCM10.XML) 存在于 TradeClient/bin/Debug 目录中。

4- 你的主要 Program.cs 应该看起来像这样;

var settings = new QuickFix.SessionSettings("fix.cfg");
var client = new QuickFixClient();
var storeFactory = new QuickFix.FileStoreFactory(settings);
var logFactory = new QuickFix.ScreenLogFactory(settings);
var initiator = new QuickFix.Transport.SocketInitiator(client, storeFactory, settings, logFactory); 

initiator.Start();
client.Run();
initiator.Stop();

并替换

public void ToAdmin(Message message, SessionID sessionID) {}

有了这个

public void ToAdmin(Message message, SessionID sessionID)
{
    if (message.GetType() == typeof(QuickFix.FIX44.Logon))
        {
            message.SetField(new Username("YOUR_USERNAME"));
            message.SetField(new Password("YOUR_PASSWORD"));                             
        }          

    message.SetField(new QuickFix.Fields.Account("YOUR_ACCOUNT_NUMBER"));
}

FXCM 要求与每条消息一起发送的帐号(标签 1=)是有效的。如果它不存在,这也可能会阻止成功登录。

希望这对您有所帮助!

关于c++ - 由于密码丢失,QuickFix 登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662928/

相关文章:

c++ - OpenCV中的置换贴图过滤器

c++ - 检测到修复网关的连接丢失? (快速解决)

python - 如何使用 Python 将 QuickFix 中的 TransactTime 设置为 GMT 格式

java - 如何从 C/C++ 调用 getter 返回二维数组?

c++ - char 数组的 strlen 大于其大小。如何避免?

c++ - 这个书上的例子不好吗?

c++ - 在 Quick FIX 4.2 中自定义实现多边期权定单

java - 如何在 QuickFix 上发送和接收消息?

python - Quickfix 会自动填写标题、正文和尾部字段吗?

c++ - 为什么我不能在一个类中有这两个重载?