模板类库
模板类库是优宽量化交易平台中可复用的代码模块,属于策略代码的一种类别。优宽量化交易平台支持模板类库功能的编程语言包括:JavaScript、Python、C++、Blockly可视化。创建策略时,如果将类别设置为模板类库,系统会在当前登录账号的策略库中创建一个模板类库。创建完成后,该类别无法再修改为普通策略。

模板类库的导出函数
导出函数是模板类库的接口函数,可被引用该模板类库的策略调用。
示例
-
不同编程语言的模板类库编写格式有所不同,以下是导出函数在模板类库中声明和实现的示例代码:
javascript/* -- 策略引用该模板以后直接用 $.Test() 调用此方法 -- main 函数在策略中不会触发, 只做为模板调试的入口 */ $.Test = function() { Log('Test') } function main() { $.Test() }pythondef Test(): Log("template call") # 导出Test函数, 主策略可以通过ext.Test()调用 ext.Test = Testc++// 策略引用该模板以后直接用 ext::Test() 调用此方法 void Test() { Log("template call"); } -
Blockly可视化方式编写的策略可通过JavaScript语言的模板类库实现类库功能,请使用以下格式编写。javascript/*blockly { "type": "ext_testA", "message0": "testA|testA", "template": "function(){return 99;}()", "order": "ORDER_ATOMIC", "output": "Number" },{ "type": "ext_MA", "message0": "MA 周期 %1| MA Period %1", "args0": [{ "type": "input_value", "check": "Number" }], "template": "(function(){var r = exchange.GetRecords(); return (!r || r.length < %1) ? false : TA.MA(r, %1); })()", "order": "ORDER_ATOMIC", "output": null, "colour": 85 } */
模板类库的参数
模板类库可以设置自己的界面参数,这些参数在模板类库代码中以全局变量的形式使用。
例如,我们设置了一个模板类库的参数:

| 策略代码中参数的变量名 | 策略界面上显示的参数名称 | 类型 | 默认值 |
|---|---|---|---|
| param1 | 模板参数1 | 数字型(number) | 99 |
示例
-
用于测试
param1参数的模板类库代码:javascript$.SetParam1 = function(p1) { param1 = p1 } $.GetParam1 = function() { Log("param1:", param1) return param1 }pythondef SetParam1(p1): global param1 param1 = p1 def GetParam1(): Log("param1:", param1) return param1 ext.SetParam1 = SetParam1 ext.GetParam1 = GetParam1c++void SetParam1(float p1) { param1 = p1; } float GetParam1() { Log("param1:", param1); return param1; } -
引用上述模板类库示例的策略代码,使用模板类库的导出函数获取参数
param1并修改参数param1。javascriptfunction main () { Log("调用$.GetParam1:", $.GetParam1()) Log("调用$.SetParam1:", "#FF0000") $.SetParam1(20) Log("调用$.GetParam1:", $.GetParam1()) }pythondef main(): Log("调用ext.GetParam1:", ext.GetParam1()) Log("调用ext.SetParam1:", "#FF0000") ext.SetParam1(20) Log("调用ext.GetParam1:", ext.GetParam1())c++void main() { Log("调用ext::GetParam1:", ext::GetParam1()); Log("调用ext::SetParam1:", "#FF0000"); ext::SetParam1(20); Log("调用ext::GetParam1:", ext::GetParam1()); }
