3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
你好!这是一个非常好的问题,也是很多初学 JoinQuant(聚宽)量化平台的新手经常会遇到的疑惑。
简单来说,**“源码”(策略代码)和“研究”(研究代码)**代表了量化交易开发流程中的两个不同阶段,它们运行的底层环境、代码结构以及支持的 API 都有很大的区别。
以下是两者的详细对比解析:
“源码”区域的代码,是用来进行“历史回测”和“模拟实盘交易”的。
initialize(context) 初始化函数(设定基准、手续费、初始股票池等)。run_daily() 或 handle_data(context, data) 来处理每天/每分钟的交易逻辑。context 对象来获取当前的账户资金、持仓信息和当前时间。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)
“研究”区域的代码,是用来进行“数据分析、策略探索和因子挖掘”的。
initialize 或 handle_data。context 对象(因为你没有在跑回测,也就没有虚拟账户和持仓)。pandas、numpy、matplotlib 等数据分析和绘图库。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()
在社区的帖子里,作者通常会先在“研究”中展示他们是如何发现这个策略逻辑的(比如贴出数据图表),然后再在“源码”中给出可以实际运行回测的完整策略代码。这就是为什么你会看到两份截然不同的代码!