#!python3、#!python2,系统将自动查找相应的解释器。也可以指定绝对路径,例如:#!/usr/bin/python3。Python代码的安全性: 由于Python是开源且易于反编译的语言,如果策略非自用而是出租,担心策略泄露可以让策略运行在自己部署的托管者上,并以子账号或全托管管理的形式出租。
Python策略代码加密: 默认情况下,Python策略代码作者自用时不加密,租给他人使用时加密。在Python策略开头编写如下代码,可以指定自用或租出Python策略运行时是否加密策略代码。支持策略代码加密的Python版本为:Python 2.7版本、Python 3.5版本、Python 3.6版本。
策略作者自己运行、通过注册码给他人使用时,均加密策略代码:
使用代码#!python指定Python解释器版本,之后使用逗号,间隔,输入加密指令encrypt。如果不指定Python版本,可以直接添加#!encrypt。
#!python,encrypt
或
#!encrypt
策略作者自己运行、通过注册码给他人使用时均不加密策略代码:
#!python,not encrypted
或者
#!not encrypted
判断Python策略代码加密是否生效,使用代码os.getenv('__FMZ_ENV__'),返回字符串"encrypt"表示已经生效。仅在实盘有效,回测不会加密Python策略代码。
#!encrypt
def main():
ret = os.getenv('__FMZ_ENV__')
# 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
Log(ret, ret == "encrypt")
例如,我们需要设计一个模块:mymath,将mymath.py保存为一个单独的文件。
# mymath.py - 保存为一个单独的文件
"""
简单的数学工具模块
"""
def add(a, b):
"""加法"""
return a + b
部署模块文件,将mymath.py文件放置到托管者程序目录下的指定位置(storage目录中的文件夹名称是实盘Id,以实盘Id为123456为例):
托管者程序目录/logs/storage/123456/mymath.py
最后在FMZ平台上的Python策略中直接导入mymath模块。
import mymath
def main():
Log("mymath.add(1, 2):", mymath.add(1, 2))
Id为123456的实盘(策略实例)所绑定的策略中即可调用mymath模块中的方法。