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

JoinQuant 聚宽平台中“源码”与“研究”代码有什么不同?

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

问题描述

请问一下,在帖子里面有个源码,然后下面有个研究,有什么不同?

源码里面的code和研究里面的code不同,这是为什么?两个不同区域的代码分别代表什么?
谢谢回复!感激不尽!

解决方案

你好!这是一个非常好的问题,也是很多初学 JoinQuant(聚宽)量化平台的新手经常会遇到的疑惑。

简单来说,**“源码”(策略代码)“研究”(研究代码)**代表了量化交易开发流程中的两个不同阶段,它们运行的底层环境、代码结构以及支持的 API 都有很大的区别。

以下是两者的详细对比解析:

1. 源码(策略代码 / 回测与模拟交易环境)

“源码”区域的代码,是用来进行“历史回测”和“模拟实盘交易”的。

  • 核心目的:验证你的交易逻辑在历史行情中是否能赚钱,或者在模拟盘中自动执行买卖。
  • 运行机制(事件驱动):策略代码是事件驱动的。你不需要自己写循环去遍历每一天,聚宽的底层引擎会像时间机器一样,一天一天(或一分钟一分钟)地推进时间,并在特定的时间点自动调用你写好的函数。
  • 代码结构特征
    • 必须包含 initialize(context) 初始化函数(设定基准、手续费、初始股票池等)。
    • 通常包含定时运行函数 run_daily()handle_data(context, data) 来处理每天/每分钟的交易逻辑。
    • 依赖 context 对象来获取当前的账户资金、持仓信息和当前时间。
  • 专属 API:只能在这里使用交易下单函数,如 order()order_target(),以及获取当前持仓的 context.portfolio 等。

示例结构

def initialize(context):
    g.security = '000001.XSHE'
    set_benchmark('000300.XSHG')

def handle_data(context, data):
    # 引擎每天自动调用,执行买卖
    order(g.security, 100)

2. 研究(研究代码 / Jupyter Notebook 环境)

“研究”区域的代码,是用来进行“数据分析、策略探索和因子挖掘”的。

  • 核心目的:在写具体的交易策略之前,你需要先分析数据。比如:画出某只股票的均线图、统计某个财务指标的分布、测试某个因子的有效性等。
  • 运行机制(线性执行):研究环境本质上是一个 Jupyter Notebook。代码是线性执行的,也就是你写一行代码,运行一行,马上就能看到结果(表格或图表)。它没有时间机器引擎帮你推进时间。
  • 代码结构特征
    • 不需要 initializehandle_data
    • 没有 context 对象(因为你没有在跑回测,也就没有虚拟账户和持仓)。
    • 大量使用 pandasnumpymatplotlib 等数据分析和绘图库。
  • 专属 API:主要使用数据获取 API,如 get_price()get_fundamentals()get_factor_values() 等。注意:在研究环境中调用 order() 下单函数会直接报错。

示例结构

import pandas as pd
import matplotlib.pyplot as plt
from jqdata import *

# 直接获取数据并分析,没有 context
df = get_price('000001.XSHE', start_date='2020-01-01', end_date='2020-12-31')
df['close'].plot()
plt.show()

总结:为什么它们不同?

  • 研究(Research) 是你的实验室。你在这里查阅数据、画图、寻找规律、验证你的数学模型。这里的代码偏向于数据科学(Data Science)。
  • 源码(Strategy) 是你的自动交易机器人。当你在“研究”中找到了赚钱的规律,你把这个规律翻译成机器人的执行指令(买入、卖出条件),放到回测引擎中去跑。这里的代码偏向于工程实现。

在社区的帖子里,作者通常会先在“研究”中展示他们是如何发现这个策略逻辑的(比如贴出数据图表),然后再在“源码”中给出可以实际运行回测的完整策略代码。这就是为什么你会看到两份截然不同的代码!