21评论

1收藏

程序化交易的编写

avatar EA狙击手 | 7159 人阅读 | 21 人评论 | 2013-07-16

一、        程序化交易的编写
、交易模型编写规范和一般原则1、编辑平台支持的操作符
操作符
意义
加法
CLOSEOPEN 表示求收盘价及开盘价的和。
减法
CLOSEOPEN 表示求收盘价及开盘价的差。
*
乘法
CLOSE*OPEN 表示求收盘价及开盘价的积。
/
除法
CLOSE/OPEN 表示求收盘价及开盘价的商。
AND
(并且),也可简写为&&
OR
(或者), 也可简写为||
>
大于
CLOSE>OPEN 表示判断当前周期是否收阳。
<
小于
CLOSE=OPEN 表示判断当前周期是否平盘。
>=
大于等于
<=
小于等于
<>
不等于
=
等于
=
只定义一个局部变量
(这个变量在画图时是不画的)
TMP1:=(OPEN+CLOSE)/2;
:MA(TMP1,10);
上面的公式的第一个语句定义了一个局部变量TMP1,在下面一行中引用了这个局部变量,但是要注意的是这个公式在画图的时候只画了第二条语句MA10所求出的结果。
相反下面这个公式则需要画出两条线,第一条是自己定义的均价线,同时显示了均价的名称为AVP,第二条线是均价的简单移动平均线。
AVP:(OPEN+CLOSE)/2;
MA(AVP,10);
声明了一个变量,
在画图时画出它并且按这个名字显示。
2、编辑平台支持的函数
引用数据
AVPRICE
引用均价(在盘后对于国内三个期货交易所指结算价)
SETTLE
引用结算价(只有在日线周期盘后才能引用当日的结算价)
CLOSE
引用收盘价(在盘中指最新价),也可简写为 C
HIGH
引用最高价,也可简写为 H
LOW
引用最低价,也可简写为L
OPEN
引用开盘价,也可简写为O
OPI
引用持仓量
REF(X,N)
引用XN个周期前的值
:REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
REFX(X,N)
引用N个周期后的数据。(N为大于等于1的整数)『未来函数』
例:REFX(CLOSE,5);表示引用自当前周期后第5个周期的收盘价
VOL
引用成交量,也可简写为V
GETPRICE(N)
根据文华码取出某一品种的最新价。
例:GETPRICE(1209);返回文华码为1209的合约品种的最新价。
PARAM
[
参数名称,最小值,最大值,缺省值
在源码中定义参数。
例:PARAM[N,1,100,12]
MAN:MA(CLOSE,N);
表示参数为N,最小值为1,最大值为100,缺省值为12.
#IMPORT [CODE,PERIOD,FORMULA] AS VARMytrader2009Myadvisor(赢智)支持)
#IMPORT[CODE,PERIOD,FORMULA]AS VAR;
CODE
文华码PERIOD 周期FORMULA 引用模型名

VAR  定义变量名
例子:
#IMPORT [1205,MIN5,TEST] AS M1005
意思是引用[豆粕1005] 五分钟图上指标[TEST.FML] 的数据
使用的方法:
如当前存在一个指标TEST.FML
//TEST.FML
CL:=CLOSE;
OP:=OPEN;
我想在新建的指标 TEST1中引用[豆粕1005] 五分钟周期上指标[TEST.FML] 的数据
可以如下编写TEST1指标
//TEST1.FML
#IMPORT [1205,MIN5,TEST] AS VARTEST
DD:VARTEST.CL;
DF:VARTEST.OP;
引用的约束
1.只能引用 .FML文件
2.只能引用如下周期 MIN1 MIN3 MIN5 MIN10 MIN15 MIN30 HOUR1 HOUR3 HOUR8 DAY WEEK MONTH
3.
只能短周期引用长周期比如不能日线周期上加载引用了分钟数据的指标。

4.被引用的指标中不能存在引用
金融统计
BACKSET(X,N)
X条件成立,则将当前位置到N周期前的数值设为1。『未来函数』
例:BACKSET(CLOSE>OPEN,3);表示当K线收阳时,自当前位置到3周期前的数值设为1
BARSLAST(X)
求上一次条件成立到当前的周期数。
COUNT(X,N)
表示统计在N周期内满足X条件的周期数。如果N0则表示从已申请到的数据的第一天开始算起。
例:WR:=-100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N)); COUNT(WR>80,5);表示统计在5个周期内满足WR>80的次数
DMA(X,A)
返回X的动态移动平均,其中A为常数,并且必须介于01之间。
计算方法:DMA(N)=DMA(N-1)*(1-A)+X(N)*A 其中DMA(N-1)为第(N-1)天的DMA值。
EMA(X,N)
表示求XN周期内的平滑移动平均。(指数加权)
计算方法:EMA(X,N)=[2*X+(N-1)*EMA(X,(N-1))]/(N+1) 其中EMA(X,(N-1))为第(N-1)天的EMA
EMA2(X,N)
表示求XN周期内的加权平均。(线性加权)
计算方法:EMA2(X,N)=(N*X0+(N-1)*X1+(N-2)*X2+...+1*XN)/(N+(N-1)+(N-2)+...+1),X0表示本周期值,X1表示上一周期值...
HHV(X,N)
得到XN周期内的最高值,如果N0,则从本地数据的第一个有效周期开始算起。
例:HHV(HIGH,13);13个周期内的最高价的最大值。
HHVBARS(X,N)
得到XN周期内的最高值位置到当前的周期数。如果N=0,则从本地数据的第一个有效周期开始算起。
例:HHVBARS(VOL,0); 求历史成交量最大的周期到当前的周期数
LLV(X,N)
得到XN周期内的最小值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:LLV(LOW,25);表示求25个周期内最低价的最小值
LLVBARS(X,N)
得到XN周期内的最小值的位置到当前的周期数。如果N=0则从本地数据的第一个有效周期开始算起。
例:LLVBARS(VOL,0); 求历史成交量最小的周期到当前的周期数
MA(X,N)
XN周期内的简单移动平均。
计算方法:MA=(A1+A2+A3+A4+A5)/5 A5个周期内的简单移动平均
ZIGZAG(X,P,N)
之字转向,X变化量超过P时转向,N1,P为百分比数;N0,P为价位差值绝对值。『未来函数』
例:ZIGZAG(HIGH,10,1);表示最高价的10%的之字转向
ZIGZAG(MA(HIGH,34),100,0);表示34个周期内最高价均线的100个价位的之字转向
PEAK(X,P,M,N)
取得ZIGZAGM个波峰的值。其中X为数据,P为转折值(如果N1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
例:PEAK(HIGH,10,1,1);表示最高价的10%的之字转向的上一个波峰的数值;
PEAK(MA(HIGH,34),100,1,0);表示34个周期内最高价均线的100个价位的之字转向的上一个波峰的数值
PEAKBARS(X,P,M,N)
取得ZIGZAGM个波峰到当前周期的周期数。其中X为数据,P为转折值(如果N1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
例:PEAKBARS(HIGH,10,1,1);表示最高价的10%的之字转向的上一个波峰到当前的周期数
PEAKBARS(MA(HIGH,34),100,1,0);
表示34个周期内最高价均线的100个价位的之字转向的上一个波峰到当前的周期数
TROUGH(X,P,M,N)
取得ZIGZAGM个波谷的值。其中X为数据,P为转折值(如果N1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
例:TROUGH(LOW,10,1,1);表示最低价的10%的之字转向的上一个波谷的数值
TROUGH (MA(LOW,34),100,1,0);
表示34个周期内最低价均线的100个价位的之字转向的上一个波谷的数值
TROUGHBARS(X,P,M,N)
取得ZIGZAGM个波谷到当前周期的周期数。其中X为数据,P为转折值(如果N1,这个值为百分比数,否则为价位差值绝对值),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)
得到XN个周期内的移动平均,M为权重(M为常数)。
计算方法:SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/N
SUM(X,N)
得到XN周期内的总和,如果N=0,则从第一个有效周期开始算起。
: SUM(VOL,10);表示统计10周期内的成交量总和
SUMBARS(X,A)
得到X向前累加直到大于A时的周期数。
TRMA(X,N)
XN周期内的三角移动平均。
TSMA(X,N)
XN周期内的时间序列移动平均。
计算方法:TSMA(X,N)= FOCAST(X,N)+SLOPE(X,N)
数理统计
AVEDEV(X,N)
XN周期内的平均绝对偏差。
DEVSQ(X,N)
数据偏差平方和。
FORCAST(X,N)
得到XN周期线性回归预测值。
:FORCAST(CLOSE,5);表示求5周期线性回归预测
SLOPE(X,N)
得到XN周期内的线性回归的斜率
:SLOPE(CLOSE,5);表示求5周期线性回归线的斜率
STD(X,N)
得到XN周期内的标准差
STDP(X,N)
得到XN周期内的总体标准差
VAR(X,N)
得到XN周期内的样本方差
VARP(X,N)
得到XN周期内的总体样本方差
数理统计举例说明:
设一个数列,数列中数据的总个数为N,以今天(2005-10-14)五天内的A0605收盘价为例,N就为5。数列的内容为:{27662805281428862885}。
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、平均绝对偏差AVEDEV(X,N):将偏差的绝对值相加,除以总个数N (65.2+26.2+17.2+54.8+53.8)/5=43.44
4、数据偏差平方和DEVSQ(X,N):将偏差的平方相加。 (-65.2)&sup2;+ (-26.2)&sup2;+ (-17.2)&sup2;+ (54.8)&sup2;+ (53.8)&sup2;=11130.80
5、总体样本方差VARP(X,N):将偏差的平方相加,总和除以总个数N。用公式可以这样算: (-65.2)&sup2;+ (-26.2)&sup2;+ (-17.2)&sup2;+ (54.8)&sup2;+ (53.8)&sup2;/5=2226.16
6、样本方差VAR(X,N):是总体方差的N/(N-1)倍。 2226.16*5/(5-1)=2782.70 估算样本方差,总比总体样本方差大一点,当N够大时,两者趋于相等。
7、总体标准差STDP(X,N):方差的开方。 [(-65.2)&sup2;+ (-26.2)&sup2;+ (-17.2)&sup2;+ (54.8)&sup2;+ (53.8)&sup2;/5]&frac12;=47.18
8、标准差STD(X,N):估算样本方差的开方。 [2226.16*5/(5-1)]&frac12;=52.75 同样,估算标准差也比总体标准差大一点,当N够大时,两者趋于相等。
逻辑判断
BETWEEN(A,B,C)
判断条件“A位于BC之间是否成立,如果条件成立则返回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)
判断过去N1N2周期内是否一直满足条件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;”是指当连续出现同方向的交易指令时,系统只显示出第一个交易指令,其他交易指令自动被过滤。
ISDOWN
判断该周期是否收阴。
ISEQUAL
判断该周期是否平盘。
ISUP
判断该周期是否收阳。
ISLASTBAR
判断当前周期是否为最后一根K线。
VALUEWHEN(COND,DATA)
当条件COND满足时,取当时的DATA的值,否则取得前面一个满足条件COND的值。
例:VALUEWHEN(HIGH>REF(HIGH,5),HIGH);
表示当前最高价大于前五个周期最高价的最大值时返回当前最高价。
数学运算
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)
返回eX次幂
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)
返回AB得到模。
例:MOD(CLOSE,OPEN);收盘价除以开盘价所得余数
NOT(X)
X0时返回1,否则返回0
例:NOT(TIME=090530);表示该周期对应的时间不是9:05:30AM
POW(A,B)
得到AB次幂。
例: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的正切值。
时间函数
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)。
绘图
DRAWLINE(C1,P1,C2,P2,COLOR)
当条件C1C2均满足时,从P1画直线到P2,颜色为COLOR
例:DRAWLINE(MA18< CLOSE,OPEN,MA5 >CLOSE,CLOSE,COLORCYAN); 表示当收盘价大于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,DATA2,COLOR)
填充区域,当条件COND满足时,填充DATA1DATA2包围的区域。
例:FILLRGN(MA5>MA10,MA5,MA10,COLORRED); 表示MA5>MA10时以红色填充MA5MA10之间的区域。
POLYLINE
(COND,DATA,COLOR)
画折线,当条件COND满足时,连接各个DATA点。
例:POLYLINE(CLOSE>=HHV(CLOSE,100),CLOSE,COLORRED); 表示在收盘价创100天新高点之间画折线。
PARTLINE
(COND,DATA,COLOR)
POLYLINE
例:PARTLINE(HIGH>REF(HIGH,1),HIGH,COLORRED); 表示当期最高价大于前期最高价用红色绘制最高价连线线段。
STICKLINE
(C,P1,P2,Color,Empty)
如果条件C满足时,从P1P2画柱线,颜色为Color,如果Empty1,则为空心柱;如果Empty0,则为实心柱。
例:STICKLINE(OPEN-CLOSE>0,OPEN,CLOSE,COLORCYAN,0); 表示当开盘价大于收盘价时,从开盘价到收盘价画青色的实心柱,即K线阴线的实体部分。
VERTLINE
(COND,COLOR)
画垂直线,当条件COND满足时,画垂直线。
例:VERTLINE(HIGH>=HHV(HIGH,30),COLORRED); 表示在价格创30天新高时画垂直线。
RGB(R,G,B)
自定义颜色函数。
R,G,B的数值范围都在0~255之间,例:RGB(225,225,225)表示白色
COLORSTICK
画彩色柱线
VOLUMESTICK
画成交量线
BAMBOOLINE
画竹线
CIRCLEDOT
画圆
OPISTICK
画持仓量柱线
8level-2函数(只有嬴智版本支持)
L2_BPTIMES
周期内多头平仓次数。
用法:L2_BPTIMES返回多头平仓次数。
L2_BKTIMES
周期内多头开仓次数。
用法:L2_BKTIMES返回多头开仓次数。
L2_SPTIMES
周期内空头平仓次数。
用法:L2_BPTIMES返回空头平仓次数。
L2_SKTIMES
周期内空头开仓次数。
用法:L2_SKTIMES返回空头开仓次数。
L2_ASKACCOUNT
周期内卖主动次数。
用法:L2_ASKACCOUNT返回卖主动次数。
L2_BIDACCOUNT
周期内买主动次数。
用法:L2_BIDACCOUNT返回买主动次数。
L2_BIDAVVOL
周期内平均总买量。
用法:L2_BIDAVVOL返回周期内平均总买量。
L2_ASKAVVOL
周期内平均总卖量。
用法:L2_ASKAVVOL返回周期内平均总卖量。
L2_ASKAVPRICE
周期内卖盘加全平均价。
用法:L2_ASKAVPRICE返回卖盘加全平均价。
L2_BIDAVPRICE
周期内买盘加全平均价。
用法:L2_BIDAVPRICE返回买盘加全平均价。
L2_ASKBIGTURNOVER
周期内空头大单成交额。
用法:L2_ASKBIGTURNOVER返回空头大单成交额。
L2_BIDBIGTURNOVER
周期内多头大单成交额。
用法:L2_BIDBIGTURNOVER返回多头大单成交额。
L2_ASKBIGCOUNT
周期内空头大单成交次数。
用法:L2_ASKBIGCOUNT返回周期内空头大单成交次数。
L2_BIDBIGCOUNT
周期内多头大单成交次数。
用法:L2_BIDBIGCOUNT返回周期内多头大单成交次数。
L2_TOTALTURNOVER
周期内总成交额。
用法:L2_TOTALTURNOVER返回总成交额。
L2_ASKBIGENTRASTCOUNT
周期内卖1委托明细大量次数。
用法:L2_ASKBIGENTRASTCOUNT返回卖1委托明细大量次数。
L2_BIDBIGENTRASTCOUNT
周期内买1委托明细大量次数。
用法:L2_BIDBIGENTRASTCOUNT返回买1委托明细大量次数。
L2_PERIOD_DATA(TEXT)
该周期最后时刻的买卖价格。
用法:L2_PERIOD_DATA(TEXT)求内容为TEXT的该周期最后盘面数据。
例子:L2_PERIOD_DATA('bid1');//取得该周期最后盘面的买1数据
TEXT的内容可为:1-5 1-5量卖1-5 1-5
'bid1' 'bid2' 'bid3' 'bid4' 'bid5' 'ask1' 'ask2' 'ask3' 'ask4' 'ask5' 'bidvol1' 'bidvol2' 'bidvol3' 'bidvol4' 'bidvol5' 'askvol1' 'askvol2' 'askvol3' 'askvol4' 'askvol5'
L2_TICK_DATA(TEXT)
取每笔买卖盘数据(只能用于Tick,每笔Tick时间间隔请设置为0)
用法:L2_TICK_DATA(TEXT)求内容为TEXT的盘面实时数据。
例子:L2_TICK_DATA('bid1');//取得盘面最后的买1数据
TEXT的内容可为:
1-5 1-5 1-5量卖1-5

bid1bid2bid3bid4bid5ask1ask2ask3ask4ask5
bidvol1bidvol2bidvol3bidvol4bidvol5askvol1askvol2askvol3askvol4askvol5
总买总卖总买量总卖量

tbidtasktbidvoltaskvol
委买1-委买10委卖1-委卖
10
buy_entrust1
buy_entrust2buy_entrust3buy_entrust4buy_entrust5

buy_entrust6buy_entrust7buy_entrust8buy_entrust9buy_entrust10
sell_entrust1sell_entrust2sell_entrust3sell_entrust4sell_entrust5
sell_entrust6sell_entrust7sell_entrust8sell_entrust9sell_entrust10
最新价持仓量主动买卖(返回意义-1没取到,0主动买,1主动卖,2换手)成交量

newpriceopiactivitydeltavol
9、头寸函数(连接文华服务器才能使用)
TRD_ASSETS
取出交易系统中的权益。
用法:TRD_ASSETS返回交易系统的权益。
注意:该函数只有登陆一键通下单系统才能使用。效果测试不执行此函数。
TRD_CAPITAL
取出交易系统中的可用资金。
用法:TRD_CAPITAL返回交易系统的可用资金。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_LONGSPRICE
取出交易系统中的多头开仓均价。
用法:TRD_LONGSPRICE返回交易系统的多头开仓均价。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_SHORTSPRICE
取出交易系统中的空头开仓均价。
用法:TRD_SHORTSPRICE返回交易系统的空头开仓均价。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_LONGSOPI
取出交易系统中的多头持仓。
用法:TRD_LONGSOPI返回交易系统的多头持仓。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_SHORTSOPI
取出交易系统中的空头持仓。
用法:TRD_SHORTSOPI返回交易系统的空头持仓。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_LONGSOPIREMAIN
取出交易系统中的多头可平仓手数。
用法:TRD_LONGSOPIREMAIN返回交易系统的多头可平仓手数。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_SHORTSOPIREMAIN
取出交易系统中的空头可平仓手数。
用法:TRD_SHORTSOPIREMAIN返回交易系统的空头可平仓手数。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_LONGSEARN
取出交易系统中的多头浮动盈亏。
用法:TRD_LONGSEARN返回交易系统的多头浮动盈亏。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_SHORTSEARN
取出交易系统中的空头浮动盈亏。
用法:TRD_SHORTSEARN返回交易系统的空头浮动盈亏。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_LIMITUP
取出交易系统中的涨停价格。
用法:TRD_LIMITUP返回交易系统的涨停价格。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
TRD_LIMITDOWN
取出交易系统中的跌停价格。
用法:TRD_LIMITDOWN返回交易系统的跌停价格。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。
SETDEALPERCENT(fPercent)
设置模型每次下单按资金的比例下单。
用法:SETDEALPERCENT(fPercent)表示每次按资金的fPercent下单。
例子:SETDEALPERCENT(0.2);//每次按资金比例的%20下单
注:不可与SETDEALVOL函数同时使用
交易系统必须启动
效果测试不执行此函数
SETDEALVOL(nVol)
设置模型每次下单按设置的手数下单。
用法:SETDEALVOL(nVol)表示每次模型下nVol手单。
例子:SETDEALVOL(2);//模型每次下单2
注:不可与SETDEALPERCENT函数同时使用
交易系统必须启动
效果测试不执行此函数
10、信号记录函数(连接文华服务器才能使用)
BKPRICE
模型买开信号价位。
用法:BKPRICE返回上一次模型买开仓价。
BARSBK
上一次买开信号位置
用法:BARSBK返回上一次买开仓距离当前k线的k线数。
SKPRICE
模型卖开信号价位。
用法:SKPRICE返回上一次模型卖开仓价。
BARSSK
上一次卖开信号位置
用法:BARSSK返回上一次卖开仓距离当前k线的k线数。
3、编辑平台可以使用的常数
常数
意义
COLORRED
红色
COLORGREEN
绿色
COLORBLUE
蓝色
COLORMAGENTA
红紫色
COLORYELLOW
黄色
COLORLIGHTGREY
浅灰色
COLORLIGHTRED
浅红色
COLORLIGHTGREEN
浅绿色
COLORLIGHTBLUE
浅蓝色
COLORBLACK
黑色
COLORWHITE
白色
COLORCYAN
青色
COLORRED
红色
COLORGREEN
绿色
COLORBLUE
蓝色
COLORMAGENTA
红紫色
COLORYELLOW
黄色
COLORLIGHTGREY
浅灰色
注:在公式内即使你定义了某种颜色,在显示的时候也未必是此种颜色,取决于背景颜色当前页面里是否保了该指标的颜色及您是否在显示的时候改变了该指标的颜色设置。
4、编辑平台的语法
1)关于公式名称:
公式的名称不可以和已经存在的公式重复。
2)关于参数:
每个自编公式最多可以在参数设置栏中定义四个参数,参数的定义如下,首先是参数名称,然后是参数的最小值,最大值,最后是参数的默认值。在定义参数时要注意的是参数名称不可以重复。
3)关于变量名称:
变量名称不可以互相重复,不可以和参数名重复,不可以和函数名称重复。
4)关于公式内容:
公式的每个语句应该以分号结束,包括最后一条语句。在数据公式的时候请您注意一定要使用半角输入。 在编写公式的过程中,如果您不记得某个函数的确切写法,可以选择插入函数来插入函数。
(5)如果您在编写公式之后,想给这个公式加上注释,说明之类的东西,可以使用公式说明来输入。
(6)IF  ELSE:
该语句只有Mytrader2009和Myadvisor(赢智)支持
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;
}
以上内容表达 MA5、MA10、MA30三者中最大的数值。
(7)IFELSE(C,A,B)
如果条件C成立则返回A值,否则返回B值
例:IFELSE(CLOSE>REF(CLOSE,1),1,0);表示若今日收盘价高于前一日收盘价,则返回1,否则返回0
5、编辑平台使用的交易指令
交易模型中的交易指令如下:
期货交易指令
买开
公式中用BK表示
买平
公式中用BP表示
卖开
公式中用SK表示
卖平
公式中用SP表示
买平后买开新仓
公式中用BPK表示
卖平后卖开新仓
公式中用SPK表示
股票、权证、外汇交易指令
买入
公式中用BUY表示
卖出
公式中用SELL表示
套利模型中的交易指令如下:
第一腿买开,第二腿卖开
公式中用BKSK表示
第一腿卖开,第二腿买开
公式中用SKBK表示
第一腿买平,第二腿卖平
公式中用BPSP表示
第一腿卖平,第二腿买平
公式中用SPBP表示
注:在效果测试使用如下机制:
连续的开仓指令只使用第一个指令进行开仓,开仓时使用当时的全部资金,连续的平仓指令,只有第一个有效,平掉当时的全部持仓,其他的平仓指令算做错误指令!
6、快速入门
★以下模型源码内容仅供编写参考使用,如用于交易使用,风险自负。
⑴如何把熟悉的技术指标转换成交易模型?
第一步:把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,发出买平交易指令   
//”//”后为文字说明,编写模型时不用写出
⑵如何把自编变色K线转换成交易模型?
模型说明:第一根K线变红时买,第一根K线变蓝时卖
指标源码:
HH1:=IF(H<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0); LL1:=IF(L>REF(L,2)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=VALUEWHEN(HH1>0,HH1);
LL2:=VALUEWHEN(LL1>0,LL1);
K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));
K2:=VALUEWHEN(K1<>0,K1);
G:=IF(K2=1,HH2,LL2);
G1:=VALUEWHEN(ISLASTBAR,G);
//以上是在定义变量,转换成模型时直接引用
DRAWNUMBER(L>0,G1,G1,0,COLORCYAN);
//以上是在编著数值,转换成模型时直接删除
W1:=K2;
W2:=OPEN-CLOSE;
HT:=IF(OPEN>CLOSE,OPEN,CLOSE);
LT:=IF(OPEN<CLOSE,OPEN,CLOSE);
//以上是在定义变量,转换成模型时直接引用
DRAWLINE(W1=1,HIGH,W1=1,HT,COLORCYAN);
DRAWLINE(W1=1,LOW,W1=1,LT,COLORCYAN);
DRAWLINE(W1=-3,HIGH,W1=-3,HT,COLORRED);
DRAWLINE(W1=-3,LOW,W1=-3,LT,COLORRED);
STICKLINE(W1>0,OPEN,CLOSE,COLORCYAN,1);
STICKLINE(W1<=0,OPEN,CLOSE,COLORRED,1); STICKLINE(W2>0&&W1<=0,OPEN,CLOSE,COLORRED,0);
STICKLINE(W2>0&&W1>0,OPEN,CLOSE,COLORCYAN,0); DRAWLINE(W1=1&&REF(W1,1)=1,G,W1=1&&REF(W1,1)=1,REF(G,1),COLORGREEN); DRAWLINE(W1=-3&&REF(W1,1)=-3,G,W1=-3&&REF(W1,1)=-3,REF(G,1),COLORYELLOW);
DRAWSL(K2=1,G,0,1,0,COLORGREEN);
DRAWSL(K2=-3,G,0,1,0,COLORYELLOW);
//以上是在绘图,转换成模型时直接删除,只保留判断k线颜色的逻辑语句。例如:STICKLINE(W1>0,OPEN,CLOSE,COLORCYAN,1);则保留W1>0,再加上交易指令即可改写为交易模型
修改为交易模型如下:
HH1:=IF(H<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IF(L>REF(L,2)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=VALUEWHEN(HH1>0,HH1);
LL2:=VALUEWHEN(LL1>0,LL1);
K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));
K2:=VALUEWHEN(K1<>0,K1);
G:=IF(K2=1,HH2,LL2);
G1:=VALUEWHEN(ISLASTBAR,G);
W1:=K2;
W2:=OPEN-CLOSE;
CROSS(W1,0)||(CROSS(W2,0)&&CROSS(W1,0)),BPK;
CROSS(0,W1)||(CROSS(W2,0)&&CROSS(0,W1)),SPK;
//从上面看,编写交易模型要比编写指标简单得多。
⑶如何合并两个不同的交易模型?
在两个模型方向相同时才开仓,两个模型指令不同时就平仓
参数N  最小值 0  最大值 100  缺省值 8
源码:
模型A
X:=BARSLAST(HIGH=HHV(HIGH,N));
LL:=MIN(REF(LOW,X+3),MIN(REF(LOW,X+2),MIN(REF(LOW,X),REF(LOW,X+1))));
Y:=BARSLAST(LOW=LLV(LOW,N));
HH:=MAX(REF(HIGH,Y+3),MAX(REF(HIGH,Y+2),MAX(REF(HIGH,Y),REF(HIGH,Y+1))));
A:=BARSLAST(CLOSE>=HH);
B:=BARSLAST(CLOSE<=LL);
AB:=IF(A>B,HH,LL);
CROSS(AB,CLOSE),SPK;
CROSS(CLOSE,AB),BPK;
模型B
HH1:=IF(H<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IF(L>REF(L,2)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=VALUEWHEN(HH1>0,HH1);
LL2:=VALUEWHEN(LL1>0,LL1);
K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));
K2:=VALUEWHEN(K1<>0,K1);
K2=1,SPK;
K2=-3,BPK;
利用并且(&&)和或者(||)这些逻辑语句,将AB模型合并为模型C
X:=BARSLAST(HIGH=HHV(HIGH,N));
LL:=MIN(REF(LOW,X+3),MIN(REF(LOW,X+2),MIN(REF(LOW,X),REF(LOW,X+1))));
Y:=BARSLAST(LOW=LLV(LOW,N));
HH:=MAX(REF(HIGH,Y+3),MAX(REF(HIGH,Y+2),MAX(REF(HIGH,Y),REF(HIGH,Y+1))));
A:=BARSLAST(CLOSE>=HH);
B:=BARSLAST(CLOSE<=LL);
AB:=IF(A>B,HH,LL);
HH1:=IF(H<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IF(L>REF(L,2)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=VALUEWHEN(HH1>0,HH1);
LL2:=VALUEWHEN(LL1>0,LL1);
K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));
K2:=VALUEWHEN(K1<>0,K1);
CROSS(AB,CLOSE)&&K2=1,SK;
CROSS(AB,CLOSE)||K2=1,SP;
CROSS(CLOSE,AB)&&K2=-3,BK;
CROSS(CLOSE,AB)||K2=-3,BP;
(二)、基础指标编写示范和注意事项1、学习编写前学要明确注意的几个概念
公式
   泛指指标、模型。没有具体指向性。
指标
   指能够绘出图线但不发交易指令的公式。指标是一个技术分析范畴的概念。
交易信号  
指指标上出现的提示投资者买卖的指示,可以是图线交叉、文字、图形。投资者需要按照信号指示去手动委托下单。交易信号也是一个技术分析范畴的概念。
交易模型
    指能够发出BKSP等交易指令但是不绘出图线的公式,模型还包含下单方向,交易手数,止盈止损等与交易、资金使用相关的参数设置。交易模型是一个程序化交易范畴的概念。
交易指令
   指交易模型自动发出的下单委托指令,可以不经过投资者确认直接下单,也可以等待投资者回车确认再下单。交易指令在K线图上以不同颜色和形状的箭头来代表。交易指令是一个程序化交易范畴的概念。
2、如何进行基础指标的编写
1)、均线指标
关键函数 MA
MA(X,N)
XN周期内的简单移动平均。
计算方法:MA=(A1+A2+A3+A4+A5)/5 A5个周期内的简单移动平均
①五周期均线
MA5:MA(CLOSE,5);

②均线组合
MA5:MA(CLOSE,5),COLORWHITE;
MA10:MA(CLOSE,10),COLORYELLOW;
MA30:MA(CLOSE,30),COLORGREEN;
MA60:MA(CLOSE,60),COLORMAGENTA;
K线+均线组合
MA5:MA(CLOSE,5),COLORWHITE;
MA10:MA(CLOSE,10),COLORYELLOW;
MA30:MA(CLOSE,30),COLORGREEN;
MA60:MA(CLOSE,60),COLORMAGENTA;
TMP:=OPEN-CLOSE;
DRAWLINE(TMP>0.00001,HIGH,TMP>0.00001,OPEN,COLORCYAN);
DRAWLINE(TMP>0.00001,LOW,TMP>0.00001,CLOSE,COLORCYAN);
DRAWLINE(TMP<-0.00001,HIGH,TMP<-0.00001,CLOSE,COLORRED);
DRAWLINE(TMP<-0.00001,LOW,TMP<-0.00001,OPEN,COLORRED);
DRAWLINE(ABS(TMP)<0.00001,LOW,ABS(TMP)<0.00001,OPEN,COLORWHITE);
DRAWLINE(ABS(TMP)<0.00001,HIGH,ABS(TMP)<0.00001,OPEN,COLORWHITE);
STICKLINE(TMP>0,OPEN,CLOSE,COLORCYAN,0);
STICKLINE(TMP<=0,OPEN,CLOSE,COLORRED,1);
小技巧:如何最快捷的增加K线在我的指标里,   
当需要书写的源代码比较长时,如果系统中已经有完整的指标,我们可以直接拿来引用,而不需要重复录入。
2)、四周法则
关键函数 HHVLLVREF
HHV(X,N)
得到XN周期内的最高值,如果N0,则从本地数据的第一个有效周期开始算起。
例:HHV(HIGH,13);13个周期内的最高价的最大值。
LLV(X,N)
得到XN周期内的最小值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:LLV(LOW,25);表示求25个周期内最低价的最小值
REF(X,N)
引用XN个周期前的值
:REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
HH:REF(HHV(HIGH,19),1);
LL:REF(LLV(LOW,19),1);
(三)、交易模型编写示范和注意事项1、趋势类交易模型编写示范
均线类
①均线排列模型
关键函数:MA
使用周期:任意
模型说明MA5,MA10,MA20多头排列时做多,空头排列时做空。编者以一个周期内这三条均线的大小关系为判断标准举例,大家也可以使用多个周期的比较来判断多/空头排列关系。
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA20:=MA(CLOSE,20);
MA5>MA10&&MA10>MA20,BPK;
MA5<MA10&&MA10<MA20,SPK;
★ 模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
A、交易模型中不允许使用只写:(即定义并画线)的写法。
如:MA5:=MA(CLOSE,5);
错误写成MA5:MA(CLOSE,5);
B、对于三个数的比较,大家往往习惯写成MA5>MA10>MA20这样,而在文华的模型编写中,目前只能两个变量之间进行比较,也就是说此类三个以上变量连续比较需要像模型中那样拆分来写:MA5>MA10&&MA10>MA20
C、缺少计算函数。
如:求均线时,写为MA5:CLOSE,5),而缺少了MA,此类错误语法检测无法识别,往往造成软件应用错误。
②均线金死叉模型
关键函数:MAEMAEMA2CROSS
使用周期:所有K 线周期。
模型说明:短期均线上穿长期均线(金叉)做多,短期均线下穿长期均线(死叉)做空。
参数设置:
参数N1 ,最小值0,最大值100,缺省值5
参数N2 ,最小值0,最大值100,缺省值30
A、简单移动平均线:
P1:=MA(CLOSE,N1);
P2:=MA(CLOSE,N2);
CROSS(P1,P2),BPK;
CROSS(P2,P1),SPK;
B、指数加权平均线:
P1:=EMA(CLOSE,N1);
P2:=EMA(CLOSE,N2);
CROSS(P1,P2),BPK;
CROSS(P2,P1),SPK;
C、线性加权平均线:
P1:=EMA2(CLOSE,N1);
P2:=EMA2(CLOSE,N2);
CROSS(P1,P2),BPK;
CROSS(P2,P1),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负                                 
③均线结合MACD模型
关键函数:EMA
使用周期:日线
模型说明: 利用DIFFDEA的比较和收盘价的15日指数加权和最新价的比较作为买卖依据进行交易。
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  := EMA(DIFF,9);
EMA15:=EMA(CLOSE,15);
DIFF>DEA&&CLOSE>EMA15,BPK;
DEA>DIFF&&EMA15>CLOSE,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
通道类
①唐奇安通道模型
关键函数:HHVLLVREFCROSS
使用周期:日线
模型说明: 突破20天最高价做多,突破20天最低价做空。
参数设置:
N ,最小值5,最大值100,缺省值20
HH:=HHV(HIGH,N);
LL:=HHV(LOW,N);
CROSS(CLOSE,REF(HH,1)),BPK;
CROSS(REF(HH,1),CLOSE),SPK;
★ 以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
最高价高于前20周期最高价。应写为HIGH>REF(HHV(HIGH,20),1),常见错误是直接写为HIGH>HHV(HIGH,20);
容易犯的编写错误:
②布林通道结合阴阳K线模型
关键函数:STDCROSSISUPISDOWN
使用周期:日线
模型说明:收盘价向上突破布林通道下轨并前当根k线收阳做多,收盘价向下突破布林通道上轨并前当根k线收阴做空。
参数设置:
N, 最小值1, 最大值100, 缺省值26
M, 最小值1, 最大值100, 缺省值26
MID:=MA(CLOSE,N);
TMP2:=STD(CLOSE,M);
TOP:=MID+2*TMP2;
BOTTOM:=MID-2*TMP2;
CROSS(CLOSE,BOTTOM)&&ISUP,BPK;
CROSS(TOP,CLOSE)&&ISDOWN,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
其他类
①宝塔线
关键函数:REFHHVLLV
使用周期:日线
模型说明: 宝塔线变红做多,宝塔线变绿做空。因为文华并未公布宝塔线的后台公式,所以此指标的显示结果与文华系统中的宝塔显示能结果有一定的区别。
C1:=REF(CLOSE,1);
C2:=REF(CLOSE,2);
C3:=REF(CLOSE,3);
C4:=REF(CLOSE,4);
CMAX:=HHV(CLOSE,2);
CMIN:=LLV(CLOSE,2);
(CLOSE=CMAX&&(C1>=C2||C1>=C3)||C1=CMAX&&(C2=CMIN||C3=CMIN)&&CLOSE>=C2||C2=CMAX&&C3=CMIN&&CLOSE>=C1||C3=CMAX&&CLOSE>=C1&&CLOSE>=C2),BPK;
(CLOSE=CMIN&&(C1<C2||C1<C3)||C1=CMIN&&(C2=CMAX||C3=CMAX)&&CLOSE<C2
||C2=CMIN&&C3=CMAX&&CLOSE<C1||C3=CMIN&&CLOSE<C1&&CLOSE<C2),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
②分形
关键函数:MAREFREFX(未来函数)BARSLASTCROSSVALUEWHEN
使用周期:日线
模型说明:向上突破分形做多,向下突破分形做空
MA13:=MA(CLOSE,13);
HO:=H>REF(H,1)&&H>REF(H,2)&&H>=REFX(H,1)&&IF(H=REFX(H,2),H>REFX(H,3),H>REFX(H,2));
FXH:=CROSS(HO,0.9);
HH:=REF(H,BARSLAST(FXH));
LO:=L<REF(L,1) &&L<REF(L,2)&&L<=REFX(L,1)&&IF(L=REFX(L,2),L<REFX(L,3),L<REFX(L,2));
FXL:=CROSS(LO,0.9);
LL:=REF(L,BARSLAST(FXL));
A:=VALUEWHEN(CROSS(CLOSE,HH),REF(LL,1));
A1:=VALUEWHEN(CROSS(CLOSE,HH),CLOSE);
B:=VALUEWHEN(CROSS(LL,CLOSE),REF(HH,1));
B1:=VALUEWHEN(CROSS(LL,CLOSE),CLOSE);
(CROSS(CLOSE,HH)&&CLOSE>MA13)||CROSS(CLOSE,B),BK;
(CLOSE>A1&&CROSS(MA13,CLOSE))||CROSS(A,CLOSE),SP;
(CROSS(LL,CLOSE)&&CLOSE<MA13)||CROSS(A,CLOSE),SK;
(CLOSE<B1&&CROSS(CLOSE,MA13))||CROSS(CLOSE,B),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
SAR模型
关键函数:ABS,SAR
使用周期:任意
模型说明:SAR指标出现红点买平开,蓝点卖平开
N        最小值 1     最大值 100  缺省值 4
STEP:      最小值0.01    最大值 0.2  缺省值 0.02
MVALUE:  最小值 0.01    最大值 1   缺省值 0.2
SARLINE:=ABS(SAR(N,STEP,MVALUE));
CLOSE>SARLINE,BPK;
CLOSE<SARLINE,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
直接写CLOSE>SARLINE是不对的,CLOSE恒大于0,而SARLINE有正有负,应将SARLINE取绝对值。如下:
SARLINE:=ABS(SAR(4,0.02,0.2));
再用CLOSE进行比较
2、振荡类交易模型编写示范
主动买与主动卖模型
关键函数:SCALE,CROSS,VALUEWHEN,TIME
模型说明:现价大于当日开盘价并且主动买大于主动卖时买平开,现价小于开盘价并且主动卖大于主动买时卖平仓。另SCALE为内部函数,不可以进行效果测试的。
A、使用周期:日线
ZB:=SCALE*VOL;
ZS:=(1-SCALE)*VOL;
CLOSE>OPEN&&CROSS(ZB,ZS),BPK;
CLOSE<OPEN&&CROSS(ZS,ZB),SPK;
B、使用周期:任意分钟线
ZB:=SCALE*VOL;
ZS:=(1-SCALE)*VOL;
OO:=VALUEWHEN(TIME=0900,OPEN);
CLOSE>OO&&CROSS(ZB,ZS),BPK;
CLOSE<OO&&CROSS(ZS,ZB),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
ROC(变动速率)与价格趋势变动背离:
关键函数:REF,CROSS,MA,HHV
使用周期:所有K 线周期。
模型说明:价格创新高,ROC未配合上升,显示上涨动力减弱;价格创新低,ROC未配合下降,显示下跌动力减弱
参数设置:
参数N ,最小值5,最大值100,缺省值24
参数M,最小值5,最大值100,缺省值20
ROC:=(CLOSE-REF(CLOSE,N))/REF(CLOSE,N)*100;
ROCMA:=MA(ROC,M);
C>REF(HHV(C,N1),1)&&ROC<ROCMA,SPK;
C<REF(HHV(C,N1),1)&&ROC>ROCMA,BPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
三减六日乖离模型:
关键函数:REFMA,HHV,LLV
使用周期:所有K 线周期。
模型说明:乖离值为正数时,未能突破前期高值,卖出;反之,买进。
参数设置:
参数N ,最小值0,最大值20,缺省值5
B36 := MA(CLOSE,3)-MA(CLOSE,6);
B612 : =MA(CLOSE,6)-MA(CLOSE,12);
REF(B36>REF(HHV(B36,N),1),1)&&B36<REF(B36,1),SPK;
REF(B36<REF(LLV(B36,N),1),1)&&B36>REF(B36,1),BPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
3、日内交易模型编写示范
开盘价突破模型
关键函数:REF,VALUEWHEN,TIME,CROSS,DATE
使用周期:五分钟
模型说明:五分钟周期开盘第二根K线的收盘价与当日开盘价比较及最新价和当日开盘价的比较作为买卖依据进行交易,尾盘平仓不留隔夜单。
A:=VALUEWHEN(TIME=905,CLOSE);
B:=VALUEWHEN(DATE<>REF(DATE,1),OPEN);
A<B&&CROSS(CLOSE,B)&&TIME<1450,BK;
(A>B&&CROSS(B,CLOSE))||TIME>=1450,SP;
A>B&&CROSS(B,CLOSE)&&TIME<1450,SK;
(A<B&&CROSS(CLOSE,B))||TIME>=1450,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
A、所选周期与所用模型时间上不统一
5分钟周期最小能取到的时间点就是5分钟,如145514501445这样,所以其最后一根K线的1455这根。而如果您使用的是3分钟周期,那么1455就不是最后一根K线了,因为3分钟周期上所能取到的时间点为每3分钟,如14541457,那么就需要作出相应修改,如TIME=1455,BP;就需要修改为TIME=1457,BP;
B、开仓漏写时间控制
进行日内交易时注意时间函数的使用,不仅平仓条件中需要使用时间函数控制,有时开仓条件也需要使用时间函数来进行控制。
例如:上面的模型,1450进行平仓,不仅需要在平仓条件中写入时间1450,还需要写入开仓条件,否则可能会在1450平仓后,继续开仓进行交易。
C、使用这种VALUEWHEN(TIME=AA,DATA)格式的交易模型,一定要注意限制开仓时间在时间AA之后,否则在开盘到AA之前,对比的是昨日的DATA
开盘后前三十分钟最高最低价突破模型
关键函数:REF,VALUEWHEN,TIME, DATE,HHV,LLV,BARSLAST
使用周期:五分钟
模型说明:以最新价与开盘30分钟内的最高最低价进行比较开仓,在收盘前平仓。M:=BARSLAST(DATE<>REF(DATE,1) );
B:=VALUEWHEN(TIME<=0930,HHV(HIGH,M));
D:=VALUEWHEN(TIME<=0930,LLV(LOW,M));
CLOSE>B&&TIME<1455&&TIME>0900,BK;
TIME=1455,SP;
CLOSE<D&&TIME<1455&&TIME>0900,SK;
TIME=1455,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
单均线模型
关键函数:MA,TIME
使用周期:1分钟K线
模型说明:开盘后15分钟再根据均线与收盘价之间的关系进行日内买卖,尾盘平仓。
MAN:=MA(CLOSE,15);
TIME>=0915&&TIME<1455&&CLOSE>MAN&&BARSLAST(CROSS(CLOSE,MAN ))>=3,BK;
TIME>=1455||(CLOSE<MAN&&BARSLAST(CROSS(MAN,CLOSE ))>=3),SP;
TIME>=0900&&TIME<1455&&CLOSE<MAN&&BARSLAST(CROSS(MAN,CLOSE ))>=3,SK;
TIME>=1455||(CLOSE>MAN&&BARSLAST(CROSS(CLOSE,MAN ))>=3),BP;
注:加入BARSLAST函数过滤,避免短时间段内频繁交易。
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
4、跨合约、跨周期模型编写示范
如何将沪铜1002合约(文华码:2102)日K线的M5,M10,M25均线引用到其他合约5分钟K线图上?
关键函数:#IMPORT,CROSS,MA
使用周期:五分钟
第一步:建立指标“MA1
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA25:=MA(CLOSE,25);
第二步:建立指标“5MA”并在5分钟周期应用
#IMPORT[2102 ,DAY,MA1] AS A
M1:A.MA5;
M2:A.MA10;
M3:A.MA25;
容易犯的编写错误:
A、被引用指标文件类型及名称不符合要求
编写跨合约,跨周期指标或模型,被引用的只能是“指标(即.FLM文件)”。
被引用的指标中不能存在引用其他指标语句。
被引用指标名称需以英文开头,可以是英文加数字形式,但不能出现汉字。如:被引用指标名称可以是“MAA”、“MA1,但不可以是“1MA”或“MA组合”。
B、文华码输入错误
如沪铜1002合约文华码为2102,并不是1002,各合约文华码可在报价列表“文华码”抬头列或各合约K线图右上角合约名称后括号内查到。
同品种不同周期间调用数据时可不必填写文华码,但#IMPORT函数填写文华码位置需以空格代替,不可省略。
C、周期使用混乱
目前跨周期函数只允许短周期引用长周期数据,如不能在日周期上引用分钟周期数据。
目前可供引用周期:MIN1MIN3MIN5MIN10MIN15MIN30HOUR1HOUR3HOUR8DAYWEEKMONTH
跨周期均线组合模型
关键函数:#IMPORT,CROSS
使用周期:三十分钟
模型说明:日周期均线为多头排列时,三十分钟周期上只做多,不做空;日周期均线为空头排列时,三十分钟周期上只做空,不做多。
第一步:建立日周期均线指标“MAD
MA1:=MA(CLOSE,5);
MA2:=MA(CLOSE,10);
MA3:=MA(CLOSE,25);
第二部:编写跨周期交易模型
#IMPORT[ ,DAY,MAD] AS A
M1:=A.MA1;
M2:=A.MA2;
M3:=A.MA3;
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10)&&M1>M2&&M2>M3,BK;
CROSS(MA10,MA5),SP;
CROSS(MA10,MA5)&&M1<M2&&M2<M3,SK;
CROSS(MA5,MA10),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
跨合约MACD模型
关键函数:#IMPORT
使用周期:五分钟
模型说明:当沪铜指数(文华码2100)五分钟周期DIFF金叉DEA时,在沪铜1002合约上买平开;当沪铜指数(文华码2100)五分钟周期DIFF死叉DEA时,在沪铜1002合约上卖平开。
第一步:文华自带“MACD”指标,所以无需另新建指标。
第二步:编写跨合约交易模型
#IMPORT[2100,MIN5,MACD] AS VAR
D:=VAR.DIFF;
E:=VAR.DEA;
CROSS(D,E),BPK;
CROSS(E,D),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
所引用变量名称需与原指标变量名称相符,如:
#IMPORT[2100,MIN5,MACD] AS VAR
D:=VAR.DIFF;
编写跨合约模型前需确认原MACD指标中确实含有DIFF变量名称(确认方法:通过公式管理器找到原指标,打开查看);
请注意原指标变量名称的大小写,如原指标变量名称为diff,则需要在引用时引用D:=VAR.diff; 而不是 D:=VAR.DIFF;
5、头寸及信号记录模型编写示范
⑴按资金比例下单模型
关键函数:SETDEALPERCENT
使用周期:五分钟
模型说明:当满足开仓条件时按可用资金比例的30%下单。
SETDEALPERCENT(0.3);
A:=VALUEWHEN(TIME=905,CLOSE);
B:=VALUEWHEN(DATE<>REF(DATE,1),OPEN);
A<B&&CROSS(CLOSE,B)&&TIME<1450,BK;
(A>B&&CROSS(B,CLOSE))||TIME>=1450,SP;
A>B&&CROSS(B,CLOSE)&&TIME<1450,SK;
(A<B&&CROSS(CLOSE,B))||TIME>=1450,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵资金权益模型
关键函数:TRD_CAPITAL,TRD_ASSETS,SAR
使用周期:十五分钟
模型说明:只有当可用资金占总权益50%以上时满足价格上/下突破止损点才执行开仓条件,否则不予执行。
SARLINE:=ABS(SAR(4,0.02,0.2));
A:=TAD_CAPITAL/TRD_ASSETS;
CROSS(CLOSE,SARLINE)&&A>0.5,BK;
CROSS(SARLINE,CLOSE),SP;
CROSS(SARLINE,CLOSE)&&A>0.5,SK;
CROSS(CLOSE,SARLINE),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶信号记录模型
关键函数:BKPRICE ,SKPRICE
使用周期:五分钟
模型说明:突破4个周期最高/最低价开仓,获利15个点以上平仓。
CLOSE>=REF(HHV(HIGH,4),1),BK;
CLOSE-BKPRICE>15,SP;
CLOSE<=REF(LLV(LOW,4),1),SK;
SKPRICE-CLOSE>15,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
6LEVEL-2模型编写示范
LEVEL-2盘口模型
关键函数:L2_BPTIMES,L2_BKTIMES,L2_SPTIMES,L2_SKTIMES
使用周期:一分钟
模型说明:创5个周期最高/最低价时统计周期内多/空开平仓次数确定是否开仓。
CS1:=L2_BPTIMES;
CS2:=L2_BKTIMES;
CS3:=L2_SKTIMES;
CS4:=L2_SPTIMES;
MA1:=MA(CLOSE,5);
CS2+CS4>CS1+CS3&&HIGH>=HHV(HIGH,M),BK;
CROSS(REF(MA1,1),LOW),SP;
CS2+CS4<CS1+CS3&&LOW<=LLV(LOW,M),SK;
CROSS(HIGH,REF(MA1,1)),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
LEVEL-2量能模型
关键函数:L2_ASKACCOUNT, L2_BIDACCOUNT
使用周期:一分钟
模型说明:周期内卖主动次数大于周期内买主动次数并且收阳,平空仓并反手开多;周期内买主动次数大于周期内卖主动次数并且收阴,平多仓并反手开空。
L2_ASKACCOUNT>L2_BIDACCOUNT&&CLOSE>OPEN,BPK;
L2_BIDACCOUNT>L2_ASKACCOUNT&&CLOSE<OPEN,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
LEVEL-2秒周期时间模型
关键函数:L2_BIDBIGTURNOVER,L2_ASKBIGTURNOVER,L2_ASKBIGCOUNT,L2_BIDBIGCOUNT,L2_ASKBIGENTRASTCOUNT,L2_BIDBIGENTRASTCOUNT,TIME
使用周期:十五秒
模型说明:1458分之前由周期内多/空头大单成交额及周期内多/空头平仓次数对比决定是否开仓;通过买1及卖1委托大量次数对比决定是否平仓,不留隔夜单。
L2_BIDBIGTURNOVER>L2_ASKBIGTURNOVER&&L2_ASKBIGCOUNT>L2_BIDBIGCOUNT&&ISUP&&TIME<145800,BK;
L2_ASKBIGENTRASTCOUNT>L2_BIDBIGENTRASTCOUNT||TIME>145800,SP;
L2_BIDBIGTURNOVER<L2_ASKBIGTURNOVER&&L2_ASKBIGCOUNT<L2_BIDBIGCOUNT&&ISUP&&TIME<145800,SK;
L2_ASKBIGENTRASTCOUNT<L2_BIDBIGENTRASTCOUNT||TIME>145800,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
LEVEL-2 TICK模型
关键函数:SETDEALVOL,L2_TICK_DATA,BKPRICE,SKPRICE
使用周期:TICK
模型说明:模型每次下单手数为3手,当盘面总买量大于卖量且为主动买时,买开仓;当盘面总买量小于卖量且为主动卖是,卖开仓;盈利20点以上或亏损5点以上平仓出场。
SETDEALVOL(3);
L2_TICK_DATA('tbidvol')>L2_TICK_DATA('taskvol')&&L2_TICK_DATA('activity')=0,BK;
CLOSE-BKPRICE>20||CLOSE-BKPRICE<-5,SP;
L2_TICK_DATA('tbidvol')<L2_TICK_DATA('taskvol')&&L2_TICK_DATA('activity')=1,SK;
SKPRICE-CLOSE>20||SKPRICE-CLOSE<-5,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
7、套利交易模型编写示范
⑴如何编制简单价差类型的套利模型?
CROSS(300,CLOSE),BKSK; //CLOSE为两个品种的价差。当价差小于300时,买入开仓前一品种,卖出开仓后一品种
CROSS(CLOSE,500),SPBP;//当价差大于500时,卖出平仓前一品种,买入平仓后一品种
CROSS(CLOSE,600),SKBK;//当价差大于600时,卖出开仓前一品种,买入开仓后一品种
CROSS(400,CLOSE),BPSP;//当价差小于400时,买入平仓前一品种,卖出平仓后一品种
////内为文字说明,编写模型时不用写出
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵如何编制技术指标的套利模型?
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  := EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
MACD>0,BKSK;
MACD<0,SPBP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶如何编制组合类型的套利模型?
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时,买入平仓前一品种,卖出平仓后一品种
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
8、常见编写错误
★以下模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑴不允许使用交易指令作为变量名称。
如:BK:=CROSS(MA5,MA10);
正确写法为:CROSS(MA5,MA10);
⑵交易语句前不允许定义变量名称。
如:A:=CROSS(MA5,MA10),BK;
正确写法为:CROSS(MA5,MA10),BK;
⑶模型中只有开仓条件,没有平仓条件,如:
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SK;
注:模型默认有过滤机制,如果缺少完整的开平仓条件,模型不会进行监测和执行。如只想要模型来开仓,自己手动平仓,那么请在模型结尾处加入NOFILTER函数,修改如下:
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SK;
NOFILTER;
模型中必须使用=’定义变量名称。不允许只使用,如:
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CROSS(MA5,MA10),BPK;
CROSS(MA10,MA5),SPK;
正确写法为:CROSS(MA5,MA10),BK;
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10),BPK;
CROSS(MA10,MA5),SPK;
⑸编写时掉入逻辑思维的陷阱,在考虑模型条件时,不需要考虑什么条件下不进行交易,而是正向的去考虑一定要达到何种条件时才会进行交易,这样在编写语句的时候,只需将要求的各个条件逐个罗列出来,使用操作符连接即可。
例如,均线与MACD结合编写模型时,要求均线金叉时,MACD数值不得为负值,那么正向考虑,均线金叉时MACD的数值应该大于等于0,直接编写为:MACD>0&&CROSS(MA5,MA30)
⑹交易指令SKSPSPK以及BPBKBPK混合穿插使用,如:
例如将
A,BPK;
B,SPK;
TIME>=1458,BP;
TIME>=1458,SP;
写在一个模型中,主要问题是:
A、在进行多条件编写时,容易忽略掉交叉的情况使得模型编写不缜密;
B、模型执行时也会出现逻辑执行错误。
可以改写成:
A&&TIME<1458,BK;
B&&TIME<1458,SK;
A||TIME>=1458,BP;
B||TIME>=1458,SP;
⑺指标,模型的混用。如:
DRAWTEXT(CLOSE>OPEN,LOW,’*’);//模型中不允许使用绘图函数
CLOSE>OPEN,BPK;
CLOSE<OPEN,SPK;
改为:
CLOSE>OPEN,BPK;
CLOSE<OPEN,SPK;
⑻买卖方向容易混淆,比如平多单对应的是SP而不是BP
如示例,这样就不是一个完整的开平仓。BP是指平空单,而不是平多单。
A:=VALUEWHEN(TIME=0915,HIGH);
B:=VALUEWHEN(TIME=0915,LOW);
TIME>0915&&CROSS(CLOSE,B)&&TIME<1450,BK;
TIME>1450,BP;
正确书写:
A:=VALUEWHEN(TIME=0915,HIGH);
B:=VALUEWHEN(TIME=0915,LOW);
TIME>0915&&CROSS(CLOSE,B)&&TIME<1450,BK;
TIME>1450,SP;
“&&”“||”关系书写不完整明确,使得语句执行的结果与实际想要表达的内容不符。如:
MACD数值为正时,5日线金叉10日线或者10日线金叉30日线时进行交易的条件语句不可直接写作:
MACD>0&&CROSS(MA5,MA10)||CROSS(MA10,MA30);
而应该使用括号将后面的均线条件括起来:
MACD>0&&(CROSS(MA5,MA10)||CROSS(MA10,MA30));
注:不要吝啬使用(),只有准确的书写了语句才能达到想要的结果。
⑽进行日内交易时注意时间函数的使用,不仅平仓条件中需要使用时间函数控制,开仓条件也需要使用时间函数来进行控制。另外如果采取了当前K 线走完后发出交易指令的交易策略,更加要注意时间轴刻度与语句执行时间的关系。如:
MAN:=MA(CLOSE,15);
TIME>=0915&&TIME<1455&&CLOSE>MAN,BK;
TIME>=1455||CLOSE<MAN,SP;
TIME>=0900&&TIME<1455&&CLOSE<MAN,SK;
TIME>=1455||CLOSE>MAN,BP;
说明:
5分钟周期,0915之后进行日内交易,1455进行平仓,不仅需要在平仓条件中写入时间1455,还需要写入开仓条件,否则可能会在1455平仓后,继续开仓进行交易。
另外如果勾选当K先走完发出交易指令,该机制是出现指令的下一根K线开盘时发委托,由于尾盘平仓是在1455是最后一根K线,所以今天不会发指令,而是在明天第一根开盘时发委托,一定要注意掌握使用。
""
还没有人打赏,支持一下

评论|共 21 个

吾要成财

发表于 2013-7-21 15:53:49 | 显示全部楼层

拜读。。。。。。。。。。。。。。。

吾要成财

发表于 2013-7-21 15:54:56 | 显示全部楼层

不错。。。。。。。。。。。。。。。。。

吾要成财

发表于 2013-7-21 15:55:43 | 显示全部楼层

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

吾要成财

发表于 2013-7-21 16:15:22 | 显示全部楼层

看看看看看看看看

衣冠禽兽

发表于 2014-12-13 11:17:30 | 显示全部楼层

路过。。看下先。

盟国个风格

发表于 2014-12-13 12:05:06 | 显示全部楼层

感谢分享

张光铣

发表于 2014-12-13 12:05:10 | 显示全部楼层

多谢分享 看看是什么

yujopozb

发表于 2014-12-21 10:53:56 | 显示全部楼层

赚钱,赚积分。顶....

bbihstqa

发表于 2014-12-26 22:29:55 | 显示全部楼层

下了  的确不错

123下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则