交易模型编写教程.docx
- 文档编号:5858523
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:66
- 大小:503.36KB
交易模型编写教程.docx
《交易模型编写教程.docx》由会员分享,可在线阅读,更多相关《交易模型编写教程.docx(66页珍藏版)》请在冰豆网上搜索。
交易模型编写教程
一、程序化交易的编写
㈠、交易模型编写规范和一般原则
1、编辑平台支持的操作符
操作符
意义
例
+
加法
CLOSE+OPEN表示求收盘价及开盘价的和。
-
减法
CLOSE-OPEN表示求收盘价及开盘价的差。
*
乘法
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)
引用X在N个周期前的值
例:
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]ASVAR(Mytrader2009和Myadvisor(赢智)支持)
#IMPORT[CODE,PERIOD,FORMULA]ASVAR;
CODE文华码PERIOD周期FORMULA引用模型名
VAR 定义变量名
例子:
#IMPORT[1205,MIN5,TEST]ASM1005
意思是引用[豆粕1005]五分钟图上指标[TEST.FML]的数据
使用的方法:
如当前存在一个指标TEST.FML
//TEST.FML
CL:
=CLOSE;
OP:
=OPEN;
我想在新建的指标TEST1中引用[豆粕1005]五分钟周期上指标[TEST.FML]的数据
可以如下编写TEST1指标
//TEST1.FML
#IMPORT[1205,MIN5,TEST]ASVARTEST
DD:
VARTEST.CL;
DF:
VARTEST.OP;
引用的约束
1.只能引用.FML文件
2.只能引用如下周期MIN1MIN3MIN5MIN10MIN15MIN30HOUR1HOUR3HOUR8DAYWEEKMONTH
3.只能短周期引用长周期比如不能日线周期上加载引用了分钟数据的指标。
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)/(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)
⑶数理统计
AVEDEV(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周期内的总体标准差
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=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够大时,两者趋于相等。
⑷逻辑判断
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
交易模型买卖指令信号过滤函数。
(仅适用于交易模型的过滤)
交易模型公式后加“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)
返回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的正切值。
⑹时间函数
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)
当条件C1及C2均满足时,从P1画直线到P2,颜色为COLOR。
例:
DRAWLINE(MA18
DRAWTEXT(C,P,TEXT)
表示当条件C满足时在P上写TEXT文字。
例:
DRAWTEXT(CLOSE 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线阴线的实体部分。 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 画持仓量柱线 8、level-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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交易 模型 编写 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)