终端问题
入门
- 在哪里下载/安装/更新掘金 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打开策略文件编译运行,具体使用方式请参照对应语言的接口说明。
- 如何安装 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
没有报错则说明安装成功。
- 从哪里可以获取人工帮助
- 您可以加入 QQ 群 (opens new window),@群内的技术支持获得帮助。
登录
- 为什么我的掘金终端登录不上?
系统服务每天在早晚 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 -y
,pip install scipy==1.7.3
。
- protobuf 的版本不对,先把安装的 protobuf 卸载重装,在 cmd 窗口里依次执行命令行
pip uninstall protobuf -y
,pip 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 pandas
,pip uninstall numpy
,pip 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()里的市价撮合模式参数
有订阅行情
多频度行情订阅时,取最小频度行情撮合
backtest_match_mode = 0(默认)撮合规则:
- 以 tick 频度撮合时,取当前时间下一笔 tick 价格撮合。
- 以 bar 频度(包含日频), 取当前时间下一根 bar 开盘价撮合。
backtest_match_mode = 1 撮合规则:
- 以 tick 频度撮合时,取当前时间点的 tick 价格撮合,如当前时间点没有 tick, 取下一笔 tick 价格撮合。
- 以 bar 频度(包含日频), 取当前时间的 bar 收盘价撮合,如当前时间点没有 bar, 取下一根 bar 收盘价撮合。
不订阅行情
- backtest_match_mode = 0 以下一天的开盘价撮合。
- 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 的常见指标实现?
掘金中 API 暂不支持获取指标数据,需要自行设计实现。
可参考掘金社区内容:
- 策略 ID 和 token ID 的作用是什么?
策略 ID 用于终端识别策略身份;token ID 用于服务端识别用户登录身份,如从服务器提取数据。
实时模式下启动策略会检查这两个 ID,需要正确填写。
- 如何在掘金里用 Python 读取本地主机的数据库数据?
- 可以使用 python 读取数据库的第三方模块,例如 pymysql。掘金是使用本地的 python 环境,没有限制第三方模块的使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论