# #.# 用户函数

用户函数调用模式,方便客户进行模块化编程

#用户函数.指标线(参数)#

  1. 不支持跨品种、跨周期使用
  2. 指定参数值,同样受引用指标中参数范围的限制。
  3. 调用指标中含义多个参数时,必须根据引用指标的参数名顺序依次指定参数;详解见【例2】。
  4. 使用用户函数模式与跨周期调用模式方法类似,但是比跨周期调用方式更加节省内存,运行效率更高。
参数
参数 说明
用户函数 必需,为引用指标名
指标线 必需,为引用指标中定义的变量名
(参数) 可选,引用指标中的变量计算使用的参数。
  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. 计算: 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

# .#$@ 引用操作符

操作符 格式 说明
. "指标名.变量名"(参数) 变量名的连接符号
# "#周期"(参数) 数据周期的连接符号 ,周期类型如下:
 分笔: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:引用指定指标相关操作范例
  1. 在引用指标公式时,必须指定指标线。
  2. 通过""(引号)将操作符左右两部分组合一起。
  3. 指定参数时,参数必须与引用公式的参数列表一一对应。

引用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:引用品种数据相关操作范例
  1. 引用指定品种时,建议使用市场+品种方式。避免不同市场下代码重复造成的引用错误。
  2. 引用数据时,必须确认被引用品种周期数据是否完整,在首次使用或者在不确定时,请手工进行数据补充。
  3. 指定参数时,参数必须与引用公式的参数列表一一对应。
//引用平安银行的收盘价,市场代码+品种代码,即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
例3:调用动态链接库相关范例
//引用DLLNAME.DLL的FNCNAME函数,计算参数为P1,P2
"DLLNAME@FNCNAME"(P1,P2);
1
2

# CALLSTOCK 引用指定品种

引用K线数据

CALLSTOCK(CODE,TYPE,CYC,N)

  1. 确保被引用品种周期数据齐全。
  2. 使用该函数将会影响多核处理效率
参数
参数 说明
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

# CALLSTOCKEX 引用指定品种

引用指定数量的K线数据

CALLSTOCKEX(CODE,TYPE,CYC,N,DATANUM)

  1. 确保被引用品种周期数据齐全。
  2. 使用该函数将会影响多核处理效率
参数
参数 说明
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

# STKINDI 引用其他公式

引用任意品种任意周期的任意指标输出

STKINDI(STKLABEL,INDINAME,CO,PERIOD[,Num])

  1. 推荐使用V3.02版本推出的Stkindiex函数,能极大的提高运行效率。
  2. 若只是做模块化编程指标调用推荐使用#.#模式的用户函数编程模式,可以提高调用效率。
  3. 调用该函数将消耗大量资源和内存,不推荐大量调用,并请注意编程效率。
  4. 小周期引用大周期会带来信号闪烁的严重问题,推荐使用上周期已经确立的大周期信号(参数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

# STKINDIEX 引用其他公式

引用任意品种任意周期的任意指标输出

STKINDIEX(STKLABEL,INDINAME,CO,PERIOD,Num,DATANUM)

  1. 若只是做模块化编程指标调用推荐使用#.#模式的用户函数编程模式,可以提高调用效率。
  2. 调用该函数将消耗大量资源和内存,不推荐大量调用,并请注意编程效率。
  3. 小周期引用大周期会带来信号闪烁的严重问题,推荐使用上周期已经确立的大周期信号(参数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