掘金量化(MyQuant / GoldMiner)
掘金量化 是专业量化交易平台,提供事件驱动策略开发、回测、模拟交易和实盘交易。支持A股、期货、期权、ETF、可转债和融资融券,通过统一的Python SDK(gm.api)操作。
需要在 https://www.myquant.cn 注册获取Token进行认证。实盘交易需要通过掘金终端连接券商账户。
安装
CODEBLOCK0
也可从官网下载:https://www.myquant.cn/docs/downloads/698
架构概述
CODEBLOCK1
策略程序结构
所有策略遵循事件驱动架构,包含生命周期函数:
CODEBLOCK2
基本函数
init — 策略初始化
CODEBLOCK3
- - 策略启动时调用一次
- 用于设置订阅、定义参数和初始化状态
- 回测模式下init中不允许下单(模拟/实盘模式允许)
schedule — 定时任务
CODEBLOCK4
- -
date_rule: '1d' (daily), '1w' (weekly, backtest only), '1m' (monthly, backtest only) - INLINECODE5 :
'HH:MM:SS' format, must be zero-padded (e.g., '09:40:00', not '9:40:0')
run — 运行策略
CODEBLOCK5
stop — 停止策略
CODEBLOCK6
数据订阅
subscribe — 订阅行情数据
CODEBLOCK7
unsubscribe — 取消订阅
CODEBLOCK8
数据事件
| 事件 | 触发条件 | 参数 |
|---|
| INLINECODE9 | 每次Tick推送 | 包含价格、买卖盘、成交量的Tick字典 |
| INLINECODE10 |
每根K线收盘 | K线字典列表 |
|
on_l2transaction(context, l2transaction) | Level 2逐笔成交 | L2Transaction字典 |
|
on_l2order(context, l2order) | Level 2逐笔委托 | L2Order字典 |
|
on_l2order_queue(context, l2order_queue) | Level 2委托队列 | L2OrderQueue字典 |
数据查询函数
current — 实时快照
CODEBLOCK9
- - 回测模式:仅返回
symbol、price、 INLINECODE16 - 实盘模式:返回完整tick字段,包含5档买卖盘
history — 历史K线/Tick
CODEBLOCK10
history_n — 最近N根K线
CODEBLOCK11
context.data — 订阅数据缓存
CODEBLOCK12
Level 2历史数据
CODEBLOCK13
基本面数据
CODEBLOCK14
可用的基本面数据表:参见财务数据文档
合约信息
CODEBLOCK15
指数成分股
CODEBLOCK16
行业成分股
CODEBLOCK17
分红数据
CODEBLOCK18
交易日历
CODEBLOCK19
连续合约(期货)
CODEBLOCK20
新股申购函数
CODEBLOCK21
交易函数
按数量下单
CODEBLOCK22
按金额下单
CODEBLOCK23
按比例下单
CODEBLOCK24
目标仓位函数
CODEBLOCK25
批量下单
CODEBLOCK26
撤单与全部平仓
CODEBLOCK27
查询委托
CODEBLOCK28
特殊交易
CODEBLOCK29
账户与持仓查询
CODEBLOCK30
融资融券
CODEBLOCK31
算法交易
CODEBLOCK32
交易事件
| 事件 | 触发条件 | 关键字段 |
|---|
| INLINECODE17 | 订单状态变化 | INLINECODE18 , symbol, status, filled_volume, INLINECODE22 |
| INLINECODE23 |
成交回报 |
cl_ord_id,
symbol,
filled_volume,
filled_vwap,
price |
|
on_account_status(context, account) | 账户状态变化 |
account_id,
status |
动态参数
CODEBLOCK33
连接事件
| 事件 | 触发条件 |
|---|
| INLINECODE32 | 回测完成,接收绩效统计 |
| INLINECODE33 |
发生错误 |
|
on_market_data_connected(context) | 行情数据连接建立 |
|
on_trade_data_connected(context) | 交易连接建立 |
|
on_market_data_disconnected(context) | 行情数据连接断开 |
|
on_trade_data_disconnected(context) | 交易连接断开 |
代码格式
格式:交易所代码.证券代码
| 交易所代码 | 说明 | 示例 |
|---|
| INLINECODE39 | 上海证券交易所 | INLINECODE40 (浦发银行) |
| INLINECODE41 |
深圳证券交易所 |
SZSE.000001(平安银行) |
|
CFFEX | 中国金融期货交易所 |
CFFEX.IF2401(沪深300期货) |
|
SHFE | 上海期货交易所 |
SHFE.ag2407(白银期货) |
|
DCE | 大连商品交易所 |
DCE.m2405(豆粕期货) |
|
CZCE | 郑州商品交易所 |
CZCE.CF405(棉花期货) |
|
INE | 上海国际能源交易中心 |
INE.sc2407(原油期货) |
|
GFEX | 广州期货交易所 |
GFEX.si2407(工业硅期货) |
枚举常量参考
OrderSide — 委托方向
| 常量 | 值 | 说明 |
|---|
| INLINECODE55 | 1 | 买入 |
| INLINECODE56 |
2 | 卖出 |
OrderType — 委托类型
| 常量 | 值 | 说明 |
|---|
| INLINECODE57 | 1 | 限价单 |
| INLINECODE58 |
2 | 市价单 |
PositionEffect — 开平标志
| 常量 | 值 | 说明 |
|---|
| INLINECODE59 | 1 | 开仓 |
| INLINECODE60 |
2 | 平仓 |
|
PositionEffect_CloseToday | 3 | 平今仓 |
|
PositionEffect_CloseYesterday | 4 | 平昨仓 |
PositionSide — 持仓方向
| 常量 | 值 | 说明 |
|---|
| INLINECODE63 | 1 | 多头 |
| INLINECODE64 |
2 | 空头 |
OrderStatus — 订单状态
| 常量 | 值 | 说明 |
|---|
| INLINECODE65 | 1 | 已报 |
| INLINECODE66 |
2 | 部分成交 |
|
OrderStatus_Filled | 3 | 已成 |
|
OrderStatus_Canceled | 5 | 已撤 |
|
OrderStatus_PendingCancel | 6 | 待撤 |
|
OrderStatus_Rejected | 8 | 废单 |
|
OrderStatus_PendingNew | 10 | 待报 |
|
OrderStatus_Expired | 12 | 过期 |
ADJUST — 复权方式
| 常量 | 值 | 说明 |
|---|
| INLINECODE73 | 0 | 不复权 |
| INLINECODE74 |
1 | 前复权 |
|
ADJUST_POST | 2 | 后复权 |
完整示例 — 双均线回测策略
CODEBLOCK34
完整示例 — 定时调仓策略
CODEBLOCK35
完整示例 — 纯数据研究(无交易)
CODEBLOCK36
支持的数据频率
| 频率 | 说明 | 模式 |
|---|
| INLINECODE76 | Tick级数据 | 实时 & 回测 |
| INLINECODE77 ~ INLINECODE78 |
N秒K线 | 实时 & 回测 |
|
60s | 1分钟K线 | 实时 & 回测 |
|
300s | 5分钟K线 | 实时 & 回测 |
|
900s | 15分钟K线 | 实时 & 回测 |
|
1800s | 30分钟K线 | 实时 & 回测 |
|
3600s | 60分钟K线 | 实时 & 回测 |
|
1d | 日K线 | 实时 & 回测 |
运行模式
| 模式 | 常量 | 说明 |
|---|
| 回测 | INLINECODE85 (2) | 历史数据模拟,可配置参数 |
| 实盘/模拟 |
MODE_LIVE (1) | 实时模拟交易或通过掘金终端实盘交易 |
使用技巧
- - 需要Token:在 https://www.myquant.cn 注册获取。使用
set_token() 或在 run() 中传入。 - 事件驱动:所有策略逻辑由事件触发(
on_bar、on_tick、on_order_status),无需轮询。 - 先订阅再交易:在
init() 中使用 subscribe() 确保 on_bar/on_tick 触发前数据已就绪。 - 回测模式init中不可下单:回测模式下
init() 仅允许订阅和参数设置。 - 定期调仓用schedule:使用
schedule() 而非 on_bar 实现定期调仓策略。 - df=True:大多数数据查询函数支持
df=True 返回pandas DataFrame,便于分析。 - 多账户:在下单函数中传入
account='' 参数指定账户。 - 期货平仓:上期所需要用
PositionEffect_CloseToday / PositionEffect_CloseYesterday 区分平今仓和平昨仓。 - 回测默认值:初始资金=1,000,000,手续费=0,滑点=0。请设置合理值。
- Documentation: https://www.myquant.cn/docs/python/41
进阶示例
多因子选股策略
CODEBLOCK37
配对交易策略(统计套利)
CODEBLOCK38
期货CTA趋势跟踪策略(海龟交易)
CODEBLOCK39
风险管理模块 — 仓位控制与回撤监控
CODEBLOCK40
数据研究 — 行业轮动分析
CODEBLOCK41
🤖 AI Agent 高阶使用指南
对于 AI Agent,在使用该量化/数据工具时应遵循以下高阶策略和最佳实践,以确保任务的高效完成:
1. 数据校验与错误处理
在获取数据或执行操作后,AI 应当主动检查返回的结果格式是否符合预期,以及是否存在缺失值(NaN)或空数据。
- * 示例策略:在通过 API 获取数据框(DataFrame)后,使用
if df.empty: 进行校验;捕获 Exception 以防网络或接口错误导致进程崩溃。
2. 多步组合分析
AI 经常需要进行宏观经济分析或跨市场对比。应善于将当前接口与其他数据源或工具组合使用。
- * 示例策略:先获取板块或指数的宏观数据,再筛选成分股,最后对具体标的进行深入的财务或技术面分析,形成完整的决策链条。
3. 构建动态监控与日志
对于交易和策略类任务,AI 可以定期拉取数据并建立监控机制。
- * 示例策略:使用循环或定时任务检查特定标的的异动(如涨跌停、放量),并在发现满足条件的信号时输出结构化日志或触发预警。
社区与支持
由 大佬量化 维护 — 量化交易教学与策略研发团队。
微信客服: bossquant1 · Bilibili · 搜索 大佬量化 — 微信公众号 / Bilibili / 抖音
掘金量化(MyQuant / GoldMiner)
掘金量化 是专业量化交易平台,提供事件驱动策略开发、回测、模拟交易和实盘交易。支持A股、期货、期权、ETF、可转债和融资融券,通过统一的Python SDK(gm.api)操作。
需要在 https://www.myquant.cn 注册获取Token进行认证。实盘交易需要通过掘金终端连接券商账户。
安装
bash
pip install gm
也可从官网下载:https://www.myquant.cn/docs/downloads/698
架构概述
你的Python脚本(strategy.py)
↓ gm SDK(from gm.api import *)
├── 回测模式 → 掘金回测引擎(云端/本地)
├── 模拟交易 → 掘金模拟交易服务器
└── 实盘交易 → 掘金终端 → 券商网关
策略程序结构
所有策略遵循事件驱动架构,包含生命周期函数:
python
from gm.api import *
def init(context):
初始化函数 — 策略启动时调用一次,用于设置订阅和参数
# 订阅两只股票的30秒K线,保留最近5根历史K线
subscribe(symbols=SHSE.600000,SZSE.000001, frequency=30s, count=5)
context.my_param = 0.8 # 自定义上下文属性
def on_bar(context, bars):
K线事件 — 每根K线收盘时触发,在此编写主要交易逻辑
bar = bars[0]
if bar[close] > bar[open]:
# 收盘价高于开盘价,以限价单买入1000股
order_volume(symbol=bar[symbol], volume=1000,
side=OrderSideBuy, ordertype=OrderType_Limit,
positioneffect=PositionEffectOpen, price=bar[close])
def on_tick(context, tick):
Tick事件 — 每次Tick推送时触发(实时模式)
print(tick[symbol], tick[price])
def onorderstatus(context, order):
订单状态事件 — 订单状态变化时触发
print(f订单 {order[clordid]}: 状态={order[status]})
def onexecutionreport(context, execrpt):
成交回报事件 — 交易成交时触发
print(f已成交: {execrpt[symbol]} {execrpt[filledvolume]}@{execrpt[filledvwap]})
if name == main:
run(strategyid=yourstrategy_id,
filename=main.py,
mode=MODE_BACKTEST, # 运行模式:回测
token=your_token,
backteststarttime=2024-01-01 09:30:00, # 回测开始时间
backtestendtime=2024-06-30 15:00:00, # 回测结束时间
backtestinitialcash=1000000, # 初始资金1,000,000
backtestcommissionratio=0.0003, # 手续费率0.03%
backtestslippageratio=0.001, # 滑点0.1%
backtestadjust=ADJUSTPREV) # 前复权
基本函数
init — 策略初始化
python
def init(context):
# 订阅日K线,保留最近20根
subscribe(symbols=SHSE.600000, frequency=1d, count=20)
context.ratio = 0.8 # 自定义参数
- - 策略启动时调用一次
- 用于设置订阅、定义参数和初始化状态
- 回测模式下init中不允许下单(模拟/实盘模式允许)
schedule — 定时任务
python
def init(context):
# 每个交易日09:40:00执行algo_1函数
schedule(schedulefunc=algo1, daterule=1d, timerule=09:40:00)
# 每月第一个交易日14:30:00执行algo_2函数
schedule(schedulefunc=algo2, daterule=1m, timerule=14:30:00)
def algo_1(context):
# 选股/调仓逻辑
pass
def algo_2(context):
# 市价单买入200股
order_volume(symbol=SHSE.600000, volume=200,
side=OrderSideBuy, ordertype=OrderType_Market,
positioneffect=PositionEffectOpen)
- - daterule: 1d(每日)、1w(每周,仅回测)、1m(每月,仅回测)
- timerule: HH:MM:SS格式,必须补零(例如09:40:00,而非9:40:0)
run — 运行策略
python
run(strategyid=strategy1,
filename=main.py,
mode=MODEBACKTEST, # MODEBACKTEST=2(回测),MODE_LIVE=1(实盘/模拟)
token=your_token,
backteststarttime=2024-01-01 09:30:00,
backtestendtime=2024-06-30 15:00:00,
backtestinitialcash=1000000, # 初始资金
backtesttransactionratio=1, # 成交比例
backtestcommissionratio=0.0003, # 手续费率
backtestslippageratio=0.001, # 滑点比例
backtestadjust=ADJUSTPREV) # ADJUSTNONE=0(不复权),ADJUSTPREV=1(前复权),ADJUST_POST=2(后复权)
stop — 停止策略
python
stop() # 优雅停止并退出策略
数据订阅
subscribe — 订阅行情数据
python
subscribe(symbols=SHSE.600000,SZSE.000001,
frequency=60s, # 频率:tick、1s~300s、60s、300s、900s、1800s、3600s、1d
count=5, # context.data中保留的历史K线数量
wait_group=True, # 等待组内所有标的就绪后再触发回调
waitgrouptimeout=5s) # 等待超时时间
unsubscribe — 取消订阅
python
unsubscribe(symbols=SHSE.600000, frequency=60s)
数据事件
| 事件 | 触发条件 | 参数 |
|---|
| ontick(context, tick) | 每次Tick推送 | 包含价格、买卖盘、成交量的Tick字典 |
| onbar(context, bars) |
每根K线收盘 | K线字典列表 |
| on_l2transaction(context, l2transaction) | Level 2逐笔成交 | L2Transaction字典 |
| on_l2order(context, l2order) | Level 2逐笔委托 | L2Order字典 |
| on
l2orderqueue(context, l2order_queue) | Level 2委托队列 | L2OrderQueue字典 |
数据查询函数
current — 实时快照
python
data = current(symbols=SZSE.000001)
返回: [{symbol: SZSE.000001, price: 16.56, open: 16.20, high: 16.92, low: 16.15,
quotes: [{bidp: 16.55, bidv: 209200, askp: 16.56, askv: 296455}, ...],
cumvolume: 160006232, cumamount: 2654379585.66, created_at: ...}]
- - 回测模式:仅返回 symbol、price、created_at
- 实盘模式:返回完整tick字段,包含5档买卖盘
history — 历史K线/Tick
python
df = history(symbol=SHSE.000300, frequency=1d,
starttime=2024-01-01, endtime=2024-06-30,
fields=open,close,high,low,volume,eob,
skip_suspended=True, # 跳过停牌日
fill_missing=None, # 缺失值填充:None、NaN、Last
adjust=ADJUST_PREV, #