一、 程序化交易的编写 ㈠、交易模型编写规范和一般原则1、编辑平台支持的操作符 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TMP1:=(OPEN+CLOSE)/2;
:MA(TMP1,10);
上面的公式的第一个语句定义了一个局部变量TMP1,在下面一行中引用了这个局部变量,但是要注意的是这个公式在画图的时候只画了第二条语句MA10所求出的结果。 相反下面这个公式则需要画出两条线,第一条是自己定义的均价线,同时显示了均价的名称为AVP,第二条线是均价的简单移动平均线。 AVP:(OPEN+CLOSE)/2; MA(AVP,10); | | 声明了一个变量, 在画图时画出它并且按这个名字显示。 |
2、编辑平台支持的函数⑴引用数据 | | | 引用结算价(只有在日线周期盘后才能引用当日的结算价) | | | | | | | | | | | | 引用X在N个周期前的值
例:REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价 | | 引用N个周期后的数据。(N为大于等于1的整数)『未来函数』
例:REFX(CLOSE,5);表示引用自当前周期后第5个周期的收盘价 | | | | 根据文华码取出某一品种的最新价。
例:GETPRICE(1209);返回文华码为1209的合约品种的最新价。 | | 在源码中定义参数。
例:PARAM[N,1,100,12]
MAN:MA(CLOSE,N);
表示参数为N,最小值为1,最大值为100,缺省值为12. | #IMPORT [CODE,PERIOD,FORMULA] AS VAR(Mytrader2009和Myadvisor(赢智)支持) | #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.被引用的指标中不能存在引用 |
⑵金融统计 | 若X条件成立,则将当前位置到N周期前的数值设为1。『未来函数』
例:BACKSET(CLOSE>OPEN,3);表示当K线收阳时,自当前位置到3周期前的数值设为1 | | | | 表示统计在N周期内满足X条件的周期数。如果N为0则表示从已申请到的数据的第一天开始算起。
例:WR:=-100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N)); COUNT(WR>80,5);表示统计在5个周期内满足WR>80的次数 | | 返回X的动态移动平均,其中A为常数,并且必须介于0及1之间。
计算方法:DMA(N)=DMA(N-1)*(1-A)+X(N)*A 其中DMA(N-1)为第(N-1)天的DMA值。 | | 表示求X在N周期内的平滑移动平均。(指数加权)
计算方法:EMA(X,N)=[2*X+(N-1)*EMA(X,(N-1))]/(N+1) 其中EMA(X,(N-1))为第(N-1)天的EMA值 | | 表示求X在N周期内的加权平均。(线性加权)
计算方法:EMA2(X,N)=(N*X0+(N-1)*X1+(N-2)*X2+...+1*XN)/(N+(N-1)+(N-2)+...+1),X0表示本周期值,X1表示上一周期值... | | 得到X在N周期内的最高值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:HHV(HIGH,13);求13个周期内的最高价的最大值。 | | 得到X在N周期内的最高值位置到当前的周期数。如果N=0,则从本地数据的第一个有效周期开始算起。
例:HHVBARS(VOL,0); 求历史成交量最大的周期到当前的周期数 | | 得到X在N周期内的最小值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:LLV(LOW,25);表示求25个周期内最低价的最小值 | | 得到X在N周期内的最小值的位置到当前的周期数。如果N=0则从本地数据的第一个有效周期开始算起。
例:LLVBARS(VOL,0); 求历史成交量最小的周期到当前的周期数 | | 求X在N周期内的简单移动平均。
计算方法:MA=(A1+A2+A3+A4+A5)/5 求A在5个周期内的简单移动平均 | | 之字转向,当X变化量超过P时转向,当N取1,P为百分比数;当N取0,P为价位差值绝对值。『未来函数』 例:ZIGZAG(HIGH,10,1);表示最高价的10%的之字转向
ZIGZAG(MA(HIGH,34),100,0);表示34个周期内最高价均线的100个价位的之字转向 | | 取得ZIGZAG前M个波峰的值。其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
例:PEAK(HIGH,10,1,1);表示最高价的10%的之字转向的上一个波峰的数值; PEAK(MA(HIGH,34),100,1,0);表示34个周期内最高价均线的100个价位的之字转向的上一个波峰的数值 | | 取得ZIGZAG前M个波峰到当前周期的周期数。其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
例:PEAKBARS(HIGH,10,1,1);表示最高价的10%的之字转向的上一个波峰到当前的周期数
PEAKBARS(MA(HIGH,34),100,1,0);表示34个周期内最高价均线的100个价位的之字转向的上一个波峰到当前的周期数 | | 取得ZIGZAG前M个波谷的值。其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
例:TROUGH(LOW,10,1,1);表示最低价的10%的之字转向的上一个波谷的数值
TROUGH (MA(LOW,34),100,1,0);表示34个周期内最低价均线的100个价位的之字转向的上一个波谷的数值 | | 取得ZIGZAG前M个波谷到当前周期的周期数。其中X为数据,P为转折值(如果N为1,这个值为百分比数,否则为价位差值绝对值),M为大于等于1的整数。『未来函数』
TROUGH(LOW,10,1,1);表示最低价的10%的之字转向的上一个波谷到当前的周期数
TROUGH (MA(LOW,34),100,1,0);表示34个周期内最低价均线的100个价位的之字转向的上一个波谷到当前的周期数 | | 得到抛物转向值。N为计算周期,Step为步长,Max为极值。(系统函数,计算步骤后台自动完成) 例:SAR(17,0.03,0.3);表示计算17个周期抛物转向,步长为3%,极限值为30% | | 得到X在N个周期内的移动平均,M为权重(M为常数)。
计算方法:SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/N | | 得到X在N周期内的总和,如果N=0,则从第一个有效周期开始算起。
例: SUM(VOL,10);表示统计10周期内的成交量总和 | | | | | | 求X在N周期内的时间序列移动平均。
计算方法:TSMA(X,N)= FOCAST(X,N)+SLOPE(X,N) |
⑶数理统计 | | | | | 得到X的N周期线性回归预测值。 例:FORCAST(CLOSE,5);表示求5周期线性回归预测 | | 得到X在N周期内的线性回归的斜率 例:SLOPE(CLOSE,5);表示求5周期线性回归线的斜率 | | | | | | | | | | 设一个数列,数列中数据的总个数为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、平均绝对偏差AVEDEV(X,N):将偏差的绝对值相加,除以总个数N。 (65.2+26.2+17.2+54.8+53.8)/5=43.44。 4、数据偏差平方和DEVSQ(X,N):将偏差的平方相加。 (-65.2)²+ (-26.2)²+ (-17.2)²+ (54.8)²+ (53.8)²=11130.80。 5、总体样本方差VARP(X,N):将偏差的平方相加,总和除以总个数N。用公式可以这样算: (-65.2)²+ (-26.2)²+ (-17.2)²+ (54.8)²+ (53.8)²/5=2226.16。 6、样本方差VAR(X,N):是总体方差的N/(N-1)倍。 2226.16*5/(5-1)=2782.70 估算样本方差,总比总体样本方差大一点,当N够大时,两者趋于相等。 7、总体标准差STDP(X,N):方差的开方。 [(-65.2)²+ (-26.2)²+ (-17.2)²+ (54.8)²+ (53.8)²/5]½=47.18。 8、标准差STD(X,N):估算样本方差的开方。 [2226.16*5/(5-1)]½=52.75 同样,估算标准差也比总体标准差大一点,当N够大时,两者趋于相等。 |
⑷逻辑判断 | 判断条件“A位于B及C之间”是否成立,如果条件成立则返回1(yes),否则返回0(no)。 例:BETWEEN(CLOSE,MA5,MA40); 表示收盘价介于5日均线与40日均线之间。 | | 表示X上穿Y。 例:CROSS(CLOSE,MA(CLOSE,5)); 表示收盘线从下方向上穿过5日均线 | | 判断N个周期内是否有满足条件COND的情况发生。 例:EXIST(CLOSE>REF(HIGH,1),10); 表示10个周期中是否存在收盘价大于前一个周期的最高价 | | 判断过去N个周期内是否一直满足条件COND。 例:EVERY(CLOSE>OPEN,5);表示5个周期内一直是阳线 | | 判断过去N1到N2周期内是否一直满足条件COND。 例:LAST(CLOSE>OPEN,10,5); 表示从过去第10个周期到第5个周期内一直是阳线 | | 如果A在前N个周期内都小于B,本周期上穿B,则返回1。否则返回0。例:LONGCROSS(CLOSE,MA(CLOSE,10),20); 表示收盘线在10日均线之下持续20周期后从下向上穿过10日均线。 | | 交易模型买卖指令信号过滤函数。(仅适用于交易模型的过滤) 交易模型公式后加“NOFILTER;”是指不需要过滤,出现任何交易指令都会执行。公式后不加“NOFILTER;”是指当连续出现同方向的交易指令时,系统只显示出第一个交易指令,其他交易指令自动被过滤。 | | | | | | | | | | 当条件COND满足时,取当时的DATA的值,否则取得前面一个满足条件COND的值。 例:VALUEWHEN(HIGH>REF(HIGH,5),HIGH); 表示当前最高价大于前五个周期最高价的最大值时返回当前最高价。 |
⑸数学运算 | 求X的绝对值 例:ABS(SAR(17,0.03,0.3));返回抛物转向SAR(17,0.03,0.3)的绝对值。 | | | | | | | | | | | | | | | | 取X的整数部分,返回沿X绝对值减小方向最接近的整数。 | | 得到X的自然对数,以e为底的对数。 例:LN(OPEN);求开盘价的自然对数。 | | 得到X的常用对数,取得X的以10为底的对数。 例:LOG(OPEN);求开盘价的以10为底的对数。 | | 求A,B中的较大者。 例:MAX(CLOSE-OPEN,0); 表示若收盘价大于开盘价返回它们的差值,否则返回0。 | | 求A,B中的较小者。 例:MIN(OPEN,CLOSE);返回开盘价和收盘价中的较小值。 | | 返回A对B得到模。 例:MOD(CLOSE,OPEN);收盘价除以开盘价所得余数 | | 当X为0时返回1,否则返回0。 例:NOT(TIME=090530);表示该周期对应的时间不是9:05:30AM。 | | 得到A的B次幂。 例:POW(CLOSE,2);求得收盘价的2次方。 | | 取反,返回符号相反的数值。 例:REVERSE(LOW);返回-LOW。 | | 得到X的符号,如果X>0则返回1,如果X<0则返回-1,否则返回0。 | | | | 得到X的平方根。 例:SQRT(CLOSE);收盘价的平方根。 | | 得到X的平方。 例:SQUARE(CLOSE);收盘价的平方。 | | |
⑹时间函数 | | | 取得当前周期的日数(700101-341231)。 | | | | | | | | | | 取得当前周期的时间数(0-2359), 秒级周期返回值范围为:0-235959。 | | | | |
⑺绘图 DRAWLINE(C1,P1,C2,P2,COLOR) | 当条件C1及C2均满足时,从P1画直线到P2,颜色为COLOR。
例:DRAWLINE(MA18< CLOSE,OPEN,MA5 >CLOSE,CLOSE,COLORCYAN); 表示当收盘价大于18日均线并且小于5日均线时,从开盘价画青色直线到收盘价。 | | 表示当条件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满足时,填充DATA1及DATA2包围的区域。
例:FILLRGN(MA5>MA10,MA5,MA10,COLORRED); 表示MA5>MA10时以红色填充MA5和MA10之间的区域。 | 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满足时,从P1到P2画柱线,颜色为Color,如果Empty取1,则为空心柱;如果Empty取0,则为实心柱。
例:STICKLINE(OPEN-CLOSE>0,OPEN,CLOSE,COLORCYAN,0); 表示当开盘价大于收盘价时,从开盘价到收盘价画青色的实心柱,即K线阴线的实体部分。 | | 画垂直线,当条件COND满足时,画垂直线。
例:VERTLINE(HIGH>=HHV(HIGH,30),COLORRED); 表示在价格创30天新高时画垂直线。 | | 自定义颜色函数。
R,G,B的数值范围都在0~255之间,例:RGB(225,225,225)表示白色 | | | | | | | | | | |
8、level-2函数(只有嬴智版本支持) | 周期内多头平仓次数。
用法:L2_BPTIMES返回多头平仓次数。 | | 周期内多头开仓次数。
用法:L2_BKTIMES返回多头开仓次数。 | | 周期内空头平仓次数。
用法:L2_BPTIMES返回空头平仓次数。 | | 周期内空头开仓次数。
用法:L2_SKTIMES返回空头开仓次数。 | | 周期内卖主动次数。
用法:L2_ASKACCOUNT返回卖主动次数。 | | 周期内买主动次数。
用法:L2_BIDACCOUNT返回买主动次数。 | | 周期内平均总买量。
用法:L2_BIDAVVOL返回周期内平均总买量。 | | 周期内平均总卖量。
用法:L2_ASKAVVOL返回周期内平均总卖量。 | | 周期内卖盘加全平均价。
用法:L2_ASKAVPRICE返回卖盘加全平均价。 | | 周期内买盘加全平均价。
用法:L2_BIDAVPRICE返回买盘加全平均价。 | | 周期内空头大单成交额。
用法:L2_ASKBIGTURNOVER返回空头大单成交额。 | | 周期内多头大单成交额。
用法:L2_BIDBIGTURNOVER返回多头大单成交额。 | | 周期内空头大单成交次数。
用法:L2_ASKBIGCOUNT返回周期内空头大单成交次数。 | | 周期内多头大单成交次数。
用法:L2_BIDBIGCOUNT返回周期内多头大单成交次数。 | | 周期内总成交额。
用法:L2_TOTALTURNOVER返回总成交额。 | | 周期内卖1委托明细大量次数。
用法:L2_ASKBIGENTRASTCOUNT返回卖1委托明细大量次数。 | | 周期内买1委托明细大量次数。
用法:L2_BIDBIGENTRASTCOUNT返回买1委托明细大量次数。 | | 该周期最后时刻的买卖价格。
用法: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' | | 取每笔买卖盘数据(只能用于Tick图,每笔Tick时间间隔请设置为0)。
用法:L2_TICK_DATA(TEXT)求内容为TEXT的盘面实时数据。
例子:L2_TICK_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
总买总卖总买量总卖量
tbid,task,tbidvol,taskvol
委买1-委买10委卖1-委卖10
buy_entrust1,buy_entrust2,buy_entrust3,buy_entrust4,buy_entrust5,
buy_entrust6,buy_entrust7,buy_entrust8,buy_entrust9,buy_entrust10,
sell_entrust1,sell_entrust2,sell_entrust3,sell_entrust4,sell_entrust5,
sell_entrust6,sell_entrust7,sell_entrust8,sell_entrust9,sell_entrust10
最新价持仓量主动买卖(返回意义-1没取到,0主动买,1主动卖,2换手)成交量
newprice,opi,activity,deltavol |
9、头寸函数(连接文华服务器才能使用) | 取出交易系统中的权益。
用法:TRD_ASSETS返回交易系统的权益。
注意:该函数只有登陆一键通下单系统才能使用。效果测试不执行此函数。 | | 取出交易系统中的可用资金。
用法:TRD_CAPITAL返回交易系统的可用资金。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的多头开仓均价。
用法:TRD_LONGSPRICE返回交易系统的多头开仓均价。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的空头开仓均价。
用法:TRD_SHORTSPRICE返回交易系统的空头开仓均价。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的多头持仓。
用法:TRD_LONGSOPI返回交易系统的多头持仓。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的空头持仓。
用法:TRD_SHORTSOPI返回交易系统的空头持仓。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的多头可平仓手数。
用法:TRD_LONGSOPIREMAIN返回交易系统的多头可平仓手数。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的空头可平仓手数。
用法:TRD_SHORTSOPIREMAIN返回交易系统的空头可平仓手数。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的多头浮动盈亏。
用法:TRD_LONGSEARN返回交易系统的多头浮动盈亏。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的空头浮动盈亏。
用法:TRD_SHORTSEARN返回交易系统的空头浮动盈亏。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的涨停价格。
用法:TRD_LIMITUP返回交易系统的涨停价格。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 取出交易系统中的跌停价格。
用法:TRD_LIMITDOWN返回交易系统的跌停价格。
注意:该函数只有登陆一键通下单系统才能使用。
效果测试不执行此函数。 | | 设置模型每次下单按资金的比例下单。
用法:SETDEALPERCENT(fPercent)表示每次按资金的fPercent下单。
例子:SETDEALPERCENT(0.2);//每次按资金比例的%20下单
注:不可与SETDEALVOL函数同时使用
交易系统必须启动
效果测试不执行此函数 | | 设置模型每次下单按设置的手数下单。
用法:SETDEALVOL(nVol)表示每次模型下nVol手单。
例子:SETDEALVOL(2);//模型每次下单2手
注:不可与SETDEALPERCENT函数同时使用
交易系统必须启动
效果测试不执行此函数 |
10、信号记录函数(连接文华服务器才能使用) | 模型买开信号价位。
用法:BKPRICE返回上一次模型买开仓价。 | | 上一次买开信号位置
用法:BARSBK返回上一次买开仓距离当前k线的k线数。 | | 模型卖开信号价位。
用法:SKPRICE返回上一次模型卖开仓价。 | | 上一次卖开信号位置
用法:BARSSK返回上一次卖开仓距离当前k线的k线数。 |
3、编辑平台可以使用的常数 注:在公式内即使你定义了某种颜色,在显示的时候也未必是此种颜色,取决于背景颜色当前页面里是否保了该指标的颜色及您是否在显示的时候改变了该指标的颜色设置。 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、编辑平台使用的交易指令交易模型中的交易指令如下: 期货交易指令 套利模型中的交易指令如下: 注:在效果测试使用如下机制: 连续的开仓指令只使用第一个指令进行开仓,开仓时使用当时的全部资金,连续的平仓指令,只有第一个有效,平掉当时的全部持仓,其他的平仓指令算做错误指令! 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; 利用并且(&&)和或者(||)这些逻辑语句,将A、B模型合并为模型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、学习编写前学要明确注意的几个概念公式: 泛指指标、模型。没有具体指向性。 指标: 指能够绘出图线但不发交易指令的公式。指标是一个技术分析范畴的概念。 交易信号: 指指标上出现的提示投资者买卖的指示,可以是图线交叉、文字、图形。投资者需要按照信号指示去手动委托下单。交易信号也是一个技术分析范畴的概念。 交易模型: 指能够发出BK、SP等交易指令但是不绘出图线的公式,模型还包含下单方向,交易手数,止盈止损等与交易、资金使用相关的参数设置。交易模型是一个程序化交易范畴的概念。 交易指令: 指交易模型自动发出的下单委托指令,可以不经过投资者确认直接下单,也可以等待投资者回车确认再下单。交易指令在K线图上以不同颜色和形状的箭头来代表。交易指令是一个程序化交易范畴的概念。 2、如何进行基础指标的编写(1)、均线指标 关键函数 MA | 求X在N周期内的简单移动平均。
计算方法:MA=(A1+A2+A3+A4+A5)/5 求A在5个周期内的简单移动平均 |
①五周期均线 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)、四周法则 关键函数 HHV、LLV、REF | 得到X在N周期内的最高值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:HHV(HIGH,13);求13个周期内的最高价的最大值。 | | 得到X在N周期内的最小值,如果N=0,则从本地数据的第一个有效周期开始算起。
例:LLV(LOW,25);表示求25个周期内最低价的最小值 | | 引用X在N个周期前的值
例: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,此类错误语法检测无法识别,往往造成软件应用错误。 |
②均线金死叉模型 关键函数:MA、EMA、EMA2、CROSS 使用周期:所有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 使用周期:日线 模型说明: 利用DIFF和DEA的比较和收盘价的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; ★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负 ⑵通道类 ①唐奇安通道模型 关键函数:HHV、LLV、REF、CROSS 使用周期:日线 模型说明: 突破前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线模型 关键函数:STD、CROSS、ISUP、ISDOWN 使用周期:日线 模型说明:收盘价向上突破布林通道下轨并前当根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; ★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负 ⑶其他类 ①宝塔线 关键函数:REF、HHV、LLV 使用周期:日线 模型说明: 宝塔线变红做多,宝塔线变绿做空。因为文华并未公布宝塔线的后台公式,所以此指标的显示结果与文华系统中的宝塔显示能结果有一定的区别。 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; ★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负 ②分形 关键函数:MA、REF、REFX(未来函数)、BARSLAST、CROSS、VALUEWHEN 使用周期:日线 模型说明:向上突破分形做多,向下突破分形做空 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; ★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负 ⑶三减六日乖离模型: 关键函数:REF,MA,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分钟,如1455,1450,1445这样,所以其最后一根K线的1455这根。而如果您使用的是3分钟周期,那么1455就不是最后一根K线了,因为3分钟周期上所能取到的时间点为每3分钟,如1454,1457,那么就需要作出相应修改,如TIME=1455,BP;就需要修改为TIME=1457,BP; | B、开仓漏写时间控制 进行日内交易时注意时间函数的使用,不仅平仓条件中需要使用时间函数控制,有时开仓条件也需要使用时间函数来进行控制。 例如:上面的模型,14:50进行平仓,不仅需要在平仓条件中写入时间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、周期使用混乱 目前跨周期函数只允许短周期引用长周期数据,如不能在日周期上引用分钟周期数据。 目前可供引用周期:MIN1、MIN3、MIN5、MIN10、MIN15、MIN30、HOUR1、HOUR3、HOUR8、DAY、WEEK、MONTH 。 |
⑵跨周期均线组合模型 关键函数:#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; ★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负 6、LEVEL-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 使用周期:十五秒 模型说明:14点58分之前由周期内多/空头大单成交额及周期内多/空头平仓次数对比决定是否开仓;通过买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) ⑹交易指令SK、SP与SPK以及BP、BK与BPK混合穿插使用,如: 例如将 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分钟周期,09:15之后进行日内交易,14:55进行平仓,不仅需要在平仓条件中写入时间1455,还需要写入开仓条件,否则可能会在1455平仓后,继续开仓进行交易。 另外如果勾选当K先走完发出交易指令,该机制是出现指令的下一根K线开盘时发委托,由于尾盘平仓是在1455是最后一根K线,所以今天不会发指令,而是在明天第一根开盘时发委托,一定要注意掌握使用。 |