formula

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Dec 11, 2023 License: Apache-2.0 Imports: 4 Imported by: 0

README

formula

通达信指标函数实现

级别 函数名 功能 示例 固定参数 序列参数
0 ABS 绝对值 ABS(X) [√] [√]
0 REF 引用N周期前的值 REF(CLOSE, 5) [√] [√]
0 IF 逻辑判断 IF(CLOSE>10,1,0) [√] [√]
0 IFF 逻辑判断 IFF(CLOSE>10,1,2) [√] [√]
0 IFN 逻辑判断 IFN(CLOSE>10,1,2) [√] [√]
0 HHV 计算N周期内最高 HHV(HIGH,5) [√] [√]
0 HHVBARS 求N周期内S最高值到当前周期数, 返回序列 HHVBARS(HIGH,5) [√] [√]
0 LLV 计算N周期内最低 LLV(HLOW,5) [√] [√]
0 LLVBARS 求N周期内S最低值到当前周期数, 返回序列 LLVBARS(HLOW,5) [√] [√]
0 SQRT 计算S的平方根 SQRT(CLOSE) [√] [√]
0 MAX 计算AB最大值 MAX(CLOSE,HIGH) [√] [√]
0 MIN 计算AB最小值 MIN(CLOSE,HIGH) [√] [√]
0 MA 计算N周期的移动平均值, 简称均线 MA(CLOSE,5) [√] [√]
0 DMA S序列的动态移动平均, A作为平滑因子 DMA(CLOSE,5) [√] [√]
0 EMA S序列N周期的指数移动平均, α=/(1+com) EMA(CLOSE,5) [√] [√]
0 SMA 计算N周期的简单移动平均值 SMA(CLOSE,5, 1) [√] [√]
0 WMA S序列的N周期的加权移动平均值 WMA(CLOSE,5) [√] [√]
0 STD 计算N周期内的标准差 STD(CLOSE,20) [√] [√]
0 SUM 求总和, 如果N=0则从第一个有效值开始 SUM(CLOSE,5) [√] [√]
0 CONST 返回序列S最后的值组成常量序列 CONST(CLOSE) [√] [ ]
0 AVEDEV 平均绝对差,序列与其平均值的绝对差的平均值 AVEDEV(CLOSE,5) [√] [√]
0 SLOPE S序列N周期回线性回归斜率 SLOPE(CLOSE,5) [√] [√]
0 FORCAST S序列N周期回线性回归后的预测值 FORCAST(CLOSE,5) [√] [√]
0 LAST 从前A日到前B日一直满足S条件,要求A>B & A>0 & B>=0 LAST(CLOSE>REF(CLOSE,1),LOW,HIGH) [√] [√]
1 COUNT COUNT(CLOSE>O,N),最近N天满足S的天数True的天数 COUNT(CLOSE>LOW,5) [√] [√]
1 EVERY EVERY(CLOSE>O,5),最近N天是否都是True EVERY(CLOSE>LOW,5) [X] [X]
1 EXIST EXIST(CLOSE>O,5),最近N天是否都是True EXIST(CLOSE>LOW,5) [X] [X]
1 FILTER FILTER函数,S满足条件后,将其后N周期内的数据置为0 FILTER(CLOSE>LOW,5) [√] [√]
1 BARSLAST 上一次条件成立到当前的周期数 BARSLAST(X) [√] [√]
1 BARSLASTCOUNT 统计连续满足S条件的周期数 BARSLASTCOUNT(X) [√] [ ]
1 BARSLASTS 倒数第N次X条件成立到当前的周期数 BARSLASTS(X, N) [√] [X]
1 BARSSINCEN N周期内第一次S条件成立到现在的周期数 BARSSINCEN(S,N) [√] [√]
1 CROSS 判断向上金叉穿越,两个序列互换就是判断向下死叉穿越 CROSS(MA(C,5),MA(C,10)) [√] [ ]
1 LONGCROSS 两条线维持一定周期后交叉,S1在N周期内都小于S2,本周期从S1下方向上穿过S2时返回1,否则返回0 LONGCROSS(MA(C,5),MA(C,10),5) [X] [X]
1 VALUEWHEN 当S条件成立时,取X的当前值,否则取VALUEWHEN的上个成立时的X值 VALUEWHEN(S,X) [X] [X]
1 BETWEEN S处于A和B之间时为真。 包括 A<S<B 或 A>S>B BETWEEN(S,A,B) [X] [X]
1 TOPRANGE TOPRANGE(HIGH)表示当前最高价是近多少周期内最高价的最大值 TOPRANGE(HIGH) [X] [X]
1 LOWRANGE LOWRANGE(LOW)表示当前最低价是近多少周期内最低价的最小值 LOWRANGE(HIGH) [X] [X]

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ABS

func ABS(S stat.Series) stat.Series

ABS 计算S的绝对值

func AND

func AND[T stat.Number | ~bool](a, b []T) []bool

func AVEDEV

func AVEDEV(S stat.Series, N any) stat.Series

AVEDEV 平均绝对偏差, (序列与其平均值的绝对差的平均值)

AVEDEV(S,N) 返回平均绝对偏差

func BARSLAST

func BARSLAST(S stat.Series) stat.Series

BARSLAST 上一次条件成立到当前的周期, BARSLAST(C/REF(C,1)>=1.1) 上一次涨停到今天的天数

为了测试SMA,BARSLAST必须要先实现, 给SMA提供序列换参数, 以便验证, python那边还没实现

func BARSLAST2

func BARSLAST2(S stat.Series) []stat.DType

func BARSLASTCOUNT

func BARSLASTCOUNT(S stat.Series) stat.Series

BARSLASTCOUNT 统计连续满足S条件的周期数

func BARSLASTS

func BARSLASTS(S stat.Series, N int) stat.Series

BARSLASTS 倒数第N次成立时距今的周期数.

用法:
BARSLASTS(X,N):X倒数第N满足到现在的周期数,N支持变量
go实现暂时不支持N为序列, 意义不大

func BARSSINCEN

func BARSSINCEN(S stat.Series, N any) stat.Series

BARSSINCEN N周期内第一次S条件成立到现在的周期数,N为常量

func CONST

func CONST(S stat.Series) stat.Series

CONST 取S最后的值为常量

func COUNT

func COUNT(S any, N any) stat.Series

COUNT 统计S为真的天数

func CROSS

func CROSS(S1, S2 stat.Series) stat.Series

CROSS

判断向上金叉穿越 V2CROSS(MA(C,5),MA(C,10))
判断向下死叉穿越 V2CROSS(MA(C,10),MA(C,5))

func CompareGt

func CompareGt(v []stat.DType, x any) []bool

CompareGt 比较 v > x

func CompareGte

func CompareGte(v []stat.DType, x any) []bool

CompareGte 比较 v >= x

func CompareLt

func CompareLt(v []stat.DType, x any) []bool

CompareLt 比较 v < x

func CompareLte

func CompareLte(v []stat.DType, x any) []bool

CompareLte 比较 v <= x

func DMA

func DMA(S stat.Series, A any) []stat.DType

DMA 返回动态移动平均

求S的动态移动平均, A作平滑因子,必须 0<A<1 (此为核心函数,非指标)
用法:
DMA(X,A),求X的动态移动平均
算法:Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须大于0且小于1.A支持变量
例如:
DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价

func EMA

func EMA(S stat.Series, N any) stat.Series

EMA 指数移动平均,为了精度 S>4*N EMA至少需要120周期 alpha=2/(span+1) TODO:这个版本是对的, 通达信EMA居然实现了真的序列, 那为啥SMA不是呢?!

func EMA_v0

func EMA_v0(S stat.Series, N any) any

EMA_v0 仿SMA实现, 错误

func EMA_v1

func EMA_v1(S stat.Series, N any) any

EMA_v1 Rolling(N), 每个都取最后一个, 错误

func EMA_v2

func EMA_v2(S stat.Series, N any) any

EMA_v2 通达信公式管理器上提示, EMA(S, N) 相当于SMA(S, N + 1, M=2), 骗子, 根本不对

func EQ

func EQ(S1, S2 stat.Series) []bool

EQ 相等

func EQ2

func EQ2(S1 []stat.DType, S2 int) []bool

func FILTER

func FILTER(S stat.Series, N any) stat.Series

FILTER 过滤连续出现的信号

用法:
FILTER(X,N):X满足条件后,将其后N周期内的数据置为0,N为常量.
例如:
FILTER(CLOSE>OPEN,5)查找阳线,5天内再次出现的阳线不被记录在内

func FORCAST

func FORCAST(S stat.Series, N any) any

FORCAST 返回S序列N周期回线性回归后的预测值

func HHV

func HHV(S stat.Series, N any) stat.Series

HHV 最近N周期的S最大值

func HHVBARS

func HHVBARS(S stat.Series, N any) stat.Series

HHVBARS 求上一高点到当前的周期数.

用法:
HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计
例如:
HHVBARS(HIGH,0)求得历史新高到到当前的周期数

func IF

func IF(S stat.Series, A, B any) stat.Series

IF 序列布尔判断 return=A if S==True else B

func IFF

func IFF(S stat.Series, A, B any) stat.Series

IFF 序列布尔判断 return=A if S==True else B

func IFN

func IFN(S stat.Series, A, B any) stat.Series

IFN 序列布尔判断 return=A if S==False else B

func LAST

func LAST(X stat.Series, A, B int) stat.Series

LAST LAST(X,A,B):持续存在.

A 支持序列化, B不支持
例如:
LAST(CLOSE>OPEN,10,5)
表示从前10日到前5日内一直阳线
若A为0,表示从第一天开始,B为0,表示到最后日止

func LLV

func LLV(S stat.Series, N any) stat.Series

LLV 最近N周期的S最小值

func LLVBARS

func LLVBARS(S stat.Series, N any) stat.Series

LLVBARS 求上一低点到当前的周期数.

用法:
LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计
例如:
LLVBARS(HIGH,20)求得20日最低点到当前的周期数

func MA

func MA(S stat.Series, N any) stat.Series

func MAV1

func MAV1(S stat.Series, N any) []stat.DType

MAV1 计算移动均线

求序列的N日简单移动平均值, 返回序列
Deprecated: 推荐 MA

func MAX

func MAX(S1 stat.Series, S2 any) stat.Series

MAX 两个序列横向对比

func MAx

func MAx(n int, old, new stat.DType) stat.DType

MAx 增量MA

func MIN

func MIN(S1 stat.Series, S2 any) stat.Series

MIN 两个序列横向对比

func OR

func OR(a, b []bool) []bool

func REF

func REF(S stat.Series, N any) stat.Series

REF 引用前N的序列

func REF2

func REF2[T stat.BaseType](S []T, N any) []T

func SLOPE

func SLOPE(S stat.Series, N any) any

SLOPE 计算周期回线性回归斜率

SLOPE(S,N) 返回线性回归斜率,N支持变量

func SMA

func SMA(S stat.Series, N any, M int) stat.Series

SMA 中国式的SMA,至少需要120周期才精确 (雪球180周期) alpha=1/(1+com)

func SMA_v1

func SMA_v1(S stat.Series, N int, M int) any

SMA_v1 最原始的python写法

func SMA_v3

func SMA_v3(S stat.Series, N any, M int) any

SMA_v3 使用滑动窗口

func SMA_v4

func SMA_v4(S stat.Series, N any, M int) any

SMA_v4 听说SMA(S, N, 1) 其实就是MA(S,N), 试验后发现是骗子

func SMA_v5

func SMA_v5(S stat.Series, N any, M int) any

最接近

func SQRT

func SQRT(S stat.Series) []stat.DType

SQRT 求S的平方根

func STD

func STD(S stat.Series, N any) stat.Series

STD 序列的N日标准差

func SUM

func SUM(S stat.Series, N any) stat.Series

SUM 求累和 如果N=0, 则从第一个有效值累加到当前 下一步再统一返回值

func V1COUNT

func V1COUNT(S []bool, N any) []int

V1COUNT 统计S为真的天数

func V1CROSS

func V1CROSS(S1, S2 stat.Series) []bool

func V2CROSS

func V2CROSS(S1, S2 []stat.DType) []bool

func WMA

func WMA(S stat.Series, N any) stat.Series

WMA 通达信S序列的N日加权移动平均 Yn = (1*X1+2*X2+3*X3+...+n*Xn)/(1+2+3+...+Xn)

Types

This section is empty.

Jump to

Keyboard shortcuts

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