麦语言自编策略.docx
《麦语言自编策略.docx》由会员分享,可在线阅读,更多相关《麦语言自编策略.docx(169页珍藏版)》请在冰豆网上搜索。
![麦语言自编策略.docx](https://file1.bdocx.com/fileroot1/2023-2/21/898eb96b-684a-4dcf-af2b-030fc47ec7b4/898eb96b-684a-4dcf-af2b-030fc47ec7b41.gif)
麦语言自编策略
麦语言自编策略模型函数列表
自编策略模型支持的函数
1.数学运算(24)
ABS(X)绝对值
求X的绝对值
注:
1、正数的绝对值是它本身;
2、负数的绝对值是它的相反数;
3、0的绝对值还是0;
例1:
ABS(-10);//返回10。
例2:
ABS(CLOSE-10);//返回收盘价和的10价差的绝对值。
例3:
ABS(C-O);//当前K线实体长度
ACOS(X)反余弦值
求X的反余弦值
注:
1、X取值范围[-1,1]。
2、若X不在取值范围,返回值为空值。
例1:
ACOS(-1);//求-1的反余弦值;
例2:
ACOS
(1);//求1的反余弦值;
ASIN(X)反正弦值
求X的反正弦值注:
1、X取值范围[-1,1]。
2、若X不在取值范围,返回值为空值。
例1:
ASIN(-1);//求-1的反正弦值;
例2:
ASIN
(1);//求1的反正弦值;
ATAN(X)反正切值注
求X的反正切值注:
X的取值为R(实数集)
例1:
ATAN(-1.75);//求-1.75的反正切值;
例2:
ATAN(1.75);//求1.75的反正切值;
COS(X)余弦值
返回X的余弦值注:
1、X的取值为R(实数集)
2、值域为[-1,1]
例1:
COS(-1.57);//返回-1.57的余弦值
例2:
COS(1.57);//返回1.57的余弦值
EXP(X)指数
返回e的X次幂
例1:
C*EXP(0.01);//求收盘价乘以e的0.01次幂
CUBE(X)立方函数
返回X的三次方。
例1:
CUBE(4);//求4的立方。
CEILING(X)向上舍入
向上舍入,返回沿A数值增大方向最接近的整数,若A为整数,则返回值为A。
例1:
CEILING(2.1);//求得3。
例2:
CEILING(-8.8);//求得-8。
例3:
CEILING(C*1.01);//求收盘价的1.01倍向上取整
例4:
IFELSE(C-INTPART(C)>=0.5,CEILING(C),FLOOR(C));//对收盘价四舍五入后取整数部分
FLOOR(X)向下舍入
向下舍入,返回沿A数值减小方向最接近的整数,若A为整数,则返回值为A。
注:
FLOOR(A)返回沿A数值减小方向最接近的整数,若A为整数,则返回值为A。
例1:
FLOOR(2.1);//返回值为2;
例2:
FLOOR(-8.8);//返回值为-9;
例3:
FLOOR(5);//返回值为5;
例4:
IFELSE(C-INTPART(C)>=0.5,CEILING(C),FLOOR(C));//对收盘价四舍五入后取整数部分。
INTPART(X)取整
取X的整数部分。
例1:
INTPART(12.3);//返回值为12;
例2:
INTPART(-3.5);//返回值为-3;
例3:
INTPART(10);//返回值为10;
例5:
INTPART(C);//求收盘价的整数部分。
LN(X)自然对数
求X的自然对数。
注:
1、X取值范围为非0自然数,即1、2、3、4、5……
2、若X取值为0或负数,返回值为空值。
例:
LN(OPEN);//求开盘价的对数。
LOG(X)常用对数值
求X的常用对数值。
注:
1、该函数中X的取值范围为X>0
2、0和负数没有对数,X为0或负数时返回值为空值。
例1:
LOG(100)返回2.
例2:
LOG(0)返回空值。
MAX(A,B)最大值
取最大值。
取A,B中较大者。
注:
若A=B,返回值为A或者B的值。
例1:
MAX(CLOSE,OPEN);//表示取开盘价和收盘价中较大者。
例2:
MAX(CLOSE-OPEN,0);//表示若收盘价大于开盘价返回它们的差值,否则返回0。
例3:
MAX(A,MAX(B,MAX(C,D)));//求ABCD四者中的最大值
MIN(A,B)最小值
取最小值。
取A,B中较小者。
注:
若A=B,返回值为A或者B的值。
例1:
MIN(OPEN,CLOSE);//表示取开盘价和收盘价中的较小者。
例2:
MIN(C,MIN(O,REF(C,1)));//求当前周期的开盘价,收盘价,以及上周期的收盘价间最小的数值
MOD(A,B)取模
取模。
返回A对B求模。
例1:
MOD(26,10);//返回6,26除以10所得余数为6,即26对10的模为6。
例2:
DRAWICON(MOD(BARPOS,3)=0,H,'ICO1');//从数据开始第一根k线开始分别在第3、6、9、
12等k线依次往后每隔3根k线标注一个笑脸图案
例3:
MOD(A,2)=0;//判断A为偶数。
NOT(X)取非
取非。
当X=0时返回1,否则返回0。
例1:
NOT(ISLASTBK);如果上一个信号不是BK信号,,则NOT(ISLASTBK)返回值为1;如果上一个信号是BK信号,则NOT(ISLASTBK)返回值为0。
例2:
NOT(BARSBK>=1)=1;//BK信号发出的当根K线上满足条件。
//NOT(BARSBK>=1)=1与NOT(BARSBK>=1)表达同等意义。
POW(A,B)幂
求X的Y次幂。
注:
1、当X为负数时,Y必须为整数,因为底数为负时,不能进行开方运算,返回值为空值。
2、X、Y均支持为变量形式
例1:
POW(CLOSE,2);//求得收盘价的2次方。
例2:
POW(10,2);//返回值为100
例3:
POW(1/2,-2);//返回值为4
例4:
POW(100,1/2);//返回值为10
REVERSE(X)取相反值
取相反值,返回-X。
例1:
REVERSE(LOW);//返回-LOW。
例2:
REVERSE(-55);//返回值为55
例3:
REVERSE(0);//返回值为0
RANGE(A,B,C)范围
介于某个范围之内。
表示A大于B同时小于C时返回1,否则返回0
例1:
RANGE(5,4,6);//返回值为1;
例2:
RANGE(8,3,6);//返回值为0;
例3:
MA5:
MA(C,5);
MA10:
MA(C,10);
MA20:
MA(C,20);
RANGE(MA10,MA20,MA5),BK;//10周期均线在5周期均线与20周期均线之间买开仓
//RANGE(MA10,MA20,MA5)=1,BK;与RANGE(MA10,MA20,MA5),BK;表达同等意义
SGN(X)取符号
取符号。
若X>0返回1,若X<0返回-1,否则返回0。
例1:
SGN(5);//返回值为1
例2:
SGN(-5);//返回值为-1
例3:
SGN(0);//返回值为0
SIN(X)求正弦
求X的正弦值。
注:
1、X的取值为R(实数集);
2、值域为(-1,1)。
例1:
SIN(-1.57);//返回-1.57的正弦值
例2:
SIN(1.57);//返回1.57的正弦值
SQRT(X)平方根
求X的平方根。
注:
X的取值为正数,X为负数时返回空值。
例1:
SQRT(CLOSE);//收盘价的平方根。
SQUARE(X)平方
求X的平方。
例1:
SQUARE(C);//收盘价的平方。
例2:
SQUARE
(2);//2的平方。
TAN(X)正切
返回X的正切值。
例1:
TAN(0);//返回0的正切值;
例2:
TAN(-3.14);//返回-3.14的正切值。
2.金融统计函数(25)
ADMA(X,N,P,Q)考夫曼均值
考夫曼均值
注:
X为调用的k线数据(例如高、开、低,收)
N为调用的间隔时间
P为快线频率参数
Q为慢线频率参数
算法:
ADMA(X,N,P,Q)=REF(EMA(C,N),1)+CONSTANT*(C-REF(EMA(C,N),1));
CONSTANT根据价格方向、波动性计算得到
价格方向被表示为整个时间段中的净价格变化,简单地计算价格的净变化,从开始点到结束点。
这倾向于最保守的测量,因为它平滑了从开始到结尾之间发生的任何价格移动。
波动性是市场噪音的总数量,计算了时间段内价格变化的总和。
高-低范围更好地描述了在周期内可能产生的任意极端值。
所有变化总和,它是最概括的测量,因为能识别一个价格移动从高到低的次数
方向移动对噪音之比,成为效率系数ER。
ER通过快慢系数转为趋势速度,达到自适应目的
LAST(X)
上一次条件成立位置
上一次条件COND成立到当前的周期数。
注:
1、条件成立的当根k线上BARSLAST(COND)的返回值为0
2、本函数运算量很大,将占用很多的CPU资源,导致行情刷新速度变慢,请谨慎使用!
例1:
BARSLAST(OPEN>CLOSE);//上一根阴线到现在的周期数。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,当日k线数。
//由于条件成立的当根k线上BARSLAST(COND)的返回值为0,所以“+1”才是当日k线根数。
BARSLASTCOUNT(COND)
从当前周期向前计算,统计连续满足条件的周期数
从当前周期向前计算,统计连续满足条件的周期数。
注:
1、返回值为从当前周期计算COND连续不为0的周期数
2、条件第一次成立的当根k线上BARSLASTCOUNT(COND)的返回值为1
例:
BARSLASTCOUNT(CLOSE>OPEN);
//计算当根K线在内连续为阳线的周期数
BARSSINCE(COND)
第一个条件成立到当前的周期数
第一个条件成立到当前的周期数。
注:
1、返回值为COND第一次成立到当前的周期数
2、条件第一次成立的当根k线上BARSSINCE(COND)的返回值为0
例:
BARSSINCE(CLOSE>OPEN);
//统计第一次满足阳线这个条件的K线到现在的周期数
COUNT(X,N)
统计总数
统计N周期中满足COND条件的周期数。
注:
1、若N为0则从第一个有效值算起;
2、当N为有效值,但当前的k线数不足N根,从第一根统计到当前周期。
3、N为空值时返回值为空值。
4、N可以为变量
例1:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,当日k线数。
M:
COUNT(ISUP,N);//统计分钟周期上开盘以来阳线的根数。
例2:
MA5:
=MA(C,5);//定义5周期均线
MA10:
=MA(C,10);//定义10周期均线
M:
COUNT(CROSSUP(MA5,MA10),0);//统计从申请到的行情数据以来到当前这段时间内,5周期均线上穿10周期均线的次数。
CONDBARS(A,B)
取得最近的满足A、B条件的k线间周期数
取得最近的满足A、B条件的k线间周期数
注意:
1、该函数返回周期数不包含最后满足条件的K线
2、如果距离当前K线最近的满足的条件为B条件,则该函数返回值为最后一次满足A条件的K线到满足B条件的K线的周期数(A条件满足后的第一次满足B条件的K线)
如果距离当前K线最近的满足的条件为A条件,则该函数返回值为最后一次满足B条件的K线到满足A条件的K线的周期数(B条件满足后的第一次满足A条件的K线)
例1:
MA5:
=MA(C,5);//5周期均线
MA10:
=MA(C,10)//;10周期均线
CONDBARS(CROSSUP(MA5,MA10),CROSSDOWN(MA5,MA10));//最近一次满足5周期均线上穿10周期均线与5周期均线下穿10周期均线之间的周期数
DMA(X,A)
动态移动平均
求X的动态移动平均,其中A必须小于1大于0。
注:
A可以为变量
计算公式:
DMA(N)=DMA(N-1)*(1-A)+X(N)*A其中DMA(N-1)为第(N-1)天的DMA值
例1:
DMA3:
=DMA(C,0.3);//计算结果为REF(DMA3,1)*(1-0.3)+C*0.3
EMA(X,N)
指数移动平均
求N周期X值的指数移动平均(平滑移动平均)。
注:
1、对距离当前较近的k线赋予了较大的权重。
2、当N为有效值,但当前的k线数不足N根,按实际根数计算。
3、N为0或空值时返回值为空值。
4、N可以为变量
EMA=[2*X/(N+1)+(N-1)*EMA(N-1)]/(N+1)
举例:
X1=6X2=7X3=8X4=9
则EMA(X,4)=2/5*X4+3/10*X3+3/15*X2+3/30*X1=4/10*9+3/10*8+2/10*7+1/10*6=8
例1:
EMA10:
=EMA(C,10);//求收盘价10周期平滑移动平均值
EMA2(X,N)
线性加权平均
求N周期X值的线性加权平均(也称WMA)
EMA2(X,N)=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*X(N-1))/(N+(N-1)+(N-2)+...+1),X0表示本周期值,X1表示上一周期值
注:
1、当N为有效值,但当前的k线数不足N根,返回值为空值。
2、N为0或空值时返回值为空值。
3、N可以为变量
4、本函数运算量很大,将占用很多的CPU资源,导致行情刷新速度变慢,请谨慎使用!
例1:
EMA2(H,5);//求最高价在5个周期的加权移动平均值。
EMAWH(C,N)
指数移动平均
指数移动平均,也叫平滑移动平均,采用指数加权方法,对距离当前较近的K线赋予了较大的权重。
注:
1、当N为有效值,当前的k线数不足N根时,或者前面周期的取值仍作用于当前周期时,EMAWH返回值为空值
因为EMAWH计算公式中着重考虑了当周期的权重,所以当周期较长,前面的周期取值对当前的影响越小,EMAWH从前面数据对当前周期不再影响时的取值开始显示,所以即使选择的数据起始时间不同,当前已经显示的K线的EMAWH的取值也不会发生变化
2、当N为0或空值时返回值均为空值
3、N不能为变量
EMAWH=[2*X/(N+1)+(N-1)*EMAWH(N-1)]/(N+1)
注:
EMAWH用法同EMA(C,N)
HHV(X,N)
最高值
求X在N个周期内的最高值。
注:
1、若N为0则从第一个有效值开始算起;
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算;
3、N为空值时,返回空值。
4、N可以是变量。
例1:
HH:
HHV(H,4);//求4个周期最高价的最大值,即4周期高点(包含当前k线)。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
HH1:
=HHV(H,N);//在分钟周期上,日内高点
HV(X,N)
出当前K线外最高值
求X在N个周期内(不包含当前k线)的最高值。
注:
1、若N为0则从第一个有效值开始算起(不包含当前K线);
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算,第一根k线返回空值;
3、N为空值时,返回空值。
4、N可以是变量。
例1:
HH:
HV(H,10);//求前10根k线的最高点。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;
NN:
=REF(N,N);
ZH:
VALUEWHEN(DATE<>REF(DATE,1),HV(H,NN));//在分钟周期上,求昨天最高价。
例3:
HV(H,5)和REF(HHV(H,5),1)的结果是一样的,用HV编写更加方便。
HHVBARS(X,N)
前一高点位置
求N周期内X最高值到当前周期数
注:
1、若N为0则从第一个有效值开始算起(不包含当前K线);
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算,第一根k线返回空值;
3、N为空值时,返回空值。
4、N可以是变量。
例1:
HHVBARS(VOL,0);求历史成交量最大的周期到当前的周期数(最大值那根k线上HHVBARS(VOL,0);的返回值为0,最大值后的第一根k线返回值为1,依次类推)。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
ZHBARS:
REF(HHVBARS(H,N),N);//在分钟周期上,求昨天最高价所在的k线到当前k线之间的周期数。
LLV(X,N)
最低值
求X在N个周期内的最小值。
注:
1、若N为0则从第一个有效值开始算起;
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算;
3、N为空值时,返回空值。
4、N可以是变量。
例1:
LL:
LLV(L,5);//求5根k线最低点(包含当前k线)。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
LL1:
=LLV(L,N);//在分钟周期上,求当天第一根k线到当前周期内所有k线最低价的最小值。
LV(X,N)
出当前K线外最低值
求X在N个周期内的最小值(不包含当前k线)
注:
1、若N为0则从第一个有效值开始算起;
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算;
3、N为空值时,返回空值。
4、N可以是变量。
例1:
LL:
LV(L,10);//求前面10根k线的最低点。
(不包含当前k线)
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
ZL:
VALUEWHEN(DATE<>REF(DATE,1),LV(L,N));//在分钟周期上,求昨天最低价。
例3:
LV(L,5)和REF(LLV(L,5),1)的结果是一样的,用LV编写更加方便。
LLVBARS(X,N)
前一个最低点位置
求N周期内X最低值到当前周期数
注:
1、若N为0则从第一个有效值开始算起(不包含当前K线);
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算,第一根k线返回空值;
3、N为空值时,返回空值。
4、N可以是变量。
例1:
LLVBARS(VOL,0);求历史成交量最小的周期到当前的周期数(最小值那根k线上LLVBARS(VOL,0);的返回值为0,最小值后的第一根k线返回值为1,依次类推)。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
ZLBARS:
REF(LLVBARS(L,N),N);//在分钟周期上,求昨天最低价所在的k线到当前k线之间的周期数。
MA(X,N)
算数移动平均
求X在N个周期内的简单移动平均
算法:
MA(X,5)=(X1+X2+X3+X4+X5)/5
注:
1、简单移动平均线沿用最简单的统计学方式,将过去某特定时间内的价格取其平均值。
2、当N为有效值,但当前的k线数不足N根,函数返回空值。
3、N为0或空值的情况下,函数返回空值。
4、N可以为变量
例1:
MA5:
=MA(C,5);//求5周期收盘价的简单移动平均。
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
M:
=IFELSE(N>10,10,N);//如果k线超过10根,M取10,否则M取实际根数
MA10:
MA(C,M);//在分钟周期上,如果当天k线不足10根,按照实际根数计算MA10,如果超过10根按照10周期计算MA10。
NUMPOW(X,N,M)
自然数幂方和
自然数幂方和
算法:
NUMPOW(x,n,m)=n^m*x+(n-1)^m*ref(x,1)+(n-2)^m*ref(x,2)+...+2^m*ref(x,n-2)+1^m*ref(x,n-1)r\n注意:
1、N为自然数,M为实数;且N与M不能为变量
2、X为基础变量
例1:
r\nJZ:
=NUMPOW(C,5,2)/NUMPOW(1,5,2);
SAR(N,Step,Max)
抛物转向
返回抛物转向值。
注:
1、参数N,Step,Max均不支持变量
例1:
SAR(17,3,30);//表示计算17个周期抛物转向,步长为3%,极限值为30%
SMA(X,N,M)
扩展指数移动平均
求X的N个周期内的移动平均。
M为权重。
计算公式:
SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/N
注:
1、当N为有效值,但当前的k线数不足N根,按实际根数计算。
2、N为0或空值的情况下,函数返回空值。
例1:
SMA10:
=SMA(C,10,3);//求的10周期收盘价的移动平均。
权重为3。
SMMA(X,N)
通畅移动平均
X为变量,N为周期,SMMA(X,N)表示当前K线上X在N个周期的通畅移动平均线
算法:
SMMA(X,N)=(SUM1-MMA+CLOSE)/N
其中SUM1=X1+X2+.....+XN
MMA=SUM1/N
例1:
SMMA(C,5);//收盘价的5周期通畅移动平均线
SUM(X,N)
求和
求X在N个周期内的总和。
注:
1、若N为0则从第一个有效值开始算起。
2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算。
3、N为空值时,返回空值。
4、N可以为变量。
例1:
SUM(VOL,25);表示统计25周期内的成交量总和
例2:
N:
=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
SUM(VOL,N);//分钟周期上,取当天成交量总和。
SUMBARS(X,A)
累加到指定值的周期数
求累加到指定值的周期数
例1:
SUMBARS(VOL,20000);将成交量向前累加直到大于等于20000,返回这个区间的周期数。
TRMA(X,N)
三角移动平均
求X在N个周期的三角移动平均值。
算法:
三角移动平均线公式,是采用算数移动平均,并且对第一个移动平均线再一次应用算数移动平均。
TRMA(X,N)算法如下
ma_half=MA(X,N/2)
trma=MA(ma_half,N/2)
注:
1、当N为有效值,但当前的k线数不足N根,函数返回空值。
2、N为0或空值的情况下,函数返回空值。
3、N支持使用变量
例1:
TRMA5:
TRMA(CLOSE,5);//计算5个周期内收盘价的三角移动平均。
(N不能被2整除)
//TRMA(CLOSE,5)=MA(MA(CLOSE,(5+1)/2)),(5+1)/2);
例2:
TRMA10:
TRMA(CLOSE,10);//计算10个周期内收盘价的三角移动平均。
(N能被2整除)
TRMA(CLOSE,10)=MA(MA(CLO