# fengwo **Repository Path**: leadtw/fengwo ## Basic Information - **Project Name**: fengwo - **Description**: Python仿通达信公式的量化函数库,可在64位Python上使用通达信公式DLL,高效实现了WINNER,COST等筹码峰算法。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2024-06-05 - **Last Updated**: 2025-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fengwo模块 #### 介绍 Python仿通达信公式的量化函数库模块,可在64位Python上使用通达信公式DLL,高效实现了WINNER,COST等筹码峰算法。 本模块所有函数均解除了Python全局线程锁PIL的限制,使用多线程操作即可大量节省时间,提高运算和选股效率。 #### 软件架构 支持Python3.4~3.12中的32位和64位版本,支持Windows和Linux操作系统 使用Windows操作系统Python64位也可以调用通达信dll文件(通达信公式dll文件是32位的) Linux版本支持除通达信DLL调用之外的所有函数 #### 安装教程 使用pip安装 ``` pip install fengwo ``` #### 使用说明 ##### 1. 引入模块 ``` import fengwo as fw ``` 模块在引入后默认显示一条消息,要取消消息可在模块引入后立即运行showMsg(False)即可取消消息显示 ``` import fengwo as fw;fw.showMsg(False) ``` ##### 2. 通用说明 本模块所使用的序列值,可以是list数组,也可以是numpy数组,只要是可迭代对象即可,但数组或可迭代的内容都采用数字,文字和其它Python对象无法处理 本模块所用的常量也必须是数字,大部分都需要处理整形int,个别函数常量也可以使用浮点型float,具体使用可以查询函数说明。 - 函数参数为S则说明该参数为序列值 - 函数参数为N则说明该参数为常量 - OPEN,CLOSE,HIGH,LOW,VOL,AMO,TurnRate 分别是指开盘价、收盘价、最高价、最低价、成交量、成交额,换手率,这些均采用序列值 - 函数参数SN,则要求参数为int类型或者int类型的序列值(如果提供的是float类型或者float类型的序列值,函数内部会将该参数转换成int类型,但有可能采用以下3正方式:①四舍五入成整数,②向下取整为整数,因此强烈建议浮点数序列自行处理成整数序列再进行调用,其中向下取整可使用INTPART函数) - 本模块函数返回的序列值均采用numpy数组形式 **SUMBARS - 向前累加到指定值到现在的周期数** 函数原型: ``` def SUMBARS(S:Iterable,SN)->Optional[np.ndarray] #简洁表示 def SUMBARS(S,SN) ``` 用法:   SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数,若所有的数据都累加后还不能达到A,则返回此时前面的总周期数.   例如:SUMBARS(VOL,流通股数)求完全换手到现在的周期数 ##### 3. 基础函数 **STD - 标准差函数** 函数原型: ``` def STD(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def STD(S,SN) ``` 返回Numpy数组:估算标准差 **BACKSET - 向前赋值函数** 函数原型: ``` def BACKSET(S:Iterable,N:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def BACKSET(S,N) ``` 属于未来函数,将当前位置到若干周期前的数据设为1. 用法:   BACKSET(S,N),若X非0,则将当前位置到N周期前的数值设为1. 例如:   BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0 **REF - 引用若干周期前的数据** 函数原型: ``` def REF(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def REF(S,SN) ``` 用法:   REF(X,A),引用A周期前的X值.A可以是变量. 例如:   REF(CLOSE,BARSCOUNT(C)-1)表示第二根K线的收盘价. **INTPART - 取整行数** 函数原型: ``` def INTPART(S:Iterable)->Optional[np.ndarray] #简洁表示 def INTPART(S) ``` 用法:   INTPART(A)返回沿A绝对值减小方向最接近的整数 例如:   INTPART(12.3)求得12,INTPART(-3.5)求得-3 **EMA - 返回指数移动平均** 函数原型: ``` def EMA(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def EMA(S,SN) ``` 用法:   EMA(X,N):X的N日指数移动平均.算法:Y=(X*2+Y'*(N-1))/(N+1)   EMA(X,N)相当于SMA(X,N+1,2),N支持变量 **SMA - 返回移动平均** 函数原型: ``` def SMA(S:Iterable,N:Union[Iterable[int],int],M:int=1)->Optional[np.ndarray] #简洁表示 def SMA(S,SN) ``` 用法:   SMA(X,N,M):X的N日移动平均,M为权重,如Y=(X*M+Y'*(N-M))/N **SLOPE - 返回线性回归斜率** 函数原型: ``` def SLOPE(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def SLOPE(S,SN) ``` **HHV - 求最高值** 函数原型: ``` def HHV(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def HHV(S,SN) ``` 用法:   HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始. 例如:   HHV(HIGH,30)表示求30日最高价 **LLV - 求最低值** 函数原型: ``` def LLV(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def LLV(S,SN) ``` 用法:   LLV(X,N),求N周期内X最高值,N=0则从第一个有效值开始. 例如:   LLV(LOW,30)表示求30日最低价 **MA - 简单移动平均** 函数原型: ``` def MA(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def MA(S,SN) ``` 返回简单移动平均 用法:   MA(X,N):X的N日简单移动平均,算法(X1+X2+X3+...+Xn)/N,N支持变量 **AVEDEV - 返回平均绝对偏差** 函数原型: ``` def AVEDEV(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def AVEDEV(S,SN) ``` 求总和. **SUM -求和函数 ** 函数原型: ``` def SUM(S:Iterable,SN)->Optional[np.ndarray] #简洁表示 def SUM(S,SN) ``` 用法:   SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始. 例如:   SUM(VOL,0)表示统计从上市第一天以来的成交量总和 **BARSLAST - 上一次条件成立到当前的周期数.** 函数原型: ``` def BARSLAST(S:Iterable)->Optional[np.ndarray] #简洁表示 def BARSLAST(S) ``` 用法:   BARSLAST(X):上一次X不为0到现在的周期数 例如:   BARSLAST(CLOSE/REF(CLOSE,1)>=1.1)表示上一个涨停板到当前的周期数 **BARSCOUNT - 有效数据周期数.** 函数原型: ``` def BARSCOUNT(S:Iterable)->Optional[np.ndarray] #简洁表示 def BARSCOUNT(S) ``` 用法:   BARSCOUNT(X)第一个有效数据到当前的间隔周期数 注意:判断范围为指标或条件选股计算时公式使用的数据,如果给画线指标的数据少(比如没有按下箭头取更多K线)或给条件选股给的数据少,这个有效值也可能少 **BETWEEN - 介于.** 函数原型: ``` def BETWEEN(S1:Iterable,S2:Iterable,S3:Iterable)->Optional[np.ndarray] #简洁表示 def BETWEEN(S1,S2,S3) ``` 用法:   BETWEEN(A,B,C)表示A处于B和C之间时返回1(B<=A<=C或C<=A<=B),否则返回0 例如:   BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间 **COUNT - 统计满足条件的周期数.** 函数原型: ``` def COUNT(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def COUNT(S,SN) ``` 用法:   COUNT(X,N),统计N周期中满足X条件的周期数,若N<=0则从第一个有效值开始. 例如:   COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数 **WMA -返回加权移动平均** 函数原型: ``` def WMA(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def WMA(S,SN) ``` 用法:   WMA(X,N):X的N日加权移动平均.算法:Yn=(1*X1+2*X2+...+n*Xn)/(1+2+...+n) **BARSLASTCOUNT - 统计连续满足条件的周期数** 函数原型: ``` def BARSLASTCOUNT(S:Iterable)->Optional[np.ndarray] #简洁表示 def BARSLASTCOUNT(S) ``` 用法:   BARSLASTCOUNT(X),统计连续满足X条件的周期数. 例如:   BARSLASTCOUNT(CLOSE>OPEN)表示统计连续收阳的周期数 **FILTER - 过滤连续出现的信号.** 函数原型: ``` def FILTER(S:Iterable,SN)->Optional[np.ndarray] #简洁表示 def FILTER(S,SN) ``` 用法:   FILTER(X,N):X满足条件后,将其后N周期内的数据置为0,N为常量. 例如:   FILTER(CLOSE>OPEN,5)查找阳线,5天内再次出现的阳线不被记录在内 **EXIST - 是否存在** 函数原型: ``` def EXIST(S:Iterable,N:int)->Optional[np.ndarray] #简洁表示 def EXIST(S,N) ``` 例如:   EXIST(CLOSE>OPEN,10),表示10日内存在着阳线 **DIFF - 单周期差异指标** 函数原型: ``` def DIFF(S:Iterable)->Optional[np.ndarray] #简洁表示 def DIFF(S) ``` 返回前一个值减后一个值的数值 **VALUEWHEN - 条件取值** 函数原型: ``` def VALUEWHEN(COND:Iterable,S:Iterable)->Optional[np.ndarray]: #简洁表示 def VALUEWHEN(COND,S) ```   当COND条件成立时,取X的当前值,否则取VALUEWHEN的上个值. **CROSS - 两条线交叉** 函数原型: ``` def CROSS(S1:Iterable,S2:Iterable)->Optional[np.ndarray] #简洁表示 def CROSS(S1,S2) ``` 用法:   CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0 例如:   CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉 **LONGCROSS - 两条线维持一定周期后交叉** 函数原型: ``` def LONGCROSS(S1:Iterable,S2:Iterable,N:Union[Iterable[int],int])->Optional[np.ndarray] 简洁表示: def LONGCROSS(S1,S2,N) ``` 用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0 **DMA - 求动态移动平均** 函数原型: ``` def DMA(S:Iterable,SN:Union[int,Iterable[int]])->Optional[np.ndarray]: #简洁表示 def DMA(S,SN) ``` 用法:   DMA(X,A),求X的动态移动平均. 算法:Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须大于0且小于1.A支持变量. 例如:   DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价 **BARSSINCEN - N个周期内第一个条件成立到当前的周期数.** 函数原型: ``` def BARSSINCEN(S:Iterable,N:int)->Optional[np.ndarray] #简洁表示 def BARSSINCEN(S,N) ``` 用法: BARSSINCEN(S,N):N周期内第一次S不为0到现在的周期数,N为常量 例如: BARSSINCE(HIGH>10,10)表示10个周期内股价超过10元时到当前的周期数 **LAST - 持续存在** 函数原型: ``` def LAST(S:Iterable,A:int,B:int)->Optional[np.ndarray]: #简洁表示 def LAST(S,A,B) ``` LAST(X,A,B):持续存在 例如:   LAST(CLOSE>OPEN,10,5)   表示从前10日到前5日内一直阳线   若A为0,表示从第一天开始,B为0,表示到最后日止 **CONST - 获取常量序列** 函数原型: ``` def CONST(S:Iterable)->Optional[np.ndarray] #简洁表示 def CONST(S) ``` 返回序列S最后的值组成常量序列 **LLVBARS - 求上一低点到当前的周期数** 函数原型: ``` def LLVBARS(S:Iterable,N:int)->Optional[np.ndarray] #简洁表示 def LLVBARS(S,N) ``` 用法: LLVBARS(S,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计 **HHVBARS - 求上一高点到当前的周期数** 函数原型: ``` def HHVBARS(S:Iterable,N:int)->Optional[np.ndarray]: #简洁表示 def HHVBARS(S,N) ``` 用法: HHVBARS(S,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计 **EVERY - 一直存在** 函数原型: ``` def EVERY(S:Iterable,SN:Union[int,Iterable[int]])->Optional[np.ndarray] #简洁表示: def EVERY(S,SN) ``` 例如:   EVERY(CLOSE>OPEN,N)   表示N日内一直阳线(N应大于0,小于总周期数,N支持变量) **FORCAST - 线性回归预测** 函数原型: ``` def FORCAST(S:Iterable,SN:Union[Iterable[int],int])->Optional[np.ndarray] #简洁表示 def FORCAST(S,SN) ``` 返回S的线性回归预测值,SN支持变量 **ATAN - 反正切** 函数原型: ``` def ATAN(S)->Union[np.ndarray,float] #简洁表示 def ATAN(S) ``` 返回S的反正切值 **ACOS - 反余弦** 函数原型: ``` def ACOS(S)->Union[np.ndarray,float] #简洁表示 def ACOS(S) ``` 返回S的反余弦值 **ASIN - 反正弦** 函数原型: ``` def ASIN(S)->Union[np.ndarray,float] #简洁表示 def ASIN(S) ``` 返回S的反正弦值 **TAN - 正切** 函数原型: ``` def TAN(S)->Union[np.ndarray,float] #简洁表示 def TAN(S) ``` 返回S的正切值 **COS - 余弦** 函数原型: ``` def COS(S)->Union[np.ndarray,float] #简洁表示 def COS(S) ``` 返回S的余弦值 **SIN - 正弦** 函数原型: ``` def SIN(S)->Union[np.ndarray,float] #简洁表示 def SIN(S) ``` 返回S的正弦值 RD - 四舍五入取值 函数原型: ``` def RD(SN,D:int=3)->Union[np.ndarray,float,int] #简洁表示 def RD(SN,D) ``` 对SN四舍五入取D位小数 **RET - 取末尾值** 函数原型: ``` def RET(S:Iterable,N:int=1) #简洁表示: def RET(S,N) ``` 返回序列倒数第N个值,默认返回最后一个 **ABS - 求绝对值** 函数原型: ``` def ABS(S) ``` 用法: ABS(X)返回X的绝对值 例如: ABS(-34)返回34 **MAX - 求最大值** 函数原型: ``` def MAX(S1,S2) ``` 用法: MAX(A,B)返回A和B中的较大值 例如: MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0 **MAX - 求最小值** 函数原型: ``` def MIN(S1,S2) ``` 用法: MIN(A,B)返回A和B中的较大值 例如: MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值 **IF - 根据条件求不同的值** 函数原型: ``` def IF(S,A,B)->np.ndarray: #简洁表示 def IF(S,A,B) ``` 用法: IF(X,A,B)若X不为0则返回A,否则返回B 例如: IF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值 ##### 4. 指标类函数 **ATR -均幅指标**,又叫真实波幅:取一定时间周期内的股价波动幅度的移动平均值 函数原型: ``` def ATR(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=20)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def ATR(CLOSE,HIGH,LOW,N=20) ``` 返回(ATR,ATRMA)元组,ATR即真实波幅,ATRMA即真实波幅的N周期平均值 **BOLL - 布林带** 函数原型 ``` def BOLL(CLOSE:Iterable,N:int=20)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示 def BOLL(CLOSE,N=20) ``` 返回布林带上、中、下三个轨道的元组 **CCI - 商品路径指标** 函数原型: ``` def CCI(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=14)->Optional[np.ndarray] #简洁表示 def CCI(CLOSE,HIGH,LOW,N=14) ``` 返回CCI的值 **KDJ - 随机指标** 函数原型: ``` def KDJ(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=9,M1:int=3,M2:int=3)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示 def KDJ(CLOSE,HIGH,LOW,N=9,M1=3,M2=3) ``` 返回(K,D,J)三个序列的元组 **MACD - 平滑异同平均线** 函数原型: ``` def MACD(CLOSE:Iterable,SHORT:int=12,LONG:int=26,MID:int=9,bit:int=2)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示 def MACD(CLOSE,SHORT=12,LONG=26,MID=9,bit=2) ``` 依次返回(DIF,DEA,MACD)元组 **WR- 威廉指标** 函数原型: ``` def WR(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=10,N1:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def WR(CLOSE,HIGH,LOW,N=10,N1=6) ``` 返回(WR1,WR2)元组,WR1、WR2即N和N1周期的威廉指标数值 **MFI - 资金流量指标** 函数原型: ``` def MFI(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,VOL:Iterable,N:int=14)->Optional[np.ndarray] #简洁表示 def MFI(CLOSE,HIGH,LOW,VOL,N=14) ``` 返回值:MFI数值 **TRIX - 三重指数平滑平均线** 函数原型: ``` def TRIX(CLOSE:Iterable,N:int=12,M:int=9)->Optional[np.ndarray] #简洁表示 def TRIX(CLOSE,N=12,M=9) ``` 返回值:(TRIX,MATRIX)元组,MATRIX为TRIX的N日平均 **BIAS - 乖离率指标** 函数原型 ``` def BIAS(CLOSE:Iterable,N1:int=6,N2:int=12,N3:int=24)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示: def BIAS(CLOSE,N1=6,N2=12,N3=24) ``` 返回:(BIAS1,BIAS2,BIAS)元组,即N1,N2,N3三个周期计算的乖离率 **BIAS_QL - 乖离率指标(传统版)** 函数原型: ``` def BIAS_QL(CLOSE:Iterable,N:int=6,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示: def BIAS_QL(CLOSE,N=6,M=6) ``` 返回:(BIAS,MABIAS)元组,MABIAS是乖离率BIAS的M日周期简单平均 **BBI多空均线指标** 函数原型: ``` def BBI(CLOSE:Iterable,M1:int=3,M2:int=6,M3:int=12,M4:int=24)->Optional[np.ndarray] #简洁表示 def BBI(CLOSE,M1=3,M2=6,M3=12,M4=24) ``` 返回M1-M4周期的BBI多空均线数值 **VR - 威廉指标** 函数原型: ``` def VR(CLOSE:Iterable,VOL:Iterable,N:int=26,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def VR(CLOSE,VOL,N=26,M=6) ``` 返回值:(VR,MAVR)元组,MAVR为VR的M日均值 **RSI - 相对强弱指标** 函数原型: ``` def RSI(CLOSE:Iterable,N1:int=6,N2:int=12,N3:int=24)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]]: #简洁表示 def RSI(CLOSE,N1=6,N2=12,N3=24) ``` 返回值:(RSI1,RSI2,RSI3)元组,即根据收盘价计算的3个周期的RSI值 **KTN - 肯特纳交易通道指标** 函数原型: ``` def KTN(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=20,M:int=10)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示: def KTN(CLOSE,HIGH,LOW,N=20,M=10) ``` 返回值:(UPPER,MID,LOWER)元组,即通道的上中下三轨 **TAQ - 唐安奇通道** 函数原型: ``` def TAQ(HIGH:Iterable,LOW:Iterable,N:int=20)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示: def TAQ(HIGH,LOW,N=20) ``` 返回值:(UP,MID,DOWN)元组,即通道的上中下三轨 **BRAR - 情绪指标** 函数原型: ``` def BRAR(OPEN:Iterable,CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=26)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def BRAR(OPEN,CLOSE,HIGH,LOW,N=26) ``` 返回:(BR,AR)元组 **EMV - 简易波动指标** 函数原型: ``` def EMV(HIGH:Iterable,LOW:Iterable,VOL:Iterable,N:int=14,M:int=9)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def EMV(HIGH,LOW,VOL,N=14,M=9) ``` 返回值:(EMV,MAEMV)元组,MAEMV为EMV的M日均值 **OBV - 能量潮指标** 函数原型: ``` def OBV(CLOSE:Iterable,VOL:Iterable,N:int=30)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def OBV(CLOSE,VOL,N=30) ``` 返回值:(OBV,MAOBV)元组,MAOBV为OBV的N日均值 **DPO - 区间震荡线** 函数原型: ``` def DPO(CLOSE:Iterable,N:int=20,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def DPO(CLOSE,N=20,M=6) ``` 返回值:(DPO,MADPO)元组,MADPO为DPO的M日均值 **MTM - 动量线指标** 函数原型: ``` def MTM(CLOSE:Iterable,N:int=12,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def MTM(CLOSE,N=12,M=6) ``` 返回值:(MTM,MTMMA)元组,MTMMA为MTM的M日均值 **DMA - 平均差指标** 函数原型: ``` def DMA(CLOSE:Iterable,N1:int=10,N2:int=50,M:int=10)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def DMA(CLOSE,N1=10,N2=50,M=10) ``` 返回值:(DIF,DIFMA)元组,DIFMA为DIF的M日均值 **DFMA - 平均差指标** 同DMA指标 **DMI - 趋向指标** 函数原型: ``` def DMI(CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=14,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray,np.ndarray]] #简洁表示 def DMI(CLOSE,HIGH,LOW,N=14,M=6) ``` 返回:(PDI,MDX,ADX,ADXR)元组 **ROC 变动率指标** 函数原型: ``` def ROC(CLOSE:Iterable,N:int=12,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def ROC(CLOSE,N=12,M=6) ``` 返回值:(ROC,MAROC)元组,MAROC为ROC的M日均值' **MASS - 梅斯线指标** 函数原型: ``` def MASS(HIGH:Iterable,LOW:Iterable,N1:int=9,N2:int=25,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def MASS(HIGH,LOW,N1=9,N2=25,M=6) ``` 返回值:(MASS,MAMASS)元组,MAMASS为MASS的M日均值 **EXPMA - 指数平均线指标** 函数原型: ``` def EXPMA(CLOSE:Iterable,M1:int=12,M2:int=50)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def EXPMA(CLOSE,M1=12,M2=50) ``` 返回值:(EXP1,EXP2)元组,即收盘价的M1,M2日指数移动平均' **PSY - 心理线指标** 函数原型: ``` def PSY(CLOSE:Iterable,N:int=12,M:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def PSY(CLOSE,N=12,M=6) ``` 返回值:(PSY,PSYMA)元组,PSYMA为PSY的M日均值 **ASI - 震动升降指标** 函数原型: ``` def ASI(OPEN:Iterable,CLOSE:Iterable,HIGH:Iterable,LOW:Iterable,N:int=6)->Optional[Tuple[np.ndarray,np.ndarray]] #简洁表示 def ASI(OPEN,CLOSE,HIGH,LOW,N=6) ``` 返回值:(ASI,ASIMA)元组,ASIMA为ASI的N日均值 ##### 5. 进阶函数 **BOLL_M - 布林带(传统版)** *通达信加密函数 函数原型: ``` def BOLL_M(CLOSE:Iterable,N:int=20)->Optional[Tuple[np.ndarray,np.ndarray,np.ndarray]] #简洁表示 def BOLL_M(CLOSE,N=20) ``` 返回布林带上、中、下三个轨道的元组 **WINNER - 盈利盘比例函数** *通达信加密函数 函数原型: ``` def WINNER(HIGH:Iterable,LOW:Iterable,VOL:Iterable,Turnrate:Iterable,price,avg:Union[Iterable,str]='hlavg')->Optional[np.ndarray] #简洁表示 def WINNER(HIGH,LOW,VOL,Turnrate,price,avg='hlavg') ``` 说明: - VOL-成交量[序列值],单位是手,万股等不重要,只要统一就行 - Turnrate[换手率]:取值范围0-1,注意50%的换手应写作0.5 *换手率由于流通股变动问题,故不能简单使用“成交量/流通股”的方式计算,这也是本函数保留输入换手率的原因 - price-某价格的盈利比例中的价格,可以是具体数值(如:99.98),也可以是序列(如收盘价、开盘价等) - avg-筹码三角分布顶点:默认'hlavg'是取每日最高价和最低价的平均值,已经基本满足筹码计算要求。某些算法中使用“成交额/成交量”的计算方法计算当日平均价 *使用“成交额/成交量”的计算方法的话,注意这个平均位置也要复权,否则会出现平均位置出现在当日最高价和最低价之外的情况 返回一组获利比例的numpy数组,范围0-1,如0.1即当前股价的盈利比例为10%,这里跟通达信软件是保持一致的 *此函数专用于T+1交易,不适用于可转债或者非日线周期等换手率超过100%的情况 **COST - 成本函数** 依据获利盘比例找价格 *通达信加密函数 函数原型: ``` def COST(HIGH:Iterable,LOW:Iterable,VOL:Iterable,Turnrate:Iterable,winpercent:Iterable,radio:float=0.01,avg:Union[Iterable,str]='hlavg')->Optional[np.ndarray] #简洁表示 def COST(HIGH,LOW,VOL,Turnrate,winpercent,radio=0.01,avg='hlavg') ``` 计算某盈利比例对应的股价 - VOL-成交量[序列值],单位是手,万股等不重要,只要统一就行 - Turnrate[换手率]:取值范围0-1,注意50%的换手应写作0.5 *换手率由于流通股变动问题,故不能简单使用“成交量/流通股”的方式计算,这也是本函数保留输入换手率的原因 - winpercent-指定获利比例,应为0-100之间的数值(如winpercent=90,即返回盈利90%的股价),和通达信软件保持一致 - avg-筹码三角分布顶点:默认'hlavg'是取每日最高价和最低价的平均值,已经基本满足筹码计算要求。某些算法中使用“成交额/成交量”的计算方法计算当日平均价 *使用“成交额/成交量”的计算方法的话,注意这个平均位置也要复权,否则会出现平均位置出现在当日最高价和最低价之外的情况 - radio-精确度:如股票等使用0.01,ETF,Reits等使用0.001,只能取这两值其一 返回一组指定获利比例的股价。 *此函数专用于T+1交易,不适用于可转债或者非日线周期等换手率超过100的情况''' **getHPoint - 指示当前位置是否是一组数据的高点** 函数原型: ``` def getHPoint(S:Iterable,N:int)->Optional[np.ndarray] #简洁表示 def getHPoint(S,N) ``` 返回值为dtype=bool_的数组,True位置即为相对高点位置 **getLPoint - 指示当前位置是否是一组数据的低点** 函数原型: ``` def getLPoint(S:Iterable,N:int)->Optional[np.ndarray] #简洁表示: def getLPoint(S:Iterable,N:int) ``` 返回值为dtype=bool_的数组,True位置即为相对低点位置 **getHLine - 获取一组数据高点的拟合直线** 函数原型: ``` def getHLine(S:Iterable,N:int)->Optional[Tuple[np.ndarray,float,float]] #简洁表示 def getHLine(S,N) ``` 返回值:(DATA,R2,SLOPE)元组   DATA-拟合后的高点序列,绘图的话是一条直线   R2-高点拟合的r-square数值[取值范围0-1,数值越大说明数据拟合度越好]   SLOPE-拟合后直线的斜率,为正则标识数据越来越大,为负则表示数据越来越小 **getLLine - 获取一组数据低点的拟合直线** 函数原型: ``` def getLLine(S:Iterable,N:int)->Optional[Tuple[np.ndarray,float,float]] #简洁表示 def getLLine(S,N) ``` 返回值:(DATA,R2,SLOPE)元组   DATA-拟合后的低点序列,绘图的话是一条直线   R2-高点拟合的r-square数值[取值范围0-1,数值越大说明数据拟合度越好]   SLOPE-拟合后直线的斜率,为正则标识数据越来越大,为负则表示数据越来越小 **getBestHLine - 获取一组数据在N取值为N1到N2之间的高点最佳拟合直线** 函数原型: ``` def getBestHLine(S:Iterable,N1:int,N2:int)->Optional[Tuple[np.ndarray,float,float,int]] #简洁表示 def getBestHLine(S,N1,N2) ``` 返回值:(DATA,R2,SLOPE,N)元组   DATA-最佳拟合后的高点序列,绘图的话是一条直线   R2-高点拟合后的最佳r-square数值[即函数getHLine(S,N)的N值取N1-N2之间所有整数时计算的R2最大值]   SLOPE-最佳拟合后直线的斜率,为正则标识数据越来越大,为负则表示数据越来越小   N-最佳拟合时的N值 **getBestLLine - 获取一组数据在N取值为N1到N2之间的低点最佳拟合直线** 函数原型: ``` def getBestLLine(S:Iterable,N1:int,N2:int)->Optional[Tuple[np.ndarray,float,float,int]] #简洁表示 def getBestLLine(S,N1,N2) ``` 返回值:(DATA,R2,SLOPE,N)元组   DATA-最佳拟合后的低点序列,绘图的话是一条直线   R2-低点拟合后的最佳r-square数值[即函数getHLine(S,N)的N值取N1-N2之间所有整数时计算的R2最大值]   SLOPE-最佳拟合后直线的斜率,为正则标识数据越来越大,为负则表示数据越来越小   N-最佳拟合时的N值 **RSRS - 阻力相对支撑强度指标** 炒股软件一般无此指标 函数原型: ``` def RSRS(HIGH:Iterable,LOW:Iterable,N:int=18,M:int=600)->Optional[np.ndarray] #简洁表示 def RSRS(HIGH,LOW,N=18,M=600) ``` N,M-周期常量 M默认值值为600,注意输入数据的数量 返回值:计算的RSRS数值,一般在RSRS>0.7时买入,RSRS小于-0.7时卖出' **SAR - 抛物线指标** 通达信、同花顺等软件上是加密指标 函数原型: ``` def SAR(HIGH:Iterable,LOW:Iterable,start:int=4,stepstart:int=2,step:int=2,maxstep:int=20)->Optional[np.ndarray] #函数原型 def SAR(HIGH,LOW,start=4,stepstart=2,step=2,maxstep=20) ``` 输入参数:   start:起始统计周期   stepstart:加速因子参数   step:加速因子增量   maxstep:反向临界参数 返回值:SAR值,SAR大于收盘价代表下跌趋势,SAR小于收盘价代表上涨趋势 ##### 6.通达信公式DLL函数(Windows专用,Linux不支持) *通达信dll为32为dll文件,但是使用本模块,在64位的Python上亦可正常调用 **binddll - 绑定dll文件** 函数原型: ``` def binddll(no:int,dllpath:str)->Optional[bool] #简洁表示 def binddll(no,dllpath) ``` 输入参数:   no-要绑定dll文件的函数取值[取值范围:1-10]   dllpath-要绑定dll文件的路径 成功返回True,失败直接抛出异常 **TDXDLL(1-10) - 调用指定号码的通达信dll文件** 函数原型: ``` def TDXDLL1(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL2(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL3(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL4(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL5(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL6(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL7(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL8(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL9(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] def TDXDLL10(funcno:int,ina:Iterable,inb,inc)->Optional[np.ndarray] #简洁表示: def TDXDLL1(funcno,ina,inb,inc) def TDXDLL2(funcno,ina,inb,inc) def TDXDLL3(funcno,ina,inb,inc) def TDXDLL4(funcno,ina,inb,inc) def TDXDLL5(funcno,ina,inb,inc) def TDXDLL6(funcno,ina,inb,inc) def TDXDLL7(funcno,ina,inb,inc) def TDXDLL8(funcno,ina,inb,inc) def TDXDLL9(funcno,ina,inb,inc) def TDXDLL10(funcno,ina,inb,inc) ``` 输入参数:ina,inb,inc为输入的3个参数,其中ina必须为序列值 返回值为计算结果的序列