找回密码
 立即注册
搜索
查看: 82|回复: 0

游量AI变量约定

[复制链接]

16

主题

0

回帖

70

积分

管理员

积分
70
发表于 2026-4-30 11:09:05 | 显示全部楼层 |阅读模式
symbol - 代码标识
掘金代码(symbol)是掘金平台用于唯一标识交易标的代码,
格式为:交易所代码.交易标代码, 比如深圳平安的symbol,示例:SZSE.000001(注意区分大小写)。 板块为:BK.板块代码,比如鸿蒙概念的symbol,示例:BK.007347,板块symbol可通过get_symbols(sec_type1=1070)获取。 代码标识表示可以在掘金终端的仿真交易或交易工具中进行查询。


#交易所代码
目前掘金支持国内的 8 个交易所, 各交易所的代码缩写如下:
市场中文名
市场代码
上交所
SHSE
深交所
SZSE
中金所
CFFEX
上期所
SHFE
大商所
DCE
郑商所
CZCE
上海国际能源交易中心
INE
广期所
GFEX

#交易标的代码
交易表代码是指交易所给出的交易标的代码, 包括股票(如 600000), 期货(如 rb2011), 期权(如 10002498), 指数(如 000001), 基金(如 510300)等代码。
具体的代码请参考交易所的给出的证券代码定义。
#symbol 示例
市场中文名
市场代码
示例代码
证券简称
上交所
SHSE
SHSE.600000
浦发银行
深交所
SZSE
SZSE.000001
平安银行
中金所
CFFEX
CFFEX.IC2011
中证 500 指数 2020 年 11 月期货合约
上期所
SHFE
SHFE.rb2011
螺纹钢 2020 年 11 月期货合约
大商所
DCE
DCE.m2011
豆粕 2020 年 11 月期货合约
郑商所
CZCE
CZCE.FG101
玻璃 2021 年 1 月期货合约
上海国际能源交易中心
INE
INE.sc2011
原油 2020 年 11 月期货合约
广期所
GFEX
GFEX.lc2405
碳酸锂 2024 年 05 月期货合约

#虚拟合约
市场中文名
市场代码
示例代码
证券简称
上期所
SHFE
SHFE.RB
螺纹钢主力连续合约
上期所
SHFE
SHFE.RB22
螺纹钢次主力连续合约
上期所
SHFE
SHFE.RB99
螺纹钢加权指数合约
上期所
SHFE
SHFE.RB00
螺纹钢当月连续合约
上期所
SHFE
SHFE.RB01
螺纹钢下月连续合约
上期所
SHFE
SHFE.RB02
螺纹钢下季连续合约
上期所
SHFE
SHFE.RB03
螺纹钢隔季连续合约

#期货主力连续合约
仅回测模式下使用,期货主力连续合约为量价数据的简单拼接,未做平滑处理, 如 SHFE.RB 螺纹钢主力连续合约,其他主力合约请查看期货主力连续合约
#mode - 模式选择
策略支持两种运行模式,需要在run()里面指定,分别为实时模式和回测模式。
#实时模式
实时模式需指定 mode = MODE_LIVE
订阅行情服务器推送的实时行情,也就是交易所的实时行情,只在交易时段提供,常用于仿真和实盘。
#回测模式
回测模式需指定 mode = MODE_BACKTEST
订阅指定时段、指定交易代码、指定数据类型的历史行情,行情服务器将按指定条件全速回放对应的行情数据。适用的场景是策略回测阶段,快速验证策略的绩效是否符合预期。
#context - 上下文对象
context 是策略运行上下文环境对象,该对象将会在你的算法策略的任何方法之间做传递。用户可以通过 context 定义多种自己需要的属性,也可以查看 context 固有属性,context 结构如下图:


#context.symbols - 订阅代码集合
通过 subscribe 行情订阅函数, 订阅代码会生成一个代码集合
函数原型:
context.symbols


复制成功

返回值:
类型
说明
set(str)
订阅代码集合

示例:
subscribe(symbols=['SHSE.600519', 'SHSE.600419'], frequency='60s')
context.symbols


复制成功

返回值:
{'SHSE.600519', 'SHSE.600419'}


复制成功

#context.now - 当前时间
实时模式返回当前本地时间, 回测模式返回当前回测时间
函数原型:
context.now


复制成功

返回值:
类型
说明
datetime.datetime
当前时间(回测模式下是策略回测的当前历史时间, 实时模式下是用户的系统本地时间)

示例:
context.now


复制成功

返回:
2020-09-01 09:40:00+08:00


复制成功

#context.mode - 运行模式
实时模式为1,回测模式为2
函数原型:
context.mode


复制成功

返回值:
类型
说明
int
实时模式为1,回测模式为2

示例:
if context.mode == 1:
print('执行实时模式:', context.mode)
elif context.mode == 2:
print('执行回测模式:', context.mode)
else:
print('未知模式:', context.mode)


复制成功

返回:
执行实时模式:1


复制成功

#context.data - 数据滑窗
获取订阅的tick 对象 或者 bar 对象滑窗,数据为包含当前时刻推送 tick 或 bar 的前 count 条tick或者bar数据
原型:
context.data(symbol,frequency,count,fields)


复制成功

参数:
参数名
类型
说明
symbol
str
标的代码(只允许单个标的的代码字符串),使用时参考symbol
frequency
str
频率, 支持 'tick', '1d', '60s' 等, 默认 '1d', 详情见股票行情数据和期货行情数据, 实时行情支持的频率
count
int
滑窗大小(正整数),需小于等于 subscribe 函数中 count 值
fields
str
指定返回对象字段, 如有多个字段, 中间用, 隔开, 默认所有, 具体字段见:tick 对象 和 bar 对象 ,需在 subscribe 函数中指定的fields范围内,指定字段越少,查询速度越快

返回值:
当subscribe的format="df"(默认)时,返回dataframe
类型
说明
dataframe
tick 的 dataframe 或者 bar 的 dataframe

示例:
def init(context):
subscribe(symbols='SHSE.600519', frequency='60s', count=50, fields='symbol, close, eob', format='df')

def on_bar(context,bars):
data = context.data(symbol=bars[0]['symbol'], frequency='60s', count=10)
print(data.tail())


复制成功

输出:
symbol    close                       eob
5  SHSE.600519  1629.96 2024-01-22 14:56:00+08:00
6  SHSE.600519  1627.25 2024-01-22 14:57:00+08:00
7  SHSE.600519  1627.98 2024-01-22 14:58:00+08:00
8  SHSE.600519  1642.00 2024-01-22 15:00:00+08:00
9  SHSE.600519  1632.96 2024-01-23 09:31:00+08:00


复制成功

subscribe的format ="row"时,返回list[dict]
类型
说明
list[dict]
当frequency='tick'时,返回tick列表:[{tick_1}, {tick_2}, ..., {tick_n}],列表长度等于滑窗大小,即n=count, 当frequency='60s', '300s', '900s', '1800s', '3600s'时,返回bar列表:[{bar_1}, {bar_2}, {bar_n}, ..., ] ,列表长度等于滑窗大小,即n=count

示例:
def init(context):
subscribe(symbols='SHSE.600519', frequency='tick', count=50, fields='symbol, price, quotes,created_at', format='row')


def on_tick(context, tick):
data = context.data(symbol=tick['symbol'], frequency='tick', count=3)
print(data)


复制成功

输出:
[{'symbol': 'SHSE.600519', 'price': 1642.0, 'quotes': [{'bid_p': 1640.0, 'bid_v': 100, 'ask_p': 1642.0, 'ask_v': 4168}, {'bid_p': 1634.52, 'bid_v': 300, 'ask_p': 1642.01, 'ask_v': 100}, {'bid_p': 1633.0, 'bid_v': 100, 'ask_p': 1642.06, 'ask_v': 100}, {'bid_p': 1632.96, 'bid_v': 100, 'ask_p': 1642.08, 'ask_v': 200}, {'bid_p': 1632.89, 'bid_v': 100, 'ask_p': 1642.2, 'ask_v': 200}], 'created_at': datetime.datetime(2024, 1, 22, 15, 1, 51, 286000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai'))}, {'symbol': 'SHSE.600519', 'price': 1642.0, 'quotes': [{'bid_p': 1640.0, 'bid_v': 100, 'ask_p': 1642.0, 'ask_v': 4168}, {'bid_p': 1634.52, 'bid_v': 300, 'ask_p': 1642.01, 'ask_v': 100}, {'bid_p': 1633.0, 'bid_v': 100, 'ask_p': 1642.06, 'ask_v': 100}, {'bid_p': 1632.96, 'bid_v': 100, 'ask_p': 1642.08, 'ask_v': 200}, {'bid_p': 1632.89, 'bid_v': 100, 'ask_p': 1642.2, 'ask_v': 200}], 'created_at': datetime.datetime(2024, 1, 22, 15, 1, 54, 280000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai'))}, {'symbol': 'SHSE.600519', 'price': 0.0, 'quotes': [{'bid_p': 0.0, 'bid_v': 0, 'ask_p': 0.0, 'ask_v': 0}, {'bid_p': 0.0, 'bid_v': 0, 'ask_p': 0.0, 'ask_v': 0}, {'bid_p': 0.0, 'bid_v': 0, 'ask_p': 0.0, 'ask_v': 0}, {'bid_p': 0.0, 'bid_v': 0, 'ask_p': 0.0, 'ask_v': 0}, {'bid_p': 0.0, 'bid_v': 0, 'ask_p': 0.0, 'ask_v': 0}], 'created_at': datetime.datetime(2024, 1, 23, 9, 14, 1, 91000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai'))}]


复制成功

subscribe的format ="col"时,返回dict
类型
说明
dict
当frequency='tick'时,返回tick数据(symbol为str格式,其余字段为列表,列表长度等于滑窗大小count),当frequency='60s', '300s', '900s', '1800s', '3600s'时,返回bar数据(symbol和frequency为str格式,其余字段为列表,列表长度等于滑窗大小count)

示例:
def init(context):
subscribe(symbols='SHSE.600519', frequency='tick', count=10, fields='symbol, price, bid_p, created_at', format='col')


def on_tick(context, tick):
data = context.data(symbol=tick['symbol'], frequency='tick', count=10)
print(data)


复制成功

输出:
{'symbol': 'SHSE.600519', 'price': [1642.0, 1642.0, 1642.0, 1642.0, 1642.0, 1642.0, 1642.0, 1642.0, 1642.0, 0.0], 'bid_p': [1640.0, 1640.0, 1640.0, 1640.0, 1640.0, 1640.0, 1640.0, 1640.0, 1640.0, 0.0], 'created_at': [datetime.datetime(2024, 1, 22, 15, 1, 12, 280000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 21, 277000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 24, 278000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 33, 280000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 36, 282000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 39, 279000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 48, 283000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 51, 286000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 22, 15, 1, 54, 280000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), datetime.datetime(2024, 1, 23, 9, 14, 1, 91000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai'))]}


复制成功

注意:
1. 只有在订阅后,此接口才能取到数据,如未订阅数据,则返回报错。
2. symbol 参数只支持输入一个标的。
3. count 参数必须小于或等于订阅函数里面的 count 值。
4. fields 参数必须在订阅函数subscribe里面指定的 fields 范围内。指定字段越少,查询速度越快,目前效率是row > col > df。
5. 当subscribe的format指定col时,tick的quotes字段会被拆分,只返回买卖一档的量和价,即只有bid_p,bid_v, ask_p和ask_v。
#context.account - 账户信息
可通过此函数获取账户资金信息及持仓信息。
原型:
context.account(account_id=None)


复制成功

参数:
参数名
类型
说明
account_id
str
账户信息,默认返回默认账户, 如多个账户需指定 account_id

返回值:
返回类型为account - 账户对象。
示例-获取当前持仓:
# 所有持仓
Account_positions = context.account().positions()
# 指定持仓
Account_position = context.account().position(symbol='SHSE.600519',side = PositionSide_Long)


复制成功

返回值:
类型
说明
list[position]
持仓对象列表

注意: 没有持仓的情况下, 用 context.account().positions()查总持仓, 返回空列表, 用 context.account().position()查单个持仓,返回 None
输出:
# 所有持仓输出
[{'account_id': 'd7443a53-f65b-11ea-bb9d-484d7eaefe55', 'symbol': 'SHSE.600419', 'side': 1, 'volume': 2200, 'volume_today': 100, 'vwap': 16.43391600830338, 'amount': 36154.61521826744, 'fpnl': -2362.6138754940007, 'cost': 36154.61521826744, 'available': 2200, 'available_today': 100, 'created_at': datetime.datetime(2020, 9, 1, 9, 40, tzinfo=tzfile('PRC')), 'updated_at': datetime.datetime(2020, 9, 30, 9, 40, tzinfo=tzfile('PRC')), 'account_name': '', 'vwap_diluted': 0.0, 'price': 0.0, 'order_frozen': 0, 'order_frozen_today': 0, 'available_now': 0, 'market_value': 0.0, 'last_price': 0.0, 'last_volume': 0, 'last_inout': 0, 'change_reason': 0, 'change_event_id': '', 'has_dividend': 0}, {'account_id': 'd7443a53-f65b-11ea-bb9d-484d7eaefe55', 'symbol': 'SHSE.600519', 'side': 1, 'volume': 1100, 'vwap': 1752.575242219682, 'amount': 1927832.7664416502, 'fpnl': -110302.84700805641, 'cost': 1927832.7664416502, 'available': 1100, 'created_at': datetime.datetime(2020, 9, 1, 9, 40, tzinfo=tzfile('PRC')), 'updated_at': datetime.datetime(2020, 9, 15, 9, 40, tzinfo=tzfile('PRC')), 'account_name': '', 'volume_today': 0, 'vwap_diluted': 0.0, 'price': 0.0, 'order_frozen': 0, 'order_frozen_today': 0, 'available_today': 0, 'available_now': 0, 'market_value': 0.0, 'last_price': 0.0, 'last_volume': 0, 'last_inout': 0, 'change_reason': 0, 'change_event_id': '', 'has_dividend': 0}]
# 指定持仓输出
{'account_id': 'd7443a53-f65b-11ea-bb9d-484d7eaefe55', 'symbol': 'SHSE.600519', 'side': 1, 'volume': 1100, 'vwap': 1752.575242219682, 'amount': 1927832.7664416502, 'fpnl': -110302.84700805641, 'cost': 1927832.7664416502, 'available': 1100, 'created_at': datetime.datetime(2020, 9, 1, 9, 40, tzinfo=tzfile('PRC')), 'updated_at': datetime.datetime(2020, 9, 15, 9, 40, tzinfo=tzfile('PRC')), 'account_name': '', 'volume_today': 0, 'vwap_diluted': 0.0, 'price': 0.0, 'order_frozen': 0, 'order_frozen_today': 0, 'available_today': 0, 'available_now': 0, 'market_value': 0.0, 'last_price': 0.0, 'last_volume': 0, 'last_inout': 0, 'change_reason': 0, 'change_event_id': '', 'has_dividend': 0}


复制成功

示例-获取当前账户资金:
context.account().cash


复制成功

返回值:
类型
说明
dict[cash]
资金对象字典

输出:
{'account_id': 'd7443a53-f65b-11ea-bb9d-484d7eaefe55', 'nav': 1905248.2789094353, 'pnl': -94751.72109056474, 'fpnl': -94555.35135529494, 'frozen': 1963697.3526980684, 'available': 36106.277566661825, 'cum_inout': 2000000.0, 'cum_trade': 1963697.3526980684, 'cum_commission': 196.3697352698069, 'last_trade': 1536.1536610412597, 'last_commission': 0.153615366104126, 'created_at': datetime.datetime(2020, 9, 1, 8, 0, tzinfo=tzfile('PRC')), 'updated_at': datetime.datetime(2020, 9, 30, 9, 40, tzinfo=tzfile('PRC')), 'account_name': '', 'currency': 0, 'order_frozen': 0.0, 'balance': 0.0, 'market_value': 0.0, 'cum_pnl': 0.0, 'last_pnl': 0.0, 'last_inout': 0.0, 'change_reason': 0, 'change_event_id': ''}


复制成功

示例-获取账户连接状态:
context.account().status


复制成功

输出:
{'state': 3, 'error': {'code': 0, 'type': '', 'info': ''}}


复制成功

#context.parameters - 动态参数
获取所有动态参数
函数原型:
context.parameters


复制成功

返回值:
类型
说明
dict
key 为动态参数的 key, 值为动态参数对象, 参见动态参数

示例-添加动态参数和查询所有设置的动态参数
add_parameter(key='k_value', value=context.k_value, min=0, max=100, name='k值阀值', intro='k值阀值',group='1', readonly=False)

context.parameters


复制成功

输出:
{'k_value': {'key': 'k_value', 'value': 80.0, 'max': 100.0, 'name': 'k值阀值', 'intro': 'k值阀值', 'group': '1', 'min': 0.0, 'readonly': False}}



复制成功

#context.xxxxx - 自定义属性
通过自定义属性设置参数, 随 context 全局变量传入策略各个事件里
context.my_value = 100000000


复制成功

返回值:
类型
说明
any type
自定义属性

示例-输出自定义属性
print(context.my_value)


复制成功

输出:
100000000



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|游量 AI -更聪明的量化投资平台 ( |琼 ICP 备 2025055451 号 -8 )

GMT+8, 2026-7-22 16:54 , Processed in 0.081682 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表