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