输入/搜索内容
入门
欢迎使用发明者量化交易平台
快速开始
密钥安全性
平台基础
账号与计费
实盘计费与充值
子账号
交易所
通用协议
本地凭据文件
交易所特殊说明
证券与期货
加密货币
托管者
策略库
实盘
编写策略
开发工具
回测系统
进阶专题
数据与研究
对外接口

平台支持用Python 3编写策略,不支持 Python 2。实盘以及在托管者上进行的回测,使用托管者所在机器上安装的 Python 解释器运行策略。

解释器

托管者按以下顺序查找解释器,使用第一个能启动、并且版本为 Python 3 的程序:

  1. 环境变量PYTHON_BIN指定的解释器;
  2. python3;
  3. python。

需要使用指定的解释器(例如虚拟环境中的 Python)时,在启动托管者之前设置环境变量:

bash
export PYTHON_BIN=/opt/venv/bin/python3

策略代码首行的#!python3、#!python2等写法不再用于选择解释器。

策略结构与参数

策略入口为def main(),可选的init()、onexit()由托管者自动调用(Python 不支持onerror()),见 策略结构。界面参数是同名的全局变量;在函数中给参数重新赋值时,需要先用global声明。

错误与返回值

API 函数调用失败时返回None,并在日志中输出错误信息。使用返回值之前先判断,或者用_C()重试。策略中未捕获的异常会结束运行,错误信息记录在日志中。

输出

print()的输出写到托管者进程的标准输出,不会出现在实盘日志里。需要显示在日志中的内容请用 Log。

第三方库

策略可以导入解释器中已经安装的任何库。安装时要使用托管者运行策略的那个解释器,例如:

bash
python3 -m pip install numpy # 设置了 PYTHON_BIN 时 $PYTHON_BIN -m pip install numpy

使用talib需要在托管者所在机器上安装 TA-Lib(talib包)和numpy。

自定义模块

策略运行时的当前目录和PYTHONPATH是托管者为本次运行创建的临时目录,运行结束后会被删除;放在托管者程序目录下(例如logs/storage/<实盘ID>/)的.py文件不会被自动找到。导入自己编写的模块有两种方式:

  • 把模块安装到解释器的site-packages中(例如做成包用pip install安装,或者直接复制到site-packages目录);
  • 在策略中先把模块所在目录的绝对路径加入sys.path,再导入。

例如模块文件/home/user/fmz_modules/mymath.py:

python
# mymath.py def add(a, b): return a + b

策略代码:

python
import sys sys.path.append("/home/user/fmz_modules") # 模块所在目录的绝对路径 import mymath def main(): Log("mymath.add(1, 2):", mymath.add(1, 2))

把核心代码做成模块放在自己的托管者上,策略代码中只保留调用部分,也是一种不把核心代码上传到平台的做法。