🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 聚宽平台中如何将变量赋值给技术指标的 check_date 参数?

joinquant | 发布时间: 2026/6/4
以下内容由 EasyQuant 生成。

问题描述

cci中,如何把一个变量赋值给‘’check_date‘’?

下面是把一个常量的日期赋给了check_date,程序中需要一个变量赋给check_date,怎样写方便?试了几次总出错。
CCI1 = CCI(security_list1, check_date='2017-01-04', N=14)
print CCI1[security_list1]

解决方案

在 JoinQuant 聚宽平台中调用技术指标函数(如 CCIMACD 等)时,check_date 参数通常接受 字符串格式(如 '2017-01-04'datetime.date / datetime.datetime 对象。如果你在赋值变量时出错,通常是因为变量的类型不正确(例如传入了列表、Series 等),或者日期格式不符合要求。

以下是几种最常见且方便的变量赋值写法,分为回测/模拟交易环境研究环境

场景一:在回测/模拟交易中(使用 context

在策略代码的 handle_data 或自定义的定时运行函数中,我们通常需要获取当前的逻辑时间或前一个交易日。你可以直接使用 context.current_dtcontext.previous_date

写法 1:使用前一个交易日(推荐,避免未来函数)

def handle_data(context, data):
    security_list1 = '000001.XSHE'
    # context.previous_date 是 datetime.date 对象,可以直接传给 check_date
    my_date = context.previous_date 
    
    # 将变量 my_date 赋给 check_date
    CCI1 = CCI(security_list1, check_date=my_date, N=14)
    print(CCI1[security_list1])

写法 2:使用当前逻辑时间并转为字符串

def handle_data(context, data):
    security_list1 = '000001.XSHE'
    # 将当前时间格式化为 'YYYY-MM-DD' 的字符串
    current_date_str = context.current_dt.strftime('%Y-%m-%d')
    
    # 将字符串变量赋给 check_date
    CCI1 = CCI(security_list1, check_date=current_date_str, N=14)
    print(CCI1[security_list1])

场景二:在研究环境中(使用 datetime 模块)

如果你是在 Jupyter Notebook 研究环境中做数据分析,没有 context 对象,你可以使用 Python 内置的 datetime 模块来生成日期变量。

import datetime
from jqlib.technical_analysis import CCI

security_list1 = '000001.XSHE'

# 1. 自定义一个字符串变量
my_date_str = '2023-10-10'
CCI1 = CCI(security_list1, check_date=my_date_str, N=14)
print(CCI1[security_list1])

# 2. 获取今天的日期作为变量
today_date = datetime.date.today()
CCI2 = CCI(security_list1, check_date=today_date, N=14)
print(CCI2[security_list1])

# 3. 获取昨天的日期作为变量
yesterday_date = datetime.date.today() - datetime.timedelta(days=1)
CCI3 = CCI(security_list1, check_date=yesterday_date, N=14)
print(CCI3[security_list1])

💡 常见报错原因排查:

  1. 类型错误:确保你的变量 my_date 打印出来是 '2017-01-04' 这样的字符串,或者是 <class 'datetime.date'>。如果它是一个 Pandas 的 Timestamp 或者包含时间的复杂对象,可能会报错。可以使用 .strftime('%Y-%m-%d') 强制转为标准字符串。
  2. 列表传参错误check_date 只能接受单个日期,不能传入一个日期列表。
  3. Python 2/3 语法问题:注意你提问中写的是 print CCI1[security_list1],这是 Python 2 的语法。目前聚宽平台默认推荐使用 Python 3,请改为 print(CCI1[security_list1])