#!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
模块中的方法。