麦语言函数手册.docx
《麦语言函数手册.docx》由会员分享,可在线阅读,更多相关《麦语言函数手册.docx(32页珍藏版)》请在冰豆网上搜索。
![麦语言函数手册.docx](https://file1.bdocx.com/fileroot1/2023-2/3/03a0fac0-dde8-4fc6-ad88-dfa022f6a63f/03a0fac0-dde8-4fc6-ad88-dfa022f6a63f1.gif)
麦语言函数手册
文华财经“麦语言”函数手册
(2011年10月更新)
文华财经资讯有限公司
“麦语言”源于2004年文华推出的国内第一套程序化函数库,经过6年的发展,吸收几十万用户的意见反馈,一点一点完善起来的,是一套成熟稳定的模型开发平台。
麦语言,是国内使用人数最多的程序化模型开发平台。
麦语言倡导的是积木式的编程理念,把复杂算法封装到一个个的函数里,采用“小语法,大函数”的构建模式。
语法虽然简单,但是配合专门的程序化数据结构,配合丰富的金融统计函数库,同样可以支持逻辑复杂的金融应用。
麦语言的函数库,是经常更新的,根据客户的新要求随时添加新函数,来支持编程者的交易新思想和新应用
一、自编策略模型支持的函数
1.历史数据引用
AVPRICE
取得均价(在盘后对于国内三个期货交易所指结算价)
SETTLE
取得结算价(只有在日线周期盘后才能取得当日的结算价)
说明:
如果用在周期小于'日'的K线上如5分钟K线,一小时k线,每根k线返回的值表示这根k线当日开盘时到这根k线的为止的结算价(均价)
如果用在周期大于等于'日'的K线上,返回当根K线结束时间所在日的结算价.
CLOSE
取得收盘价(在盘中指最新价),也可简写为C。
HIGH
求高价,也可简写为H。
LOW
求最低价,也可简写为L。
OPEN
求开盘价,也可简写为O。
OPI
取持仓量
REF(X,N)
引用X在N个周期前的值
例:
REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
REFX(X,N)
引用N个周期后的数据。
(N为大于等于1的整数)『未来函数』
例:
REFX(CLOSE,5);表示引用自当前周期后第5个周期的收盘价
本函数运算量很大,将占用很多的CPU资源,导致行情刷新速度变慢,请谨慎使用!
#IMPORT
引用某品种在某个周期上加载了某个指标的数据。
用法:
#IMPORT[CODE,PERIOD,FORMULA]ASVAR。
引用CODE所对应的合约PERIOD周期下指标FORMULA的数据。
CODE文华码,PERIOD周期,FORMULA引用指标名,VAR定义变量名
注意:
1.只能引用.FML/.XFML文件
2.只能引用如下周期:
MIN1MIN3MIN5MIN15MIN30HOUR1DAYWEEKMONTH
s3.只能短周期引用长周期
4.被引用的指标中不能存在引用
5.如果不写文华码,默认引用当前合约
MINPRICE
返回某品种的最小变动价位。
用法:
MINPRICE(CODE);返回CODE所对应合约的最小变动价位。
CODE文华码或交易代码。
例:
MINPRICE('IF1107');表示返回IF1007的最小变动价位。
注意:
某些合约(如橡胶指数)查不到最小变动价位,返回0。
VOL
求成交量,也可简写为V。
2.日内高频数据引用
L2_BID1
取秒周期末买1价(K线图)或该笔TICK时刻的买1价(Tick图)。
用法:
L2_BID1K线图时返回当前秒周期最后时刻的买1价。
TICK图时返回该笔TICK时刻的买1价。
L2_BID2
取秒周期末买2价(K线图)或该笔TICK时刻的买2价(Tick图)。
用法:
L2_BID2K线图时返回当前秒周期最后时刻的买2价。
TICK图时返回该笔TICK时刻的买2价。
L2_BID3
取秒周期末买3价(K线图)或该笔TICK时刻的买3价(Tick图)。
用法:
L2_BID3K线图时返回当前秒周期最后时刻的买3价。
TICK图时返回该笔TICK时刻的买3价。
L2_BID4
取秒周期末买4价(K线图)或该笔TICK时刻的买4价(Tick图)。
用法:
L2_BID4K线图时返回当前秒周期最后时刻的买4价。
TICK图时返回该笔TICK时刻的买4价。
L2_BID5
取秒周期末买5价(K线图)或该笔TICK时刻的买5价(Tick图)。
用法:
L2_BID5K线图时返回当前秒周期最后时刻的买5价。
TICK图时返回该笔TICK时刻的买5价。
L2_ASK1
取秒周期末卖1价(K线图)或该笔TICK时刻的卖1价(Tick图)。
用法:
L2_ASK1K线图时返回当前秒周期最后时刻的卖1价。
TICK图时返回该笔TICK时刻的卖1价。
L2_ASK2
取秒周期末卖2价(K线图)或该笔TICK时刻的卖2价(Tick图)。
用法:
L2_ASK2K线图时返回当前秒周期最后时刻的卖2价。
TICK图时返回该笔TICK时刻的卖2价。
L2_ASK3
取秒周期末卖3价(K线图)或该笔TICK时刻的卖3价(Tick图)。
用法:
L2_ASK3K线图时返回当前秒周期最后时刻的卖3价。
TICK图时返回该笔TICK时刻的卖3价。
L2_ASK4
取秒周期末卖4价(K线图)或该笔TICK时刻的卖4价(Tick图)。
用法:
L2_ASK4K线图时返回当前秒周期最后时刻的卖4价。
TICK图时返回该笔TICK时刻的卖4价。
L2_ASK5
取秒周期末卖5价(K线图)或该笔TICK时刻的卖5价(Tick图)。
用法:
L2_ASK5K线图时返回当前秒周期最后时刻的卖5价。
TICK图时返回该笔TICK时刻的卖5价。
L2_BIDVOL1
取秒周期末买1量(K线图)或该笔TICK时刻的买1量(Tick图)。
用法:
L2_BID1K线图时返回当前秒周期最后时刻的买1量。
TICK图时返回该笔TICK时刻的买1量。
L2_BIDVOL2
取秒周期末买2量(K线图)或该笔TICK时刻的买2量(Tick图)。
用法:
L2_BID2K线图时返回当前秒周期最后时刻的买2量。
TICK图时返回该笔TICK时刻的买2量。
L2_BIDVOL3
取秒周期末买3量(K线图)或该笔TICK时刻的买3量(Tick图)。
用法:
L2_BID3K线图时返回当前秒周期最后时刻的买3量。
TICK图时返回该笔TICK时刻的买3量。
L2_BIDVOL4
取秒周期末买4量(K线图)或该笔TICK时刻的买4量(Tick图)。
用法:
L2_BID4K线图时返回当前秒周期最后时刻的买4量。
TICK图时返回该笔TICK时刻的买4量。
L2_BIDVOL5
取秒周期末买5量(K线图)或该笔TICK时刻的买5量(Tick图)。
用法:
L2_BID5K线图时返回当前秒周期最后时刻的买5量。
TICK图时返回该笔TICK时刻的买5量。
L2_ASKVOL1
取秒周期末卖1量(K线图)或该笔TICK时刻的卖1量(Tick图)。
用法:
L2_ASK1K线图时返回当前秒周期最后时刻的卖1量。
TICK图时返回该笔TICK时刻的卖1量。
L2_ASKVOL2
取秒周期末卖2量(K线图)或该笔TICK时刻的卖2量(Tick图)。
用法:
L2_ASK2K线图时返回当前秒周期最后时刻的卖2量。
TICK图时返回该笔TICK时刻的卖2量。
L2_ASKVOL3
取秒周期末卖3量(K线图)或该笔TICK时刻的卖3量(Tick图)。
用法:
L2_ASK3K线图时返回当前秒周期最后时刻的卖3量。
TICK图时返回该笔TICK时刻的卖3量。
L2_ASKVOL4
取秒周期末卖4量(K线图)或该笔TICK时刻的卖4量(Tick图)。
用法:
L2_ASK4K线图时返回当前秒周期最后时刻的卖4量。
TICK图时返回该笔TICK时刻的卖4量。
L2_ASKVOL5
取秒周期末卖5量(K线图)或该笔TICK时刻的卖5量(Tick图)。
用法:
L2_ASK5K线图时返回当前秒周期最后时刻的卖5量。
TICK图时返回该笔TICK时刻的卖5量。
L2_PRICE
取Tick图中该笔TICK的成交价。
用法:
L2_PRICE返回TICK图中该笔TICK的成交价。
L2_VOLUME
取TICK图中该笔TICK的成交量。
用法:
L2_VOLUME返回TICK图中该笔TICK的成交量。
ASKBIGVOLPRICE
TICK图中该笔Tick盘口中空头满足大单条件的与最新价的最近价格。
用法:
ASKBIGVOLPRICE返回TICK图中该笔Tick盘口满足大单条件的与最新价的最近价格,注模型中需调用一次CALVOLPRICELIST函数
BIDBIGVOLPRICE
TICK图中该笔Tick盘口中多头满足大单条件的与最新价的最近价格。
用法:
BIDBIGVOLPRICE返回TICK图中该笔Tick盘口满足大单条件的与最新价的最近价格,注模型中需调用一次CALVOLPRICELIST函数
CALVOLPRICELIST
TICK图中初始化盘口大单价格表,主要在BIDBIGVOLPRICE与ASKBIGVOLPRICE前使用,提供初始化。
用法:
CALVOLPRICELIST
L2_SETBIGVOL
设置大单成交手数阈值
用法:
L2_SETBIGVOL(nVol)成交手数大于nVol的为大单,
例:
L2_SETBIGVOL(10);
情数据引用
GETPRICE(N)
根据文华码取出某一品种的最新价。
例:
GETPRICE(1209);返回文华码为1209的合约品种的最新价。
4.金融统计
BACKSET(X,N)
若X条件成立,则将当前位置到N周期前的数值设为1。
『未来函数』
例:
BACKSET(CLOSE>OPEN,3);表示当K线收阳时,自当前位置到3周期前的数值设为1
BARSLAST(X)
求上一次条件成立到当前的周期数。
COUNT(X,N)
表示统计在N周期内满足X条件的周期数。
如果N为0则表示从已申请到的数据的第一天开始算起。
例:
WR:
=-100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N));COUNT(WR>80,5);表示统计在5个周期内满足WR>80的次数
DMA(X,A)
返回X的动态移动平均,其中A为常数,并且必须介于0及1之间。
计算方法:
DMA(N)=DMA(N-1)*(1-A)+X(N)*A其中DMA(N-1)为第(N-1)天的DMA值。
EMA(X,N)
表示求X在N周期内的平滑移动平均。
(指数加权)
计算方法:
EMA(X,N)=[2*X+(N-1)*EMA(X,(N-1))]/(N+1)其中EMA(X,(N-1))为第(N-1)天的EMA值
EMA2(X,N)
表示求X在N周期内的加权平均。
(线性加权)
计算方法:
EMA2(X,N)=(N*X0+(N-1)*X1+(N-2)*X2+...+1*XN-1)/(N+(N-1)+(N-2)+...+1),X0表示本周期值,X1表示上一周期值...
HHV(X,N)
得到X在N周期内的最高值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:
HHV(HIGH,13);求13个周期内的最高价的最大值。
HHVBARS(X,N)
得到X在N周期内的最高值位置到当前的周期数。
如果N=0,则从本地数据的第一个有效周期开始算起。
例:
HHVBARS(VOL,0);求历史成交量最大的周期到当前的周期数
LLV(X,N)
得到X在N周期内的最小值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:
LLV(LOW,25);表示求25个周期内最低价的最小值
LLVBARS(X,N)
得到X在N周期内的最小值的位置到当前的周期数。
如果N=0则从本地数据的第一个有效周期开始算起。
例:
LLVBARS(VOL,0);求历史成交量最小的周期到当前的周期数
MA(X,N)
求X在N周期内的简单移动平均。
计算方法:
MA=(A1+A2+A3+A4+A5)/5求A在5个周期内的简单移动平均
SLOPE(X,N)
求线型回归的斜率。
用法:
SLOPE(X,N)得到X的N周期的线型回归的斜率。
例:
SLOPE(CLOSE,5);表示求收盘价5个周期线性回归线的斜率
ZIGZAG(X,P,N)
之字转向,当X变化量超过P时转向,当N取1,P为百分比数;当N取0,P为价位差值绝对值。
『未来函数』
例:
ZIGZAG(HIGH,10,1);表示最高价的10%的之字转向
ZIGZAG(MA(HIGH,34),100,0);表示34个周期内最高价均线的100个价位的之字转向
PEAK(X,P,M,N)
取得ZIGZAG前M个波峰的值。
其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。
『未来函数』
例:
PEAK(HIGH,10,1,1);表示最高价的10%的之字转向的上一个波峰的数值;
PEAK(MA(HIGH,34),100,1,0);表示34个周期内最高价均线的100个价位的之字转向的上一个波峰的数值
PEAKBARS(X,P,M,N)
取得ZIGZAG前M个波峰到当前周期的周期数。
其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。
『未来函数』
例:
PEAKBARS(HIGH,10,1,1);表示最高价的10%的之字转向的上一个波峰到当前的周期数
PEAKBARS(MA(HIGH,34),100,1,0);表示34个周期内最高价均线的100个价位的之字转向的上一个波峰到当前的周期数
TROUGH(X,P,M,N)
取得ZIGZAG前M个波谷的值。
其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。
『未来函数』
例:
TROUGH(LOW,10,1,1);表示最低价的10%的之字转向的上一个波谷的数值
TROUGH(MA(LOW,34),100,1,0);表示34个周期内最低价均线的100个价位的之字转向的上一个波谷的数值
TROUGHBARS(X,P,M,N)
取得ZIGZAG前M个波谷到当前周期的周期数。
其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。
『未来函数』
TROUGH(LOW,10,1,1);表示最低价的10%的之字转向的上一个波谷到当前的周期数
TROUGH(MA(LOW,34),100,1,0);表示34个周期内最低价均线的100个价位的之字转向的上一个波谷到当前的周期数
SAR(N,Step,Max)
得到抛物转向值。
N为计算周期,Step为步长,Max为极值。
(系统函数,计算步骤后台自动完成)
例:
SAR(17,,;表示计算17个周期抛物转向,步长为3%,极限值为30%
SMA(X,N,M)
得到X在N个周期内的移动平均,M为权重(M为常数)。
计算方法:
SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/N
STD(X,N)
求标准差。
用法:
STD(X,N)求X在N个周期内的标准差。
STDP(X,N)
求总体标准差。
用法:
STDP(X,N)为X的N日总体标准差。
SUM(X,N)
得到X在N周期内的总和,如果N=0,则从第一个有效周期开始算起。
例:
SUM(VOL,10);表示统计10周期内的成交量总和
SUMBARS(X,A)
得到X向前累加直到大于A时的周期数。
TRMA(X,N)
求X在N周期内的三角移动平均。
TSMA(X,N)
求X在N周期内的时间序列移动平均。
计算方法:
TSMA(X,N)=FOCAST(X,N)+SLOPE(X,N)
5.数理统计
AVEDEV(X,N)
求X在N周期内的平均绝对偏差
DEVSQ(X,N)
数据偏差平方和。
FORCAST(X,N)
得到X的N周期线性回归预测值。
例:
FORCAST(CLOSE,5);表示求5周期线性回归预测
VAR(X,N)
得到X在N周期内的样本方差
VARP(X,N)
得到X在N周期内的总体样本方差
数理统计举例说明:
设一个数列,数列中数据的总个数为N,以今天(2005-10-14)五天内的A0605收盘价为例,N就为5。
数列的内容为:
{2766,2805,2814,2886,2885}。
1、算术平均值MA(CLOSE,5):
数据总和除以总个数N。
(2766+2805+2814+2886+2885)/5=。
可以用公式MA(CLOSE,5),从今天的值上看出。
2、偏差:
每个数据,减去算术平均值的结果。
=,=,=,=,=,各偏差相加,应该是等于0的。
3、平均绝对偏差AVEDEV(X,N):
将偏差的绝对值相加,除以总个数N。
++++/5=
4、数据偏差平方和DEVSQ(X,N):
将偏差的平方相加。
2+2+2+2+2=
5、总体样本方差VARP(X,N):
将偏差的平方相加,总和除以总个数N。
用公式可以这样算:
2+2+2+2+2/5=
6、样本方差VAR(X,N):
是总体方差的N/(N-1)倍。
*5/(5-1)=估算样本方差,总比总体样本方差大一点,当N够大时,两者趋于相等。
6.逻辑判断
BETWEEN(A,B,C)
判断条件“A位于B及C之间”是否成立,如果条件成立则返回1(yes),否则返回0(no)。
例:
BETWEEN(CLOSE,MA5,MA40);表示收盘价介于5日均线与40日均线之间。
CROSS(X,Y)
表示X上穿Y。
例:
CROSS(CLOSE,MA(CLOSE,5));表示收盘线从下方向上穿过5日均线
CROSS2(A,B)
两条线交叉。
用法:
CROSS2(A,B)表示当A从下方向上穿过B两次时返回1(Yes),否则返回0(No)
例:
CROSS2(CLOSE,MA(CLOSE,5));表示收盘线从下方向上穿过5日均线两次
FILTER(COND,N)
过滤连续出现的信号。
用法:
FILTER(COND,N)当COND条件成立时,将其后N周期内的数据置为0。
例:
FILTER(CLOSE>OPEN,3)查找阳线,3天内再次出现的阳线不被记录在内
注:
不能与BKPRICE,BARSBK,SKPRICE,BARSSK一起使用
EXIST(COND,N)
判断N个周期内是否有满足条件COND的情况发生。
例:
EXIST(CLOSE>REF(HIGH,1),10);表示10个周期中是否存在收盘价大于前一个周期的最高价
EVERY(COND,N)
判断过去N个周期内是否一直满足条件COND。
例:
EVERY(CLOSE>OPEN,5);表示5个周期内一直是阳线
LAST(COND,N1,N2)
判断过去N1到N2周期内是否一直满足条件COND。
例:
LAST(CLOSE>OPEN,10,5);表示从过去第10个周期到第5个周期内一直是阳线
LONGCROSS(A,B,N)
如果A在前N个周期内都小于B,本周期上穿B,则返回1。
否则返回0。
例:
LONGCROSS(CLOSE,MA(CLOSE,10),20);表示收盘线在10日均线之下持续20周期后从下向上穿过10日均线
NOFILTER
交易模型买卖指令信号过滤函数。
(仅适用于交易模型的过滤)
交易模型公式后加“NOFILTER;”是指不需要过滤,出现任何交易指令都会执行。
公式后不加“NOFILTER;”是指当连续出现同方向的交易指令时,系统只显示出第一个交易指令,其他交易指令自动被过滤。
IFELSE(C,A,B)
如果条件C成立则取A值,否则取B值
例:
A:
=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(CROSS(D,K),2,0));当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
A=1,BPK;
学运算
ABS(X)
求X的绝对值
例:
ABS(SAR(17,,);返回抛物转向SAR(17,,的绝对值。
ACOS(X)
求X的反余弦值
ASIN(X)
求X的反正弦值
ATAN(X)
求X的反正切值
COS(X)
返回X的余弦值
EXP(X)
返回e的X次幂
CUBE(X)
返回X的三次方。
CEILING(X)
向上舍入,返回沿X数值增大方向最接近的整数。
FLOOR(X)
向下舍入,返回沿X数值减小方向最接近的整数。
INTPART(X)
取X的整数部分,返回沿X绝对值减小方向最接近的整数。
LN(X)
得到X的自然对数,以e为底的对数。
例:
LN(OPEN);求开盘价的自然对数。
LOG(X)
得到X的常用对数,取得X的以10为底的对数。
例:
LOG(OPEN);求开盘价的以10为底的对数。
MAX(A,B)
求A,B中的较大者。
例:
MAX(CLOSE-OPEN,0);表示若收盘价大于开盘价返回它们的差值,否则返回0。
MIN(A,B)
求A,B中的较小者。
例:
MIN(OPEN,CLOSE);返回开盘价和收盘价中的较小值。
MOD(A,B)
返回A对B得到模。
例:
MOD(CLOSE,500);收盘价除以500所得余数
NOT(X)
当X为0时返回1,否则返回0。
例:
NOT(TIME=090530);表示该周期对应的时间不是9:
05:
30AM。
POW(A,B)
得到A的B次幂。
例:
POW(CLOSE,2);求得收盘价的2次方。
REVERSE(X)
取反,返回符号相反的数值。
例:
REVERSE(LOW);返回-LOW。
RANGE(A,B,C)
表示A大于B同时小于C时返回1,否则返回0
SGN(X)
得到X的符号,如果X>0则返回1,如果X<0则返回-1,否则返回0。
SIN(X)
得到X的正弦值。
SQRT(X)
得到X的平方根。
例:
SQRT(CLOSE);收盘价的平方根。
SQUARE(X)
得到X的平方。
例:
SQUARE(CLOSE);收盘价的平方。
TAN(X)
得到X的正切值。
8.时间函数
BARPOS
取得当前K线的位置。
DATE
取得当前周期的日数(700101-341231)。
DAY
取得当前周期的日数(1-31)。
HOUR
取得当前周期的小时数(0-23)。
MINUTE
取得当前周期的分钟数(0-59)。
MONTH
取得当前周期的月数(1-12)。
TIME
取得当前周期的时间数(0-2359),秒级周期返回值范围为:
0-235959。
WEEKDAY
取得当前周期的星期数(0-6)。
YEAR
取得当前周期的年数(1970-2034)。
9.绘图
BACKGROUNDSTYLE(i)
设置背景的样式。
用法:
BACKGROUNDSTYLE(i)设置背景的样式。
i=0或1。
DRAWLINE(C1,P1,C2,P2,COLOR)
当条件C1及C2均满足时,从P1画直线到P2,颜色为COLOR。
例:
DRAWLINE(MA18