返回介绍

开始入门

操作指引

SDK

数据文档

常见问题

量化工具

其他

其他

终端问题

发布于 2024-06-22 12:53:28 字数 17135 浏览 0 评论 0 收藏 0

入门

- 在哪里下载/安装/更新掘金 3?

  • 请访问掘金量化官方首页:https://www.myquant.cn/ (opens new window) 下载安装包。

    安装时一些安全软件可能会误报病毒,允许通过即可。

    如有疑问,可选择在另外电脑上用其他安全软件检查。

  • 具体安装方法详见 安装指引 (opens new window)

  • 如有新版本,打开终端时会自动提示并自动下载,安装升级版本即可覆盖升级,用户资料不会被覆盖。

- 掘金支持的 Python 版本?

掘金 3 目前支持3.6.5 以上3.7.*3.8.*3.9.*3.10.*3.11.* 的 Python 版本。

- 掘金支持其他语言吗?其他语言的 API 要怎么用呢?

  • 目前掘金 3 已经支持了 MATLAB,C#,C++的策略语言,更多语言种类会根据大家反馈和实际使用情况添加。

  • 其他语言 API 需要在终端新建对应语言策略,然后用对应外部IDE打开策略文件编译运行,具体使用方式请参照对应语言的接口说明

  • 其他语言 SDK 包下载地址

- 如何安装 talib?

  • 下载对应的TA_Lib.whl文件 (opens new window)

    选择与系统版本、Python 版本对应的文件,如 TA_Lib‑0.4.10‑cp36‑cp36m‑win_amd64.whl 适用于 Windows64 位系统,Python3.6 版本。

  • 安装 TA_Lib,运行命令提示符,在下载 talib 文件目录下安装对应的 whl 文件。

    注意输入的.whl 文件名与原文件保持一致。

    C:\Python\Scripts pip install TA_Lib‑xxxxx‑cpxxx‑cpxxx‑winxx.whl
    
  • 检验 TA_Lib 是否安装成功。

     import talib
    

    没有报错则说明安装成功。

- 从哪里可以获取人工帮助


登录

- 为什么我的掘金终端登录不上?

  • 系统服务每天在早晚 08:00 会有重启,可能会临时影响登录和使用,请避开这个时间段。

  • 登录时报错:105错误码,可能是掘金需要的端口给其他软件占用,请排查7001,7002,7003,7004和80端口是否给其他软件占用。

  • 登录时报错:ENOENT = error no entry. 终端 UI 尝试启动终端服务程序,但是找不到。可能是杀毒软件破坏终端文件,需要关闭杀毒软件重新安装掘金终端。

  • 登录时报错:”无法连接终端服务:终端服务启动超时” 可能是 gmserv.json 里面的配置项已被修改,需要删除在用户目录下~/.goldminer3/里的.gmserv.json 文件。

  • 登录时报错:无法连接终端服务 undefined。请重试,或联系客服支持。可能是终端和终端程序未连接成功,可重启几次终端或重启电脑。

  • 登录时报网络错误,状态报告里显示http://www.myquant.cn:80 myquant-mainsite 221ms Network Error, 可能是本地日期不准,导致证书过期,访问不了官网,需要校准本地日期。

- 在哪里开启自动终端登录?

  • 自动登录终端:

    打开终端后点击顶部的“系统设置”,打开登录设置中的开关,下次启动终端时无需输入密码便可自动登录终端。

    注意: 后台服务早晚 8:50 会重启,需要避开这个时间段,盘前还会有上游数据更新,系统默认是 9 点自动重启,会遇到登录高峰,建议终端设置时间是股票早上 9:00 以后, 期货早上 8:50:00~9:00:00, 晚上 20:51:00~21:00:00

  • 账户自动登录:

    请注意账号与账户的不同!每人都只有一个掘金账号,但账号中可以建立多个交易账户。

    如需实现交易账户的自动登录,您可以在终端的“账户管理”板块对相应账户进行设置。

- 设置终端自动登录后,自己需要再重新启动策略吗?

  • 终端系统每天会自动重启,但是策略不会自动重启。用实时模式跑实盘或者仿真时,建议使用 window 的任务程序执行定时策略,在终端重启之后再重启策略,每天初始化 init(context)函数里的参数。

SDK

- 如何安装 SDK?

- 安装 SDK 报错,系统找不到指定文件:setuptool.exe

  • 请卸载重装python解析器。

- 如何使用 Linux 版本的 python SDK?

  • 在Linux环境安装 gm sdk ,执行命令行 pip3 install gm -i https://pypi.tuna.tsinghua.edu.cn/simple

  • SDK 需要和掘金终端通信, 但是掘金终端只有 Windows 版本, 所以策略需要指向 windows 终端。

  • 需要在策略里指定 终端IP,策略 run()的 serv_addr 设置为‘Windows IP:7001’。

- 运行策略提示 1027 报错?

  • 定时 schdule 参数设置问题,date_rule 的 1w,1m 只用于回测不能用于仿真和实盘, time_rule 需要按照09:05:09格式填写

- 遇到下图报错?

  • scipy 的版本不对,先把安装的 scipy 卸载重装,在 cmd 窗口里依次执行命令行pip uninstall scipy -ypip install scipy==1.7.3

  • protobuf 的版本不对,先把安装的 protobuf 卸载重装,在 cmd 窗口里依次执行命令行pip uninstall protobuf -ypip install protobuf==3.20.1

- 掘金 SDK 支持多线程吗?

  • 掘金 SDK 为了使策略简单稳定,采用单线程方式,不支持多线程。用户进行多线程编程时需要自主维护多线程可能遇到的问题。

- gm SDK 与 gmtrade SDK 之间的关系?

  • gmtrade SDK 是交易接口,可以下单、撤单,查询资金、持仓与委托成交等数据。只能进行仿真和实盘交易,不能用于回测。仿真不需要接入掘金终端,直接可以线上仿真,实盘必现接入掘金终端,适合只有交易需求,不需要投研的投资者。

  • gm SDK 既包括行情接口,也包括交易的接口。既可以实时模式,也可以回测模式。在使用过程中需要关联终端,适合有投研需求的投资者。

- 可以调用跨周期数据吗?

  • 可以。subscribe 可以订阅多个频率,跨周期的数据通过 context.data 获取。或者history,history_n获取。

- 如何在托管环境安装 gm SDK?

  • 首先需要有网络的 python 环境(本地和托管环境的 python 版本需要保持一致),指定目录下运行 cmd 窗口,输入

pip wheel --wheel-dir . gm -i https://mirrors.aliyun.com/pypi/simple/

(该语句会自动下载 gm 所需要的依赖安装包,并下载到当前文件夹中)

  • 将 whl 文件全部移动到无网络(或者无外网)的托管环境的 whl 文件目录下,在 cmd 窗口运行

pip install --no-index --find-links=. gm==3.0.159

(该语句会安装本地文件中的 gm 及管理库, 新的版本需要修改新的版本号)


运行

- 同一个掘金账户在不同电脑上登录,是否可以同时交易?

  • 建议不要这样做。账户可能会被踢掉,最好再申请一个。

- 外部运行策略提示无法连接到终端服务?

  • 外部运行策略时需要打开终端。

- 运行中,终端服务意外退出?

  • 这种情况请您联系技术支持,提供终端日志进行排查。

  • 终端日志路径: %USERPROFILE%.goldminer3\logs

- 点击“运行回测”没有反应或者量化交易界面点击“启动”策略运行不了?

  • 需要把%SystemRoot%\system32%SystemRoot%\system32\cmd.exe路径添加到系统环境 Path 变量里。

- 在代码 run()里设置回测参数与通过右上方回测参数设置的,哪一个优先?

  • 在终端运行时,右上方的参数设置优先;第三方 IDE 运行时,run 里面优先。

- 终端运行策略,提示找不到解析器怎么办?

  • 首先,检查是否把 Python 添加到环境变量中。

  • 若还是不行,需要在策略编辑页面中点击右下角的“设置”图标,手动指定解析器位置。

- 运行策略,提示找不到 gm 模块怎么办?

  • 首先检查是否安装 SDK,并且检查版本是否对应。查看方式详见: 安装指引 (opens new window)

    注意,掘金 3 只支持3.6.5以上,3.7.*,3.8.*,3.9.*,3.10.*,3.11.*和3.12.*的 Python 版本。

  • 此外,如果选择第三方 IDE,请注意选取的解释器是否为安装了 SDK 的那一个。

  • 若已安装 Python SDK,但仍提示找不到,可能是因为安装有多个 Python,而安装 SDK 的 Python 环境并不是当前使用的 Python 环境,需要手动切换。

- 运行策略,提示 ModuleNotFoundError: No module named ‘gm.csdk.c_sdk’ 怎么办?

  • 安装 gm 的依赖库不完整,先卸载 gm, 再通过更换安装源 pip install gm -i https://mirrors.aliyun.com/pypi/simple/ 重新安装。

- 运行策略,提示 “cannot import name ‘cygrpc’ from ‘grpc._cython’ ” ?

  • 可以卸载重装 grpcio。在 cmd 里输入 “pip uninstall grpcio” “pip install grpcio”。

- 运行策略,提示“from google.protobuf.pyext import _message ImportError: DLL load failed: 找不到指定的程序” 怎么办?

  • 可能是由于 protobuf 已经更新,出现了不兼容的问题。您更换为 protobuf 3.6.0 即可。

- 运行策略,报错“ImportError: Missing required dependencies ['numpy'] ”怎么办?

  • anaconda 里 pandas 的 numpy 依赖包和现有的 numpy 有冲突,需要卸载 pandas 和 numpy 再重新安装 pandas,在 cmd 里依次执行pip uninstall pandaspip uninstall numpypip install pandas命令行。

- win10 安装 anaconda(python=3.7)后用 pip install xxx 安装第三方模块时,报错 “……that require TLS/SSL, however the ssl module in Python is not available……”?

  • Python 与系统原有的一个 dll 有冲突,需要把D:\Anaconda3; D:\Anaconda3\Scripts; D:\Anaconda3\Library\bin 从前面添加进系统的 path 环境变量里。

- 使用第三方 ide 策略为什么启动不了?

  • 请严格按照run 函数的说明配置参数。

  • 请检查策略 id 以及 token 是否正确。

  • 请确认策略的文件名称是否正确。

    filename 的参数需要和文件名一致,如策略文件名为 test.py,则此处需要输入 test.py。

- 为什么策略运行时断时续,又或者停止运行了,按下回车键又继续运行了?

  • 有可能是策略控制台进入了快速编辑模式或者插入模式,导致策略进程挂起来了。

  • 解决办法:打开控制台,右键—>选择属性—>选项—>编辑选项,把里面的快速编辑模式和插入模式前的勾选去掉,然后按确定退出。

- 运行策略时报错:“python 不是内部命令”是什么原因?

  • 排查本地是否安装了 python 解释器。

  • 排查 python 是否配置环境变量。

- 在本地 IDE 环境下进行仿真,如何关联指定账户?

  • 在确认策略 ID 与 token ID 与终端的一致的前提下,在量化研究板块的“我的策略”中,选择要仿真的策略,然后点击“交易”弹出策略转换的窗口,在弹窗中直接选择要关联的账户即可。

- 终端每天初始化?

  • 终端和策略需要每天重启,终端自动重启会自动登录上交易账户,建议终端重启时间在早晚 8:50 之后,因为早晚 8:50 掘金服务会重启,策略需要在交易账户登录之后重启,可使用 Windows 的任务计划程序执行定时启动策略,建议时间设置在终端重启时间之后。

回测

- 回测投研的业务规则

支持品种

  • 股票(A 股和 B 股)、期货、场内基金、可转债

撮合机制

  • 回测限价撮合,按照委托价格撮合

  • 回测市价撮合模式如下:

    • backtest_match_mode 为 run()里的市价撮合模式参数

    • 有订阅行情

      1. 多频度行情订阅时,取最小频度行情撮合

      2. backtest_match_mode = 0(默认)撮合规则:

        • 以 tick 频度撮合时,取当前时间下一笔 tick 价格撮合。
        • 以 bar 频度(包含日频), 取当前时间下一根 bar 开盘价撮合。
      3. backtest_match_mode = 1 撮合规则:

        • 以 tick 频度撮合时,取当前时间点的 tick 价格撮合,如当前时间点没有 tick, 取下一笔 tick 价格撮合。
        • 以 bar 频度(包含日频), 取当前时间的 bar 收盘价撮合,如当前时间点没有 bar, 取下一根 bar 收盘价撮合。
    • 不订阅行情

      1. backtest_match_mode = 0 以下一天的开盘价撮合。
      2. backtest_match_mode = 1 以当天收盘价撮合。

结算规则

  • 交易结算,根据交易变动结算账户的资金和持仓数据

  • 盘后结算,盘后校验账户全天交易数据

手续费规则

  • 手续费按双边收取,不区分交易品种,只能设置佣金比例

分红配送

  • 不复权模式支持分红配送;前复权和后复权模式,回测的数据经过复权处理,不需要计算分红配送

委托校验

  • 支持委托校验,开仓验资\平仓验券\标的代码\合法性校验, 不支持成交量校验

资金调整

  • 不支持对账户资金的转入转出

挂单冻结

  • 不支持挂单冻结,下单会立刻成交

条件单

  • 不支持条件单
  • 不支持预埋单

- 回测模式市价单以什么价格成交?

有订阅行情

  • 多频度行情订阅时,取最小频度行情撮合。
  • match_mode = 0(默认)撮合规则:
    • 以 tick 频度撮合时,取当前时间下一笔 tick 价格撮合;
    • 以 bar 频度(包含日频), 取当前时间下一根 bar 开盘价撮合。
  • match_mode = 1 撮合规则:
    • 以 tick 频度撮合时,取当前时间点的 tick 价格撮合,如当前时间点没有 tick, 取下一笔 tick 价格撮合;
    • 以 bar 频度(包含日频), 取当前时间的 bar 收盘价撮合,如当前时间点没有 bar, 取下一根 bar 收盘价撮合。

不订阅行情

  • match_mode = 0 以下一天的开盘价撮合。
  • match_mode = 1 以当天收盘价撮合。

- 回测模式下市价单,是复权还是不复权价格?

  • 按照 run 中指定的复权方式计算,持仓均价计算亦如此。

- 复权回测模式下限价单,委托价格 price 如何设置合理?

  • 回测限价单撮合是按照委托价格 price 撮合
  • 建议使用订阅行情数据,tick 的 price 或者 bar 的 close。
  • 没有订阅行情,限价单的委托价格 price 可以通过 history,history_n 接口获取时,需要将复权基点时间参数 adjust_end_time 设置为与 run 函数回测结束时间参数 backtest_end_time 一致,否则限价单的成交价为非统一口径复权价格,导致回测结果失真。

- 回测时复权价格是如何计算得来的?

  • 在回测模式下,当 run()的 backtest_adjust 参数设置为 1 时,掘金推送的情行价格采用定点前复权,即以回测结束时间为基点,向前做复权。
  • 假设回测中 t 时间点的真实价格为 P[t], 复权因子为 A[t], 回测结束时间点的复权因子为 A[end],那么 t 时刻复权后价格:P[t]_adj = P[t] * A[t] / A[end]
  • 后复权价格根据复权因子计算公式:P[t]_adj = P[t] * A[t]

- 为什么回测时推送的复权价格和行情软件上看到的不一样?

  • 回测时复权的时间基准是回测指定的结束时间(backtest_end_time,参见run),相当于行情软件中的定点复权,通常看行情时用的是前复权不复权,因此有时侯会不一样。

- 如何设置回测的自动分红送转?

  • 在策略代码run()里设置回测复权方式:run(..., backtest_adjust=ADJUST_NONE)

  • 在客户端的策略编辑页面设置回测复权方式:点击右上角“回测参数”进入设置页面,复权方式选择“不复权”。

- 回测的分红送转处理,与仿真一样吗?

  • 是的,仿真模式下,股票账户会在除权除息日自动根据分红送转数据,调整账户的资金和持仓数量。回测模式下,复权方式选择“不复权”,股票和场内基金的分红送转处理逻辑与仿真一致。

- 回测分红送转数据支持本地缓存吗?

  • 支持,回测复权方式选择“不复权”后,每次回测会自动下载相应缺失的分红送转数据到本地数据目录,方便后续回测使用,提升回测效率。本地数据缓存不限制单一策略,只需提前开启【数据管理】功能。

- 如何提高回测效率?

  • 使用订阅行情方式, 每次回测会缓存相应的行情数据,方便下次使用相同回测参数,效率会提升。

- 回测怎么跳过停盘日期呢?

  • 停牌时是没有数据的,如果是订阅行情,用 on_bar 或者是 on_tick 事件的话就相当于跳过停牌日期了。

- 为什么回测订阅日线,成交时间是 15:15:00?

  • 国债期货是一直到 15:15:00 都可以交易,为了对齐时间,统一 15:15:00 成交。

- 收盘后可以回测当天的数据吗?

  • 收盘后可以回测当天,但是日线数据要 18 点左右才会更新,所以要在18点以后再回测当天的数据。

仿真

- 仿真交易的业务规则

支持品种

  • 股票(A 股和 B 股)、期货、场内基金、可转债

撮合机制

  • 交易时间段撮合

  • 委托按照价格优先,时间优先

  • 市价单委托,按照对手挂单价和量逐档撮合(从第一档开始撮合,若对手挂单量>=委托量,则以当前价成交。若对手挂单量<委托量,则继续用第二档数据撮合,成交价为第二档)

  • 限价单委托,按照对手挂单价和量逐档撮合(以买入为例,价格优先,若对手价<=挂单价, 则从第一档开始撮合,若对手挂单量>=委托量,则全部成交。若对手挂单量<委托量,则继续用第二档数据撮合, 若对手价>挂单价,则继续等待)

  • 支持交易所的各种委托类型

  • 股票 T+1 交易,期货 T+0 交易

结算规则

  • 盘中实时结算,根据交易实时结算账户的资金和持仓数据

  • 盘后结算,盘后校验账户全天交易数据,期货合约过期第二天自动交割

手续费规则

  • 股票和基金手续费,支持按设定的费率收取,有最低手续费限制,

  • 期货手续费,支持按交易方向,交易金额比例和交易手数收取,保证金比例默认按交易所比例设置

  • 手续费双边收取

分红配送

  • 股票账户会在除权除息日自动根据分红配送数据,调整账户的资金和持仓数量

委托校验

  • 支持委托校验,开仓验资\平仓验券\标的代码\价格\数量等字段合法性校验

资金调整

  • 支持对账户资金的转入转出

挂单冻结

  • 开仓委托\平仓委托未成交时,冻结对应资金\持仓

  • 委托已成\已撤\过期时,解除对应的冻结资金

交易时段

  • 支持期货市场的日盘和夜盘,连续竞价交易时段

  • 支持股票市场的集合竞价,连续竞价交易时段

条件单

  • 不支持条件单
  • 不支持预埋单

- 仿真市价单以什么价格下单?

  • 市价单发出时是没有价格的,按对手挂单逐档撮合,有成交价。

- 实时模式的订单待报是什么状态?

  • 订单已发出去,还没有得到柜台确认。

- 仿真模式 11:30 下的单如何处理?

  • 仿真模式此单挂在云端,等下午开盘撮合。

- 仿真在哪里设置手续费?

  • 在账户管理-仿真账户-设置手续费进行设置,目前支持对交易所和品种手续费的进行独立设置。

- 非交易时段, 在实时模式下策略能运行吗?

  • 如果策略是使用了行情驱动事件,是不能的, 实时模式推送的是实时行情,只有交易时段才有。

- 仿真挂单冻结资金是怎样计算的?

  • 限价冻结资金:报价委托数量+手续费(买入金额 * 0.001),市价冻结资金:当前价委托数量+手续费(买入金额 * 0.001)

- 仿真交易和实盘交易时, 交易相关的函数(order_*) *是同步还是异步?同步的话,函数会等待多久超时返回?

  • 仿真交易和实盘交易时, 交易相关的函数(order_*) 是同步的,会立刻返回 。

  • 回测模式执行完 order_XX 就会跳到 on_order_status 和 on_execution_report,再回到当前事件,。

  • 实时模式执行完 order_XX 会继续执行当前事件,当前事件执行完了,收到 on_order_status 或者 on_execution_report,才会进入这两个事件。

- 仿真或实盘股票市价下单被拒绝,原因为“无效的报单价格类型”?

  • 检查标的是否支持市价委托,

  • 下单函数填写的参数是否正确。

- 在外部 ide 运行仿真策略时报错:无效的 account_id?

  • 请查看策略 ID、token ID 是否正确。

  • 终端的策略是否连接仿真账户(策略切换到量化交易界面)。

- 为什么卖出了持仓,还能查到之前的持仓信息?

  • 持仓信息是通过 context 更新的,context 不是异步更新的,需要通过不同事件推送更新,同一个事件里卖出继续查持仓是还没有更新的,需要进入下个事件查,建议是通过 on_order_status 和 on_execution_report 监控委托和成交是否有变化来判断持仓

Python 编程问题

- 如何获取历史时期全市场的所有股票?

  • 通过 get_symbols指定品种和日期查询。

- 如何获取所有股票的 symbol?

all_symbols_list = get_symbols(sec_type1=1010, sec_type2=101001, skip_suspended=False, skip_st=False, trade_date=None, df=True)['symbol'].to_list()

- 如何获取全市场期货主力合约?

  • 代码如下:
def get_main_future(context):
    '''
    此函数用于获取全市场当前时间的主力合约
    '''
    #查询全市场期货合约
    ins_data = get_instruments(sec_types=4, df=True)
    #筛选掉已经退市的合约
    live_future = ins_data[ins_data['delisted_date'] > context.now.strftime('%Y-%m-%d')]
    #返回当前日期的前一个交易日时间
    last_day = get_previous_trading_date(exchange='SHFE', date=context.now.strftime('%Y-%m-%d'))
    #获取全市场期货合约前一个交易日的信息
    future = get_history_instruments(symbols=live_future['symbol'].tolist(), start_date=last_day, end_date=last_day, df=True)
    #对期货合约代码做处理,处理成为‘交易所+名称’的格式
    future['name'] = future.apply(lambda x: x['symbol'].rstrip(string.digits), axis=1)
    #将当前成交量最大的规则筛选出主力合约
    future['max_position'] = future.groupby('name')['position'].transform('max')
    #取出主力合约代码
    main_future = future[(future['position'] == future['max_position']) & (future['position'] > 0)]['symbol'].tolist()
    #返回主力合约代码
    return main_future

- 掘金 3 的常见指标实现?

- 策略 ID 和 token ID 的作用是什么?

  • 策略 ID 用于终端识别策略身份;token ID 用于服务端识别用户登录身份,如从服务器提取数据。

  • 实时模式下启动策略会检查这两个 ID,需要正确填写。

- 如何在掘金里用 Python 读取本地主机的数据库数据?

  • 可以使用 python 读取数据库的第三方模块,例如 pymysql。掘金是使用本地的 python 环境,没有限制第三方模块的使用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文