6

我在一家专门从事金融业务的精品店工作。

我们考虑设计一种语言来描述与金融市场相关的金融实体。

这将主要用作某种脚本语言来替换电子表格和 VBA 宏中运行的许多进程。

它必须简单,事实上,它可以在后台调用各种 C++ 和 C# 库。它必须让用户处理可以代表时间序列(日内和每日)的抽象对象。

它必须是完全可调试的,当用户遇到问题时,我们必须能够单步执行 C++/C# 代码并重现错误。理想情况下,它必须能够通过 Excel 中的某种机制启动并在 Excel 中返​​回结果。(不幸的是,几乎每个从事财务工作的人都在使用 Excel)

如果你必须做这个任务,你会怎么做?

你会选择功能语法吗?

你会开发一些可以解释的脚本语言还是用另一种语言编译它(比如用 C++ 或 C# 转换脚本)?

我没有找到任何用于这种开发的开源项目,但是有没有使用这种语法的商业产品?

编辑:我阅读了您所有的答案,但我会等待更多时间才能选择答案。不过,它们都是非常有用的意见!

EDIT2:我将高性能标记标记为解决方案。您的所有回复都非常有用,我已经修改了所有回复。他是第一个回答的人之一,他的回答对我们来说很有见地。

4

7 回答 7

10

我建议您专注于用您首选的 OO 语言(C# 或 C++,尽管我怀疑您可能会发现将前者与 Excel 集成更容易)开发一组丰富的类。这将使您能够用您的语言来描述与金融市场相关的金融实体。完成后,您应该考虑是否继续将这些类包装在某些特定领域的语言中,或者只是将它们公开给您的用户社区。

我怀疑您的域具有一些不可简化的复杂性,并且中间 DSL 必须(几乎)与您的类集一样复杂,因此,创建它几乎没有什么好处。

另一种方法是将 Excel 与 Mathematica 集成,Wolfram 为其生成某种工具箱。我没有这方面的经验,但 Mathematica 肯定适用于您必须进行的任何计算。

问候

于 2009-12-11T17:35:19.140 回答
5

我会将 C++ 库包装在 Python 中。

我会定义一个流利的类包——实际上——是我的领域特定语言。

我会直接基于这两个基础使用 Python 语言。我不会发明自己的新语法。世界不需要另一种语法;我们有足够的语法和语法来解析,足够持续到时间的尽头。

你会选择功能语法吗?Python 具有函数式能力。如果你对你的 Python 类设计很小心,你可以实现一个干净的函数式风格。

理想情况下,它必须能够通过 Excel 中的某种机制启动并在 Excel 中返​​回结果。

由于 Python 解释器可以嵌入到 C++(或 C#)应用程序中,因此您可以轻松创建 Excel API。从 Excel 到您的新语言,尽可能少地使用 C++ API 来启动 Python 功能。

顺便说一句,您的竞争对手是Resolver One。这就是他们所做的。

于 2009-12-11T17:11:29.087 回答
3

另一个利用 c# 的观点。

由于您已经拥有一个强大的通用函数式编程工具,您的用户熟悉并且已经购买了 Excel 的形式,我希望围绕它构建一个解决方案。您仍然可以选择使用其他第 3 方附加组件和集成选项(例如 R 和 Mathematica)

我会研究Managed Automation Add-ins for User Defined Functions。这些本质上是使用 System.Runtime.InteropServices 的 c# 库项目,如本文链接文本中所述。对于用户来说,这些函数是使用函数向导以正常方式在单元级别添加的,并且可以或多或少地成为您希望它们成为的样子。这就是你的DSL。用户可以选择轻松地将功能集成到现有模型中。制作原型以测试其可行性也将很快。这些都是完全可调试的。

此外,使用 Visual Studio Tools for Office,您可以访问完整的 Excel 对象层次结构,甚至可以添加操作窗格,这些操作窗格可以通过拖放控件进行布局,以满足更复杂的数据输入要求。如果您需要添加专门的可视化,我相信甚至可以通过这种方式将 WPF 与 Excel 一起使用。如果您需要将数据持久化到 Sql Server,您可以使用这种方法构建一个周转验证表单。

我听起来像个 M$ shill!(只是为了澄清事实,我不为他们工作)。

您需要评估它的性能,我不确定它会如何扩展。

于 2009-12-11T22:43:35.790 回答
3

Haskell 的 Simon Peyton-Jones 贡献了一篇论文“编写合约:金融工程的冒险”,该论文讨论了函数式语言如何帮助自己编写金融衍生合约的可执行描述。F# 应该可以使用这种方法。

我相信LexiFi的产品旨在将其中一些研究商业化。

于 2009-12-15T00:12:24.817 回答
2

Jane Street Capital 使用 OCaml,并在此处记录了他们的经验。如果广泛阅读,这是一个非常有趣的。

对于您的环境,如果您遵循他们的模型,您可以使用F#,它最初是作为 OCaml 方言的,但它当然在 .NET 世界中运行。

于 2009-12-11T18:45:27.497 回答
1

如果你的底层库使用 Java,你应该看看在 Groovy 中做一个 DSL。有许多关于此的播客和文章,请尝试谷歌搜索“DSL Groovy”。

于 2009-12-11T17:37:48.030 回答
1

大多数处理数字的金融机构(或其中的部门)已经获得了 Matlab 许可证。我建议您查看 Matlab 提供的面向对象工具(实际上,在他们的Financial Toolbox中)。

首先,我认为您获得了三件事:

1) 访问高级环境,用户可以专注于问题而不是实施 2) 高质量图形的可用性 3) 与 Excel 和其他生产力包的无缝集成

我知道您的意思是开发一种语言(而不是应用程序),但考虑将您的语义捎带到一种众所周知的语言 - 这样您就可以避免用户的学习曲线。

于 2009-12-12T02:44:38.207 回答