问题描述
日均线很容易计算,但周均线怎么弄呢?哪里有参考材料?
解决方案
在 JoinQuant (聚宽) 平台上计算周均线其实非常简单,核心思路是先获取周级别的 K 线数据,然后再对收盘价求平均。
官方 API 文档中提供了 get_bars 函数,它原生支持获取周线数据。以下是详细的参考材料和实现方法:
核心 API:get_bars
get_bars 函数用于获取各种时间周期的 bar 数据,支持标准 bar 和非标准 bar。要获取周线数据,只需将 unit 参数设置为 '1w'。
函数签名:
get_bars(security, count, unit='1d', fields=['date', 'open','high','low','close'], include_now=False, end_dt=None, fq_ref_date=None, df=False)
计算周均线的步骤与代码示例
假设我们要计算某只股票(如平安银行 000001.XSHE)的 5周均线 (MA5 Weekly),可以在策略中这样编写:
import jqdata
def initialize(context):
# 设定要操作的股票
g.security = '000001.XSHE'
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 每天开盘运行
run_daily(market_open, time='09:30')
def market_open(context):
security = g.security
# 1. 获取过去 5 周的周线数据
# unit='1w' 表示获取周线
# include_now=False 表示不包含当前未结束的这一周(避免未来函数或数据跳动)
# df=True 表示返回 pandas.DataFrame 格式,方便计算
weekly_bars = get_bars(security, count=5, unit='1w',
fields=['date', 'close'],
include_now=False,
df=True)
# 2. 计算 5 周均线
# 直接对获取到的 5 周收盘价求平均值
ma5_weekly = weekly_bars['close'].mean()
# 打印结果
log.info(f"{security} 的 5 周均线价格为: {ma5_weekly}")
# 后续可以根据 ma5_weekly 进行交易逻辑判断...
# current_price = get_current_data()[security].last_price
# if current_price > ma5_weekly:
# order_target_value(security, context.portfolio.available_cash)
关键参数说明:
unit='1w':这是获取周线的关键,代表 1 week。include_now=False:在策略运行中,当前这一周通常还没有走完。如果设置为True,获取到的最后一根周线会包含本周已交易天数的数据,这会导致均线在周内不断变化。通常计算传统周均线时,我们取已经走完的完整周,因此设为False。df=True:返回 Pandas DataFrame 格式,这样可以直接调用.mean()方法计算均值,代码更简洁。- 复权处理:在
initialize中设置了set_option('use_real_price', True)后,get_bars默认会根据context.current_dt返回前复权数据,这保证了均线计算的连续性和准确性。
通过这种方式,你可以轻松计算 5周、10周、20周等任意周期的周均线,甚至可以通过修改 unit='1M' 来计算月均线。