Skip to content

FQFactor 模块 ​

量化因子计算引擎,提供高效的因子函数调用框架。

快速开始 ​

1. 获取数据 ​

python
from FQData.DataSource import get_datasource

ds = get_datasource()
data = ds.get_stock_day('000001', '2024-01-01', '2025-12-31')

2. 计算因子 ​

python
from FQFactor import MA, EMA, MACD, RSI, BOLL

close = data['close'].values

# 移动平均
ma5 = MA(close, 5)

# 指数移动平均
ema12 = EMA(close, 12)

# MACD指标
dif, dea, macd = MACD(close)

# RSI指标
rsi6 = RSI(close, 6)

# 布林带
upper, mid, lower = BOLL(close, 20, 2)

目录结构 ​

FQFactor/
├── indicators/          # 指标函数
│   ├── trend.py        # 趋势指标 (MA, EMA, MACD, BBI, TRIX, DMI)
│   ├── momentum.py     # 动量指标 (RSI, KDJ, WR, ROC, MTM, CCI, MFI)
│   ├── volatility.py   # 波动率指标 (BOLL, ATR, VR, OBV, EMV, DPO, MASS)
│   ├── ma.py           # 移动平均 (旧版MA实现)
│   ├── base.py         # 应用层函数 (CROSS, BARSLAST, ZIG, etc.)
│   ├── core.py         # 核心工具函数 (HHV, LLV, REF, IF, etc.)
│   └── registry.py     # 指标注册表
├── factors/            # 预定义因子
├── evaluators/         # 因子评估
└── signals/            # 信号生成

可用指标 ​

趋势指标 (Trend) ​

函数说明默认参数
MA(data, period)移动平均线period=20
EMA(data, period)指数移动平均period=12
MACD(data, fast, slow, signal)MACD指标fast=12, slow=26, signal=9
BBI(data, m1, m2, m3, m4)多空指标m1=3, m2=6, m3=12, m4=20
DMA(data, alpha)动态移动平均alpha=0.5
TRIX(data, m1, m2)三重指数平滑平均线m1=12, m2=20
DMI(data, m1, m2)动向指标m1=14, m2=6

动量指标 (Momentum) ​

函数说明默认参数
RSI(data, period)相对强弱指标period=24
KDJ(data, n, m1, m2)KDJ随机指标n=9, m1=3, m2=3
WR(data, n, n1)威廉指标n=10, n1=6
ROC(data, n, m)变动率指标n=12, m=6
MTM(data, n, m)动量指标n=12, m=6
CCI(data, n)顺势指标n=14
MFI(data, n)资金流量指标n=14

波动率指标 (Volatility) ​

函数说明默认参数
BOLL(data, n, p)布林带n=20, p=2
ATR(data, n)真实波动均值n=20
VR(data, m1)虚拟成交量比率m1=26
OBV(data)能量潮指标-
EMV(data, n, m)简易波动指标n=14, m=9
DPO(data, m1, m2, m3)区间震荡线m1=20, m2=10, m3=6
MASS(data, n1, n2, m)梅斯线n1=9, n2=25, m=6

应用层函数 ​

函数说明
CROSS(A, B)金叉死叉判断
BARSLAST(COND)条件上一次成立位置
BARSLASTCOUNT(COND)连续满足条件周期数
BARSSINCE(Series)条件成立至今周期数
TFILTER(A, B, N)买卖信号过滤
ZIG(k, x, type)之字转向函数
PLOYLINE(COND, V1)折线作图
DRAWLINE(COND1, V1, COND2, V2)画线函数

核心工具函数 ​

函数说明
HHV(S, N)N日最高值
LLV(S, N)N日最低值
REF(Series, N)N日前的值
IF(S, A, B)条件选择
SUM(S, N)求和
STD(Series, N)标准差
CONST(Series, N)常量数组

示例 ​

计算多个指标 ​

python
from FQFactor import MA, MACD, RSI, BOLL, CROSS

close = data['close'].values

# 同时计算多个指标
ma5 = MA(close, 5)
ma10 = MA(close, 10)
dif, dea, macd = MACD(close)
rsi = RSI(close, 6)
upper, mid, lower = BOLL(close)

# 金叉信号
cross_signal = CROSS(ma5, ma10)

批量获取股票数据并计算 ​

python
from FQData.DataSource import get_datasource
from FQFactor import MA, MACD

ds = get_datasource()
stocks = ['000001', '000002', '600000']

results = {}
for code in stocks:
    data = ds.get_stock_day(code, '2024-01-01', '2025-12-31')
    close = data['close'].values
    results[code] = {
        'MA5': MA(close, 5)[-1],
        'MACD': MACD(close)[0][-1],  # DIF
    }

开发者文档 ​

文档目录 ​

快速开发流程 ​

python
from typing import Union, Tuple
import numpy as np
import pandas as pd

from FQFactor.indicators.registry import register_indicator, IndicatorCategory


@register_indicator("MY_INDICATOR", category=IndicatorCategory.TREND, params={"period": 20})
def my_indicator(data: Union[pd.DataFrame, np.ndarray], period: int = 20) -> np.ndarray:
    """
    自定义指标说明

    Args:
        data: 价格数据
        period: 周期

    Returns:
        指标值序列
    """
    close = _validate_data(data)
    # 计算逻辑
    result = ...
    return np.round(result, 2)