【问题标题】:Scripting language for trading strategy development用于交易策略开发的脚本语言
【发布时间】:2011-01-18 20:47:22
【问题描述】:

我目前正在开发一种交易产品的组件,该组件将允许量化或策略开发人员编写他们自己的自定义策略。我显然不能让他们用本地编译的语言(甚至是编译成字节码以在 vm 上运行的语言)编写这些策略,因为他们的开发/测试周期必须在几分钟左右。

到目前为止,我已经查看了 lua、python、ruby 并且非常喜欢所有这些,但对于我的目标用户来说仍然发现它们有点“低级”。我是否需要以某种方式编写我自己的解析器 + 解释器来支持一种对循环、简单算术、逻辑表达式评估的支持最少的语言,或者你们中的任何人可能有其他建议吗?提前致谢。

【问题讨论】:

  • 您的语言是否需要图灵完备,或者您是否需要知道它会停止?

标签: python ruby scripting dsl trading


【解决方案1】:

Perl 的 Text::Template 模块的作者 Mark-Jason Dominus 有一些可能相关的见解:

当人们制作模板模块时 像这个,他们几乎总是 从发明一种特殊的语法开始 换人。例如,他们 构建它,以便像 %%VAR%% 这样的字符串 替换为 $VAR 的值。 然后他们意识到需要额外的 格式化,所以他们放了一些 格式化的特殊语法。然后 他们需要一个循环,所以他们发明了一个循环 循环语法。很快他们就有了 新的小模板语言。

这种方法有两个问题:第一, 他们的小语言是残废的。如果 你需要做一些作者的事情 没想到,你输了。第二: 谁想学习另一种语言?

如果您编写自己的迷你语言,最终可能会陷入同样的​​困境 - 为一个因设计而瘫痪的工具维护语法和解析器。

如果一种真正的编程语言看起来有点太低级,解决方案可能不是放弃该语言,而是为您的最终用户提供更高级别的实用程序功能,以便他们可以使用熟悉的概念操作而不会陷入困境深入底层语言的杂草。

这允许初级用户在高水平上进行操作;但是,您和任何对此有诀窍的最终用户(您的超级用户)仍然可以充分利用 Ruby 或 Python 或其他任何东西的强大功能。

【讨论】:

    【解决方案2】:

    听起来您可能需要为您的用户创建某种领域特定语言 (DSL),这些语言可以松散地构建在目标语言之上。 Ruby、Python 和 Lua 在语法方面都有其不同的怪癖,并且在某种程度上可以通过巧妙的函数定义来调整其中的一些。

    一个相当健壮的 DSL 示例是 Cucumber,它实现了一种有趣的策略,即通过应用于输入数据的一系列正则表达式将用户指定的措辞转换为实际的可执行代码。

    另一个候选者可能是 JavaScript,或者某种 DSL 到 JavaScript 的桥梁,因为这将允许策略在客户端或服务器端运行。这可能有助于扩展您的应用程序,因为与负载较重的服务器相比,客户端计算机通常具有多余的计算能力。

    【讨论】:

    • Ruby 特别适合编写 DSL(可选的括号和块有助于实现这一点)。查看 Martin Fowler 关于 Ruby's Rake 的这篇文章:martinfowler.com/articles/rake.html
    【解决方案3】:

    无论您选择什么,都需要定制模块来定义您公司的高级结构。

    以下是我设想的一些需求——您可能已经涵盖了其中的一些需求:一种将当前头寸、当前和历史报价、以前的业绩数据等获取到应用程序中的方法。定义/回测/发送各种订单(限价/市场/止损,什么交易所,触发器)或选项参数等......您可能需要多个沙箱来测试以及真实的东西。

    Quants 希望能够进行矩阵运算、随机微积分、偏微分方程。
    如果您想在 python 中执行此操作,那么加载 NumPy 将是一个开始。

    您还可以从一个专为进行数学金融研究而设计的专有系统开始,例如基于 Mathematica 或 Matlab 构建的系统。

    【讨论】:

      【解决方案4】:

      我一直在研究 Python 算法交易库(实际上是用于回测,而不是用于真实交易)。你可能想看看它:http://gbeced.github.com/pyalgotrade/

      【讨论】:

        【解决方案5】:

        查看http://www.tadeveloper.com,了解使用 MATLAB 作为脚本语言的回测框架。 MATLAB 的优点是功能非常强大,但您无需成为程序员即可使用它。

        【讨论】:

          【解决方案6】:

          这可能有点简单,但很多量化用户习惯于使用 Excel 和 VBA 宏。 VBSCript 之类的东西是否可用,因为他们可能在这方面有一些经验。

          【讨论】:

            【解决方案7】:

            现有语言对我的目标用户来说“有点“低级”。”

            然而,您所需要的只是“对循环、简单算术、逻辑表达式求值的最低支持”

            我不明白这个问题。您只需要一些功能。您提供的语言列表有什么问题?他们实际上提供了这些功能吗?

            什么是断开连接?随时更新您的问题以扩展问题所在。

            【讨论】:

              【解决方案8】:

              我会使用 Common Lisp,它支持快速开发(您有一个正在运行的映像,并且可以编译/重新编译各个函数)并根据您的领域定制语言。您将提供函数和宏作为构建块来表达策略,并且整个语言都可供用户使用以组合它们。

              【讨论】:

                【解决方案9】:

                您所追求的复杂程度与Processing 类似吗?处理是采用成熟语言 (Java) 并将可用语法减少/简化为仅适用于问题域的子集(问题域 = 处理中的可视化)的一个很好的例子。

                这是处理文档中的一个小并排比较。

                Java:

                g.setColor(Color.black)
                fillRect(0, 0, size.width, size.height);
                

                处理:

                background(0);
                

                正如其他人所建议的那样,您也许可以简单地编写足够多的高级函数,以便对用户隐藏大部分复杂性,但您仍然保留在必要时执行更多低级操作的能力。 Arduino 的接线语言遵循这种策略,即在 C 之上使用一层薄薄的高级函数,以使非程序员和业余爱好者更容易使用它。

                【讨论】:

                  【解决方案10】:

                  首先定义语言——如果可能,使用称为 EBN 的伪语言,它非常简单(参见 Wikipedia 条目)。

                  然后,一旦你有了它,选择语言。几乎可以肯定你会想要使用 DSL。 Ruby 和 Lua 都非常擅长这一点,IMO。

                  一旦你开始着手处理它,你可能会发现你会回到你的定义并对其进行调整。但我认为这是做事的正确顺序。

                  【讨论】:

                    【解决方案11】:

                    我一直在同一条船上使用自己的软件构建和交易。 Java 不是很好,因为您想要像您说的那样更高级别的东西。我使用 eclipse 项目 xtext 取得了很大的成功。 http://www.eclipse.org/Xtext 它为您完成了构建解析器等的所有工作,并且使用 Eclipse,您可以使用功能编辑器快速生成代码。我建议您在考虑其他选择时对此进行调查。这与 eclipse 建模框架相结合对于快速构建听起来像您需要的 DSL 非常强大。 - 邓肯

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-08-17
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-01-18
                      • 1970-01-01
                      • 2021-03-12
                      相关资源
                      最近更新 更多