-- 作者:wenarm
-- 发布时间:2018/4/10 11:27:14
-- stkindi函数使用范例
引用函数是用户最常用的函数,但是很多用户在刚接触使用时,总是有些无所适从,所以本帖专门针对引用方式进行范例式说明。
金字塔提供的引用函数分别是CALLSTOCK、CALLSTOCKEX和STKINDI、STKINDIEX,他们都可以完成跨品种、跨市场、跨周期引用需求。但是本帖仅重点说明STKINDI函数的用法。
其实STKINDI就像是“秘书”,而“老板”(当前公式)可能需要查阅某一组专业数据。这个时候老板会将任务传达给“秘书”。
如:老板需要找会计小李,获得上海地区每一天的营业收入汇总数据时,就会把该任务下达给“秘书”,而对于秘书来说,
首先是找到“小李”(品种),然后让小李统计“每一天”(周期)的“上海地区”(公式名称)的“营业收入”(变量)情况。最后,秘书将一组计算好的数据文件取会,交给老板进行分析。基本就是这个流程。
STKINDI在引用时,其被引用公式以及被引用公式变量必须存在。否者无引用结果输出。(即如果小李已经离职或者上海地区没有分公司,那么秘书就会空手而回。)
STKINDI使用方法及参数详细解释如下:
用法: STKINDI(STKLABEL,INDINAME,CO,PERIOD[,Num]) STKLABEL 指定品种代码,如为空表示当前品种,指定品种时推荐使用市场+代码的格式,例如SH600000,ZJIF00等. INDINAME 调用的指标、交易系统 (被引用变量必须是以:做变量的线输出类型) CO 坐标轴类型 0交易日坐标 1自然日 2交易交易时间 PERIOD 周期类型,有效值范围为(0-24),依次表示: 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变量说明: 1、当PERIOD周期<=19,Num为左右偏移周期个数(可选),0表示引用当前数据,小于0为引用之前数据,
大于0为引用之后数据; 2、当PERIOD周期>=20和<=24时,Num为自定义N周期的具体数字
警告:小周期引用大周期会带来信号闪烁的严重问题,推荐使用上周期已经确立的大周期信号(参数Num = -1)
根据前面的说明,我们可以分析两点有用信息,即stkindi函数引用的数据,必须在某个具体公式中。其次,在这个具体公式中必须有被引用的变量。那么我们首先来建立一个被引用的公式。
示例:我们需要引用RB00合约5分钟周期下的macd的数据,作为当前周期品种分析的因子项使用。
首先,我们创建被引用公式并给其命名。(命名的公式名称会在引用公式中用到)。
被引用公式名称:my_macd
被引用公式内容:
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26); DEA :EMA(DIFF,9); MACD :2*(DIFF-DEA);
引用公式名称:my_text
引用公式内容:
STKINDI(\'RB00\',\'my_macd.macd\',0,2,0);//\'my_macd是被引用的“公式名称”,macd是被引用的变量。他们两者之间用“.”连接。
注: STKINDI(\'RB00\',\'被引用公式名称.被引用变量\',0,引用的周期,0);
整体如下图的关系:
此主题相关图片如下:0.jpg
理解上述过程后,用户在理解向前引用和N>19以后的参数处理上,应该会更容易些。
跨周期引用常见问题:
1.跨周期引用之间是按照时间对齐原则进行处理的,(都是基于历史数据完整的情况)。由此可以引申出3种情况,分别是引用同一周期,引用大周期,引用小周期。
同周期引用:
我们来逐个分析。引用同一周期的情况最好理解,因为时间上最好对齐
如:“RB00”5分钟周期引用"HC00" 5分钟周期的数据。,那么他们每根k的时间是对齐的。
RB00 13:00:00 13:05:00 13:10:00
HC00 13:00:00 13:05:00 13:10:00
小周期引用大周期:
如:“RB00”1分钟周期引用"HC00" 5分钟周期的数据。,那么他们每根k的时间如下方式对齐。
RB00 14:55:00 14:56:00 14:57:00 14:58:00 14:59:00 15:00:00
HC00 14:55:00 15:00:00
如果当前北京时间为14:56:00,则RB00对应的k线时间为14:57:00,而它在引用5分钟周期数据时,按时间对齐原则HC00并无14:57:00的k线,此时,根据选择对应HC00最近一根k线的5分钟数据,即15:00:00 位置。所以会出现14:56:00、 14:57:00、14:58:00、14:59:00、15:00:00 五根k线都对应HC00的15:00:00 K线位置。
所以在小引大时,由于小周期数据走完,但是被引用的大周期数据周期还未结束。那么大周期的信号存在波动时,小周期和其对应的历史k线位置也会随着闪动。也就是图表上经常提到的信号闪烁。
分析测试结果:(引用大周期的时间可以更加简明)
此主题相关图片如下:1.jpg
大周期引用小周期:
如:“RB00”5分钟周期引用"HC00" 1分钟周期的数据。,那么他们每根k的时间如下方式对齐。
RB00 14:00:00 14:0500
HC00 14:00:00 14:01:00 14:02:00 14:03:00 14:04:00 14:05:00
从k线时间上看,大周期引用小周期,也是按相同的时间对齐,当北京时间在14:02分时,RB00的K线时间是14:05:00。HC00的k线时间是14:03(最新的K)。这个时候按时间对其并没找到HC00的14:05:00的k,则就近原则选取。所以此时RB00引用的HC00的k线值是14:03:00这根,当HC00,这个k线走完后,RB00的K线依旧是14:05:00,它得到的值开始是HC00的下一根14:04:00的值。直到RB00本周期的k线结束变成历史k线。那么此时引用的值就是HC00的14:05:00。
(从上面分析结果看,其引用的过程在历史中是无法被体现出来的。就像k线最终只有开高低收一样。你压根不知道k线生成过程中经历过那些过程。)
此主题相关图片如下:3.jpg
向前引用问题:
STKINDI函数中,可以向前偏移使用,这里的偏移量,指的是被引用周期。而不是当前策略运行的周期。
如:“RB00”1分钟周期引用"HC00" 5分钟周期的数据,并且向前偏移1根数据。
RB00 14:55:00 14:56:00 14:57:00 14:58:00 14:59:00 15:00:00
HC00 14:55:00 15:00:00
如果当前k线对应的HC00k线时间是15:00:00.向前引用一根数据,指的是HC00的5分钟周期数据,实际就是14:55:00 。并不是许多用户理解的当前“RB00”1分钟k线的上一根数据。
引用非时间划分周期问题:
引用非时间方式划分的周期数据容易造成引用数据发生变化。如:在1分钟数据下引用100笔多笔周期的开盘价,由于多笔线是根据分笔数量划分的,属于非时间划分方式。而跨周期引用函数是按时间对其的原则进行处理。那么就可能出现,两个以上的100笔线,公用一个时间点的情况,如下图。当行情走完到倒数第3根k线后,这个时候引用的开盘价时倒数第二根k线的开盘价(02:59位置),当倒数第2根k线走完,时,由于最后一根k的时间依旧是02:59,这个时候引用的开盘价则变成了最后一根的开盘价。(引用的原则是和本周期的时间对齐或者最近的值时间点。)
此主题相关图片如下:9.png
此主题相关图片如下:10.png
引用函数之间的区别:
CALLSTOCK:其只能引用k线自身相关的属性值。如:开高低收(其详细说明见软件函数列表)
STKINDI:引用其它公式指标的值,即被引用公式和变量一定要存在。
CALLSTOCKEX:作用和callstock一样,但是其可以限定引用的k线数量范围。可以提高引用执行的效率
STKINDIEX:作用和STKINDI一样,但是其可以限定引用的k线数量范围。可以提高引用执行的效率
[此贴子已经被作者于2021/8/6 15:50:45编辑过]
|