代码之家  ›  专栏  ›  技术社区  ›  BlueTrin

如何设计适合金融工具的编程语言?

  •  6
  • BlueTrin  · 技术社区  · 16 年前

    我在一家金融专业的精品店工作。

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

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

    它必须是简单的,事实上,它在幕后调用各种C++和C语言库。它必须允许用户抽象地处理可以表示时间序列的对象(日内和日内)。

    它必须是完全可调试的,当用户将有一个问题时,我们必须能够在c+/c++代码中插入并复制错误。理想情况下,它必须能够通过Excel中的某种机制启动,并在Excel中返回结果。(不幸的是,几乎所有从事金融工作的人都使用Excel)

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

    你会使用函数语法吗?

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

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

    编辑:我读了你所有的答案,但在选择答案之前我会等待更多的时间。不过,他们都是非常有用的意见!

    edit2:我把高性能标记作为解决方案。你所有的回复都很有用,我已经修改了所有的回复。他是最早的回答之一,他的回答对我们很有见地。

    9 回复  |  直到 16 年前
        1
  •  10
  •   High Performance Mark    16 年前

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

    我怀疑您的域有一些不可减少的复杂性,中间DSL必须(几乎)和您的类集一样复杂,因此,通过创建它,您几乎无法获得什么好处。

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

    当做

        2
  •  5
  •   S.Lott    16 年前

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

    我将定义一个fluent类包,实际上,它是我的特定于领域的语言。

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

    你会使用函数语法吗? python具有功能性。如果您对Python类的设计很小心,就可以实现一种干净的功能风格。

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

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

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

        3
  •  3
  •   dwo    16 年前

    ResolverOne http://www.resolversystems.com/products/resolver-one/ )是Excel和Python的组合。你想过用那个吗?

        4
  •  3
  •   Shane    16 年前

    我建议使用 R .

        5
  •  3
  •   Andrew    16 年前

    另一个利用C的观点。

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

    我会调查 用户定义函数的托管自动化外接程序 . 这些基本上是使用本文中描述的System.Runtime.InteropServices的C库项目。 link text . 对于用户来说,这些函数是以正常方式使用“函数向导”在单元级别添加的,可以是您想要的函数。这就是您的DSL。用户可以选择在现有模型中轻松集成功能。这也将是快速原型的东西来测试的可行性。这些是完全可调试的。

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

    我听起来像个百万先令!(只是为了澄清事实,我不为他们工作)。

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

        6
  •  3
  •   James Webster Jonathan Wood    16 年前

    哈斯克尔名人赛的西蒙·佩顿·琼斯为一篇论文做了贡献。 'Composing contracts: an adventure in financial engineering' 其中讨论了函数语言如何帮助自己编写金融衍生产品合同的可执行描述。这种方法应该可以用F实现。

    我相信 LexiFi 旨在将这项研究商业化。

        7
  •  2
  •   Don Wakefield    16 年前

    Jane Street Capital使用OCAML,并记录他们的经验 here . 这是一个相当有趣的,如果广泛阅读。

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

        8
  •  1
  •   Ed Griebel    16 年前

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

        9
  •  1
  •   Escualo    16 年前

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

    在前面,我认为你可以得到三件事:

    1)访问高级环境,用户可以集中精力解决问题,而不是实现问题。 2)高质量图形的可用性 3)与Excel和其他生产力包无缝集成

    我知道你的意思是开发一种语言(与应用程序相反),但是考虑到Piggy支持你的语义到一种众所周知的语言——这样你就避免了用户的学习曲线。