返回介绍

开始入门

操作指引

SDK

数据文档

常见问题

量化工具

其他

其他

变量约定

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

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 示例

市场中文名市场代码示例代码证券简称
上交所SHSESHSE.600000浦发银行
深交所SZSESZSE.000001平安银行
中金所CFFEXCFFEX.IC2011中证 500 指数 2020 年 11 月期货合约
上期所SHFESHFE.rb2011螺纹钢 2020 年 11 月期货合约
大商所DCEDCE.m2011豆粕 2020 年 11 月期货合约
郑商所CZCECZCE.FG101玻璃 2021 年 1 月期货合约
上海国际能源交易中心INEINE.sc2011原油 2020 年 11 月期货合约
广期所GFEXGFEX.lc2405碳酸锂 2024 年 05 月期货合约

虚拟合约

市场中文名市场代码示例代码证券简称
上期所SHFESHFE.RB螺纹钢主力连续合约
上期所SHFESHFE.RB22螺纹钢次主力连续合约
上期所SHFESHFE.RB99螺纹钢加权指数合约
上期所SHFESHFE.RB00螺纹钢当月连续合约
上期所SHFESHFE.RB01螺纹钢下月连续合约
上期所SHFESHFE.RB02螺纹钢下季连续合约
上期所SHFESHFE.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)

参数:

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

返回值:

当subscribe的format="df"(默认)时,返回dataframe

类型说明
dataframetick 的 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_idstr账户信息,默认返回默认账户, 如多个账户需指定 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

返回值:

类型说明
dictkey 为动态参数的 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

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

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

发布评论

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