0

背景:我正在使用 Interactive Brokers 和 Matlab 的 C# API 来加载财务数据并对其进行分析。我习惯于在 Matlab 中编码,但对 C# 处于初级水平。我创建了一个包含所有相应函数的 dll 文件来获取市场数据,并将该库实现到 Matlab 中,以便我可以在 Matlab 中启动这些函数。

当前问题:使用 Matlab 我正在调用一个通过 Interactive Broker API 请求实时市场数据的方法(“顶级方法”) 。除此之外,在此过程中还调用了以下方法,该方法只是将 tickSize 写入控制台:

public virtual void tickSize(int tickerId, int field, int size)
    {
        Console.WriteLine("Tick Size. Ticker Id:" + tickerId + ", Field: " + field + ", Size: " + size + "\n");
    }

就我的研究而言,这个方法被声明为“void”,因为没有直接的输出变量被返回,因为请求的信息只是写在控制台中。

问题是,这个方法是通过 IB API 中另一个更复杂的方法调用的,它也被声明为“void”。

目标:我想在用Matlab调用顶层方法时得到这个方法(tickSize)的信息作为输出。

约束:调用“tickSize”的 IB API 中的方法也被声明为 void 方法,并且是具有许多约束和 if 子句的复杂 C# 方法,我很可能不喜欢自己修改。

解决问题的尝试:我想教科书解决此问题的方法是编写一个定义相应输出类型的方法(对于此示例,如果我只想获取tickerId,请说'int',然后调整IB API 的复杂方法同样输出类型,最后但并非最不重要的是调整上面发布的方法,以便变量可以通过过程传递。但是,如上所述,我不想弄乱完整的交易API 并且 IB 的技术支持建议自己编写另一个第四个方法,然后可以以某种方式保存输出(int tickerId)并将其直接传递给 main 方法。这是我对 C# 的了解肯定结束的地方,也是很长的谷歌搜索似乎没有为这个特定问题提供任何结果。

问题:当 C# 中有多个级别的方法时,有没有办法克服一个方法被声明为“void”并将输出直接发送到顶级方法?

如果有帮助,我还可以提供我正在谈论的相应方法,但正如我所说的 API 非常复杂,我不想在这里发送所有代码

4

1 回答 1

0

'public virtual void tickSize...' 是由 API 中的事件调用的方法。

因此,您不调用它,并且没有任何内容“返回”。它由 API 自动调用,是 API 为您提供数据的方式。

如果您希望捕获此数据,最好的方法可能是:

  1. 创建一个 tickSize 类 - 属性:tickerId、字段、大小。
  2. 创建一个类级别的 List tickSizes 列表。
  3. 在您提到的 tickSize 方法中,实例化一个 tickSize 对象,用 tickerId、字段和大小填充它。
  4. 将此对象添加到 tickSizes 列表。

然后,您将获得一个可用于分析的 tickSizes 列表。

于 2016-06-02T10:18:44.090 回答