文华财经 程序化指标
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)简介
(二)函数分类
1、引用数据
A VPRICE 引用均价(在盘后对于国内三个期货交易所指结算价)
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个周期的收盘价
VOL 引用成交量,也可简写为V。
GETPRICE(N) 根据文华码取出某一品种的最新价。
例子:
GETPRICE(1209);返回文华码为1209的合约品种的最新价。
2、金融统计
BACKSET(X,N) 若X条件成立,则将当前位置到N周期前的数值设为1。
『未来函数』例:BACKSET(CLOSE>OPEN,3);表示当K线收阳时,自当前位置到3周期前的数值设为1 该函数参数支持变量计算如BACKSET(CLOSE>OPEN,V AR1);//V AR1是变量
BARSLAST(X) 求上一次条件成立到当前的周期数。
例:
BARSLAST(X):上一次满足X条件到现在的K线根数。
如果本根K线满足X条件,则BARSLAST(X)返回0.
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,N) 返回X的动态移动平均,其中N必须介于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)/(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个周期内的简单移动平均
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,0.03,0.3);表示计算17个周期抛物转向,步长为3%,极限值为30%。
SMA(X,N,M) 得到X在N个周期内的移动平均,M为权重(M为常数)。
计算方法:SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/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)。
3、数理统计
A VEDEV(X,N) 求X在N周期内的平均绝对偏差。
DEVSQ(X,N) 数据偏差平方和。
FORCAST(X,N) 得到X的N周期线性回归预测值。
例:FORCAST(CLOSE,5);表示求5周期线性回归预测
SLOPE(X,N) 得到X在N周期内的线性回归的斜率
例:SLOPE(CLOSE,5);表示求5周期线性回归线的斜率
STD(X,N) 得到X在N周期内的标准差
STDP(X,N) 得到X在N周期内的总体标准差
V AR(X,N) 得到X在N周期内的样本方差
V ARP(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=2831.20。
可以用公式MA(CLOSE,5),从今天的值上看出。
2、偏差:每个数据,减去算术平均值的结果。
2766-2831.20=-65.2,2805-2831.20=-26.2, 2814-2831.20=-17.2, 2886-2831.20=54.8, 2885-2831.20=53.8, 各偏差相加,应该是等于0的。
3、平均绝对偏差A VEDEV(X,N):将偏差的绝对值相加,除以总个数N。
(65.2+26.2+17.2+54.8+53.8)/5=43.44。
4、数据偏差平方和DEVSQ(X,N):将偏差的平方相加。
(-65.2)2+ (-26.2)2+ (-17.2)2+ (54.8)2+ (53.8)2=11130.80。
5、总体样本方差V ARP(X,N):将偏差的平方相加,总和除以总个数N。
用公式可以这样算:(-65.2)2+ (-26.2)2+ (-17.2)2+ (54.8)2+ (53.8)2/5=2226.16。
6、样本方差V AR(X,N):是总体方差的N/(N-1)倍。
2226.16*5/(5-1)=2782.70 估算样本方差,总比总体样本方差大一点,当N够大时,两者趋于相等。
7、总体标准差STDP(X,N):方差的开方。
[(-65.2)2+ (-26.2)2+ (-17.2)2+ (54.8)2+ (53.8)2/5]?=47.18。
8、标准差STD(X,N):估算样本方差的开方。
[2226.16*5/(5-1)]?=52.75 同样,估算标准差也比总体标准差大一点,当N够大时,两者趋于相等。
4、逻辑判断
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日均线
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 交易模型买卖指令信号过滤函数。
(仅适用于交易模型的过滤)
设置模型对产生的交易指令不过滤,则出现的任何交易指令都会执行,如果没有设置“不过滤”,则产生的指令将按照如下规则过滤:
1.连续的同方向指令只有第一个有效,其他的将被过滤;
2.交易指令必须配对出现(例如:前面已经有了买开指令,则后面只允许出现卖平指令,其他的指令都被滤掉。
这也就意味着,第一个指令只能是买开或者卖开指令,其他的都被过滤);
3.但是在进行模型效果测试及优化时,无论设置过滤与否,都按照前面的规则对指令进行了过滤。
IFELSE(C,A,B) (08版等以前版本里用IF函数表示)。
如果条件C成立则返回A值,否则返回B值.
例:IFELSE(CLOSE>REF(CLOSE,1),1,0);
表示若今日收盘价高于前一日收盘价,则返回1,否则返回0
ISDOWN判断该周期是否收阴。
ISEQUAL 判断该周期是否平盘。
ISUP 判断该周期是否收阳。
ISLASTBAR 判断当前周期是否为最后一根K线。
例:ISLASTBAR; 如果是最后一个K线返回1(Yes),否则返回0(No)。
V ALUEWHEN(COND,DATA) 当条件COND满足时,取当时的DATA的值,否则取得前面一个满足条件COND的值。
例:V ALUEWHEN(HIGH>REF(HIGH,5),HIGH);
表示当前最高价大于前五个周期最高价的最大值时返回当前最高价。
5、数学运算
ABS(X) 求X的绝对值
例:ABS(SAR(17,0.03,0.3));返回抛物转向SAR(17,0.03,0.3)的绝对值。
ACOS(X) 求X的反余弦值
ASIN(X) 求X的反正弦值
ATAN(X) 求X的反正切值
COS(X) 返回X的余弦值
EXP(X) 返回e的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,OPEN);收盘价除以开盘价所得余数
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。
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的正切值。
6、时间函数
BARPOS 取得当前K线的位置。
DA TE 取得当前周期的日数(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)。
7、绘图
DRAWLINE(C1,P1,C2,P2,COLOR) 当条件C1及C2均满足时,从P1画直线到P2,颜色为COLOR。
例:
DRAWLINE(MA18<CLOSE,OPEN,MA5>CLOSE,CLOSE,COLORCY AN);
表示当收盘价大于18日均线并且小于5日均线时,从开盘价画青色直线到收盘价。
DRAWTEXT(C,P,TEXT) 表示当条件C满足时在P上写TEXT文字。
例:DRAWTEXT(CLOSE< OPEN&&REF(CLOSE,1)< REF(OPEN,1) &&REF(VOL,1)*1.1< VOL,LOW,'注');
表示连续两日收阴并且成交量比前一日至少多10%时,在最低价上写“注”字。
DRAWSL
(COND,DATA,SLOPE,LEN,EXPAND,COLOR) 画斜线,当条件COND满足时,从DATA开始以每个周期相差SLOPE个点的斜率画斜线,划线长度为LEN个周期,EXPAND为线段的延长方式(0:不延伸;1:向左延伸;2:向右延伸;3:双向延伸)。
例:DRAWSL(LOW=LLV(LOW,50),LOW,5,3,2,COLORRED);
表示当前最低价等于50周期内的最小值时,从当前最小值开始以每隔5个点的斜率画长度为3个周期向右延伸的斜线,颜色为红色。
DRAWNUMBER
(COND,DATA,NUMBER,PRECISION,COLOR) 画数字。
当条件COND满足时,在DATA位置写数字NUMBER(为数组),精度为PRECISION(小数点后有几位数字)。
例:DRAWNUMBER(CLOSE/OPEN>1.08,HIGH,(CLOSE-OPEN)/OPEN*100,2,COLORRED);
表示当日涨幅大于8%时在最高价位置显示涨幅(相对开盘价的百分比)。
FILLRGN
(COND,DATA1,DA TA2,COLOR) 填充区域,当条件COND满足时,填充DATA1及DATA2包围的区域。
例:FILLRGN(MA5>MA10,MA5,MA10,COLORRED);
表示MA5>MA10时以红色填充MA5和MA10之间的区域。
POL YLINE
(COND,DATA,COLOR) 画折线,当条件COND满足时,连接各个DATA点。
例:POL YLINE(CLOSE>=HHV(CLOSE,100),CLOSE,COLORRED);
表示在收盘价创100天新高点之间画折线。
PARTLINE
(COND,DATA,COLOR) 画线段,条件COND满足时,以COLOR颜色的直线连接DA TA各点。
例:PARTLINE(HIGH>REF(HIGH,1),HIGH,COLORRED);
表示当期最高价大于前期最高价用红色绘制最高价线段。
STICKLINE
(C,P1,P2,COLOR,EMPTY) 如果条件C满足时,从P1到P2画柱线,颜色为Color,如果Empty 取1,则为空心柱;如果Empty取0,则为实心柱。
例:STICKLINE(OPEN-CLOSE>0,OPEN,CLOSE,COLORCYAN,0);
表示当开盘价大于收盘价时,从开盘价到收盘价画青色的实心柱,即K线阴线的实体部分。
VERTLINE
(COND,COLOR) 画垂直线,当条件COND满足时,画垂直线。
例:VERTLINE(HIGH>=HHV(HIGH,30),COLORRED);
表示在价格创30天新高时画垂直线。
8、08版本与09版本函数区别
08版本函数09版本函数
SETTLE 日线周期只有盘后才能引用当日的结算价。
其他周期计算结果等同于A VPRICE 引用结算价(如果用在周期小于'日'的K线上如5分钟K线,一小时k线,每根k线返回的值表示这根k线当日开盘时到这根k线的为止的结算价(均价)
如果用在周期大于等于'日'的K线上,返回当根K线结束时间所在日的结算价.) BACKSET(X,N) 『未来函数』函数参数不支持变量计算函数参数支持变量计算如:BACKSET(CLOSE>OPEN,V AR1);//V AR1是变量
DMA 函数参数不支持变量计算DMA(X,N)返回X的动态移动平均,其中N必须介于0及1之间。
N 支持变量。
计算方法:DMA(N)=DMA(N-1)*(1-A)+X(N)*A
其中DMA(N-1)为第(N-1)天的DMA值。
HHV(X,N) 函数参数N不支持变量计算函数参数N支持变量计算
LLV(X,N) 函数参数N不支持变量计算函数参数N支持变量计算
COUNT(X,N) 函数参数N不支持变量计算函数参数N支持变量计算
09版本新增函数:
GETPRICE(N) 根据文华码取出某一品种的最新价。
例:
GETPRICE(1209);返回文华码为1209的合约品种的最新价。
RGB(R,G,B) 自定义颜色函数。
R,G,B的数值范围都在0~255之间,例:RGB(225,225,225)表示白色
PARAM[参数名称,最小值,最大值,缺省值] 在源码中定义参数。
例:PARAM[N,1,100,12]
MAN:MA(CLOSE,N);
表示参数为N,最小值为1,最大值为100,缺省值为12.
IF(COND)
A,COLOR;
ELSE
B, COLOR; 条件循环函数。
多层次循环时使用“{}”套用。
例:取得MA5、MA10、MA30三者中最大的数值
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA30:=MA(CLOSE,30);
IF(MA5>MA10)
MA5,COLORRED;
ELSE
{
IF(MA10>MA30)
MA10,COLORMAGENTA;
ELSE
MA30,COLORGREEN;
}
注意:区别于IFELSE函数,为了使多层次套用看的清楚,以上示例中将“{}”单独空行,实际使用中可以不必这样使用。
#IMPORT [CODE,PERIOD,FORMULA] AS V AR 跨周期、跨合约取数据函数。
语句格式:
#IMPORT [CODE,PERIOD,FORMULA] AS V AR
CODE 文华码
(文华码见/guide/guide.htm 其他—>期货品种代码表)PERIOD 被引用的周期
FORMULA 被引用指标名称
例:引用[豆粕1005]合约日K线图周期的指标[KDJ.FML] 中K值、D值:
#IMPORT [1205,DAY,KDJ] AS V ARKDJ
K1:KDJ.K;
D1:KDJ.D;
注意点:
1.只能引用一个当前存在的‘.FML文件’(指标文件)中的变量,不支持同时引用多个指标和多个周期。
2.只能引用如下周期MIN1 MIN3 MIN5 MIN10 MIN15 MIN30 HOUR1 HOUR3 HOUR8 DAY WEEK MONTH;
3.只能短周期引用长周期指标数据,分钟周期上可引用小时、日周期数据,不能日线周期上加载引用分钟数据的指标;
4.被引用的指标中不能存在引用。
5.如果不写文华码,默认引用当前合约。
模型注释符号在2009版本中修改为“//”。
2008版本中模型注释语句使用在2009版本中时在{}前面增加//即可。
(三)编辑平台可以使用的常数
常数意义
COLORRED 红色
COLORGREEN 绿色
COLORBLUE 蓝色
COLORMAGENTA 紫色
COLORYELLOW 黄色
COLORLIGHTGREY 浅灰色
COLORLIGHTRED 浅红色
COLORLIGHTGREEN 浅绿色
COLORLIGHTBLUE 浅蓝色
COLORBLACK 黑色
COLORWHITE 白色
COLORCYAN 青色
COLORSTICK 画彩色柱线
VOLUMESTICK 画成交量线
BAMBOOLINE 画竹线
CIRCLEDOT 画圆
OPISTICK 画持仓量柱线
RGB(R,G,B) 自定义颜色函数。
R,G,B的数值范围都在0~255之间。
例:RGB(225,225,225)表示白色
PARAM[参数名称,最小值,最大值,缺省值] 在源码中定义参数。
例:PARAM[N,1,100,12]
MAN:MA(CLOSE,N);
表示参数为N,最小值为1,最大值为100,缺省值为12.
注意:在公式内即使你定义了某种颜色,在显示的时候也未必是此种颜色,取决于背景颜色当前页面里是否保了该指标的颜色及您是否在显示的时候改变了该指标的颜色设置。
欢迎交流:
QQ:419549257
Q群:138709040
(四)编辑平台的语法
1、关于公式名称:
公式的名称不可以和已经存在的公式重复。
2、关于参数:
每个自编公式最多可以定义四个参数,参数的定义如下,首先是参数名称,然后是参数的最小值,最大值,最后是参数的默认值。
在定义参数时要注意的是参数名称不可以重复。
3、关于变量名称:
变量名称不可以互相重复,不可以和参数名重复,不可以和函数名称重复。
4、关于公式内容:
公式的每个语句应该以分号结束,包括最后一条语句。
在数据公式的时候请您注意一定要使用半角输入。
在编写公式的过程中,如果您不记得某个函数的确切写法,可以选择插入函数来插入函数。
5、如果您在编写公式之后,想给这个公式加上注释,说明之类的东西,可以使用公式说明来输入。
(五)编辑平台使用的交易指令
交易模型中的交易指令如下:
图示指令意义
BK 买开指令
BP 买平指令
SK 卖开指令
SP 卖平指令
BPK 买平同时等价等量买开指令
SPK 卖平同时等价等量卖开指令
套利模型中的交易指令如下:
图示指令意义
BKSK 甲合约买开;乙合约卖开信号
BPSP 甲合约买平;乙合约卖平信号
SKBK 甲合约卖开;乙合约买开信号
SPBP 甲合约卖平;乙合约买平信号
请注意,在效果测试使用如下机制:
连续的开仓指令只使用第一个指令进行开仓,开仓时使用当时的全部资金,连续的平仓指令,只有第一个有效,平掉当时的全部持仓,其他的平仓指令算做错误指令!
(六)快速入门
1、如何把熟悉的技术指标转换成交易模型?
第一步:把KDJ指标公式COPY过来。
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//{算出(收盘价-N周期内的最低价)/(N周期的最高价—N周期内的最低价)*100的值,用RSV来表示。
} BACKGROUNDSTYLE(1);{确定背景的样式,(钝化)}
K:SMA(RSV,M1,1),COLORWHITE;//{RSV的移动加权平均的值用K表示,并且画白色的线。
}
D:SMA(K,M2,1),COLORYELLOW;//{K的移动加权平均的值用D表示,并且画黄色的线。
} J:3*K-2*D,COLORMAGENTA;//{3倍的K减去2倍的D的值用J表示,并且画紫色的线。
}
第二步:原有公式主要是画线,所以稍作修改。
如下:
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//{第一行不需要修改}
//{第二行删除,在交易模型中不用钝化}
K:=SMA(RSV,M1,1);//{在“:”后加上“=”变为只定义不用画线,所以把后面的颜色函数(COLORWHITE)也去掉}
D:=SMA(K,M2,1);//{同上}
J:=3*K-2*D;//{同上}
第三步:把自己总结的交易条件写上,就可完成交易模型。
如下:
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M2,1);
J:=3*K-2*D;
CROSS(K,D),BK;//{K向上穿越D,发出买开交易指令}
CROSS(J,100),SP;//{J向上穿越100,发出卖平交易指令}
CROSS(D,K),SK;//{K向下穿越D,发出卖开交易指令}
CROSS(0,J),BP;//{J向下穿越0,发出买平交易指令}
//后为文字说明,编写模型时不用写出
2、如何编制交叉(金叉/死叉)类型的交易模型?
MA5:=MA(CLOSE,5);//{5个周期收盘价的简单移动平均}
MA10:=MA(CLOSE,10);//{10个周期收盘价的简单移动平均}
MA20:=MA(CLOSE,20);//{20个周期收盘价的简单移动平均}
CROSS(MA10,MA20),BK;//{当MA10上穿MA20时,发出买入开仓交易指令}
CROSS(MA10,MA5),SP;//{当MA10上穿MA5时,发出卖出平仓交易指令}
CROSS(MA20,MA10),SK;//{当MA20上穿MA10时,发出卖出开仓交易指令}
CROSS(MA5,MA10),BP;//{当MA5上穿MA10时,发出买入平仓交易指令} //后为文字说明,编写模型时不用写出}
3、如何编制多条件类型的交易模型?
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;//{以上为KDJ公式}
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);//{以上为定义5个周期收盘价的简单移动平均和10个周期收盘价的简单移动平均}
(CROSS(MA5,MA10)&&REF(J,1)<70)||(CROSS(K,D)&&J<30),BK;//{5周期均线上穿10周期均线并且前一个周期的J值(KDJ)少于70或者KD金叉时并且J值小于30时发出买入开仓交易指令}
CROSS(D,K)&&REF(J,1)>70,SP;//{KD出现死叉并且前一个周期J值大于70时发出卖出平仓交易指令}
(CROSS(MA10,MA5)&&REF(J,1)>30)||(CROSS(D,K)&&J>70),SK;//{5周期均线下叉10周期均线并且前一个周期的J值(KDJ)大于30或者KD死叉时并且J值大于70时发出卖出开仓交易指令}
CROSS(K,D)&&REF(J,1)<30,BP;//{KD出现金叉并且前一个周期J值小于30时发出买入平仓交易指令} {{}内为文字说明,编写模型时不用写出}
4、如何编制REF(X,N)类型的交易模型?
A:=OPEN-(((REF(HIGH,1)-REF(LOW,1))+(REF(HIGH,2)-REF(LOW,2))+(REF(HIGH,3)-REF
(LOW,3))+(REF(HIGH,4)-REF(LOW,4)))/4)*1.8;//{A=当前周期的开盘价-[ (一个周期前的最高价减最低价的差+两个周期前的最高价减最低价的差+三个周期前的最高价减最低价的差+四个周期前的最高价减最低价的差)/4]*1.8 }
REF(CLOSE,1)< REF(CLOSE,2)&&REF(CLOSE,2)< REF(CLOSE,3)&&REF(CLOSE,3)< REF(CLOSE,4)&&CLOSE >A,BPK;//{连续四个周期的收盘价小于前一周期的收盘价并且当前周期的收盘价大于A时,发出买平并且买开(反手)交易指令}
REF(CLOSE,1)>REF(CLOSE,2)&&REF(CLOSE,2) >REF(CLOSE,3)&&REF(CLOSE,3)>REF( CLOSE,
4)&&CLOSE<=A,SPK;//{连续四个周期的收盘价大于前一周期的收盘价并且当前周期的收盘价小于等于A时,发出卖平并且卖开(反手)交易指令}{{}内为文字说明,编写模型时不用写出}
5、如何编制价差类型的交易模型?
MA5:=MA(CLOSE,5);//{5个周期收盘价的简单移动平均}
MA10:=MA(CLOSE,10);//{10个周期收盘价的简单移动平均}
CROSS(MA10,MA5)||(CLOSE-MA5)>8,SK;//{10周期均线上穿5周期均线或者收盘价与5周期均线的差值大于8时,发出卖出开仓交易指令}
(MA5-CLOSE)>6,BP;//{5周期均线与收盘价的差值大于6时,发出买入平仓交易指令} CROSS(MA5,MA10)||(MA5-CLOSE)>8,BK;//{5周期均线上穿10周期均线或者收盘价与5周期均线的差值大于8时,发出买入开仓交易指令}
(CLOSE-MA5)>6,SP;//{收盘价与5周期均线的差值大于6时,发出卖出平仓交易指令}{{}内为
文字说明,编写模型时不用写出}
6、如何编制简单价差类型的套利模型?
CROSS(300,CLOSE),BKSK; //{CLOSE为两个品种的价差。
当价差小于300时,买入开仓前一品种,卖出开仓后一品种}
CROSS(CLOSE,500),SPBP;//{当价差大于500时,卖出平仓前一品种,买入平仓后一品种} CROSS(CLOSE,600),SKBK;//{当价差大于600时,卖出开仓前一品种,买入开仓后一品种} CROSS(400,CLOSE),BPSP;//{当价差小于400时,买入平仓前一品种,卖出平仓后一品种}
7、如何编制组合类型的套利模型?
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M2,1);
J:=3*K-2*D;//{以上为KDJ公式}
CLOSE<300&&CROSS(K,D),BKSK;//{当价差小于300并且K上穿D时,买入开仓前一品种,卖出开仓后一品种}
CROSS(CLOSE,500)||CROSS(D,K),SPBP;//{当价差上穿500或者D上穿K时,卖出平仓前一品种,买入平仓后一品种}
CLOSE>600&&CROSS(D,K),SKBK;//{当价差大于600并且D上穿K时,卖出开仓前一品种,买入开仓后一品种}
CROSS(400,CLOSE)||CROSS(K,D),BPSP;//{当价差下穿400或者K上穿D时,买入平仓前一品种,卖出平仓后一品种}
(七)技术指标模型大全
1 ADTM模型
DTM:=IFELSE(OPEN<=REF(OPEN,1),0,MAX((HIGH-OPEN),(OPEN-REF(OPEN,1)))); DBM:=IFELSE(OPEN>=REF(OPEN,1),0,MAX((OPEN-LOW),(OPEN-REF(OPEN,1)))); STM:=SUM(DTM,N);
SBM:=SUM(DBM,N);
ADTM:=IFELSE(STM>SBM,(STM-SBM)/STM,IFELSE(STM=SBM,0,(STM-SBM)/SBM)); ADTMMA:=MA(ADTM,M);
ADTMMA<P,BPK;
ADTMMA>Q,SPK;
2 ARBR模型
AR := SUM(HIGH-OPEN,N)/SUM(OPEN-LOW,N)*100;
BR := SUM(MAX(0,HIGH-REF(CLOSE,1)),N)/SUM(MAX(0,REF(CLOSE,1)-LOW),N)*100; (BR<AR && BR<100),BK;//BR比AR低,且指标处于低于100以下时,可考虑逢低买进。
(BR-REF(BR,M))>P && AR-REF(AR,M)<Q,SP;//M周期内BR急速上升,AR盘整小回时,应逢高卖出,及时了结。
3 ASI模型
LC:=REF(CLOSE,1);
AA:=ABS(HIGH-LC);
BB:=ABS(LOW-LC);
CC:=ABS(HIGH-REF(LOW,1));
DD:=ABS(LC-REF(OPEN,1));
R:=IFELSE(AA>BB&&AA>CC,AA+BB/2+DD/4,IFELSE(BB>CC&&BB>AA,BB+AA/2+DD/ 4,CC+DD/4));
X:=(CLOSE-LC+(CLOSE-OPEN)/2+LC-REF(OPEN,1));
SI:=16*X/R*MAX(AA,BB);
ASI:=SUM(SI,0);
ASI>REF(ASI,1),BPK;//当前周期ASI指标数值大于前一周期开多;
ASI<REF(ASI,1),SPK;//当前周期ASI指标数值小于前一周期开空。
4 ATR模型
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); ATR := MA(TR,N);
C>MA(C,10) && CROSS(TR,ATR) && ATR>REF(ATR,1) && ISDOWN,BK;//在上升通道中,ATR真实波幅向上时,且白线上穿黄线,此时K线收阴者买入开仓;
CROSS(MA(C,10),C),SP;//当价格下穿10周期均线平多仓。
5 B3612模型
B36 := MA(CLOSE,3)-MA(CLOSE,6);
B612 := MA(CLOSE,6)-MA(CLOSE,12);
B36<REF(B36,1) && B612<REF(B612,1) ,SPK;//本周期B36与B612分别大于前一周期B36与B612时平空开多;
B36>REF(B36,1) && B612>REF(B612,1) ,BPK;//本周期B36与B612分别小于前一周期B36与B612时平多开空。
6 BBI模型
BBI1:=(MA(CLOSE,N1)+MA(CLOSE,N2)+MA(CLOSE,N3)+MA(CLOSE,N4))/4;
MA54:=MA(C,54);//以MA54来判断当前价格处于高价区还是低价区。
C<MA54 && CROSS(C,BBI1),BPK;
C>MA54 && CROSS(BBI1,C),SPK;
7 BIAS模型
BIAS1 := (CLOSE-MA(CLOSE,L1))/MA(CLOSE,L1)*100;
BIAS1>M1 && MA(C,54)<REF(C,54) || BIAS1<M1 && MA(C,54)>REF(C,54),SK;
BIAS1<-1*P && MA(C,54)<REF(C,54) || BIAS1>P && MA(C,54)>REF(C,54),BP;
BIAS1<M2 && MA(C,54)<REF(C,54)|| BIAS1>M2 && MA(C,54)>REF(C,54),BK;
BIAS1>P && MA(C,54)<REF(C,54) || BIAS1<P && MA(C,54)>REF(C,54),SP;
8 BOLL模型
MID:=MA(CLOSE,N);
TMP2:=STD(CLOSE,M);
TOP:=MID+P*TMP2;
BOTTOM:=MID-P*TMP2;
A:=TOP-C;
B:=C-BOTTOM;
CROSS(C,BOTTOM),BPK;
CROSS(TOP,C),SPK;
9 CCI模型
TYP:=(CLOSE+HIGH+LOW)/3;
CCI:=(TYP-MA(TYP,N))/(0.015*A VEDEV(TYP,N));
CROSS(CCI,100),BK;//CCI从+100~-100的常态区,由下往上突破+100天线时,为买入开仓。
CROSS(100,CCI),SP;//CCI从+100天线之上,由上往下跌破天线时,为卖出平仓。
CROSS(100,CCI),SK;//CCI从+100~-100的常态区,由上往下跌破-100地线时,为卖出开仓。
CROSS(CCI,100),BP;//CCI从-100下方,由下往上突破-100地线时,为买入平仓。