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

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

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

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

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

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

你会选择函数式语法吗?

您会开发某种可以解释的脚本语言,还是用另一种语言编译它(例如将脚本转换为 C++ 或 C#)?

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

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

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

有帮助吗?

解决方案

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

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

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

问候

其他提示

我想包C ++库在Python。

我将定义一个包流利类,的 - 实际上 - 是我的域专用语言

我想使用直接基于这两个基础Python语言。我不会创造我自己的新语法。世界并不需要另一个语法;我们有语法和语法足以解析,足以持续到年底的时间。

你去功能语法? Python有功能能力。如果你小心你的Python类的设计,可以实现清洁功能的风格。

<强>理想情况下它必须是能够通过Excel内一些机制来启动并在Excel中返回结果。

由于Python解释可以嵌入在一个C ++(或C#)的应用程序,就可以很容易地创建Excel中的API。从Excel中新的语言,做尽可能少的C ++ API中启动Python的功能。

顺便说一句,你的竞争对手是解析器之一。这是他们做什么。

ResolverOne( http://www.resolversystems.com/products/resolver-one/ )是的Excel和Python的组合。你有没有想过使用?

我建议使用 .

利用 c# 的另一个观点。

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

我会调查 用于用户定义功能的托管自动化插件. 。这些本质上是使用 System.Runtime.InteropServices 的 C# 库项目,如本文所述 链接文本. 。对于用户来说,这些函数是使用函数向导以正常方式在单元级别添加的,并且或多或少可以是您想要的。这就是您的 DSL。用户可以选择轻松地将功能集成到他们现有的模型中。也可以快速制作一些原型来测试其可行性。这些是完全可调试的。

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

我听起来像个百万美元的骗子!(澄清一下,我不为他们工作)。

您需要评估其性能,但我不确定它将如何扩展。

因哈斯克尔而闻名的西蒙·佩顿·琼斯 (Simon Peyton-Jones) 为一篇论文做出了贡献 '撰写合同:金融工程的冒险” 其中讨论了函数式语言如何有助于编写金融衍生品合约的可执行描述。F# 应该可以实现这样的方法。

我相信的奉献 莱克西菲 旨在将部分研究商业化。

简街资本使用OCaml的,并写了他们的经验这里。这是一个非常有趣的,如果广泛的阅读。

有关您的环境,如果你跟着他们的模型,你可以使用的 F#,该开始了生活作为OCaml的方言,但是这当然在.NET世界上运行。

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

大多数数字运算的金融机构(或分割文献)已经获得Matlab的许可证。我建议你看一看用Matlab(实际上提供了面向对象的设施,在他们的金融工具箱)。

在锋线上,我认为你获得三件事情:

1)获得了高级别环境,用户可以集中精力的问题,而不是在实施 2)的高品质的图形状况 3)使用Excel和其他生产率包无缝集成

我知道你的意思是开发语言(而不是应用程序),但考虑背负你的语义一个众所周知的语言 - 这样你就可以避免对用户的学习曲线

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top