# #.# 用户函数
用户函数调用模式,方便客户进行模块化编程
#用户函数.指标线(参数)#
- 不支持跨品种、跨周期使用
- 指定参数值,同样受引用指标中参数范围的限制。
- 调用指标中含义多个参数时,必须根据引用指标的参数名顺序依次指定参数;详解见【例2】。
- 使用用户函数模式与跨周期调用模式方法类似,但是比跨周期调用方式更加节省内存,运行效率更高。
参数
参数 | 说明 |
---|---|
用户函数 | 必需,为引用指标名 |
指标线 | 必需,为引用指标中定义的变量名 |
(参数) | 可选,引用指标中的变量计算使用的参数。 1. 若未指定,使用引用指标中变量的默认参数计算结果; 2. 若指定,使用该参数计算引用指标中变量的结果; |
示例
调用test指标公式如下图所示:
例1.
//调用test指标的ma1指标线,如上图所示,在未指定参数时,即MA1:MA(CLOSE,N)中的N为缺省值"5"
#test.ma1#;
//调用test指标的ma1指标线,指定参数为时,即MA1:MA(CLOSE,N)中的N为指定值"20"
#test.ma1(20)#;
//调用test指标的ma1指标线,指定参数N=3,超出 N(5-100)范围时,即MA1:MA(CLOSE,N)中的N为最小值"5"
#test.ma1(3)#;
//调用test指标的ma1指标线,指定参数N=200,超出 N(5-100)范围时,即MA1:MA(CLOSE,N)中的N为最大值"100"
#test.ma1(200)#;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
例2. 计算: M=15, S=35之和,预期结果:50。
#test.B1(15,35)#; //结果等于55,并非预期结果
//答:因为参数依次对应,即N=15,M=35, S=默认参数(20,即上图中参数列表中的缺省值),所以M+S=35+20=55。
//正确指定参数的方法,参数依次对应,即N=5, M=15, S=35 ,所以M+S=50
#test.B1(5,15,35)#;
1
2
3
4
5
2
3
4
5
# .#$@ 引用操作符
操作符 | 格式 | 说明 |
---|---|---|
. | "指标名.变量名"(参数) | 变量名的连接符号 |
# | "#周期"(参数) | 数据周期的连接符号 ,周期类型如下: 分笔:TICK 1分钟:MIN1 3分钟:MIN3 5分钟:MIN5 10分钟:MIN10 15分钟:MIN15 30分钟:MIN30 60分钟:MIN60 日线:DAY 周线: WEEK 月线:MONTH 年线:YEAR 多日线:MULTIDAY 多分钟:MULTIMIN 多秒线:MULTISEC 多小时:MULTIHOUR 季度线:QUARTER 半年线:SEMIYEAR 节气线:SOLARTERM |
$ | "品种$数据类型" | K线数据相关的操作连接符号,数据类型如下: 开盘:OPEN 最高:HIGH 最低:LOW 收盘:CLOSE 成交量:VOL 成交额:AMOUNT 持仓量:OPENINT 涨数:ADVANCE (大盘有效) 跌数:DECLINE (大盘有效) |
@ | "dll文件名@函数名"(参数) | 调用DLL连接符号 |
例1:引用指定指标相关操作范例
- 在引用指标公式时,必须指定指标线。
- 通过""(引号)将操作符左右两部分组合一起。
- 指定参数时,参数必须与引用公式的参数列表一一对应。
引用test指标公式如下图所示:
//在当前周期下,引用test指标中的ma1指标线结果。未指定参数时,即5日均线。
"test.ma1";
//指定参数时,依据参数依次对应的原则,N=10, M=20, S=15,即10日均线。
"test.ma1"(10,20,15);
//由于N在参数列表中第一个位置,同时也未使用M, S参与计算,所以M, S可以省略。即第5行等价于第7行
"test.ma1"(10);
//日线周期下,test指标中的b1指标线结果,即M+S的结果,M,S参数为默认值,返回30。
"test.b1#DAY";
//日线周期下(指定参数),test指标中的b1指标线结果,即M+S的结果,M+S的结果,N=5, M=20,S=15,返回35。
"test.b1#DAY"(5,20,15); //此处参数5不能省略,否者按照一一对应原则,将变成N=20,M=15,S为默认值。造成结果为15+20=35
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
例2:引用品种数据相关操作范例
- 引用指定品种时,建议使用市场+品种方式。避免不同市场下代码重复造成的引用错误。
- 引用数据时,必须确认被引用品种周期数据是否完整,在首次使用或者在不确定时,请手工进行数据补充。
- 指定参数时,参数必须与引用公式的参数列表一一对应。
//引用平安银行的收盘价,市场代码+品种代码,即SZ000001,避免与上证指数代码冲突。
"SZ000001$CLOSE";
//引用平安银行的日线周期成交量
"SZ000001$VOL#DAY";
//引用上个交易日平安银行的成交量
"SZ000001$VOL##DAY";
//引用当前品种上个交易日的成交量
"$VOL##DAY";
//引用当前品种上上上个交易日的成交量
"$VOL####DAY";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
例3:调用动态链接库相关范例
//引用DLLNAME.DLL的FNCNAME函数,计算参数为P1,P2
"DLLNAME@FNCNAME"(P1,P2);
1
2
2
# CALLSTOCK 引用指定品种
引用K线数据
CALLSTOCK(CODE,TYPE,CYC,N)
- 确保被引用品种周期数据齐全。
- 使用该函数将会影响多核处理效率
参数
参数 | 说明 |
---|---|
CODE | 必需,品种代码。 |
TYPE | 必需,数据类型。 日期:VTDATE 时间:VTTIME 开盘价:VTOPEN 最高价:VTHIGH 最低价:VTLOW 收盘价:VTCLOSE 成交量:VTVOL 成交额:VTAMOUNT 持仓量:vtOPENINT 涨数:VTADVANCE(大盘有效) 跌数:VTDECLINE(大盘有效) |
CYC | 数据周期,参数范围[-1,24]。 当前主图周期: -1 分笔成交: 0 1分钟: 1 5分钟: 2 15分钟: 3 30分钟: 4 60分钟: 5 日: 6 周: 7 月: 8 年: 9 多日: 10 多分钟: 11 多秒: 12 多小时: 13 季度线: 14 半年线: 15 节气线: 16 3分钟: 17 10分钟: 18 多笔线: 19 N日线: 20 N分钟线: 21 N秒线: 22 N笔线: 23 N小时线: 24 |
N | 可选, 偏移量,N若不填则默认视为0。N有2种用途 1、当CYC周期<=19时,为左右偏移周期个数(可选)0表示引用当前数据,<0为引用之前数据,>0为引用之后数据。 2、当CYC周期>=20时,为自定义N周期的具体数字。 如果找不到同期数据,那么将返回最近的一个。 |
示例
CALLSTOCK('SH000001',VTCLOSE,6,-1);//表示引用日线周期上证指数的日线昨收盘价
CALLSTOCK('SH600000',VTOPEN,-1,0);//表示引用最近100K线SH市场的600000,使用当前周期
CALLSTOCK('',VTOPEN,6,0);//表示引用当前品种日线周期数据.
1
2
3
2
3
# CALLSTOCKEX 引用指定品种
引用指定数量的K线数据
CALLSTOCKEX(CODE,TYPE,CYC,N,DATANUM)
- 确保被引用品种周期数据齐全。
- 使用该函数将会影响多核处理效率
参数
参数 | 说明 |
---|---|
CODE | 必需,品种代码。 |
TYPE | 必需,数据类型。 日期:VTDATE 时间:VTTIME 开盘价:VTOPEN 最高价:VTHIGH 最低价:VTLOW 收盘价:VTCLOSE 成交量:VTVOL 成交额:VTAMOUNT 持仓量:vtOPENINT 涨数:VTADVANCE(大盘有效) 跌数:VTDECLINE(大盘有效) |
CYC | 数据周期,参数范围[-1,24]。 当前主图周期: -1 分笔成交: 0 1分钟: 1 5分钟: 2 15分钟: 3 30分钟: 4 60分钟: 5 日: 6 周: 7 月: 8 年: 9 多日: 10 多分钟: 11 多秒: 12 多小时: 13 季度线: 14 半年线: 15 节气线: 16 3分钟: 17 10分钟: 18 多笔线: 19 N日线: 20 N分钟线: 21 N秒线: 22 N笔线: 23 N小时线: 24 |
N | 必需, 偏移量,默认为0。N有2种用途 1、当CYC周期<=19时,为左右偏移周期个数(可选)0表示引用当前数据,<0为引用之前数据,>0为引用之后数据。 2、当CYC周期>=20时,为自定义N周期的具体数字。 如果找不到同期数据,那么将返回最近的一个。 |
DATANUM | 必需,引用指定数量的K线数据。 |
示例
CALLSTOCKEX('1A0001',VTCLOSE,6,-1,100);//表示引用最近100根日线周期的1A0001 的日线昨收盘价
CALLSTOCKEX('SH600000',VTOPEN,-1,0,100);//表示引用最近100K线SH市场的600000,使用当前周期
CALLSTOCKEX('SH600000',VTOPEN,21,8,200);//表示引用自定义8分钟周期最近200根SH市场600000的K线.
CALLSTOCKEX('',VTOPEN,6,0,200);//表示引用当前品种日线周期最近200根数据.
1
2
3
4
2
3
4
# STKINDI 引用其他公式
引用任意品种任意周期的任意指标输出
STKINDI(STKLABEL,INDINAME,CO,PERIOD[,Num])
- 推荐使用V3.02版本推出的Stkindiex函数,能极大的提高运行效率。
- 若只是做模块化编程指标调用推荐使用#.#模式的用户函数编程模式,可以提高调用效率。
- 调用该函数将消耗大量资源和内存,不推荐大量调用,并请注意编程效率。
- 小周期引用大周期会带来信号闪烁的严重问题,推荐使用上周期已经确立的大周期信号(参数Num = -1)
参数
参数 | 说明 |
---|---|
STKLABEL | 必需,品种代码,为空表示当前品种,指定品种时推荐使用市场+代码的格式,例如SH600000,ZJIF00等 |
INDINAME | 必需,调用的指标、交易系统. (被引用变量必须是以:做变量的线输出类型) ,此参数格式【'被引用公式名称.被引用变量名'】 |
CO | 必需,坐标轴类型 0交易日坐标 1自然日 2交易交易时间 |
PERIOD | 必需,周期类型,有效值范围为((-1)-24). -1:当前主图周期、 0:分笔成交、 1:1分钟、 2:5分钟、 3:15分钟、 4:30分钟、 5:60分钟、 6:日、 7:周、 8:月、 9:年、 10:多日、 11:多分钟、 12:多秒、 13:多小时、 14:季度线、 15:半年线、 16:节气线、 17:3分钟、 18:10分钟、 19:多笔线、 20:自定义N日线、 21:自定义N分钟线、 22:自定义N秒线、 23:自定义N笔线; 24:自定义N小时线; 25:等价K线; 26:等量K线; |
Num | 可选,偏移量或者为指定的具体周期 。当PERIOD周期<=19,Num为左右偏移周期个数(可选),0表示引用当前数据,小于0为引用之前数据,大于0为引用之后数据;当PERIOD周期>=20和<=24时,Num为自定义N周期的具体数字 |
引用数据时,需要实现确认被引用品种周期数据齐全,再首次使用或者在不确定时,请手工进行数据补充工作. 当周期参数为25或26时取设置中默认的等价等量设置,要注意使用不当(当等价等量数值过大)可能会造成未来数据引用!
示例
//计算1A0001的当前周期MA指标的MA1指标线
STKINDI('1A0001','MA.MA1(8,12,26,60)',0,DATAPERIOD);
//计算当前品种的日线周期RSI指标的RST1指标线
STKINDI('','RSI.RSI1',0,6);
//引用昨日SH市场600000品种的日线周期RSI指标RSI1指标线并且使用公式的默认参数
STKINDI('SH600000','RSI.RSI1',0,6,-1);
//表示引用RSI指标RSI1指标线自定义8分钟周期的公式当前数据
STKINDI('SH600000','RSI.RSI1',0,21,8);
//表示引用RSI指标多分钟周期的公式数据(多分钟参数在工具菜单->选项->常规选项卡中设置),
STKINDI('SH600000','RSI.RSI1',0,11,0);
//若参数为数字变量,那么需要有个字符串转换的过程
s:=5;
//NUMTOSTR函数将数字转换到字符串,再带入变量中
m:=NUMTOSTR(s,0);
//计算IF10合约的日线周期指标ATR的ATR指标线,传递参数m值为5。
//第2个参数''里的是文本,由三部分组成:'ATR.ATR('和m还有')',这三部分由两个连接符号&连接起来,实现对数值参数的文本传输。
vola:stkindi('if10','ATR.ATR('&m&')',0,6,-1);
//多参数传递范例:
//注意,当希望传递参数列表中非首个参数时,需要将此参数之前的参与一并传入。否者此参数将被传递给参数列表中的第一个变量。
s1:=26;
m1:=NUMTOSTR(s1,0);
s2:=12;
m2:=NUMTOSTR(s2,0);
s3:=9;
m3:=NUMTOSTR(s3,0);
day_macd:STKINDI('','macd.macd1('&m1&','&m2&','&m3&')',0,6,0),nodraw;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# STKINDIEX 引用其他公式
引用任意品种任意周期的任意指标输出
STKINDIEX(STKLABEL,INDINAME,CO,PERIOD,Num,DATANUM)
- 若只是做模块化编程指标调用推荐使用#.#模式的用户函数编程模式,可以提高调用效率。
- 调用该函数将消耗大量资源和内存,不推荐大量调用,并请注意编程效率。
- 小周期引用大周期会带来信号闪烁的严重问题,推荐使用上周期已经确立的大周期信号(参数Num = -1)
参数
参数 | 说明 |
---|---|
STKLABEL | 必需,品种代码,为空表示当前品种,指定品种时推荐使用市场+代码的格式,例如SH600000,ZJIF00等 |
INDINAME | 必需,调用的指标、交易系统. (被引用变量必须是以:做变量的线输出类型),此参数格式【'被引用公式名称.被引用变量名'】 |
CO | 必需,坐标轴类型 0交易日坐标 1自然日 2交易交易时间 |
PERIOD | 必需,周期类型,有效值范围为((-1)-24). -1:当前主图周期、 0:分笔成交、 1:1分钟、 2:5分钟、 3:15分钟、 4:30分钟、 5:60分钟、 6:日、 7:周、 8:月、 9:年、 10:多日、 11:多分钟、 12:多秒、 13:多小时、 14:季度线、 15:半年线、 16:节气线、 17:3分钟、 18:10分钟、 19:多笔线、 20:自定义N日线、 21:自定义N分钟线、 22:自定义N秒线、 23:自定义N笔线; 24:自定义N小时线; 25:等价K线; 26:等量K线; |
Num | 必需,偏移量或者为指定的具体周期 。当PERIOD周期<=19,Num为左右偏移周期个数(可选),0表示引用当前数据,小于0为引用之前数据,大于0为引用之后数据;当PERIOD周期>=20和<=24时,Num为自定义N周期的具体数字 |
DATANUM | 必需,引用指定数量的K线数据,使用该参数限定引用指定数量的K线数据可以极大的提高引用数据的效率。 |
引用数据时,需要实现确认被引用品种周期数据齐全,再首次使用或者在不确定时,请手工进行数据补充工作. 当周期参数为25或26时取设置中默认的等价等量设置,要注意使用不当(当等价等量数值过大)可能会造成未来数据引用!
示例
//计算最近100根K线的1A0001的当前周期MA指标的MA1指标线
STKINDIEX('1A0001','MA.MA1(8,12,26,60)',0,DATAPERIOD,0,100);
//计算计算最近100根K线的当前品种的日线周期RSI指标的RST1指标线
STKINDIEX('','RSI.RSI1',0,6,0,100);
//引用计算最近200根K线的昨日SH市场600000品种的日线周期RSI指标RISI1指标线输出并且使用公式的默认参数
STKINDIEX('SH600000','RSI.RSI1',0,6,-1,200);
//表示引用计算最近100根K线的RSI指标多分钟周期的公式数据(多分钟参数在工具菜单->选项->常规选项卡中设置),
STKINDIEX('SH600000','RSI.RSI1',0,21,8,100);
//表示引用RSI指标多分钟周期的公式数据(多分钟参数在工具菜单->选项->常规选项卡中设置),
STKINDIEX('SH600000','RSI.RSI1',0,11,0);
//若参数为数字变量,那么需要有个字符串转换的过程
s:=5;
//NUMTOSTR函数将数字转换到字符串,再带入变量中
m:=NUMTOSTR(s,0);
////计算最近100根K线的IF10合约的日线周期指标ATR的ATR指标线,传递参数m值为5。
//第2个参数''里的是文本,由三部分组成:'ATR.ATR('和m还有')',这三部分由两个连接符号&连接起来,实现对数值参数的文本传输。
vola:stkindiex('if10','ATR.ATR('&m&')',0,6,-1,100);
//多参数传递范例:
//注意,当希望传递参数列表中非首个参数时,需要将此参数之前的参与一并传入。否者此参数将被传递给参数列表中的第一个变量。
s1:=5;
m1:=NUMTOSTR(s1,0);
s2:=5;
m2:=NUMTOSTR(s2,0);
s3:=5;
m3:=NUMTOSTR(s3,0);
day_macd:STKINDIEX('','macd.macd1('&m1&','&m2&','&m3&')',0,6,-1,100),nodraw;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32