由于缺少密码,QuickFix登录失败 < >我使用QuiFixC++实现连接到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(); } } void应用程序::toAdmin(修复::消息和消息,常量修复::SessionID和SessionID) { if(FIX::MsgType_Logon==message.getHeader().getField(FIX::FIELD::MsgType)) { FIX44::Logon&Logon\u message=dynamic\u cast(message); logon_message.setField(FIX::Username(“Username”); logon_message.setField(FIX::Password(“Password”); } Std::Cuth我想你已经差不多了。这是我在C语言中用FXCM启动固定会话的解决方案(对于你来说,C++实现很容易)。

由于缺少密码,QuickFix登录失败 < >我使用QuiFixC++实现连接到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(); } } void应用程序::toAdmin(修复::消息和消息,常量修复::SessionID和SessionID) { if(FIX::MsgType_Logon==message.getHeader().getField(FIX::FIELD::MsgType)) { FIX44::Logon&Logon\u message=dynamic\u cast(message); logon_message.setField(FIX::Username(“Username”); logon_message.setField(FIX::Password(“Password”); } Std::Cuth我想你已经差不多了。这是我在C语言中用FXCM启动固定会话的解决方案(对于你来说,C++实现很容易)。,c++,quickfix,C++,Quickfix,1-使用QuickFix Examples.TradeClient项目 2-确保您的fix.cfg文件位于TradeClient/bin/Debug目录中 3-确保您的字典(FIXFXCM10.XML)位于TradeClient/bin/Debug目录中 4-你的main Program.cs应该是这样的 var settings = new QuickFix.SessionSettings("fix.cfg"); var client = new QuickFixClient(); var s

1-使用QuickFix Examples.TradeClient项目

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

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

4-你的main 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=)必须有效。如果帐号不存在,也可能会阻止成功登录


希望这有帮助!

我就是这样添加密码的:

void toAdmin( FIX::Message& message, const FIX::SessionID& sessionID)
{
    // put password in the logon message
    if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
    {
        FIX::Password fixpasswd = ConfigSingleton::getInstance().CurrenexConfig.FIXPassword; //use your std::string password here.
        message.getHeader().setField(FIX::Password(fixpasswd)); //also add username here.
    }
}
如果你能看到你的用户名和密码,那就意味着已经可以了。 关于这个异常,我以前也遇到过,对我来说,它来自toApp函数,我对它做了如下修改,效果很好:

void toApp( FIX::Message& message, const FIX::SessionID& sessionID )
    throw( FIX::DoNotSend )
{
    try
    {
        FIX::PossDupFlag possDupFlag;
        message.getHeader().getField( possDupFlag );
        if ( possDupFlag ) throw FIX::DoNotSend();
    }
    catch ( FIX::FieldNotFound& e) 
    {
        //std::cout <<  e.what() << " " << message.toString() << ENDLINE;
    }
}
void-toApp(FIX::Message&Message,const-FIX::SessionID&SessionID)
抛出(修复::DoNotSend)
{
尝试
{
FIX::PossDupFlag PossDupFlag;
message.getHeader().getField(possDupFlag);
if(possDupFlag)抛出FIX::DoNotSend();
}
捕获(修复::FieldNotFound&e)
{

//std::您是否可以查看日志文件以找出修复消息格式,并查看缺少的内容。引发了什么异常?此问题解决了您的问题?并在此处检查