-
一、
程序化交易的编写
㈠、交易模型编写规范和一般原则
1
、编辑平台支持的操作符
操作符
+
-
*
/
AND
OR
>
<
>=
<=
<>
=
:
=
意义
加法
减法
乘法
除法
与
(<
/p>
并且
)
,也可简写为
&&
或
(
或者
),
也可简写为
||
大于
小于
大于等于
小于等于
例
CLOSE
+
OPEN
表示求收盘价及开盘价的和。
CLOSE
-
OPEN
表示求收盘价及开盘价的差。
CLOSE*OPEN
表示求收盘价及开盘价的积。
CLOSE/OPEN
表示求收盘价及开盘价的商。
CLOSE>OPEN
表示判断当前周期是否收阳。
CLOSE=OPEN
表示判断当前周期是否平盘。
不等于
等于
只定义一个局部变量
(
这个变量在画图时是不画的
)
:
声明了一个变量,
TMP1:=(OPEN+CLOSE)/2;
:MA(TMP1,10);
上面的公式的第一个语句定义
了一个局部
在下面一行中引用了这个局部变
在画图时画出它并且
按这个名字显
变量
TMP1
,
示。
量,
但是要注意
的是这个公式在画图的时候
只画了第二条语句
MA10
所求出的结果。
相反下面这个公式则需要画出
两条线,
第一
条是自己定义的均价线,
同时显示了均价的
名称为
AVP,
第二
条线是均价的简单移动平
均线。
AVP:(OPEN+CLOSE)/2;
MA(AVP,10);
2
、编辑平台支持的函数
⑴引用数据
AVPRICE
引用均价
(
在盘后对于国内三个期货
交易所指结算价
)
SETTLE
引用结算价
(
只有在日线周期盘后才<
/p>
能引用当日的结算价
)
CLOSE
引用收盘价
(
在盘中指最新价
)
,也可
简写为
C
HIGH
LOW
OPEN
OPI
REF(X,N)
引用最高价,也可简写为
H
。
引用最低价,也可简写为
L
。
引用开盘价,也可简写为
O
。
引用持仓量
引用
X
在
N
个周期前的值
例
:REF(CLOSE,5);
表示引用当前周期
前第
5
个周
期的收盘价
REFX(X,N)
<
/p>
引用
N
个周期后的数据。
(
N
为大于等
于
1
的整数)
『未来函数』
例:
REFX(CLOSE,5);
表
示引用自当前
周期后第
5
个周期的收盘
价
VOL
GETPRICE(N)
引用成交量,也可简写为
V
。
根据文华码取出某一品种的最新价。
例:
GETPRICE(1209);
返回文华码为
1209
的合约品种的最新价。
PARAM
在源码中定义参数。
<
/p>
[
参数名称,最小值,最
例:
PARAM[N,1,100,12]
大值,缺省值
]
MAN:MA(CLOSE,N);
表示参数为
N
,
最小值为
1
,
最大值为
100
,缺省
值为
12.
#IMPORT
#IMPORT[CODE,PERIOD,FORMULA]AS
[CODE,PERIOD,FORMULA]
VAR;
AS
VAR
(
Mytrader2009
CODE
文华码
PERIOD
周期
FORMULA
和
Myadvisor
(赢智)
支
引用模型名
持)
VAR
定义变量名
例子:
#IMPORT
[1205,MIN5,TEST]
AS
M1005
意思是引用
[
豆粕
1005]
五分钟图上
指标
[]
的数据
使用的方法:
如当前存在一个指标
能引用
.FML
文件
2.
只能引用如下周期
MIN1
MIN3
MIN5
MIN10
MIN15
MIN30
HOUR1
HOUR3
HOUR8 DAY WEEK MONTH <
/p>
3.
只能短周期引用长周期比如不能日
线
周期上加载引用了分钟数据的指
标。
4.
被引用的指标中不能存在引用
⑵金融统计
BACKSET(X,N)
若
X
条件成立
,
则将当
前位置到
N
周期前的数值设为
1
。
『未来函数』
例
:
BACKSET(CLOSE>OPEN,3);
表示当
p>
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);
表示统计在
p>
5
个周期内满足
WR>80
的次数
DMA(X,A)
返回
X
的动态移动平均,其中
A
为常数,并且必须介于
0
及
1
之间。
计算方法:
D
MA(N)=DMA(N-1)*(1-A)+X(N)*A
其中
DMA(N-1)
为第
(N-1)
天的
DMA
值。
EMA(X,N)
表示求
X
在
N
周期内的平滑移动
平均。
(指数加权)
计
算
方
法
:
< br>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
表示本周期值,<
/p>
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<
/p>
周期内的最小值的位置到当前的周期数。
如果
N=0
则从本地
数据的第一个有效周期开始算起。
例:
LLVBARS(VOL,0);
求历史成交量最小的周期到当前的周期数
MA(X,N)
求
X
在
N
周期内的简单移动平均
。
计算方法:
MA=(A1+A2+A3+A4+A5)/5 <
/p>
求
A
在
5
个周期内的简单移动平均
ZIGZAG(X,P,N)
之字
转向
,
当
X
变
化量超过
P
时转向
,
< br>当
N
取
1,P
< br>为百分比数
;
当
N
取
0,P
为价位差值绝对值。
『未来函数』
例:
ZIGZAG(
HIGH,10,1);
表示最高价的
10%
< br>的之字转向
ZIGZAG(MA(HIGH,34),
100,0);
表示
34
个周期内最高
价均线的
100
个价
位的之字转向
p>
PEAK(X,P,M,N)
取得
ZIGZAG
< br>前
M
个波峰的值。
其中
X
为数据,
P
为转折值
(如果
N
为
1
,
这个值为百分比数,否则为价位差值绝对值)
,
M
为大于等于
1
的整数。
『未来函数』
例:
PEAK(HIGH,10,1,1);
表示最高价的
p>
10%
的之字转向的上一个波峰的
数值
p>
;
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);
p>
表示最高价的
10%
的之字转向的上一个波
峰到当前的周期数
PEAKBAR
S(MA(HIGH,34),100,1,0);
表示
34<
/p>
个周期内最高价均线的
100
个价位的之
字转向的上一个波峰到当前的周期数
TROUGH(X,P,M,N)
取
得
ZIGZAG
前
M
< br>个波谷的值。
其中
X
为数据,<
/p>
P
为转折值
(如果
N
为
1
,
这
个值为百分比数,否则为价位差值绝对值)
,
M
为大于等于
1
的整数。
『未来
函数』
例:
TROUGH(LOW,
10,1,1);
表示最低价的
10%
的之字转向的上一个波谷
的数值
TROUGH (MA(LOW,34),100,1,0);
表示
34
个周期内最低价均线的
100
个
价位的之字转向的上一个波谷的数值
TROUGHBARS(X,P,M,
取得
ZIGZAG
前
M
个波谷到当前周期的周期数。其中
X
为数据,
P
为转
N)
折值(如果
N
为
1<
/p>
,这个值为百分比数,否则为价位差值绝对值)
,
M
为大于等于
1
的整数。
p>
『未来函数』
TROUGH(LOW,1
0,1,1);
表示最低价的
10%
的
之字转向的上一个波谷到当
前的周期数
TROUGH (MA(LOW,34),100,1,0);
表示
34
个周期内最低价均线的
100
个
价位的之字转向的上一个波谷到当前的周期数
SAR(N,Step,Max)
得
到抛物转向值。
N
为计算周期
,Ste
p
为步长
,Max
为极值。
(系统函数,
计算步骤后台自动完成)
例:
SAR(17,,;
表示计算
17
个周期抛物转向,
步长为
3%
,
极限值为
30%
SMA(X,N,M)
得到
X
在
N
个周期内的移动平均,
M
为权重(
< br>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)
TRMA(X,N)
TSMA(X,N)
得到
X
向前累加直到大于
A
时
的周期数。
求
X
在
N
周期内的三角移动平均。<
/p>
求
X
在
N
周期内的时间序列移动平均。
计算方法:
TSMA(X,N)=
FOCAST(X,N)+SLOPE(X,N)
⑶数理统计
AVEDEV(X,N)
DEVSQ(X,N)
FORCAST(X,N)
求
X
在
N
周期内的平均
绝对偏差。
数据偏差平方和。
p>
得到
X
的
N
周期线性回归预测值。
例
< br>:FORCAST(CLOSE,5);
表示求
5
周期线性回归预测
SLOPE(X,N)
得到
X
在
N
周期内的线性回
归的斜率
例
:SLOPE(CLOS
E,5);
表示求
5
周期线性回归线的
斜率
STD(X,N)
STDP(X,N)
VAR(X,N)
VARP(X,N)
得到
X
在
N
周期内的标准差<
/p>
得到
X
在
p>
N
周期内的总体标准差
< br>得到
X
在
N
周期内的样本方差
得到
X
在
N
周期内的总体样本方差
< br>
数理统计举例说明:
设一个
数列,数列中数据的总个数为
N
,以今天(
2005-10-14
)五天
内的
A0605
收盘价为例,
N
就为
5
。
数列的内容为:
{
2766
,
2805
,
2814
,
2886
,
2885
}
。
p>
1
、
算
术
平
均
值
MA(CLOSE,5)
:
数
据
总
和
除
以
总
个
数
N
p>
。
(2766+2805+2814+2886+2885)/5=
。
可以用公式
MA(CLOSE,5),
从今天
的值上看出。
2
、偏差:每个数据,减去算术平均值的结果。<
/p>
=
,
=, =, =, =,
p>
各
偏差相加,应该是等于
0
的。
3
、
< br>平均绝对偏差
AVEDEV(X,N)
:
将偏差的绝对值相加,
除以总个数
N
< br>。
++++/5=
。
< br>4
、
数据偏差平方和
DEVSQ
(X,N)
:
将偏差的平方相加。
?+
?+
?+
?+
?=。
5
、
总体样本方差
VARP(X,N
)
:
将偏差的平方相加,
总和除以总个
数
N
。
用公式可以这样算:
?+ ?+ ?+ ?+ ?/5=。
6
、样本方差
VAR(X,N)
:是总体方差的
N/(N-1)
倍。
*5/(5-1)=
估算
样本方差,总比总体样本
方差大一点,当
N
够大时,两者趋于相等。
7
、总体标准差
STDP(X,
N)
:方差的开方。
[?+ ?+
?+ ?+ ?/5]?=。
8
、标
准差
STD(X,N)
:估算样本方差的开方。
[*5/(5-
1)]?= 同样,
估算标准差也比
总体标准差大一点,当
N
够大时,两者趋于相等。
更多期货股票学习资料点击:
⑷逻辑判断
BETWEEN(A,B,C)
判断
条件“A
位于
B
及
C
之间”是否成立,如果条件成立则返
回
< br>1(yes),
否则返回
0(no)
。
例:
BETWEEN(CLO
SE,MA5,MA40);
表示收盘价介于
5
日均线与
40
日均线之间。
CROSS(X,Y)
表示
X
上穿
Y
。
例:
CROSS(C
LOSE,MA(CLOSE,5));
表示收盘线从下方向
上穿过
5
日均线
EXIST(COND,N)
判断<
/p>
N
个周期内是否有满足条件
COND
p>
的情况发生。
例:
EXIST(CLOSE>REF(HIGH,1),10);
表示
10
个周期中是否存在收盘价大于前一个周期的最高价
EVERY(COND,N)
p>
判断过去
N
个周期内是否一直满足条件
p>
COND
。
例:
EVERY(CLOSE>OPEN,5);
表示
5
个周期内一直是阳线
LAST(COND,N1,N2)
判断过去
N1
到
N2
< br>周期内是否一直满足条件
COND
。
例:
LAST(CLOSE>OPEN,10,5);<
/p>
表示从过去第
10
个周期到第
5
个周期内一直是阳线
LONGCROSS(A,B,N)
如果
A
在前
N
个周期内都小于
B
,
本周期上穿
B
,
则返回
1
。
否
则返回
0
。例:
LONGCROSS(CLOSE,MA(CLOSE,10)
,20);
表示收盘线在
10
日均线之下持续
20
周期后从下向上穿过
p>
10
日均线。
NOFILTER
交易模型买卖指令
信号过滤函数。
(仅适用于交易模型的过滤)
交易模型公式后加“NOFILTER;”是指不需要过滤,出现任何
交易指令
都会执行。公式后不加“NOFILTER;”是指当连续出
现同方向的交易指令时,系
统只显示出第一个交易指令,其他
交易指令自动被过滤。
ISDOWN
ISEQUAL
ISUP
ISLASTBAR
VALUEWHEN(COND,DATA)
判断该周期是否收阴。
判断该周期是否平盘。
判断该周期是否收阳。
判断当前周期
是否为最后一根
K
线。
当条件
COND
满足时,取当时的
< br>DATA
的值,否则取得前面一个
满足条件
COND
的值。
例:
p>
VALUEWHEN(HIGH>REF(HIGH,5),HIGH);
< br>
表示当前最高价大于前五个周期最高价的最大值时返回当前
最高价。
⑸数学运算
ABS(X)
求
X
的绝对值
例:
ABS(SAR(17,,);
返
回抛物转向
SAR(17,,
的绝对值。
ACOS(X)
ASIN(X)
ATAN(X)
COS(X)
EXP(X)
CEILING(X)
FLOOR(X)
INTPART(X)
LN(X)
求
X
的反余弦值
求
< br>X
的反正弦值
求
X
的反正切值
返回
X
的余弦值
返回<
/p>
e
的
X
次幂
p>
向上舍入,返回沿
X
数值增大方向最接近的整数。
向下舍入,返回沿
X
数值减小方向最接近的整数。
取
X
的整数部分,返回沿
X
绝对值减小方向最接近的整数。
得到
X
的自然对数,以
e
< br>为底的对数。
例:
LN(OP
EN);
求开盘价的自然对数。
LOG(X)
得到
< br>X
的常用对数,取得
X
的以
p>
10
为底的对数。
例:
LOG(OPEN);
求开盘价的以
10
为底的对数。
MAX(A,B)
求
A,B
中的较大者。
例:
MAX(CLOSE-
OPEN,0);
表示若收盘价大于开盘价返回它们的差值,
否则返回
0
。
MIN(A,B)
求
A,B
中的较小者。
例:<
/p>
MIN(OPEN,CLOSE);
返回开盘价和收盘价中的较小
值。
MOD(A,B)
返回
A
对
B
得到模。
例:
MOD(C
LOSE,OPEN);
收盘价除以开盘价所得余数
NOT(X)
当
X
为
0
时返回
1,
否则返回
0
。
例
:
NOT(TIME=0
90530);
表
示
该
周
期
对
应
的
时
间
不
是
9:05:30AM
。
POW(A,B)
得到
A
的
B
次幂。
例:
POW(CLOSE,2);
求得收盘价的
2
次方。
REVERSE(X)
取反,返回符号相反的数值。
例:<
/p>
REVERSE(LOW);
返回
-LO
W
。
SGN(X)
得到
< br>X
的符号,如果
X>0
则返回<
/p>
1,
如果
X<0
则返回-
1
,否则
返回
0
。
SIN(X)
SQRT(X)
得到
X
的正弦值。
得到
X
的平方根。
例:<
/p>
SQRT(CLOSE);
收盘价的平方根。
SQUARE(X)
得到
p>
X
的平方。
例:
SQUARE(CLOSE);
收盘价的平方。
TAN(X)
得到
X
的正切值。
更多期货股票学习资料点击:
⑹时间函数
BARPOS
取得当前
K
线的位置。
取
得
当
前
周
期
的
日
数
< br>DATE
(
700101-3
41231
)
。
DAY
HOUR
MINUTE
取得当前周期的日数(
1-31
)
。
取得当前周期的小时数(
0-23
)<
/p>
。
取得当前周期的分钟数(
0-59
)
。
MONTH
取得当前周期的月数(<
/p>
1-12
)
。
取得当前周期的时间数(
0-2359
)
,
TIME
秒级周期返回值范围为:<
/p>
0-235959
。
WEEKDAY
YEAR
取得当前周期的星期数(<
/p>
0-6
)
。
<
/p>
取得当前周期的年数(
1970-2034
)
。
⑺绘图
DRAWLINE(C1,P1,C2,P2,COLOR)
当条件
C1
及
C2
均满足时,从
P1
画直线到
P2
,
颜色为
COL
OR
。
例
:
DRAWLINE(MA18<
CLOSE,OPEN,MA5 >CLOSE,CLOSE,COLORCYAN);
表
示当收盘价大于
18
日均线并且小于
5
日均线时,
从开盘价画青色直线到收盘价。
DRAWTEXT(C,P,TEXT)
< br>表示当条件
C
满足时在
P
上写
TEXT
文字。
例
:
DRAWTEXT(CLOSE<
OPEN&&REF(CLOSE,1)<
REF(OPEN,1)
&&REF(VOL,1)*<
VOL,LOW,'
注
');
表示连续两日收阴并且成交量比前一日至少多
10%
< br>时,在最低价上写“注”字。
DRAWSL(COND,DATA,SLOPE,LEN,EXPAND,
画斜线,当条件
COND
满足时,从
DATA
开始以每
COLOR)
< br>
个周期相差
SLOPE
个点的
斜率画斜线,划线长度
为
LEN
个周期
,
EXPAND
为线段的延长方式(
0
:
不延伸;
1:
向左延伸;
2:
向右延伸;
3
:
双向延伸)
。
<
/p>
例
:
DRAWSL(LOW=LLV(L
OW,50),LOW,5,3,2,COLORRED)
;
表示当前最低价等于
50
周期内的最小值时,
< br>从
当前最小值开始以每隔
5
个点
的斜率画长度为
3
个周期向右延伸的斜线,颜色为红色
DRAWNUMBER
< br>(COND,DATA,NUMBER,PRECISION,COLOR)
<
/p>
画数字。当条件
COND
满足时,在
p>
DATA
位置写数
字
NUMBER
(为数组)
,精度为
P
RECISION
(小数点
后有几位数字)
。
例
:
DRAWNUMBER(CLOSE/OPEN>,HIGH,(CLOSE-
OPEN)/O
PEN*100,2,COLORRED);
表示当日涨幅大于
8%
时
在最高价位置
显示涨幅
(
相对开盘价的百分比
)
p>
。
FILLRGN
(COND,DATA1,DATA2,COLOR)
填充区域,当条件
COND
满足时,填充
p>
DATA1
及
DATA2
< br>包围的区域。
例:
FILLR
GN(MA5>MA10,MA5,MA10,COLORRED);
表
示
MA5>MA10
时以红色填充
< br>MA5
和
MA10
之间的区
p>
域。
POLYLINE
(COND,DATA,COLOR)
画折线,
当条件
COND
满足时,<
/p>
连接各个
DATA
点。
< br>
例
:
POLYLINE(CL
OSE>=HHV(CLOSE,100),CLOSE,COLOR
RED);
p>
表示在收盘价创
100
天新高点之间画折<
/p>
线。
PARTLINE
(COND,DATA,COLOR)
同
POLYLINE
。
例
:
PARTLINE(HIGH>REF(HI
GH,1),HIGH,COLORRED);
表示当期最高价大于前期最高价用红色
绘制最高
价连线线段。
STICKLINE
如果条件
C
p>
满足时,从
P1
到
P2
画柱线,颜色为
(C,P1,P2,Color,Empt
y)
Color,
如果
Empty
取
1
,
则为空心柱;
如果
Empty
< br>取
0
,则为实心柱。
例
:
STICKLINE(OPEN-
CLOSE>0,OPEN,CLOSE,COLORCYA
N,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)
表示白色<
/p>
COLORSTICK
VOLUMESTICK
BAMBOOLINE
CIRCLEDOT
OPISTICK
画彩色柱线
画成交量线
画竹线
画圆
画持仓量柱线
8
、
lev
el-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
用法:
p>
L2_BIDAVVOL
返回周期内平均总买量。
< br>
周期内平均总卖量。
L2_ASKAVVOL
用法:
p>
L2_ASKAVVOL
返回周期内平均总卖量。
< br>
周期内卖盘加全平均价。
L2_ASKAVPRICE
用法:
L2_ASKAVPRICE
返回卖盘加全平均价。
周期内买盘加全平均价。
L2_BIDAVPRICE
用法:
L2_BIDAVPRICE
返回买盘加全平均价。
周期内空头大单成交额。
L2_ASKBIGTURNOVER
用法:
L2_ASKBIGTURNOVER
返回空头大单成
交额。
周期内多头大单成交额。
L2_BIDBIGTURNOVER
用法:
L2_BIDBIGTURNOVER
返回多头大单成
交额。
周期内空头大单成交次数。
L2_ASKBIGCOUNT
用法
:
L2_ASKBIGCOUNT
返回周期内空头大单成交次<
/p>
数。
周期内多头大单成交次数。
L2_BIDBIGCOUNT
用法
:
L2_BIDBIGCOUNT
返回周期内多头大单成交次<
/p>
-
-
-
-
-
-
-
-
-
上一篇:SH01翻译边城一至八章沈从文
下一篇:投稿 长险首两年理赔案件分析