首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliSense/ReSharper和自定义Quickfixn库生成

IntelliSense/ReSharper和自定义Quickfixn库生成
EN

Stack Overflow用户
提问于 2016-02-05 03:33:14
回答 2查看 144关注 0票数 1

我正在开发一个Quickfix/n启动器,用于多个对手方,在同一个实例中,它们都使用相同版本的FIX (在本例中为4.2),但使用了唯一的消息传递规范,我希望使用Intellisense/ReSharper来开发所述启动器。

以前,我使用generate.rb脚本从修改过的FIX##.xml文件创建源代码,但希望使用类似FIX42.DeutcheBank.xml、FIX42.CME.xml、file 42之类的东西。不管是什么,用generate.rb ruby脚本或修改后的版本生成源代码,这样它们就可以被IntelliSense/ReSharper解析,而且我遇到了问题,因为它们都使用"FIX.4.2“作为开始字符串,从而导致编译错误。

我知道我可以通过一个键来引用一个字段/组,比如标记“BidForwardPointsCME”,或者类似于DataDictionary的东西,但是,如前所述,我希望能够使用IntelliSense/ReSharper,用类似于Quickfix.CounterParty.WhateverField的东西引用消息字段/组,并使用相同的dll。

3天来,我一直在互联网上寻找答案,但没有运气--我想做些什么呢?如果是这样的话,我们会怎么做呢?

你好格兰特·伯奇迈尔& Hi;--]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-11 21:21:20

对于任何试图做到这一点的人来说,答案都很简单--也许不是最有效的,但据我所知,这是可行的。

诀窍是编辑两个ruby生成脚本(messages_gen.rb和generate.rb),并将附加的修复规范XML文件放在spec/fix目录中。

假设您有一个用于FIXFooExchange.xml的自定义FIX.xml文件,并且FIXFooExchange.xml使用了Fix4.2,则需要将其命名为FIX.xml(例如: FIXFooExchange.xml)。

接下来,必须在messages_gen.rb中覆盖修复版本,如下所示:

代码语言:javascript
复制
def self.gen_basemsg fixver, destdir
  beginstring = fixver
  if beginstring.match(/^FIX50/)
    beginstring = "FIXT11"
  end

  if beginstring.match(/^FIXFooExchange/)
    beginstring = "FIX42"
  end

接下来,您需要将自定义修复版本添加到generate.rb文件中的6个方法定义中。

这些方法是:

初始化

agg_fields

get_field_def

generate_messages

generate_csproj

generate_message_factories

以下是几个例子:

代码语言:javascript
复制
def initialize
  @fix40 = FIXDictionary.load spec('FIX40')
  @fix41 = FIXDictionary.load spec('FIX41')
  @fix42 = FIXDictionary.load spec('FIX42')
  @fix43 = FIXDictionary.load spec('FIX43')
  @fix44 = FIXDictionary.load spec('FIX44')
  @fix50 = FIXDictionary.load spec('FIX50')
  @fix50sp1 = FIXDictionary.load spec('FIX50SP1')
  @fix50sp2 = FIXDictionary.load spec('FIX50SP2')
  @fixFooExchange = FIXDictionary.load spec('FIXFooExchange')
  @src_path = File.join File.dirname(__FILE__), '..', 'QuickFIXn'
end

def get_field_def fld_name
# we give priority to latest fix version
  fld = merge_field_defs(
  @fix50sp2.fields[fld_name],
  @fix50sp1.fields[fld_name],
  @fix50.fields[fld_name],
  @fix44.fields[fld_name],
  @fixFooExchange.fields[fld_name],
  @fix43.fields[fld_name],
  @fix42.fields[fld_name],
  @fix41.fields[fld_name],
  @fix40.fields[fld_name]
)
End

基本上,您只需复制一行并用自定义的exchange数据字典名称替换修复版本。

应该将FixValues.cs中的类FixValues.cs修改为如下所示:

代码语言:javascript
复制
public class BeginString
{
    public const string FIXT11 = "FIXT.1.1";
    public const string FIX50  = "FIX.5.0";
    public const string FIX44  = "FIX.4.4";
    public const string FIX43  = "FIX.4.3";
    public const string FIXFooExchange = "FIX.4.2";
    public const string FIX42  = "FIX.4.2";
    public const string FIX41  = "FIX.4.1";
    public const string FIX40  = "FIX.4.0";
}

Values.cs文件包含一个应更改为如下所示的类:

代码语言:javascript
复制
public class Values
{
    public const string BeginString_FIXT11 = "FIXT.1.1";
    public const string BeginString_FIX50  = "FIX.5.0";
    public const string BeginString_FIX44  = "FIX.4.4";
    public const string BeginString_FIX43  = "FIX.4.3";
    public const string BeginString_FIXFooExchange = "FIX.4.2";
    public const string BeginString_FIX42  = "FIX.4.2";
    public const string BeginString_FIX41  = "FIX.4.1";
    public const string BeginString_FIX40  = "FIX.4.0";
}

这样做,然后运行generate.bat文件,您应该能够通过'.‘引用名称空间。而不是使用基本的修复版本。下面是一些例子:使用QuickFix.FIXFooExchange;使用Message = QuickFix.Message;

代码语言:javascript
复制
QuickFix.FIXFooExchange.MessageFactory mF = new QuickFix.FIXFooExchange.MessageFactory();

和引用消息属性,如:

代码语言:javascript
复制
string customField = message.yourCustomFieldName.getValue().ToUpper();

而不是通过

代码语言:javascript
复制
string customField = message["yourCustomFieldName"].getValue().ToUpper();

最后,您需要编辑两个.cs文件: FixValues.cs和Values.cs

我已经对此进行了相当广泛的测试,它似乎很有效,但我建议您在投入任何产品之前进行测试。

票数 1
EN

Stack Overflow用户

发布于 2016-02-06 15:02:19

因此,问题是,您希望1 QF启动进程连接到几个不同的对手方,其中每个会话使用一个单独的数据字典?

您不使用配置文件中的DataDictionary=somewhere/FIX42.xml来完成此操作吗?

另见http://quickfixn.org/tutorial/configuration.html AppDataDictionary: This setting supports the possibility of a custom application data dictionary for each session.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35215854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档