问题描述
我想问下这个账户相关的信息Context是需要连接实盘吗?这个怎么找不到?还是所这是需要通过jk这边申请一个账户账号呢?
解决方案
Context 对象到底是什么?
在 JoinQuant(聚宽)量化平台中,context 不需要连接实盘账户,您也不需要额外去申请一个真实的资金账号来获取它。
context 是聚宽回测引擎和模拟交易引擎自动生成并维护的一个全局对象(策略信息总览)。它的主要作用是存放当前策略运行时的上下文信息,包括当前的账户资金、股票持仓信息、当前时间等。
Context 需要连接实盘账户吗?
完全不需要。
- 虚拟账户机制:当您在聚宽平台上点击“编译运行”、“运行回测”或“新建模拟交易”时,系统会自动为您分配一个虚拟的初始资金(例如默认的 100,000 元)。
context对象记录的就是这个虚拟账户里的资金变动和持仓情况。 - 关于实盘:根据聚宽官方文档的最新说明,聚宽目前没有提供任何形式的实盘及交易通道服务(一创聚宽也已于2023-12-29停止维护)。因此,您在聚宽上编写的策略主要用于历史回测和模拟盘交易,所有的账户信息都是平台虚拟的。
如何获取和使用 Context?
您不需要去“找”或者“创建”这个对象。在聚宽的策略代码架构中,引擎会在调用特定的生命周期函数时,自动将 context 作为参数传递给您的函数。
例如,在以下核心函数中,context 都是直接可用的:
# 初始化函数,回测/模拟开始时运行一次
def initialize(context):
# 可以通过 context 获取初始资金等信息
print("初始资金:", context.portfolio.starting_cash)
# 每天开盘前运行
def before_trading_start(context):
# 可以通过 context 获取当前的时间
print("当前日期:", context.current_dt)
# 盘中运行(按天或按分钟)
def handle_data(context, data):
# 可以通过 context 获取当前可用资金和持仓
cash = context.portfolio.available_cash
positions = context.portfolio.positions
print("可用资金:", cash)
Context 包含哪些核心信息?
context 对象是一个只读对象(尝试修改它会报错),它包含了非常丰富的策略运行状态:
context.portfolio:总账户信息。包含available_cash(可用资金)、total_value(总资产)、positions(当前持仓字典)、returns(累计收益)等。context.current_dt:当前单位时间的开始时间(datetime.datetime对象),即策略运行到的当前逻辑时间。context.previous_date:前一个交易日(datetime.date对象)。context.universe:当前设定的股票池。context.run_params:此次运行的参数,包含回测的开始/结束日期、运行频率(天/分钟/tick)、运行类型(回测还是模拟交易)等。
总结
context 只是聚宽代码框架里的一个上下文变量,代表了您当前回测或模拟交易的“虚拟账户状态”和“时间状态”。您只需在聚宽网页端写好代码并点击运行,系统就会自动为您生成并管理这个对象,无需任何实盘绑定或额外申请。