formula

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 1, 2023 License: Apache-2.0 Imports: 5 Imported by: 17

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 added in v0.6.5

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 added in v0.8.2

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

func BARSLASTCOUNT

func BARSLASTCOUNT(S stat.Series) stat.Series

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

func BARSLASTS added in v1.0.7

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 added in v0.6.7

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

EQ 相等

func EQ2 added in v0.6.7

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

func FILTER added in v0.6.6

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 added in v0.6.6

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 added in v0.6.6

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 added in v0.9.10

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 MIN

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

MIN 两个序列横向对比

func OR added in v0.6.5

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

func REF

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

REF 引用前N的序列

func REF2 added in v0.6.5

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 added in v0.9.11

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

V1COUNT 统计S为真的天数

func V1CROSS added in v0.8.10

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

func V2CROSS added in v0.8.10

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