资源加载中... loading...

模板类库

模板类库是优宽量化交易平台中可复用的代码模块,是策略代码的一种类别。 在优宽量化交易平台支持模板类库功能的编程语言有:JavaScriptPythonC++Blockly可视化。 创建策略时如果类别设置为模板类库,会在优宽量化交易平台当前登录的账号的策略库中创建一个模板类库,创建后无法再修改类别为普通策略。 创建模板类库页面

模板类库的导出函数

导出函数为模板类库的接口函数,可以被引用该模板类库的策略调用。

/*
-- 策略引用该模板以后直接用 $.Test() 调用此方法
-- main 函数在策略中不会触发, 只做为模板调试的入口
*/
$.Test = function() {
    Log('Test')
}

function main() {
    $.Test()
}
def Test():
    Log("template call")

# 导出Test函数, 主策略可以通过ext.Test()调用
ext.Test = Test 
// 策略引用该模板以后直接用 ext::Test() 调用此方法
void Test() {
    Log("template call");
}

不同的编程语言的模板类库书写格式有所不同,导出函数在模板类库中声明以及实现的例子代码如下:

Blockly可视化方式编写的策略使用类库功能可以藉由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
$.SetParam1 = function(p1) {
    param1 = p1
}

$.GetParam1 = function() {
    Log("param1:", param1)
    return param1
}
def SetParam1(p1):
    global param1
    param1 = p1

def GetParam1():
    Log("param1:", param1)
    return param1

ext.SetParam1 = SetParam1
ext.GetParam1 = GetParam1
void SetParam1(float p1) {
    param1 = p1;
}

float GetParam1() {
    Log("param1:", param1);
    return param1;
}

用于测试param1参数的模板类库代码:

function main () {
    Log("调用$.GetParam1:", $.GetParam1())
    Log("调用$.SetParam1:", "#FF0000")
    $.SetParam1(20)
    Log("调用$.GetParam1:", $.GetParam1())
}
def main():
    Log("调用ext.GetParam1:", ext.GetParam1())
    Log("调用ext.SetParam1:", "#FF0000")
    ext.SetParam1(20)
    Log("调用ext.GetParam1:", ext.GetParam1())
void main() {
    Log("调用ext::GetParam1:", ext::GetParam1());
    Log("调用ext::SetParam1:", "#FF0000");
    ext::SetParam1(20);
    Log("调用ext::GetParam1:", ext::GetParam1());
}

引用以上模板类库例子的策略代码,使用模板类库的导出函数获取参数param1和修改参数param1

引用模板类库

策略引用模板类库时,需要当前登录的优宽量化交易平台账号策略库中有可用的模板类库, 在策略编辑页面模板栏中勾选引用后,保存策略即可引用。 模板引用截图

策略框架与API函数 策略参数