我目前正在开发一个交易产品的组件,它将允许量化或策略开发人员编写自己的自定义策略。我显然不能让他们用本机编译的语言(甚至是编译成字节码以便在vm上运行的语言)来编写这些策略,因为他们的开发/测试周期必须在几分钟内完成。
到目前为止,我已经看过lua,python,ruby了,而且我真的很喜欢它们,但是对于我的目标用户来说,我仍然觉得它们有点“低级”。我是否需要以某种方式编写自己的解析器+解释器来支持一种对循环、简单算术、逻辑表达式求值支持最少的语言,或者你们中是否有其他建议?提前谢谢。
发布于 2010-02-20 00:51:51
Perl的Text::Template模块的作者Mark-Jason Dominus有一些可能相关的见解:
当人们制作这样的模板模块时,他们几乎总是从发明一种特殊的替换语法开始。例如,他们构建它,以便将类似%%VAR%%的字符串替换为$VAR的值。然后他们意识到需要额外的格式化,所以他们为格式化添加了一些特殊的语法。然后他们需要一个循环,所以他们发明了一个循环语法。很快他们就有了一种新的小模板语言。
这种方法有两个问题:首先,他们的小语言是残缺的。如果你需要做一些作者没有想到的事情,你就失败了。第二:谁想学另一门语言?
如果您编写自己的迷你语言,您可能会陷入同样的困境--为一个因设计而瘫痪的工具维护语法和解析器。
如果一种真正的编程语言看起来有点太低级,解决方案可能不是放弃该语言,而是为最终用户提供更高级别的实用函数,以便他们可以使用熟悉的概念进行操作,而不会陷入底层语言的泥潭。
这允许初级用户在高层次上操作;但是,您和任何有此技能的最终用户--您的超级用户--仍然可以利用Ruby或Python或其他任何工具的全部功能。
发布于 2010-02-20 00:43:01
听起来您可能需要为您的用户创建某种特定于领域的语言(DSL),它可以松散地构建在目标语言之上。Ruby、Python和Lua都有各自的语法怪癖,在某种程度上,这些怪癖中的一些可以通过巧妙的函数定义来处理。
相当健壮的领域特定语言的一个例子是Cucumber,它实现了一种有趣的策略,通过应用于输入数据的一系列正则表达式将用户指定的行话转换为实际的可执行代码。
另一个候选可能是JavaScript,或者某种从数字用户线路到JavaScript的桥接器,因为这将允许该策略运行客户端或服务器端。这可能有助于扩展您的应用程序,因为与负载较重的服务器相比,客户端计算机通常具有多余的计算能力。
发布于 2010-02-20 00:42:47
无论你选择什么,我们都需要定制的模块来定义你公司的高层结构。
以下是我预想的一些需求--您可能已经涵盖了其中的一些需求:获取当前头寸、当前和历史报价、以前的性能数据等的方法……添加到应用程序中。定义/回测/发送各种类型的订单(限制/市场/停止,什么交换,触发)或期权参数,等等。你可能需要多个沙箱来测试,就像真正的沙箱一样。
Quants希望能够做矩阵运算,随机微积分,PDE。
如果你想用python做这件事,加载NumPy将是一个开始。
您还可以从设计用于进行数学金融研究的专有系统开始,例如构建在Mathematica或Matlab之上的系统。
https://stackoverflow.com/questions/2297889
复制相似问题