【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
手册定位:模块三第 5 篇。北向资金(陆股通)被市场视为「聪明钱」,其持续净流入常领先行情。本篇讲怎么用北向净流入序列构建择时信号。
数据来源复用 #05 北向资金(历史走势
/ht/nbzj/bxls/1)。
1. 你将得到什么
- 北向每日/累计净流入序列的取数与整理;
- 三种信号:连续净流入天数、N 日净流向、北向突破均线;
- 北向信号与指数择时的结合;
- 北向跟随的 4 个坑(短线噪声、政策扰动、额度、与指数背离)。
2. 取数约定(复用)
| 信号 | 来源端点 | 见 |
|---|---|---|
| 北向历史走势 | /ht/nbzj/bxls/1(日) |
#05 |
| 北向最新概览 | /ht/nbzj/lxgl |
#05 |
3. 数据来源(复用,不重复罗列)
详见 #05 资金流向接口手册(北向 /ht/nbzj/*)。
4. 核心模板函数(自包含可跑)
python
import pandas as pd
import numpy as np
_MOCK = True
def north_signal(north_inflow, n=5):
"""north_inflow: 北向每日净流入序列(升序)。返回持仓信号(1/0)。"""
s = pd.Series(north_inflow)
roll = s.rolling(n).sum()
# N日累计净流入>0 且 当日>0 -> 看多持仓
return ((roll > 0) & (s > 0)).astype(int)
def consec_up(signal_series):
"""连续净流入天数(用于强度)。"""
s = pd.Series(signal_series)
return s.groupby((s != s.shift()).cumsum()).cumsum()
def run_check():
# 演示:10天北向净流入(正负交替),后段持续为正
north = [ -2e9, 1e9, -1e9, 3e9, 4e9, 5e9, 6e9, 2e9, 3e9, 4e9]
sig = north_signal(north, n=5)
assert sig.iloc[-1] == 1 # 末段持续净流入 -> 持仓
assert sig.iloc[2] == 0 # 早段反复 -> 空仓
print("校验通过 | 末态北向信号=%d 连续天数=%d" % (sig.iloc[-1], consec_up(sig).iloc[-1]))
return sig
if __name__ == "__main__":
run_check()
5. 跑通示例
python
sig = run_check()
# 把北向信号作为「大盘是否可持仓」的开关,叠加 #17 个股择时
print("大盘北向开关:", "可持仓" if sig.iloc[-1] else "观望")
6. 坑与注意事项
- 短线噪声:单日北向受汇率、外围影响大,用 N 日累计平滑,别看一天定方向。
- 政策扰动:北向交易规则/额度调整会造成异常值,要做去极值。
- 额度天花板:北向有每日额度,极端日会「买满」失真,信号要做截断。
- 与指数背离:北向看多但指数跌的背离期常见,最好和价格趋势(#17/#18)共振确认。
7. 小结与下一篇预告
北向跟随补上「资金面择时」维度。下一篇讲涨跌停/连板情绪------用市场情绪指标(涨停数、连板高度)做择时。
下一篇预告:《【Python量化实战宝典 #22】涨跌停、连板情绪手册:情绪指标构建(Python 可跑)》
8. 免责声明
本文为择时方法示例,演示数据为虚构,不构成投资建议。