# 重叠研究指标 重叠研究指标是直接叠加在价格图表上的技术指标,提供趋势跟踪和支撑/阻力位信息。 --- ## SMA - 简单移动平均线 简单移动平均线计算指定周期内价格的算术平均值,提供价格趋势的平滑表示。 ### 公式 $$SMA = \frac{\sum_{i=0}^{n-1} price_i}{n}$$ 其中 $n$ 为周期。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 平均计算的周期数 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (SMA) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import SMA # Object-oriented API sma = SMA(period=20) result = sma.update(close_price) if result.valid: print(f"SMA: {result.value:.2f}") # TA-Lib compatible API from techkit import talib_compat as ta sma_values = ta.SMA(close_prices, timeperiod=20) ``` ::: :::{tab-item} Node.js ```javascript const tk = require('techkit'); // Streaming API const sma = tk.sma(20); const result = sma.update(closePrice); // Batch API const values = tk.SMA(closePrices, 20); ``` ::: :::{tab-item} C++ ```cpp #include techkit::SMA sma(20); auto result = sma.update(closePrice); ``` ::: :::{tab-item} C ```c #include tk_indicator sma = tk_sma_new(20); tk_result r = tk_update(sma, closePrice); tk_free(sma); ``` ::: :::: ### 交易应用 - **趋势识别**: 价格在 SMA 上方 = 上升趋势,下方 = 下降趋势 - **支撑/阻力**: SMA 作为动态支撑/阻力位 - **交叉信号**: 价格穿越 SMA 表示潜在趋势变化 - **多时间框架**: 使用不同周期(50、200)进行多时间框架分析 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 5-10 | 短期趋势,剥头皮交易 | | 20 | 标准短期趋势 | | 50 | 中期趋势 | | 200 | 长期趋势,主要支撑/阻力 | --- ## EMA - 指数移动平均线 指数移动平均线对近期价格赋予更大权重,使其对价格变化的响应比 SMA 更快。 ### 公式 $$EMA_t = \alpha \times price_t + (1 - \alpha) \times EMA_{t-1}$$ 其中 $\alpha = \frac{2}{period + 1}$(平滑因子)。 第一个 EMA 值使用前 `period` 个值的 SMA 初始化。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 平滑计算的周期数 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (EMA) | | 回看 | period - 1 | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import EMA ema = EMA(period=20) result = ema.update(close_price) if result.valid: print(f"EMA: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta ema_values = ta.EMA(close_prices, timeperiod=20) ``` ::: :::{tab-item} Node.js ```javascript const ema = tk.ema(20); const result = ema.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::EMA ema(20); auto result = ema.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator ema = tk_ema_new(20); tk_result r = tk_update(ema, closePrice); ``` ::: :::: ### 交易应用 - **更快响应**: EMA 对价格变化的反应比 SMA 更快 - **趋势跟踪**: 使用 EMA 交叉作为入场/出场信号 - **金叉/死叉**: EMA(50) 穿越 EMA(200) 表示主要趋势变化 - **支撑/阻力**: EMA 提供动态支撑/阻力位 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 9-12 | 短期动量 | | 21-26 | 中期趋势 | | 50 | 长期趋势 | | 200 | 主要趋势过滤器 | --- ## WMA - 加权移动平均线 加权移动平均线对近期价格赋予线性递增的权重,在 SMA 和 EMA 的响应性之间提供折中。 ### 公式 $$WMA = \frac{\sum_{i=0}^{n-1} (n-i) \times price_i}{\frac{n(n+1)}{2}}$$ 其中最近的价格权重为 $n$,第二近的价格权重为 $n-1$,以此类推。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 平均计算的周期数 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (WMA) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import WMA wma = WMA(period=20) result = wma.update(close_price) if result.valid: print(f"WMA: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta wma_values = ta.WMA(close_prices, timeperiod=20) ``` ::: :::{tab-item} Node.js ```javascript const wma = tk.wma(20); const result = wma.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::WMA wma(20); auto result = wma.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator wma = tk_wma_new(20); tk_result r = tk_update(wma, closePrice); ``` ::: :::: ### 交易应用 - **平衡平滑**: 滞后小于 SMA,稳定性高于 EMA - **趋势确认**: 与其他指标结合使用进行趋势确认 - **支撑/阻力**: WMA 水平可作为支撑/阻力 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 10-20 | 短期趋势 | | 30-50 | 中期趋势 | --- ## DEMA - 双指数移动平均线 双指数移动平均线通过应用两次 EMA 并从两倍的第一 EMA 中减去第二 EMA 来减少滞后。 ### 公式 $$DEMA = 2 \times EMA(price) - EMA(EMA(price))$$ 此公式在保持趋势跟踪特性的同时减少滞后。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 两次计算的 EMA 周期 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (DEMA) | | 回看 | period - 1 | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import DEMA dema = DEMA(period=20) result = dema.update(close_price) if result.valid: print(f"DEMA: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta dema_values = ta.DEMA(close_prices, timeperiod=20) ``` ::: :::{tab-item} Node.js ```javascript const dema = tk.dema(20); const result = dema.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::DEMA dema(20); auto result = dema.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator dema = tk_dema_new(20); tk_result r = tk_update(dema, closePrice); ``` ::: :::: ### 交易应用 - **减少滞后**: DEMA 对价格变化的响应比 EMA 更快 - **趋势跟踪**: 非常适合早期捕捉趋势变化 - **交叉信号**: DEMA 交叉提供及时的入场/出场信号 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 10-15 | 短期动量 | | 20-30 | 中期趋势 | --- ## TEMA - 三重指数移动平均线 三重指数移动平均线应用三重平滑以进一步减少滞后,同时保持趋势跟踪特性。 ### 公式 $$TEMA = 3 \times EMA_1 - 3 \times EMA_2 + EMA_3$$ 其中: - $EMA_1 = EMA(price, period)$ - $EMA_2 = EMA(EMA_1, period)$ - $EMA_3 = EMA(EMA_2, period)$ ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 所有计算的 EMA 周期 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (TEMA) | | 回看 | period - 1 | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import TEMA tema = TEMA(period=20) result = tema.update(close_price) if result.valid: print(f"TEMA: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta tema_values = ta.TEMA(close_prices, timeperiod=20) ``` ::: :::{tab-item} Node.js ```javascript const tema = tk.tema(20); const result = tema.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::TEMA tema(20); auto result = tema.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator tema = tk_tema_new(20); tk_result r = tk_update(tema, closePrice); ``` ::: :::: ### 交易应用 - **最小滞后**: TEMA 在指数移动平均线中滞后最小 - **趋势跟踪**: 非常适合快速变化的市场 - **敏感**: 在震荡市场中更容易出现假信号 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 5-10 | 极短期动量 | | 15-20 | 短期趋势 | --- ## KAMA - 考夫曼自适应移动平均线 考夫曼自适应移动平均线根据市场效率调整其平滑因子,在趋势市场中更敏感,在震荡市场中较不敏感。 ### 公式 $$KAMA_t = KAMA_{t-1} + SC \times (price_t - KAMA_{t-1})$$ 其中: - $ER = \frac{|price_t - price_{t-period}|}{\sum_{i=1}^{period} |price_i - price_{i-1}|}$(效率比率) - $SC = \left[ER \times (fast - slow) + slow\right]^2$ - $fast = \frac{2}{2+1} = 0.6667$(快速平滑常数) - $slow = \frac{2}{30+1} = 0.0645$(慢速平滑常数) ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 10 | 1-100000 | 效率比率计算的周期 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (KAMA) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import KAMA kama = KAMA(period=10) result = kama.update(close_price) if result.valid: print(f"KAMA: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta kama_values = ta.KAMA(close_prices, timeperiod=10) ``` ::: :::{tab-item} Node.js ```javascript const kama = tk.kama(10); const result = kama.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::KAMA kama(10); auto result = kama.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator kama = tk_kama_new(10); tk_result r = tk_update(kama, closePrice); ``` ::: :::: ### 交易应用 - **自适应平滑**: 自动适应市场条件 - **趋势跟踪**: 在趋势市场中更敏感 - **噪音减少**: 在震荡市场中较不敏感,减少假信号 - **支撑/阻力**: KAMA 水平作为动态支撑/阻力 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 10 | 标准自适应平滑 | | 20-30 | 长期自适应趋势 | --- ## TRIMA - 三角移动平均线 三角移动平均线应用两次 SMA,创建具有三角权重函数的更平滑平均值。 ### 公式 $$TRIMA = SMA(SMA(price, \lceil n/2 \rceil), \lfloor n/2 \rfloor + 1)$$ 对于偶数周期:$TRIMA = SMA(SMA(price, n/2+1), n/2)$ 对于奇数周期:$TRIMA = SMA(SMA(price, (n+1)/2), (n+1)/2)$ ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 三角平滑的总周期 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (TRIMA) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import TRIMA trima = TRIMA(period=20) result = trima.update(close_price) if result.valid: print(f"TRIMA: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta trima_values = ta.TRIMA(close_prices, timeperiod=20) ``` ::: :::{tab-item} Node.js ```javascript const trima = tk.trima(20); const result = trima.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::TRIMA trima(20); auto result = trima.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator trima = tk_trima_new(20); tk_result r = tk_update(trima, closePrice); ``` ::: :::: ### 交易应用 - **平滑趋势**: TRIMA 提供非常平滑的趋势线 - **滞后**: 滞后大于 SMA 但输出更平滑 - **支撑/阻力**: 强支撑/阻力位 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 20-30 | 中期平滑趋势 | | 50 | 长期平滑趋势 | --- ## T3 - 三重指数移动平均线(Tilson) T3 移动平均线使用广义 DEMA(GD)方法应用三次,提供平滑输出并减少滞后。 ### 公式 T3 使用六个 EMA,系数为: - $c_1 = -v^3$ - $c_2 = 3v^2 + 3v^3$ - $c_3 = -6v^2 - 3v - 3v^3$ - $c_4 = 1 + 3v + v^3 + 3v^2$ 其中 $v$ 为成交量因子(默认 0.7)。 $$T3 = c_1 \times EMA_6 + c_2 \times EMA_5 + c_3 \times EMA_4 + c_4 \times EMA_3$$ ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | T3 计算的 EMA 周期 | | volume_factor | double | 0.7 | 0.0-1.0 | 平滑因子(v 因子) | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (T3) | | 回看 | 6 × (period - 1) | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import T3 t3 = T3(period=20, volume_factor=0.7) result = t3.update(close_price) if result.valid: print(f"T3: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta t3_values = ta.T3(close_prices, timeperiod=20, vfactor=0.7) ``` ::: :::{tab-item} Node.js ```javascript const t3 = tk.t3(20, 0.7); const result = t3.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::T3 t3(20, 0.7); auto result = t3.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator t3 = tk_t3_new(20, 0.7); tk_result r = tk_update(t3, closePrice); ``` ::: :::: ### 交易应用 - **平滑且低滞后**: T3 提供平滑输出且滞后最小 - **成交量因子**: 较低的 v 因子(0.5-0.6)= 更平滑,较高的(0.8-0.9)= 更敏感 - **趋势跟踪**: 非常适合趋势识别 ### 常用参数值 | 周期 | 成交量因子 | 使用场景 | |------|------------|----------| | 10-15 | 0.7 | 短期趋势 | | 20-30 | 0.7 | 中期趋势 | | 20 | 0.5 | 非常平滑的趋势 | | 20 | 0.9 | 更敏感的趋势 | --- ## BBANDS - 布林带 布林带由中间带(SMA)和两个基于标准差的外带组成,提供动态支撑/阻力位和波动率信息。 ### 公式 $$Middle = SMA(close, period)$$ $$Upper = Middle + nbdev_{up} \times \sigma$$ $$Lower = Middle - nbdev_{down} \times \sigma$$ 其中 $\sigma$ 为周期内价格的标准差。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 中间带的 SMA 周期 | | nbdev_up | double | 2.0 | 0.1-10.0 | 上带的标准差倍数 | | nbdev_down | double | 2.0 | 0.1-10.0 | 下带的标准差倍数 | | matype | int | 0 | 0-8 | 移动平均类型(0=SMA,1=EMA 等) | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 三个值(上、中、下) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import BBANDS bbands = BBANDS(period=20, std_dev_up=2.0, std_dev_down=2.0) result = bbands.update(close_price) if result.valid: print(f"Upper: {result.upper:.2f}, Middle: {result.middle:.2f}, Lower: {result.lower:.2f}") # TA-Lib compatible from techkit import talib_compat as ta upper, middle, lower = ta.BBANDS(close_prices, timeperiod=20, nbdevup=2.0, nbdevdn=2.0) ``` ::: :::{tab-item} Node.js ```javascript const bbands = tk.bbands(20, 2.0, 2.0); const result = bbands.update(closePrice); // result.upper, result.middle, result.lower ``` ::: :::{tab-item} C++ ```cpp techkit::BBANDS bbands(20, 2.0, 2.0); auto result = bbands.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator bbands = tk_bbands_new(20, 2.0, 2.0); tk_bbands_result r = tk_bbands_update(bbands, closePrice); // r.upper, r.middle, r.lower ``` ::: :::: ### 交易应用 - **波动率指标**: 带宽表示波动率(更宽 = 更波动) - **超买/超卖**: 价格触及上带 = 超买,下带 = 超卖 - **挤压**: 窄带表示低波动率,通常预示着大幅波动 - **支撑/阻力**: 带作为动态支撑/阻力位 - **均值回归**: 价格倾向于回归中间带 ### 常用参数值 | 周期 | nbdev | 使用场景 | |------|-------|----------| | 20 | 2.0 | 标准布林带 | | 20 | 1.5 | 更紧的带,更多信号 | | 20 | 2.5 | 更宽的带,更少信号 | | 10 | 2.0 | 短期波动率 | --- ## SAR - 抛物线止损和反转 抛物线 SAR 提供跟踪止损位和趋势反转信号,随着趋势加速,SAR 点向价格靠近。 ### 公式 对于上升趋势: $$SAR_t = SAR_{t-1} + AF \times (EP - SAR_{t-1})$$ 其中: - $EP$ = 极值点(上升趋势中的最高价) - $AF$ = 加速因子(从 `acceleration` 开始,达到新 EP 时增加 `acceleration`,上限为 `maximum`) 对于下降趋势,公式反转(使用最低价作为 EP)。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | acceleration | double | 0.02 | 0.001-0.1 | 初始加速因子 | | maximum | double | 0.20 | 0.01-1.0 | 最大加速因子 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLC(最高价、最低价) | | 输出 | 单个值(SAR 价格水平) | | 回看 | 1 | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import SAR sar = SAR(acceleration=0.02, maximum=0.20) result = sar.update_ohlcv(open, high, low, close) if result.valid: print(f"SAR: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta sar_values = ta.SAR(high, low, acceleration=0.02, maximum=0.20) ``` ::: :::{tab-item} Node.js ```javascript const sar = tk.sar(0.02, 0.20); const result = sar.updateOHLCV({open, high, low, close}); ``` ::: :::{tab-item} C++ ```cpp techkit::SAR sar(0.02, 0.20); techkit::OHLCV bar{open, high, low, close, volume}; auto result = sar.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator sar = tk_sar_new(0.02, 0.20); tk_ohlcv bar = {open, high, low, close, volume}; tk_result r = tk_update_ohlcv(sar, &bar); ``` ::: :::: ### 交易应用 - **跟踪止损**: SAR 提供动态跟踪止损位 - **趋势跟踪**: SAR 低于价格 = 上升趋势,高于 = 下降趋势 - **反转信号**: 价格穿越 SAR 表示趋势反转 - **止损**: 使用 SAR 作为止损位 - **加速**: 更高的加速 = 更紧的止损,更多反转 ### 常用参数值 | 加速 | 最大 | 使用场景 | |------|------|----------| | 0.02 | 0.20 | 标准 SAR(最常见) | | 0.01 | 0.10 | 更慢,更宽的止损 | | 0.03 | 0.30 | 更快,更紧的止损 | --- ## MIDPOINT - 周期中点 中点指标计算指定周期内最高价和最低价之间的中点。 ### 公式 $$MIDPOINT = \frac{highest + lowest}{2}$$ 其中 `highest` 和 `lowest` 为周期内的最高和最低收盘价。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 14 | 1-100000 | 最高/最低计算的周期数 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值(中点) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import MIDPOINT midpoint = MIDPOINT(period=14) result = midpoint.update(close_price) if result.valid: print(f"MidPoint: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta midpoint_values = ta.MIDPOINT(close_prices, timeperiod=14) ``` ::: :::{tab-item} Node.js ```javascript const midpoint = tk.midpoint(14); const result = midpoint.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::MIDPOINT midpoint(14); auto result = midpoint.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator midpoint = tk_midpoint_new(14); tk_result r = tk_update(midpoint, closePrice); ``` ::: :::: ### 交易应用 - **支撑/阻力**: 中点作为支撑/阻力位 - **区间交易**: 在震荡市场中很有用 - **价格位置**: 比较当前价格与中点以判断在区间中的位置 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 14 | 标准中点 | | 20-30 | 长期中点 | --- ## MIDPRICE - 周期中点价格 中点价格指标计算最高价和最低价之间的中点(使用最高价和最低价,而非收盘价)。 ### 公式 $$MIDPRICE = \frac{highest\_high + lowest\_low}{2}$$ 其中 `highest_high` 和 `lowest_low` 为周期内的最高最高价和最低最低价。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 14 | 1-100000 | 最高/最低计算的周期数 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLC(最高价、最低价) | | 输出 | 单个值(中点价格) | | 回看 | period - 1 | | 内存 | O(period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import MIDPRICE midprice = MIDPRICE(period=14) result = midprice.update_ohlcv(open, high, low, close) if result.valid: print(f"MidPrice: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta midprice_values = ta.MIDPRICE(high, low, timeperiod=14) ``` ::: :::{tab-item} Node.js ```javascript const midprice = tk.midprice(14); const result = midprice.updateOHLCV({open, high, low, close}); ``` ::: :::{tab-item} C++ ```cpp techkit::MIDPRICE midprice(14); techkit::OHLCV bar{open, high, low, close, volume}; auto result = midprice.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator midprice = tk_midprice_new(14); tk_ohlcv bar = {open, high, low, close, volume}; tk_result r = tk_update_ohlcv(midprice, &bar); ``` ::: :::: ### 交易应用 - **真实区间中点**: 使用实际最高/最低区间,比 MidPoint 更准确 - **支撑/阻力**: 中点价格提供支撑/阻力位 - **区间分析**: 比较当前价格与中点价格以判断区间位置 ### 常用周期值 | 周期 | 使用场景 | |------|----------| | 14 | 标准中点价格 | | 20-30 | 长期中点价格 | --- ## MA - 移动平均线(通用) MA 函数是一个通用包装器,支持多种移动平均类型,允许在不同 MA 算法之间轻松切换。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 20 | 1-100000 | 周期数 | | matype | int | 0 | 0-8 | 移动平均类型(见下表) | ### MA 类型值 | 值 | 类型 | 描述 | |----|------|------| | 0 | SMA | 简单移动平均线 | | 1 | EMA | 指数移动平均线 | | 2 | WMA | 加权移动平均线 | | 3 | DEMA | 双指数移动平均线 | | 4 | TEMA | 三重指数移动平均线 | | 5 | TRIMA | 三角移动平均线 | | 6 | KAMA | 考夫曼自适应移动平均线 | | 7 | MAMA | MESA 自适应移动平均线 | | 8 | T3 | 三重指数移动平均线(T3) | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值 (MA) | | 回看 | 取决于 matype(通常为 period - 1) | | 内存 | 取决于 matype | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import MA # Use SMA (matype=0) ma = MA(period=20, matype=0) result = ma.update(close_price) # Use EMA (matype=1) ma = MA(period=20, matype=1) result = ma.update(close_price) # TA-Lib compatible from techkit import talib_compat as ta ma_values = ta.MA(close_prices, timeperiod=20, matype=0) # SMA ``` ::: :::{tab-item} Node.js ```javascript const ma = tk.ma(20, 0); // period=20, matype=0 (SMA) const result = ma.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::MA ma(20, techkit::MA_SMA); auto result = ma.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator ma = tk_ma_new(20, TK_MA_SMA); tk_result r = tk_update(ma, closePrice); ``` ::: :::: ### 交易应用 - **灵活的 MA 选择**: 无需更改代码即可在不同 MA 类型之间切换 - **策略测试**: 测试不同 MA 类型以获得最佳性能 - **兼容性**: 匹配 TA-Lib 的 MA 函数接口 --- ## MAVP - 可变周期移动平均线 MAVP 指标计算每个 K 线周期都变化的移动平均线,允许基于市场条件进行自适应平滑。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | min_period | int | 2 | 1-100000 | 允许的最小周期 | | max_period | int | 30 | 1-100000 | 允许的最大周期 | | matype | int | 0 | 0-8 | 移动平均类型(见 MA 部分) | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 + 周期值(每个 K 线) | | 输出 | 单个值(可变周期 MA) | | 回看 | max_period - 1 | | 内存 | O(max_period) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import MAVP mavp = MAVP(min_period=2, max_period=30, matype=0) # Each update requires both price and period result = mavp.update_with_period(close_price, period_value) # TA-Lib compatible from techkit import talib_compat as ta ma_values = ta.MAVP(close_prices, periods_array, minperiod=2, maxperiod=30, matype=0) ``` ::: :::{tab-item} Node.js ```javascript const mavp = tk.mavp(2, 30, 0); const result = mavp.updateWithPeriod(closePrice, periodValue); ``` ::: :::{tab-item} C++ ```cpp techkit::MAVP mavp(2, 30, techkit::MA_SMA); auto result = mavp.updateWithPeriod(closePrice, periodValue); ``` ::: :::{tab-item} C ```c tk_indicator mavp = tk_mavp_new(2, 30, TK_MA_SMA); tk_result r = tk_mavp_update(mavp, closePrice, periodValue); ``` ::: :::: ### 交易应用 - **自适应平滑**: 周期适应市场波动率 - **基于波动率**: 在波动市场中使用更高周期,在平静市场中使用更低周期 - **自定义逻辑**: 基于指标实现自己的周期选择逻辑 ### 常用参数值 | min_period | max_period | matype | 使用场景 | |------------|------------|--------|----------| | 2 | 30 | 0 (SMA) | 标准可变 MA | | 5 | 50 | 1 (EMA) | 长期可变 MA | --- ## MAMA - MESA 自适应移动平均线 MESA 自适应移动平均线使用希尔伯特变换检测周期,并相应地调整平滑因子。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | fastlimit | double | 0.5 | 0.01-0.99 | 快速平滑的上限 | | slowlimit | double | 0.05 | 0.01-0.99 | 慢速平滑的下限 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 两个值(mama, fama) | | 回看 | 32(近似) | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import MAMA mama = MAMA(fastlimit=0.5, slowlimit=0.05) result = mama.update(close_price) if result.valid: print(f"MAMA: {result.mama:.2f}, FAMA: {result.fama:.2f}") # TA-Lib compatible from techkit import talib_compat as ta mama, fama = ta.MAMA(close_prices, fastlimit=0.5, slowlimit=0.05) ``` ::: :::{tab-item} Node.js ```javascript const mama = tk.mama(0.5, 0.05); const result = mama.update(closePrice); // result.mama, result.fama ``` ::: :::{tab-item} C++ ```cpp techkit::MAMA mama(0.5, 0.05); auto result = mama.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator mama = tk_mama_new(0.5, 0.05); tk_mama_result r = tk_mama_update(mama, closePrice); // r.mama, r.fama ``` ::: :::: ### 交易应用 - **基于周期的自适应**: 自动适应市场周期 - **MAMA/FAMA 交叉**: MAMA 穿越 FAMA 提供入场/出场信号 - **趋势跟踪**: 非常适合趋势跟踪策略 - **快/慢限制**: 调整限制以控制自适应速度 ### 常用参数值 | fastlimit | slowlimit | 使用场景 | |-----------|-----------|----------| | 0.5 | 0.05 | 标准 MAMA(最常见) | | 0.6 | 0.04 | 更快自适应 | | 0.4 | 0.06 | 更慢自适应 | --- ## HT_TRENDLINE - 希尔伯特变换瞬时趋势线 HT_TRENDLINE 使用希尔伯特变换创建适应市场周期的平滑趋势线,提供无滞后的趋势指标。 ### 参数 无需参数。 ### 特性 | 属性 | 值 | |------|-----| | 输入 | 收盘价 | | 输出 | 单个值(趋势线) | | 回看 | 32(近似) | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import HT_TRENDLINE ht_trendline = HT_TRENDLINE() result = ht_trendline.update(close_price) if result.valid: print(f"HT Trendline: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta trendline_values = ta.HT_TRENDLINE(close_prices) ``` ::: :::{tab-item} Node.js ```javascript const ht_trendline = tk.ht_trendline(); const result = ht_trendline.update(closePrice); ``` ::: :::{tab-item} C++ ```cpp techkit::HT_TRENDLINE ht_trendline; auto result = ht_trendline.update(closePrice); ``` ::: :::{tab-item} C ```c tk_indicator ht_trendline = tk_ht_trendline_new(); tk_result r = tk_update(ht_trendline, closePrice); ``` ::: :::: ### 交易应用 - **无滞后趋势**: HT_TRENDLINE 与传统 MA 相比滞后最小 - **周期自适应**: 自动适应市场周期 - **趋势识别**: 价格在趋势线上方 = 上升趋势,下方 = 下降趋势 - **支撑/阻力**: 趋势线作为动态支撑/阻力 --- ## SAREXT - 抛物线 SAR 扩展 SAREXT(抛物线 SAR 扩展)提供对 SAR 行为的增强控制,具有针对多头和空头头寸的独立加速因子,以及用于微调的附加参数。 ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | start_value | double | 0.0 | 任意 | 初始 SAR 值(0 = 自动检测) | | offset_on_reverse | double | 0.0 | 任意 | 趋势反转时添加/减去的偏移量 | | accel_init_long | double | 0.02 | 0.001-0.1 | 多头头寸的初始 AF | | accel_long | double | 0.02 | 0.001-0.1 | 多头头寸的 AF 增量 | | accel_max_long | double | 0.20 | 0.01-1.0 | 多头头寸的最大 AF | | accel_init_short | double | 0.02 | 0.001-0.1 | 空头头寸的初始 AF | | accel_short | double | 0.02 | 0.001-0.1 | 空头头寸的 AF 增量 | | accel_max_short | double | 0.20 | 0.01-1.0 | 空头头寸的最大 AF | ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLC(最高价、最低价) | | 输出 | 单个值(SAR 价格水平) | | 回看 | 1 | | 内存 | O(1) | ### API 使用 ::::{tab-set} :::{tab-item} Python ```python from techkit import SAREXT sarext = SAREXT( start_value=0.0, offset_on_reverse=0.0, accel_init_long=0.02, accel_long=0.02, accel_max_long=0.20, accel_init_short=0.02, accel_short=0.02, accel_max_short=0.20 ) result = sarext.update_ohlcv(open, high, low, close) if result.valid: print(f"SAREXT: {result.value:.2f}") # TA-Lib compatible from techkit import talib_compat as ta sar_values = ta.SAREXT( high, low, startvalue=0.0, offsetonreverse=0.0, accelerationinitlong=0.02, accelerationlong=0.02, accelerationmaxlong=0.20, accelerationinitshort=0.02, accelerationshort=0.02, accelerationmaxshort=0.20 ) ``` ::: :::{tab-item} Node.js ```javascript const sarext = tk.sarext(0.0, 0.0, 0.02, 0.02, 0.20, 0.02, 0.02, 0.20); const result = sarext.updateOHLCV({open, high, low, close}); ``` ::: :::{tab-item} C++ ```cpp techkit::SAREXT sarext(0.0, 0.0, 0.02, 0.02, 0.20, 0.02, 0.02, 0.20); techkit::OHLCV bar{open, high, low, close, volume}; auto result = sarext.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator sarext = tk_sarext_new( 0.0, 0.0, 0.02, 0.02, 0.20, 0.02, 0.02, 0.20 ); tk_ohlcv bar = {open, high, low, close, volume}; tk_result r = tk_update_ohlcv(sarext, &bar); ``` ::: :::: ### 交易应用 - **非对称止损**: 多头与空头头寸的不同加速 - **自定义初始化**: 为特定入场点设置 start_value - **反转偏移**: offset_on_reverse 在趋势反转时调整 SAR - **高级控制**: 为特定交易策略微调 SAR 行为 ### 常用参数值 | 使用场景 | 多头 AF | 空头 AF | 备注 | |----------|---------|---------|------| | 标准 | 0.02/0.20 | 0.02/0.20 | 与常规 SAR 相同 | | 更紧的多头止损 | 0.03/0.30 | 0.02/0.20 | 多头头寸的更快止损 | | 更紧的空头止损 | 0.02/0.20 | 0.03/0.30 | 空头头寸的更快止损 | --- ## 相关指标 - **价格转换**: AVGPRICE, MEDPRICE, TYPPRICE, WCLPRICE - **统计**: STDDEV, VAR 用于基于波动率的带 - **周期指标**: HT_TRENDLINE 使用希尔伯特变换进行周期检测