ta

package
v1.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2026 License: AGPL-3.0 Imports: 7 Imported by: 0

README

技术分析指标库

用Go语言实现的技术分析指标库,提供常用的技术分析指标计算功能。

功能特性

  • ✅ 支持20+种技术分析指标
  • ✅ 兼容 go-binance 库K线数据结构
  • ✅ 自动识别多种K线数据格式(结构体/数组)
  • ✅ 高性能并发处理(大数据量时自动启用)
  • ✅ 支持动态添加K线数据

安装

go get github.com/phrynus/go-utils/ta

支持的指标

核心指标文件:

  • ta.go: 核心数据结构和通用工具函数
  • adx.go: ADX (平均趋向指标)
    • CrossOver(): 检测DI线的交叉信号
  • atr.go: ATR (平均真实波幅)
    • Percent(): 计算ATR相对于当前价格的百分比
  • boll.go: BOLL (布林带)
  • cci.go: CCI (商品通道指标)
  • cmf.go: CMF (钱德动量指标)
  • dpo.go: DPO (偏离价格振荡器)
  • ema.go: EMA (指数移动平均线)
  • jingzheMA.go: JingZheMA (惊蛰均线)
  • kdj.go: KDJ (随机指标)
  • kline.go: K线数据操作方法
  • macd.go: MACD (移动平均趋势指标)
  • obv.go: OBV (能量潮指标)
  • rma.go: RMA (移动平均)
  • rsi.go: RSI (相对强弱指标)
  • sma.go: SMA (简单移动平均线)
  • stochRsi.go: Stochastic RSI (随机相对强弱指标)
  • superTrend.go: SuperTrend (超级趋势指标)
  • superTrendPivot.go: SuperTrendPivot (基于轴点的超级趋势指标)
  • superTrendPivotHl2.go: SuperTrendPivotHl2 (基于HL2的超级趋势指标)
  • t3.go: T3 (Tillson T3移动平均线)
  • vr.go: VR (波动率比率指标)
  • williamsR.go: Williams %R (威廉指标)

注意事项

  • 数据量要求: 建议提供至少指标周期2-3倍的历史数据

免责声明

本项目仅提供技术分析工具,不构成投资建议。合约交易有高杠杆风险,请谨慎使用。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FindPivotHighPoint

func FindPivotHighPoint(klineData KlineDatas, index, period int) float64

FindPivotHighPoint 在指定周期范围内寻找高点轴点 说明:

在给定K线位置的前后period个周期内寻找是否存在高点轴点
当前位置的高点必须是指定范围内的最高点才能被认定为轴点

参数:

  • klineData: K线数据
  • index: 当前检查的位置
  • period: 前后查找的周期范围

返回值:

  • float64: 如果找到轴点返回该点的高点价格,否则返回NaN

func FindPivotLowPoint

func FindPivotLowPoint(klineData KlineDatas, index, period int) float64

FindPivotLowPoint 在指定周期范围内寻找低点轴点 说明:

在给定K线位置的前后period个周期内寻找是否存在低点轴点
当前位置的低点必须是指定范围内的最低点才能被认定为轴点

参数:

  • klineData: K线数据
  • index: 当前检查的位置
  • period: 前后查找的周期范围

返回值:

  • float64: 如果找到轴点返回该点的低点价格,否则返回NaN

Types

type FieldNames added in v1.4.1

type FieldNames struct {
	TimeFields   []string // 自定义时间字段名称
	OpenFields   []string // 自定义开盘价字段名称
	HighFields   []string // 自定义最高价字段名称
	LowFields    []string // 自定义最低价字段名称
	CloseFields  []string // 自定义收盘价字段名称
	VolumeFields []string // 自定义成交量字段名称
}

FieldNames 自定义字段名称配置 用于扩展支持的字段名称,如果某个字段为 nil 或空,则使用默认字段名称

type KlineData

type KlineData struct {
	StartTime int64   `json:"startTime"` // K线的开始时间戳(毫秒)
	Open      float64 `json:"open"`      // 开盘价
	High      float64 `json:"high"`      // 最高价
	Low       float64 `json:"low"`       // 最低价
	Close     float64 `json:"close"`     // 收盘价
	Volume    float64 `json:"volume"`    // 成交量
}

KlineData 表示一根K线的基本数据结构 说明:

包含了一根K线的所有基本信息,包括:
- 开盘时间
- OHLCV (开盘价、最高价、最低价、收盘价、成交量)

func (*KlineData) Value added in v1.1.1

func (kline *KlineData) Value(source string) float64

GetKlineValue 从单个K线数据中获取指定类型的值 说明:

从给定的K线数据中获取特定类型的价格或成交量数据
支持多种格式的参数输入

参数:

  • source: 数据类型,支持多种格式:
  • 完整名称: "open"、"high"、"low"、"close"、"volume"
  • 数字格式: "1"(open)、"2"(high)、"3"(low)、"4"(close)、"5"(volume)
  • 简写格式: "o"(open)、"h"(high)、"l"(low)、"c"(close)、"v"(volume)

返回值:

  • float64: 请求的价格数据,如果数据类型不支持返回-1

type KlineDatas

type KlineDatas []*KlineData

KlineDatas 是KlineData的切片类型,代表一组K线数据

func NewKlineDatas

func NewKlineDatas(klines interface{}, l bool, customFields ...*FieldNames) (KlineDatas, error)

NewKlineDatas 创建新的K线数据集合 说明:

将任意格式的K线数据转换为标准的KlineDatas格式
支持并发处理大量数据,自动根据CPU核心数分配工作

参数:

  • klines: 输入的K线数据(支持多种格式)
  • l: 是否排除最后一根K线(通常用于处理未完成的K线)
  • customFields: 可选的自定义字段名称,用于扩展支持的字段名称

返回值:

  • KlineDatas: 标准格式的K线数据集合
  • error: 转换过程中的错误

func (*KlineDatas) ADX

func (k *KlineDatas) ADX(period int) (*TaADX, error)

ADX 为K线数据计算平均趋向指标 说明:

对当前K线数据计算ADX指标

参数:

  • period: 计算周期

返回值:

  • *TaADX: 包含ADX计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) ADX_ added in v1.0.9

func (k *KlineDatas) ADX_(period int) (float64, float64, float64)

func (*KlineDatas) ATR

func (k *KlineDatas) ATR(period int) (*TaATR, error)

ATR 为K线数据计算平均真实波幅 说明:

对当前K线数据计算ATR指标

参数:

  • period: 计算周期

返回值:

  • *TaATR: 包含ATR计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) ATR_ added in v1.0.9

func (k *KlineDatas) ATR_(period int) float64

ATR_ 获取最新的ATR值 参数:

  • period: 计算周期

返回值:

  • float64: 最新的ATR值

func (*KlineDatas) Add

func (k *KlineDatas) Add(wsKline interface{}, customFields ...*FieldNames) error

Add 添加一根新的K线数据 说明:

向K线数据集合中添加一根新的K线
支持多种输入格式的自动转换

参数:

  • wsKline: 要添加的K线数据(支持多种格式)
  • customFields: 可选的自定义字段名称,用于扩展支持的字段名称

返回值:

  • error: 添加过程中的错误

func (*KlineDatas) Boll

func (k *KlineDatas) Boll(period int, stdDev float64, source string) (*TaBoll, error)

Boll 为K线数据计算布林带指标 说明:

对指定价格类型计算布林带指标

参数:

  • period: 计算周期
  • stdDev: 标准差倍数
  • source: 价格类型,支持"open"、"high"、"low"、"close"等

返回值:

  • *TaBoll: 包含布林带计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) Boll_ added in v1.0.9

func (k *KlineDatas) Boll_(period int, stdDev float64, source string) (float64, float64, float64)

Boll_ 获取最新的布林带值 参数:

  • period: 计算周期
  • stdDev: 标准差倍数
  • source: 价格类型

返回值:

  • float64: 最新的上轨值
  • float64: 最新的中轨值
  • float64: 最新的下轨值

func (*KlineDatas) CCI

func (k *KlineDatas) CCI(period int) (*TaCCI, error)

CCI 为K线数据计算商品通道指标 说明:

对当前K线数据计算CCI指标

参数:

  • period: 计算周期

返回值:

  • *TaCCI: 包含CCI计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) CCI_ added in v1.0.9

func (k *KlineDatas) CCI_(period int) float64

CCI_ 获取最新的CCI值 参数:

  • period: 计算周期

返回值:

  • float64: 最新的CCI值

func (*KlineDatas) CMF

func (k *KlineDatas) CMF(period int, source string) (*TaCMF, error)

CMF 为K线数据计算钱德动量指标 说明:

对当前K线数据计算CMF指标

参数:

  • period: 计算周期
  • source: 价格类型(此参数在CMF计算中实际未使用,保留是为了接口一致性)

返回值:

  • *TaCMF: 包含CMF计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) CMF_ added in v1.0.9

func (k *KlineDatas) CMF_(period int, source string) float64

CMF_ 获取最新的CMF值 参数:

  • period: 计算周期
  • source: 价格类型(此参数在CMF计算中实际未使用,保留是为了接口一致性)

返回值:

  • float64: 最新的CMF值

func (*KlineDatas) DPO added in v1.0.7

func (k *KlineDatas) DPO(source string, shortPeriod, longPeriod, xPeriod, smoothPeriod int) (*TaDpo, error)

DPO 为K线数据计算DPO指标 说明:

对指定价格类型计算DPO指标

参数:

  • source: 价格类型,支持"open"、"high"、"low"、"close"等
  • shortPeriod: 短周期
  • longPeriod: 长周期
  • xPeriod: 差值长度周期
  • smoothPeriod: 平滑周期

返回值:

  • *TaDpo: 包含DPO计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) DPO_ added in v1.0.9

func (k *KlineDatas) DPO_(shortPeriod, longPeriod, xPeriod, smoothPeriod int) (float64, float64, float64, float64, float64, float64)

DPO_ 获取最新的DPO值 参数:

  • shortPeriod: 短周期
  • longPeriod: 长周期
  • xPeriod: 差值长度周期
  • smoothPeriod: 平滑周期

返回值:

  • float64: 最新的DPO值

func (*KlineDatas) EMA

func (k *KlineDatas) EMA(period int, source string) (*TaEMA, error)

EMA 为K线数据计算指数移动平均线 说明:

对指定价格类型计算EMA指标

参数:

  • period: 计算周期
  • source: 价格类型,支持"open"、"high"、"low"、"close"等

返回值:

  • *TaEMA: 包含EMA计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) EMA_ added in v1.0.9

func (k *KlineDatas) EMA_(period int) float64

EMA_ 获取最新的EMA值 参数:

  • period: 计算周期

返回值:

  • float64: 最新的EMA值

func (*KlineDatas) ExtractSlice

func (k *KlineDatas) ExtractSlice(priceType string) ([]float64, error)

ExtractSlice 从K线数据中提取指定类型的价格序列 说明:

从K线数据中提取特定类型的价格数据(如收盘价序列)

参数:

  • priceType: 价格类型,支持"open"、"high"、"low"、"close"、"volume"

返回值:

  • []float64: 提取的价格序列
  • error: 提取过程中的错误

func (*KlineDatas) GetLast

func (k *KlineDatas) GetLast(source string) float64

GetLast 获取最后一根K线的指定数据 说明:

获取最后一根K线的特定价格数据

参数:

  • source: 数据类型,支持"open"、"high"、"low"、"close"、"volume"

返回值:

  • float64: 请求的价格数据,如果数据不存在返回-1

func (*KlineDatas) GetLastN added in v1.1.0

func (k *KlineDatas) GetLastN(n int, source string) float64

GetLastN 获取最后指定K线的指定数据

说明:

获取最后指定K线的特定价格数据

参数:

  • n: 要获取的K位置,倒序取值 0为最后一根 1为倒数第二根 2为倒数第三根
  • source: 数据类型,支持"open"、"high"、"low"、"close"、"volume"

返回值:

  • float64: 请求的价格数据,如果数据不存在返回-1

func (*KlineDatas) JingZheMA added in v1.0.8

func (k *KlineDatas) JingZheMA(period1, period2 int) (*TaJingZheMA, error)

JingZheMA 为K线数据计算惊蛰均线指标 说明:

使用K线数据计算惊蛰均线指标
包含多个条件信号线

参数:

  • period1: 主要计算周期(默认25)
  • period2: OBV的EMA计算周期(默认6)

返回值:

  • *TaJingZheMA: 包含惊蛰均线计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) JingZheMA_ added in v1.0.9

func (k *KlineDatas) JingZheMA_(period1, period2 int) (float64, float64, float64, float64, float64)

JingZheMA_ 获取最新的惊蛰均线信号值 参数:

  • period1: 主要计算周期(默认25)
  • period2: OBV的EMA计算周期(默认6)

返回值:

  • float64: 最新的条件1信号值
  • float64: 最新的条件2信号值
  • float64: 最新的条件3信号值
  • float64: 最新的条件4信号值
  • float64: 最新的条件5信号值

func (*KlineDatas) KDJ

func (k *KlineDatas) KDJ(rsvPeriod, kPeriod, dPeriod int) (*TaKDJ, error)

KDJ 为K线数据计算随机指标 说明:

对当前K线数据计算KDJ指标

参数:

  • rsvPeriod: RSV计算周期
  • kPeriod: K值计算周期
  • dPeriod: D值计算周期

返回值:

  • *TaKDJ: 包含KDJ计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) KDJ_ added in v1.0.9

func (k *KlineDatas) KDJ_(rsvPeriod, kPeriod, dPeriod int) (float64, float64, float64)

KDJ_ 获取最新的KDJ值 参数:

  • rsvPeriod: RSV计算周期
  • kPeriod: K值计算周期
  • dPeriod: D值计算周期

返回值:

  • k: 最新的K值
  • d: 最新的D值
  • j: 最新的J值

func (*KlineDatas) Keep

func (k *KlineDatas) Keep(n int) (KlineDatas, error)

Keep 保留最后N根K线并返回新的数据集 说明:

创建新的数据集,只包含原数据集最后N根K线

参数:

  • n: 要保留的K线数量

返回值:

  • KlineDatas: 新的K线数据集合
  • error: 处理过程中的错误

func (*KlineDatas) Keep_

func (k *KlineDatas) Keep_(n int) error

Keep_ 保留最后N根K线(直接修改原数据) 说明:

直接修改原数据集,只保留最后N根K线

参数:

  • n: 要保留的K线数量

返回值:

  • error: 处理过程中的错误

func (*KlineDatas) MACD

func (k *KlineDatas) MACD(source string, shortPeriod, longPeriod, signalPeriod int) (*TaMacd, error)

MACD 为K线数据计算MACD指标 说明:

对指定价格类型计算MACD指标

参数:

  • source: 价格类型,支持"open"、"high"、"low"、"close"等
  • shortPeriod: 短期EMA周期
  • longPeriod: 长期EMA周期
  • signalPeriod: 信号线周期

返回值:

  • *TaMacd: 包含MACD计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) MACD_ added in v1.0.9

func (k *KlineDatas) MACD_(shortPeriod, longPeriod, signalPeriod int) (float64, float64, float64)

MACD_ 获取最新的MACD值 参数:

  • shortPeriod: 短期EMA周期
  • longPeriod: 长期EMA周期
  • signalPeriod: 信号线周期

返回值:

  • float64: 最新的MACD值
  • float64: 最新的DIF值
  • float64: 最新的DEA值

func (*KlineDatas) OBV

func (k *KlineDatas) OBV() (*TaOBV, error)

OBV 为K线数据计算能量潮指标 说明:

使用收盘价和成交量计算OBV指标

返回值:

  • *TaOBV: 包含OBV计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) OBV_ added in v1.0.9

func (k *KlineDatas) OBV_() float64

OBV_ 获取最新的OBV值 返回值:

  • float64: 最新的OBV值

func (*KlineDatas) RMA

func (k *KlineDatas) RMA(period int, source string) (*TaRMA, error)

RMA 为K线数据计算平滑移动平均线 说明:

对指定价格类型计算RMA指标

参数:

  • period: 计算周期
  • source: 价格类型,支持"open"、"high"、"low"、"close"等

返回值:

  • *TaRMA: 包含RMA计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) RMA_ added in v1.0.9

func (k *KlineDatas) RMA_(period int, source string) float64

RMA_ 获取最新的RMA值 参数:

  • period: 计算周期
  • source: 价格类型,支持"open"、"high"、"low"、"close"等

返回值:

  • float64: 最新的RMA值

func (*KlineDatas) RSI

func (k *KlineDatas) RSI(period int, source string) (*TaRSI, error)

RSI 为K线数据计算RSI指标 说明:

基于K线数据中指定的价格类型(如收盘价、开盘价等)计算RSI指标

参数:

  • period: RSI计算周期
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • *TaRSI: 包含RSI计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) RSI_ added in v1.0.9

func (k *KlineDatas) RSI_(period int, source string) float64

RSI_ 获取最新的RSI值 参数:

  • period: RSI计算周期
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • float64: 最新的RSI值

func (*KlineDatas) SMA

func (k *KlineDatas) SMA(period int, source string) (*TaSMA, error)

SMA 为K线数据计算简单移动平均线 说明:

基于K线数据中指定的价格类型(如收盘价、开盘价等)计算SMA指标

参数:

  • period: SMA计算周期
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • *TaSMA: 包含SMA计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) SMA_ added in v1.0.9

func (k *KlineDatas) SMA_(period int, source string) float64

SMA_ 获取最新的SMA值 参数:

  • period: SMA计算周期
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • float64: 最新的SMA值

func (*KlineDatas) StochRSI

func (k *KlineDatas) StochRSI(rsiPeriod, stochPeriod, kPeriod, dPeriod int, source string) (*TaStochRSI, error)

StochRSI 为K线数据计算随机RSI指标 说明:

基于K线数据中指定的价格类型(如收盘价、开盘价等)计算StochRSI指标

参数:

  • rsiPeriod: RSI计算周期
  • stochPeriod: 随机值计算周期
  • kPeriod: K值平滑周期
  • dPeriod: D值平滑周期
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • *TaStochRSI: 包含StochRSI计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) StochRSI_ added in v1.0.9

func (k *KlineDatas) StochRSI_(rsiPeriod, stochPeriod, kPeriod, dPeriod int, source string) (float64, float64)

StochRSI_ 获取最新的StochRSI的K值和D值 参数:

  • rsiPeriod: RSI计算周期
  • stochPeriod: 随机值计算周期
  • kPeriod: K值平滑周期
  • dPeriod: D值平滑周期
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • float64: 最新的K值
  • float64: 最新的D值

func (*KlineDatas) SuperTrend

func (k *KlineDatas) SuperTrend(period int, multiplier float64) (*TaSuperTrend, error)

SuperTrend 为K线数据计算超级趋势指标 说明:

对当前K线数据计算SuperTrend指标

参数:

  • period: ATR计算周期
  • multiplier: ATR乘数

返回值:

  • *TaSuperTrend: 包含SuperTrend计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) SuperTrendPivot

func (k *KlineDatas) SuperTrendPivot(pivotPeriod int, factor float64, atrPeriod int) (*TaSuperTrendPivot, error)

SuperTrendPivot 为K线数据计算基于轴点的超级趋势指标 说明:

对当前K线数据计算SuperTrendPivot指标

参数:

  • pivotPeriod: 寻找轴点的周期范围
  • factor: ATR乘数
  • atrPeriod: ATR计算周期

返回值:

  • *TaSuperTrendPivot: 包含计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) SuperTrendPivotHl2

func (k *KlineDatas) SuperTrendPivotHl2(period int, multiplier float64) (*TaSuperTrendPivotHl2, error)

SuperTrendPivotHl2 为K线数据计算基于HL2的超级趋势指标 说明:

对当前K线数据计算SuperTrendPivotHl2指标

参数:

  • period: ATR计算周期
  • multiplier: ATR乘数

返回值:

  • *TaSuperTrendPivotHl2: 包含计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) SuperTrendPivotHl2_ added in v1.0.9

func (k *KlineDatas) SuperTrendPivotHl2_(period int, multiplier float64) (float64, float64, int)

SuperTrendPivotHl2_ 获取最新的SuperTrendPivotHl2指标值 参数:

  • period: ATR计算周期
  • multiplier: ATR乘数

返回值:

  • float64: 上轨值
  • float64: 下轨值
  • int: 趋势方向,1表示上涨,-1表示下跌,0表示初始状态

func (*KlineDatas) SuperTrendPivot_ added in v1.0.9

func (k *KlineDatas) SuperTrendPivot_(pivotPeriod int, factor float64, atrPeriod int) (float64, float64, int)

SuperTrendPivot_ 获取最新的SuperTrendPivot指标值 参数:

  • pivotPeriod: 寻找轴点的周期范围
  • factor: ATR乘数
  • atrPeriod: ATR计算周期

返回值:

  • float64: 最新的上轨线值
  • float64: 最新的下轨线值
  • int: 当前趋势方向,true表示上涨趋势,false表示下跌趋势

func (*KlineDatas) SuperTrend_ added in v1.0.9

func (k *KlineDatas) SuperTrend_(period int, multiplier float64) (float64, float64, int)

SuperTrend_ 获取最新的SuperTrend指标值 参数:

  • period: ATR计算周期
  • multiplier: ATR乘数

返回值:

  • float64: 最新的上轨线值
  • float64: 最新的下轨线值
  • bool: 当前趋势方向,true表示上涨趋势,false表示下跌趋势

func (*KlineDatas) T3

func (k *KlineDatas) T3(period int, vfact float64, source string) (*TaT3, error)

T3 为K线数据计算Tillson T3移动平均线 说明:

基于K线数据中指定的价格类型计算T3移动平均线

参数:

  • period: 计算周期
  • vfact: 体积因子
  • source: 价格数据来源,可以是"close"、"open"、"high"、"low"等

返回值:

  • *TaT3: 包含T3计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) T3_ added in v1.0.9

func (k *KlineDatas) T3_(period int, vfact float64, source string) float64

T3_ 获取最新的T3值 参数:

  • period: 计算周期
  • vfact: 体积因子
  • source: 价格数据来源

返回值:

  • float64: 最新的T3值

func (KlineDatas) VolatilityRatio

func (k KlineDatas) VolatilityRatio(shortPeriod, longPeriod int) (*TaVolatilityRatio, error)

VolatilityRatio 为K线数据计算波动率比率指标 说明:

对当前K线数据计算VR指标

参数:

  • shortPeriod: 短周期
  • longPeriod: 长周期

返回值:

  • *TaVolatilityRatio: 包含VR计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) VolatilityRatio_ added in v1.0.9

func (k *KlineDatas) VolatilityRatio_(shortPeriod, longPeriod int) float64

VolatilityRatio_ 获取最新的波动率比率值 参数:

  • shortPeriod: 短周期
  • longPeriod: 长周期

返回值:

  • float64: 最新的VR值

func (*KlineDatas) WilliamsR

func (k *KlineDatas) WilliamsR(period int) (*TaWilliamsR, error)

WilliamsR 为K线数据计算威廉指标 说明:

从K线数据中提取价格序列并计算Williams %R

参数:

  • period: 计算周期

返回值:

  • *TaWilliamsR: 包含计算结果的结构体指针
  • error: 计算过程中的错误

func (*KlineDatas) WilliamsR_

func (k *KlineDatas) WilliamsR_(period int) float64

WilliamsR_ 快速计算最新的威廉指标值 说明:

计算最近period*14个K线的Williams %R值
这是一个简化版本,主要用于快速获取最新值

参数:

  • period: 计算周期

返回值:

  • float64: 最新的Williams %R值,计算失败返回0

type TaADX

type TaADX struct {
	ADX     []float64 `json:"adx"`      // ADX值序列
	PlusDI  []float64 `json:"plus_di"`  // +DI值序列
	MinusDI []float64 `json:"minus_di"` // -DI值序列
	Period  int       `json:"period"`   // 计算周期
}

TaADX 表示平均趋向指标(Average Directional Index)的计算结果 说明:

ADX是一个趋势强度指标,由Welles Wilder开发,包含三个指标:
1. ADX: 趋势强度指标,不分方向
2. +DI: 上升趋向指标
3. -DI: 下降趋向指标
特点:
- ADX > 25 表示存在强趋势
- ADX < 20 表示趋势较弱
- ADX上升表示趋势增强
- ADX下降表示趋势减弱

func CalculateADX

func CalculateADX(klineData KlineDatas, period int) (*TaADX, error)

CalculateADX 计算平均趋向指标 说明:

计算步骤:
1. 计算+DM和-DM:
   +DM = 当日最高价 - 前日最高价 (如果为正且大于-DM)
   -DM = 前日最低价 - 当日最低价 (如果为正且大于+DM)
2. 计算真实波幅TR:
   TR = max(high-low, |high-prevClose|, |low-prevClose|)
3. 计算平滑后的+DI和-DI:
   +DI = 100 * 平滑(+DM) / 平滑(TR)
   -DI = 100 * 平滑(-DM) / 平滑(TR)
4. 计算ADX:
   DX = 100 * |+DI - -DI| / (+DI + -DI)
   ADX = 平滑(DX)

参数:

  • klineData: K线数据
  • period: 计算周期,通常为14

返回值:

  • *TaADX: 包含ADX计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

adx, err := CalculateADX(klineData, 14)

func (*TaADX) CrossOver

func (t *TaADX) CrossOver() int

CrossOver 检测DI线的交叉信号 说明:

检测+DI和-DI的交叉情况,用于产生交易信号:
- +DI上穿-DI为买入信号
- +DI下穿-DI为卖出信号
使用建议:
- 结合ADX > 25时的信号更可靠
- 可以作为趋势交易的入场信号
- 建议与其他指标配合使用

返回值:

  • 1: +DI上穿-DI(买入信号)
  • -1: +DI下穿-DI(卖出信号)
  • 0: 无交叉信号

func (*TaADX) Value

func (t *TaADX) Value() (adx, plusDI, minusDI float64)

Value 获取最新的ADX、+DI和-DI值 说明:

返回最新的三个指标值
使用建议:
- ADX用于判断趋势强度
- +DI和-DI用于判断趋势方向
- +DI > -DI 表示上升趋势
- -DI > +DI 表示下降趋势

返回值:

  • adx: 趋势强度值
  • plusDI: 上升趋向值
  • minusDI: 下降趋向值

type TaATR

type TaATR struct {
	Values    []float64 `json:"values"`     // ATR值序列
	Period    int       `json:"period"`     // 计算周期
	TrueRange []float64 `json:"true_range"` // 真实波幅序列
}

TaATR 表示平均真实波幅(Average True Range)的计算结果 说明:

ATR是衡量市场波动性的重要指标,由Welles Wilder开发:
1. 不测量价格方向,只测量价格波动幅度
2. 考虑了价格跳空的影响
3. 可用于判断市场波动状态和设置止损位
特点:
- ATR值越大,表示市场波动越剧烈
- ATR值越小,表示市场波动越平缓
- 常用于确定止损距离和仓位大小

func CalculateATR

func CalculateATR(klineData KlineDatas, period int) (*TaATR, error)

CalculateATR 计算平均真实波幅 说明:

计算步骤:
1. 计算真实波幅(TR):
   TR = max(
       当日最高价 - 当日最低价,
       |当日最高价 - 前日收盘价|,
       |当日最低价 - 前日收盘价|
   )
2. 计算ATR:
   第一个ATR = 前period日TR的简单平均
   之后的ATR = (前一日ATR * (period-1) + 当日TR) / period

参数:

  • klineData: K线数据
  • period: 计算周期,通常为14

返回值:

  • *TaATR: 包含ATR计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

atr, err := CalculateATR(klineData, 14)

func (*TaATR) Percent

func (t *TaATR) Percent(currentPrice float64) float64

Percent 计算ATR相对于当前价格的百分比 说明:

计算ATR值占当前价格的百分比,用于:
1. 评估价格波动的相对幅度
2. 设置百分比止损位置
3. 对不同价位的品种进行波动性比较

参数:

  • currentPrice: 当前价格

返回值:

  • float64: ATR占当前价格的百分比 注意:如果当前价格小于等于0,返回0

func (*TaATR) Value

func (t *TaATR) Value() float64

Value 获取最新的ATR值 说明:

返回最新的ATR值
使用建议:
- 可用于设置动态止损位置
- 可用于调整交易仓位大小
- 可用于判断市场波动状态

返回值:

  • float64: 最新的ATR值

type TaBoll

type TaBoll struct {
	Upper []float64 `json:"upper"` // 上轨线序列
	Mid   []float64 `json:"mid"`   // 中轨线序列(移动平均线)
	Lower []float64 `json:"lower"` // 下轨线序列
}

TaBoll 表示布林带(Bollinger Bands)的计算结果 说明:

布林带是由John Bollinger开发的技术分析工具,包含三条轨道线:
1. 中轨:N周期简单移动平均线(SMA)
2. 上轨:中轨 + K倍标准差
3. 下轨:中轨 - K倍标准差
特点:
- 价格通常在上下轨道之间波动
- 轨道宽度反映市场波动性
- 可用于判断超买超卖和趋势强度

func CalculateBoll

func CalculateBoll(prices []float64, period int, stdDev float64) (*TaBoll, error)

CalculateBoll 计算布林带指标 说明:

计算步骤:
1. 计算中轨(简单移动平均线)
2. 计算标准差:
   - 计算每个价格与移动平均线的差值
   - 计算差值的平方和
   - 计算平方和的均值并开方
3. 计算上下轨:
   - 上轨 = 中轨 + K倍标准差
   - 下轨 = 中轨 - K倍标准差

参数:

  • prices: 价格序列
  • period: 计算周期,通常为20
  • stdDev: 标准差倍数,通常为2

返回值:

  • *TaBoll: 包含布林带计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

boll, err := CalculateBoll(prices, 20, 2.0)

func (*TaBoll) Value

func (t *TaBoll) Value() (upper, mid, lower float64)

Value 获取最新的布林带值 说明:

返回最新的上中下轨值
使用建议:
- 价格突破上轨可能表示超买
- 价格突破下轨可能表示超卖
- 轨道收窄预示行情即将剧烈波动
- 轨道变宽表示波动性增加

返回值:

  • upper: 上轨值
  • mid: 中轨值
  • lower: 下轨值

type TaCCI

type TaCCI struct {
	Values []float64 `json:"values"` // CCI值序列
}

TaCCI 表示商品通道指标(Commodity Channel Index)的计算结果 说明:

CCI是由Donald Lambert开发的技术分析工具:
1. 测量价格是否偏离其统计平均水平
2. 用于识别周期性的超买超卖水平
3. 可以预测价格趋势的反转
特点:
- 取值范围理论上无限,但通常在±100之间波动
- +100以上为超买区
- -100以下为超卖区
- 数值的绝对值越大,价格偏离度越高

func CalculateCCI

func CalculateCCI(klineData KlineDatas, period int) (*TaCCI, error)

CalculateCCI 计算商品通道指标 说明:

计算步骤:
1. 计算典型价格(TP):
   TP = (最高价 + 最低价 + 收盘价) / 3
2. 计算TP的N周期简单移动平均(SMA)
3. 计算平均偏差(MD):
   MD = TP与其SMA的差值的N周期平均
4. 计算CCI:
   CCI = (TP - SMA) / (0.015 * MD)
其中0.015是Lambert选择的常数

参数:

  • klineData: K线数据
  • period: 计算周期,通常为20

返回值:

  • *TaCCI: 包含CCI计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

cci, err := CalculateCCI(klineData, 20)

func (*TaCCI) Value

func (t *TaCCI) Value() float64

Value 获取最新的CCI值 说明:

返回最新的CCI值
使用建议:
- CCI > +100 考虑卖出(超买)
- CCI < -100 考虑买入(超卖)
- CCI从超买区下穿+100,卖出信号增强
- CCI从超卖区上穿-100,买入信号增强
- CCI的背离可以预示趋势反转

返回值:

  • float64: 最新的CCI值

type TaCMF

type TaCMF struct {
	Values []float64 `json:"values"` // CMF值序列
	Period int       `json:"period"` // 计算周期
}

TaCMF 表示钱德动量指标(Chaikin Money Flow)的计算结果 说明:

CMF是由Marc Chaikin开发的技术分析工具:
1. 结合了价格和成交量的动量指标
2. 用于衡量资金流入和流出的强度
3. 可以预测价格趋势的持续性
特点:
- 取值范围在-1到+1之间
- 正值表示资金流入(看多)
- 负值表示资金流出(看空)
- 绝对值越大表示资金流动越强烈

func CalculateCMF

func CalculateCMF(high, low, close, volume []float64, period int) (*TaCMF, error)

CalculateCMF 计算钱德动量指标 说明:

计算步骤:
1. 计算资金流量乘数(MFM):
   MFM = ((收盘价-最低价)-(最高价-收盘价))/(最高价-最低价)
2. 计算资金流量(MFV):
   MFV = MFM * 成交量
3. 计算CMF:
   CMF = N周期MFV之和 / N周期成交量之和
使用场景:
- 判断主力资金流向
- 预测价格趋势持续性
- 识别潜在的趋势反转

参数:

  • high: 最高价序列
  • low: 最低价序列
  • close: 收盘价序列
  • volume: 成交量序列
  • period: 计算周期,通常为20或21

返回值:

  • *TaCMF: 包含CMF计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

cmf, err := CalculateCMF(high, low, close, volume, 20)

func (*TaCMF) Value

func (t *TaCMF) Value() float64

Value 获取最新的CMF值 说明:

返回最新的CMF值
使用建议:
- CMF > 0.25 表示强势买入信号
- CMF < -0.25 表示强势卖出信号
- CMF在0线附近徘徊表示盘整
- CMF与价格的背离可能预示趋势反转
- 连续3个周期保持同向为较强信号

返回值:

  • float64: 最新的CMF值

type TaDpo added in v1.0.7

type TaDpo struct {
	Short        []float64 `json:"short"`         // 短周期DPO序列
	Long         []float64 `json:"long"`          // 长周期DPO序列
	Diff         []float64 `json:"diff"`          // DPO差值序列
	High         []float64 `json:"high"`          // 差值的X周期最高点
	Low          []float64 `json:"low"`           // 差值的X周期最低点
	Mid          []float64 `json:"mid"`           // 高点和低点的平均值
	ShortPeriod  int       `json:"short_period"`  // 短周期
	LongPeriod   int       `json:"long_period"`   // 长周期
	XPeriod      int       `json:"x_period"`      // 差值长度周期
	SmoothPeriod int       `json:"smooth_period"` // 平滑周期
}

TaDpo 表示偏离价格振荡器(Detrended Price Oscillator)的计算结果 说明:

DPO是一种趋势跟踪指标,用于识别价格周期:
1. DPO短周期:收盘价与短周期SMA的差值
2. DPO长周期:收盘价与长周期SMA的差值
3. DPO差值:短周期DPO减去长周期DPO
4. DPO高点:差值的X周期最高点
5. DPO低点:差值的X周期最低点
6. DPO中点:高点和低点的平均值

func CalculateDPO added in v1.0.7

func CalculateDPO(prices []float64, shortPeriod, longPeriod, xPeriod, smoothPeriod int) (*TaDpo, error)

CalculateDPO 计算DPO指标 说明:

计算步骤:
1. 计算偏移量:
   - 短周期偏移量 = floor(短周期 / 2) + 1
   - 长周期偏移量 = floor(长周期 / 2) + 1
2. 计算原始DPO值:
   - 短周期DPO = 收盘价 - 短周期SMA[短周期偏移量]
   - 长周期DPO = 收盘价 - 长周期SMA[长周期偏移量]
3. 对DPO值进行平滑处理
4. 计算DPO差值:短周期DPO - 长周期DPO
5. 计算差值的X周期最高点和最低点
6. 对最高点和最低点进行平滑处理
7. 计算中间值:(高点 + 低点) / 2

参数:

  • prices: 价格序列
  • shortPeriod: 短周期,默认15
  • longPeriod: 长周期,默认19
  • xPeriod: 差值长度周期,默认11
  • smoothPeriod: 平滑周期,默认3

返回值:

  • *TaDpo: 包含DPO计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

dpo, err := CalculateDPO(prices, 15, 19, 11, 3)

func (*TaDpo) Value added in v1.0.7

func (t *TaDpo) Value() (short, long, diff, high, low, mid float64)

Value 获取最新的DPO值 说明:

返回最新的DPO短周期、长周期、差值、高点、低点和中点值
使用建议:
- 差值由负变正,买入信号
- 差值由正变负,卖出信号
- 差值位于高点,超买状态
- 差值位于低点,超卖状态

返回值:

  • short: 最新的短周期DPO值
  • long: 最新的长周期DPO值
  • diff: 最新的差值
  • high: 最新的高点
  • low: 最新的低点
  • mid: 最新的中点

type TaEMA

type TaEMA struct {
	Values []float64 `json:"values"` // EMA值序列
	Period int       `json:"period"` // 计算周期
}

TaEMA 表示指数移动平均线(Exponential Moving Average)的计算结果 说明:

EMA是一种赋予近期数据更高权重的移动平均线:
1. 比简单移动平均线(SMA)对价格变化更敏感
2. 能更快反映价格趋势的变化
3. 广泛用于其他技术指标的计算(如MACD)
特点:
- 对最新数据的反应更快
- 减少了滞后性
- 平滑度介于SMA和WMA之间
- 适合中短期趋势跟踪

func CalculateEMA

func CalculateEMA(prices []float64, period int) (*TaEMA, error)

CalculateEMA 计算指数移动平均线 说明:

计算步骤:
1. 计算第一个EMA值(使用SMA作为起始值):
   首个EMA = 前N日价格的算术平均值
2. 计算后续EMA值:
   EMA = 当日价格 * K + 前一日EMA * (1-K)
   其中 K = 2/(N+1),N为周期数
应用场景:
- 判断价格趋势
- 支撑位和阻力位分析
- 用于构建其他技术指标

参数:

  • prices: 价格序列
  • period: 计算周期,常用值:
  • 短期:5、10、12
  • 中期:20、26
  • 长期:50、100、200

返回值:

  • *TaEMA: 包含EMA计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

ema, err := CalculateEMA(prices, 20)

func (*TaEMA) Value

func (t *TaEMA) Value() float64

Value 获取最新的EMA值 说明:

返回最新的EMA值
使用建议:
- 价格上穿EMA视为买入信号
- 价格下穿EMA视为卖出信号
- 多条EMA的交叉可产生交易信号
- 短期EMA上穿长期EMA为金叉
- 短期EMA下穿长期EMA为死叉

返回值:

  • float64: 最新的EMA值

type TaJingZheMA added in v1.0.8

type TaJingZheMA struct {
	Cond1Values []float64 `json:"cond1_values"` // 条件1结果序列
	Cond2Values []float64 `json:"cond2_values"` // 条件2结果序列
	Cond3Values []float64 `json:"cond3_values"` // 条件3结果序列
	Cond4Values []float64 `json:"cond4_values"` // 条件4结果序列
	Cond5Values []float64 `json:"cond5_values"` // 条件5结果序列
	Period1     int       `json:"period1"`      // 主要周期
	Period2     int       `json:"period2"`      // OBV周期
}

TaJingZheMA 表示惊蛰均线指标的计算结果 说明:

惊蛰均线是基于EMA和OBV组合的复合指标:
1. 结合价格与成交量变化进行趋势判断
2. 通过多周期EMA和OBV信号提供交易参考
3. 用于捕捉市场趋势转换的关键点
特点:
- 综合考量价格和成交量的变化
- 提供多种条件信号线
- 可用于趋势跟踪和趋势反转判断
- 适合中长期交易策略

func CalculateJingZheMA added in v1.0.8

func CalculateJingZheMA(prices, volumes []float64, period1, period2 int) (*TaJingZheMA, error)

CalculateJingZheMA 计算惊蛰均线指标 说明:

计算步骤:
1. 计算三个周期的价格EMA指标
2. 计算OBV指标及其两个不同周期的EMA
3. 根据不同条件生成5个条件信号线
应用场景:
- 趋势确认和跟踪
- 发现价量背离
- 捕捉趋势转折点

参数:

  • prices: 价格序列(通常使用收盘价)
  • volumes: 成交量序列
  • period1: 主要计算周期
  • period2: OBV的EMA计算周期

返回值:

  • *TaJingZheMA: 包含惊蛰均线计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

jzma, err := CalculateJingZheMA(prices, volumes, 25, 6)

func (*TaJingZheMA) DirectionNum added in v1.4.0

func (t *TaJingZheMA) DirectionNum() int

获取确认方向数量

func (*TaJingZheMA) Value added in v1.0.8

func (t *TaJingZheMA) Value() (float64, float64, float64, float64, float64)

Value1 获取条件1最新信号值 说明:

返回条件1的最新信号值(收盘价 > EMA1时的EMA1值或保持前值)

返回值:

  • float64: 最新的条件1信号值
  • float64: 最新的条件2信号值
  • float64: 最新的条件3信号值
  • float64: 最新的条件4信号值
  • float64: 最新的条件5信号值

type TaKDJ

type TaKDJ struct {
	K []float64 `json:"k"` // K值序列(快速线)
	D []float64 `json:"d"` // D值序列(慢速线)
	J []float64 `json:"j"` // J值序列(方向线)
}

TaKDJ 表示随机指标(Stochastic Oscillator)的计算结果 说明:

KDJ是一个超买超卖指标,也叫随机指标:
1. K值:快速线,对价格变化反应最敏感
2. D值:慢速线,是K值的移动平均
3. J值:方向线,反映K值与D值的偏离程度
特点:
- 取值范围一般在0-100之间(J线可能超出)
- 80以上为超买区
- 20以下为超卖区
- 常用于预测价格走势反转

func CalculateKDJ

func CalculateKDJ(high, low, close []float64, rsvPeriod, kPeriod, dPeriod int) (*TaKDJ, error)

CalculateKDJ 计算随机指标 说明:

计算步骤:
1. 计算RSV值:
   RSV = (收盘价 - N日最低价) / (N日最高价 - N日最低价) * 100
2. 计算K值:
   当日K = (2 * 前日K + 当日RSV) / 3
3. 计算D值:
   当日D = (2 * 前日D + 当日K) / 3
4. 计算J值:
   J = 3 * K - 2 * D
应用场景:
- 判断超买超卖
- 预测趋势反转
- 寻找背离信号

参数:

  • high: 最高价序列
  • low: 最低价序列
  • close: 收盘价序列
  • rsvPeriod: RSV计算周期,通常为9
  • kPeriod: K值计算周期,通常为3
  • dPeriod: D值计算周期,通常为3

返回值:

  • *TaKDJ: 包含KDJ计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

kdj, err := CalculateKDJ(high, low, close, 9, 3, 3)

func (*TaKDJ) Value

func (t *TaKDJ) Value() (k, d, j float64)

Value 获取最新的KDJ值 说明:

返回最新的K、D、J三个值
使用建议:
- K值和D值在80以上,超买信号
- K值和D值在20以下,超卖信号
- K线上穿D线,金叉买入信号
- K线下穿D线,死叉卖出信号
- J值大于100或小于0时,反转信号增强
- KDJ三线同向,趋势信号最强

返回值:

  • k: 最新的K值
  • d: 最新的D值
  • j: 最新的J值

type TaMacd

type TaMacd struct {
	Macd         []float64 `json:"macd"`          // MACD柱状值序列
	Dif          []float64 `json:"dif"`           // 差离值序列
	Dea          []float64 `json:"dea"`           // 信号线序列
	ShortPeriod  int       `json:"short_period"`  // 短期EMA周期
	LongPeriod   int       `json:"long_period"`   // 长期EMA周期
	SignalPeriod int       `json:"signal_period"` // 信号线周期
}

TaMacd 表示移动平均趋同/背离指标(Moving Average Convergence/Divergence)的计算结果 说明:

MACD是由Gerald Appel开发的趋势跟踪指标:
1. DIF(差离值):短期与长期EMA的差值
2. DEA(信号线):DIF的移动平均
3. MACD柱:DIF与DEA的差值
特点:
- 能够同时显示趋势方向和强度
- 可以识别市场的超买超卖状态
- 适合中长期趋势交易
- 能够发现趋势的背离现象

func CalculateMACD

func CalculateMACD(prices []float64, shortPeriod, longPeriod, signalPeriod int) (*TaMacd, error)

CalculateMACD 计算MACD指标 说明:

计算步骤:
1. 计算短期和长期EMA:
   - 短期EMA(通常12日)
   - 长期EMA(通常26日)
2. 计算DIF:
   DIF = 短期EMA - 长期EMA
3. 计算DEA:
   DEA = DIF的N日EMA(通常9日)
4. 计算MACD柱:
   MACD = 2 * (DIF - DEA)
使用场景:
- 判断趋势方向和强度
- 寻找买卖点
- 发现趋势背离

参数:

  • prices: 价格序列
  • shortPeriod: 短期EMA周期,通常为12
  • longPeriod: 长期EMA周期,通常为26
  • signalPeriod: 信号线周期,通常为9

返回值:

  • *TaMacd: 包含MACD计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

macd, err := CalculateMACD(prices, 12, 26, 9)

func (*TaMacd) Value

func (t *TaMacd) Value() (macd, dif, dea float64)

Value 获取最新的MACD值 说明:

返回最新的MACD、DIF和DEA值
使用建议:
- DIF上穿DEA,形成金叉,买入信号
- DIF下穿DEA,形成死叉,卖出信号
- MACD柱由负变正,趋势向上转换
- MACD柱由正变负,趋势向下转换
- DIF与价格的背离预示趋势可能反转:
  * 顶背离:价格创新高但DIF未创新高
  * 底背离:价格创新低但DIF未创新低

返回值:

  • macd: 最新的MACD柱值
  • dif: 最新的DIF值
  • dea: 最新的DEA值

type TaOBV

type TaOBV struct {
	Values []float64 `json:"values"` // OBV值序列
}

TaOBV 表示能量潮指标(On Balance Volume)的计算结果 说明:

OBV是由Joe Granville开发的成交量指标:
1. 通过成交量来确认价格趋势
2. 判断成交量是否支撑价格走势
3. 可以预测价格突破的可能性
特点:
- 将成交量的变化与价格方向相结合
- 可以发现量价关系的背离
- 帮助判断趋势的强弱
- 适合寻找主力资金进出的迹象

func CalculateOBV

func CalculateOBV(prices, volumes []float64) (*TaOBV, error)

CalculateOBV 计算能量潮指标 说明:

计算规则:
1. 当收盘价上涨时:
   当日OBV = 前一日OBV + 当日成交量
2. 当收盘价下跌时:
   当日OBV = 前一日OBV - 当日成交量
3. 当收盘价不变时:
   当日OBV = 前一日OBV
使用场景:
- 判断量价配合程度
- 预测价格突破方向
- 发现趋势的强弱
- 识别主力资金动向

参数:

  • prices: 价格序列(通常使用收盘价)
  • volumes: 成交量序列

返回值:

  • *TaOBV: 包含OBV计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

obv, err := CalculateOBV(prices, volumes)

func (*TaOBV) Value

func (t *TaOBV) Value() float64

Value 获取最新的OBV值 说明:

返回最新的OBV值
使用建议:
- OBV上升,表明买方力量占优
- OBV下降,表明卖方力量占优
- OBV与价格同向变动,趋势更可靠
- 背离信号:
  * 顶背离:价格创新高但OBV未创新高,可能即将下跌
  * 底背离:价格创新低但OBV未创新低,可能即将上涨

返回值:

  • float64: 最新的OBV值

type TaRMA

type TaRMA struct {
	Values []float64 `json:"values"` // RMA值序列
	Period int       `json:"period"` // 计算周期
}

TaRMA 表示平滑移动平均线(Running Moving Average)的计算结果 说明:

RMA是一种特殊的指数移动平均线:
1. 使用Wilder平滑法计算
2. 相比EMA具有更强的平滑效果
3. 常用于RSI等技术指标的计算
特点:
- 平滑度高于简单移动平均线
- 对异常值的敏感度较低
- 计算过程中不会丢失历史信息
- 适合用于波动较大的市场

func CalculateRMA

func CalculateRMA(prices []float64, period int) (*TaRMA, error)

CalculateRMA 计算平滑移动平均线 说明:

计算步骤:
1. 设定平滑系数 alpha = 1/period
2. 第一个值直接使用原始数据
3. 后续值使用公式:
   RMA = alpha * 当前值 + (1 - alpha) * 前一期RMA
应用场景:
- 用于计算RSI等技术指标
- 平滑价格波动
- 识别中长期趋势
- 过滤市场噪音

参数:

  • prices: 价格序列
  • period: 计算周期,常用值:
  • RSI计算时通常为14
  • 趋势跟踪时可选20-60

返回值:

  • *TaRMA: 包含RMA计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

rma, err := CalculateRMA(prices, 14)

func (*TaRMA) Value

func (t *TaRMA) Value() float64

Value 获取最新的RMA值 说明:

返回最新的RMA值
使用建议:
- 可作为动态支撑位和阻力位
- 价格上穿RMA视为上升趋势确立
- 价格下穿RMA视为下降趋势确立
- 与其他指标配合使用效果更好

返回值:

  • float64: 最新的RMA值

type TaRSI

type TaRSI struct {
	Values []float64 `json:"values"` // RSI值的时间序列
	Period int       `json:"period"` // 计算RSI使用的周期
	Gains  []float64 `json:"gains"`  // 价格上涨幅度的时间序列
	Losses []float64 `json:"losses"` // 价格下跌幅度的时间序列
}

TaRSI 表示相对强弱指标(RSI)的计算结果 说明:

RSI是一个动量指标,用于衡量价格变动的强度。它通过计算一定时期内价格上涨和下跌的相对强度来判断市场的超买或超卖状态。
RSI的取值范围是0-100:
- RSI > 70 通常被认为是超买状态
- RSI < 30 通常被认为是超卖状态

func CalculateRSI

func CalculateRSI(prices []float64, period int) (*TaRSI, error)

CalculateRSI 计算给定价格序列的RSI指标 说明:

使用Wilder的RSI计算方法,包括以下步骤:
1. 计算每日价格变动的涨跌幅
2. 计算初始平均涨幅和跌幅
3. 使用平滑移动平均计算后续的平均涨幅和跌幅
4. 根据公式 RSI = 100 - (100 / (1 + RS)) 计算RSI值,其中RS = 平均涨幅/平均跌幅

参数:

  • prices: 价格时间序列
  • period: RSI计算周期

返回值:

  • *TaRSI: 包含RSI计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

prices := []float64{10, 10.5, 10.3, 10.2, 10.4, 10.3, 10.7}
rsi, err := CalculateRSI(prices, 5)

func (*TaRSI) Value

func (t *TaRSI) Value() float64

Value 获取最新的RSI值 说明:

返回RSI时间序列中的最后一个值,即最新的RSI值

返回值:

  • float64: 最新的RSI值

type TaSMA

type TaSMA struct {
	Values []float64 `json:"values"` // SMA值的时间序列
	Period int       `json:"period"` // 计算SMA使用的周期
}

TaSMA 表示简单移动平均线(Simple Moving Average)的计算结果 说明:

SMA是最基础的移动平均线指标,用于平滑价格数据,帮助识别价格趋势。
计算方法是取特定周期内的价格平均值。
特点:
- 对所有数据点赋予相同权重
- 能有效过滤价格噪音
- 滞后性较强,适合确认中长期趋势

func CalculateSMA

func CalculateSMA(prices []float64, period int) (*TaSMA, error)

CalculateSMA 计算给定价格序列的简单移动平均线 说明:

使用滑动窗口方法计算SMA,步骤如下:
1. 计算第一个SMA值(前period个价格的平均值)
2. 通过减去窗口最左侧价格并加入最新价格来更新移动窗口
3. 持续计算直至处理完所有数据

参数:

  • prices: 价格时间序列
  • period: SMA计算周期,如5日均线period=5

返回值:

  • *TaSMA: 包含SMA计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

prices := []float64{10, 11, 12, 13, 14, 15, 16}
sma, err := CalculateSMA(prices, 5)

func (*TaSMA) Value

func (t *TaSMA) Value() float64

Value 获取最新的SMA值 说明:

返回SMA时间序列中的最后一个值,即最新的均线值

返回值:

  • float64: 最新的SMA值

type TaStochRSI

type TaStochRSI struct {
	K           []float64 `json:"k"`            // K值(快线)的时间序列
	D           []float64 `json:"d"`            // D值(慢线)的时间序列
	RsiPeriod   int       `json:"rsi_period"`   // RSI计算周期
	StochPeriod int       `json:"stoch_period"` // 随机指标计算周期
	KPeriod     int       `json:"k_period"`     // K值平滑周期
	DPeriod     int       `json:"d_period"`     // D值平滑周期
}

TaStochRSI 表示随机相对强弱指标(Stochastic RSI)的计算结果 说明:

StochRSI是一个复合指标,结合了RSI和随机指标的特点:
1. 首先计算RSI
2. 然后对RSI值应用随机指标的计算方法
3. 最后计算快线K值和慢线D值
特点:
- 取值范围0-100
- 相比传统RSI更敏感
- 可以更早发现超买超卖区域
- 80以上为超买区,20以下为超卖区

func CalculateStochRSI

func CalculateStochRSI(prices []float64, rsiPeriod, stochPeriod, kPeriod, dPeriod int) (*TaStochRSI, error)

CalculateStochRSI 计算给定价格序列的随机RSI指标 说明:

计算步骤:
1. 计算指定周期的RSI值
2. 计算RSI的随机值:(当前RSI - 最低RSI) / (最高RSI - 最低RSI) * 100
3. 对随机值进行平滑处理得到K值
4. 对K值进行平滑处理得到D值

参数:

  • prices: 价格时间序列
  • rsiPeriod: RSI计算周期,通常为14
  • stochPeriod: 随机值计算周期,通常为14
  • kPeriod: K值平滑周期,通常为3
  • dPeriod: D值平滑周期,通常为3

返回值:

  • *TaStochRSI: 包含StochRSI计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

prices := []float64{10, 10.5, 10.3, 10.2, 10.4, 10.3, 10.7}
stochRsi, err := CalculateStochRSI(prices, 14, 14, 3, 3)

func (*TaStochRSI) Value

func (t *TaStochRSI) Value() (kValue, dValue float64)

Value 获取最新的StochRSI的K值和D值 说明:

返回StochRSI的最新K值(快线)和D值(慢线)
交易信号:
- K线从下方穿过D线是买入信号
- K线从上方穿过D线是卖出信号
- K和D同时在超买区(80以上)或超卖区(20以下)时信号更强

返回值:

  • kValue: 最新的K值
  • dValue: 最新的D值

type TaSuperTrend

type TaSuperTrend struct {
	Values     []float64 `json:"values"`     // 指标值序列,上涨趋势时为下轨,下跌趋势时为上轨
	Trend      []int     `json:"direction"`  // 趋势方向:1表示上涨,-1表示下跌,0表示初始状态
	Upper      []float64 `json:"upper_band"` // 上轨线序列
	Lower      []float64 `json:"lower_band"` // 下轨线序列
	Period     int       `json:"period"`     // ATR计算周期
	Multiplier float64   `json:"multiplier"` // ATR乘数,用于调整轨道宽度
}

TaSuperTrend 表示超级趋势指标(SuperTrend)的计算结果 说明:

SuperTrend是一个趋势跟踪指标,结合了ATR和中轨线的概念:
1. 利用ATR来衡量市场波动性
2. 根据中轨线和ATR计算上下轨
3. 通过价格与轨道的关系判断趋势
特点:
- 能有效识别市场趋势
- 自动调整对市场波动的敏感度
- 提供明确的趋势反转信号
- 可作为止损止盈的参考位置

func CalculateSuperTrend

func CalculateSuperTrend(klineData KlineDatas, period int, multiplier float64) (*TaSuperTrend, error)

CalculateSuperTrend 计算给定K线数据的超级趋势指标 说明:

计算步骤:
1. 计算ATR值作为波动参考
2. 计算中轨线 = (最高价 + 最低价) / 2
3. 计算上轨线 = 中轨线 + multiplier * ATR
4. 计算下轨线 = 中轨线 - multiplier * ATR
5. 根据收盘价与轨道的位置关系确定趋势
趋势判断规则:
- 当收盘价上穿上轨线时,趋势转为上涨
- 当收盘价下穿下轨线时,趋势转为下跌

参数:

  • klineData: K线数据
  • period: ATR计算周期,通常为7-14
  • multiplier: ATR乘数,通常为2-3,越大轨道越宽

返回值:

  • *TaSuperTrend: 包含SuperTrend计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

superTrend, err := CalculateSuperTrend(klineData, 10, 3.0)

func (*TaSuperTrend) Value

func (t *TaSuperTrend) Value() (upper, lower float64, trend int)

Value 获取最新的SuperTrend指标值 说明:

返回最新的上轨线、下轨线值和趋势方向
使用建议:
- 上涨趋势时,下轨线可作为止损位
- 下跌趋势时,上轨线可作为止损位
- 趋势反转时及时调整持仓方向

返回值:

  • upper: 最新的上轨线值
  • lower: 最新的下轨线值
  • isUpTrend: 当前趋势方向,true表示上涨趋势,false表示下跌趋势

type TaSuperTrendPivot

type TaSuperTrendPivot struct {
	Values      []float64 `json:"values"`       // 指标值序列,上涨趋势时为下轨,下跌趋势时为上轨
	Trend       []int     `json:"direction"`    // 趋势方向:1表示上涨,-1表示下跌,0表示初始状态
	Upper       []float64 `json:"upper_band"`   // 上轨线的时间序列
	Lower       []float64 `json:"lower_band"`   // 下轨线的时间序列
	PivotPeriod int       `json:"pivot_period"` // 寻找轴点的周期范围
	Factor      float64   `json:"factor"`       // ATR乘数,用于调整轨道宽度
	AtrPeriod   int       `json:"atr_period"`   // ATR计算周期
}

TaSuperTrendPivot 表示基于轴点的超级趋势指标计算结果 说明:

SuperTrendPivot是SuperTrend的改进版本,通过寻找价格轴点来优化趋势线:
1. 使用价格轴点(高点和低点)来确定中心线
2. 结合ATR动态调整轨道宽度
3. 提供更准确的趋势转向信号
特点:
- 相比传统SuperTrend更好地识别关键价格水平
- 减少假突破信号
- 趋势跟踪能力更强
- 适合中长期趋势交易

func CalculateSuperTrendPivot

func CalculateSuperTrendPivot(klineData KlineDatas, pivotPeriod int, factor float64, atrPeriod int) (*TaSuperTrendPivot, error)

CalculateSuperTrendPivot 计算基于轴点的超级趋势指标 说明:

计算步骤:
1. 在每个位置寻找高点和低点轴点
2. 根据轴点计算中心线:
   - 如果同时存在高低点,取其平均值
   - 如果只有一个轴点,使用该轴点
   - 如果没有轴点,使用当前K线的中点
3. 使用加权平均方式平滑中心线
4. 结合ATR计算上下轨
5. 根据收盘价与轨道的关系确定趋势

参数:

  • klineData: K线数据
  • pivotPeriod: 寻找轴点的周期范围,通常为5-10
  • factor: ATR乘数,通常为2-3,越大轨道越宽
  • atrPeriod: ATR计算周期,通常为14-21

返回值:

  • *TaSuperTrendPivot: 包含计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

pivot, err := CalculateSuperTrendPivot(klineData, 7, 2.5, 14)

func (*TaSuperTrendPivot) Value

func (t *TaSuperTrendPivot) Value() (upper, lower float64, trend int)

Value 获取最新的SuperTrendPivot指标值 说明:

返回最新的上轨线、下轨线值和趋势方向
使用建议:
- 趋势为1时表示上涨趋势,考虑做多
- 趋势为-1时表示下跌趋势,考虑做空
- 上涨趋势时下轨可作为止损位
- 下跌趋势时上轨可作为止损位

返回值:

  • upper: 最新的上轨线值
  • lower: 最新的下轨线值
  • trend: 当前趋势方向(1: 上涨, -1: 下跌, 0: 初始状态)

type TaSuperTrendPivotHl2

type TaSuperTrendPivotHl2 struct {
	Values     []float64 `json:"values"`     // 指标值序列,上涨趋势时为下轨,下跌趋势时为上轨
	Trend      []int     `json:"direction"`  // 趋势方向:1表示上涨,-1表示下跌,0表示初始状态
	Upper      []float64 `json:"upper_band"` // 上轨线序列
	Lower      []float64 `json:"lower_band"` // 下轨线序列
	Period     int       `json:"period"`     // ATR计算周期
	Multiplier float64   `json:"multiplier"` // ATR乘数,用于调整轨道宽度
}

TaSuperTrendPivotHl2 表示基于HL2的超级趋势指标计算结果 说明:

SuperTrendPivotHl2是SuperTrend的另一个变种,使用HL2(最高价和最低价的平均值)作为中心价格:
1. 使用HL2代替传统的中轨计算方法
2. 结合ATR动态调整轨道宽度
3. 提供更平滑的趋势跟踪效果
特点:
- 使用HL2降低价格波动的影响
- 趋势转换更加平滑
- 假突破信号较少
- 适合波动较大的市场

func CalculateSuperTrendPivotHl2

func CalculateSuperTrendPivotHl2(klineData KlineDatas, period int, multiplier float64) (*TaSuperTrendPivotHl2, error)

CalculateSuperTrendPivotHl2 计算基于HL2的超级趋势指标 说明:

计算步骤:
1. 计算HL2 = (最高价 + 最低价) / 2
2. 计算ATR值作为波动参考
3. 计算基础轨道:
   - 上轨 = HL2 + multiplier * ATR
   - 下轨 = HL2 - multiplier * ATR
4. 根据价格穿越情况调整最终轨道
5. 确定趋势方向和指标值
趋势判断规则:
- 当收盘价上穿上轨时,趋势转为上涨
- 当收盘价下穿下轨时,趋势转为下跌

参数:

  • klineData: K线数据
  • period: ATR计算周期,通常为10-21
  • multiplier: ATR乘数,通常为2-3,越大轨道越宽

返回值:

  • *TaSuperTrendPivotHl2: 包含计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

hl2, err := CalculateSuperTrendPivotHl2(klineData, 14, 2.0)

func (*TaSuperTrendPivotHl2) Value

func (t *TaSuperTrendPivotHl2) Value() (upper, lower float64, trend int)

Value 获取最新的SuperTrendPivotHl2指标值 说明:

返回最新的指标值,该值代表当前的趋势线:
- 上涨趋势时返回下轨值(支撑位)
- 下跌趋势时返回上轨值(压力位)
使用建议:
- 可将返回值作为趋势跟踪的参考线
- 价格站上该线视为看多信号
- 价格跌破该线视为看空信号

返回值:

  • upper: 上轨值
  • lower: 下轨值
  • trend: 趋势方向,1表示上涨,-1表示下跌,0表示初始状态

type TaT3

type TaT3 struct {
	Values []float64 `json:"values"` // T3移动平均线的值序列
	Period int       `json:"period"` // 计算周期
	VFact  float64   `json:"vfact"`  // 体积因子,用于调整平滑度
}

TaT3 表示Tillson T3移动平均线的计算结果 说明:

T3是Tim Tillson开发的一种改进型移动平均线,具有以下特点:
1. 通过多重EMA计算减少滞后性
2. 使用体积因子(Volume Factor)调整平滑度
3. 比传统移动平均更好地跟踪趋势
4. 对价格转折点的反应更快
特点:
- 平滑度高,噪音少
- 转向延迟较小
- 可通过参数调整灵敏度
- 计算复杂但效果优异

func CalculateT3

func CalculateT3(prices []float64, period int, vfact float64) (*TaT3, error)

CalculateT3 计算Tillson T3移动平均线 说明:

计算步骤:
1. 计算六重指数移动平均(EMA1-EMA6)
2. 使用体积因子计算加权系数(c1-c4)
3. 将加权系数应用于EMA3-EMA6得到最终T3值
计算公式:
T3 = c1*ema6 + c2*ema5 + c3*ema4 + c4*ema3
其中:
- c1 = -a³
- c2 = 3a² + 3a³
- c3 = -6a² - 3a - 3a³
- c4 = 1 + 3a + a³ + 3a²
(a为体积因子vfact)

参数:

  • prices: 价格序列
  • period: 计算周期,通常为5-30
  • vfact: 体积因子,范围0-1,通常为0.7
  • 接近0时更平滑但滞后更大
  • 接近1时响应更快但可能产生更多噪音

返回值:

  • *TaT3: 包含T3计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

t3, err := CalculateT3(prices, 10, 0.7)

func (*TaT3) Value

func (t *TaT3) Value() float64

Value 获取最新的T3值 说明:

返回T3移动平均线的最新值
使用建议:
- 可作为趋势方向的参考
- 价格在T3线上方视为上涨趋势
- 价格在T3线下方视为下跌趋势
- T3线的斜率可反映趋势强度

返回值:

  • float64: 最新的T3值

type TaVolatilityRatio

type TaVolatilityRatio struct {
	Values []float64 `json:"values"` // 波动率比率的时间序列
	Period int       `json:"period"` // 计算使用的长周期
}

TaVolatilityRatio 表示波动率比率(Volatility Ratio)指标的计算结果 说明:

波动率比率(VR)是一个用于衡量市场波动性变化的技术指标:
1. 通过比较短期和长期的真实波幅(TR)来衡量波动强度
2. 可以帮助识别市场波动的扩大和收缩
3. 用于判断市场是否即将发生重要变化
特点:
- VR > 1 表示短期波动高于长期波动,市场活跃度增加
- VR < 1 表示短期波动低于长期波动,市场活跃度降低
- VR 的突变通常预示着市场即将发生重要变化

func CalculateVolatilityRatio

func CalculateVolatilityRatio(klineData KlineDatas, shortPeriod, longPeriod int) (*TaVolatilityRatio, error)

CalculateVolatilityRatio 计算波动率比率指标 说明:

计算步骤:
1. 计算每个周期的真实波幅(TR):
   TR = max(high-low, |high-prevClose|, |low-prevClose|)
2. 分别计算短期和长期的平均TR
3. 计算短期TR与长期TR的比率
使用场景:
- 识别市场波动性的变化
- 预测可能的趋势变化
- 辅助判断交易时机

参数:

  • klineData: K线数据
  • shortPeriod: 短周期,通常为3-7
  • longPeriod: 长周期,通常为14-21

返回值:

  • *TaVolatilityRatio: 包含VR计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

vr, err := CalculateVolatilityRatio(klineData, 5, 14)

func (*TaVolatilityRatio) Value

func (vr *TaVolatilityRatio) Value() float64

Value 获取最新的波动率比率值 说明:

返回VR指标的最新值
使用建议:
- VR > 1.2 表示波动显著扩大,可能即将发生趋势变化
- VR < 0.8 表示波动显著收缩,可能处于盘整阶段
- VR的快速变化预示市场状态的转换

返回值:

  • float64: 最新的VR值,如果没有数据返回0

type TaWilliamsR

type TaWilliamsR struct {
	Values []float64 `json:"values"` // Williams %R值的时间序列
	Period int       `json:"period"` // 计算周期
}

TaWilliamsR 表示威廉指标(Williams %R)的计算结果 说明:

Williams %R是一个动量指标,用于判断市场是否处于超买或超卖状态:
1. 测量收盘价在最近N个周期内的高低价范围中的相对位置
2. 取值范围为0到-100
3. 与随机指标KD相似,但计算方法略有不同
特点:
- 0到-20区域表示超买
- -80到-100区域表示超卖
- 指标与价格的背离可能预示趋势反转
- 相比其他超买超卖指标反应更快速

func CalculateWilliamsR

func CalculateWilliamsR(high, low, close []float64, period int) (*TaWilliamsR, error)

CalculateWilliamsR 计算威廉指标 说明:

计算公式:
W%R = (最高价 - 收盘价) / (最高价 - 最低价) * -100
计算步骤:
1. 找出周期内的最高价和最低价
2. 计算当前收盘价在这个范围内的相对位置
3. 将结果乘以-100得到最终值
使用场景:
- 判断市场超买超卖状态
- 寻找潜在的趋势反转点
- 与其他指标配合确认交易信号

参数:

  • high: 最高价序列
  • low: 最低价序列
  • close: 收盘价序列
  • period: 计算周期,通常为14

返回值:

  • *TaWilliamsR: 包含计算结果的结构体指针
  • error: 计算过程中的错误,如数据不足等

示例:

wr, err := CalculateWilliamsR(high, low, close, 14)

func (*TaWilliamsR) Value

func (t *TaWilliamsR) Value() float64

Value 获取最新的威廉指标值 说明:

返回Williams %R的最新值
使用建议:
- 当指标从超买区域(-20以上)向下穿越时,考虑卖出
- 当指标从超卖区域(-80以下)向上穿越时,考虑买入
- 与价格趋势一起使用,不要单独作为交易信号
- 可以通过调整周期来改变指标的敏感度

返回值:

  • float64: 最新的Williams %R值

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL