投资者咨询:
【编写技巧】:wh8 跨周期编写方法介绍 (文华财经)来源:文华财经 日期:2018-4-19 15:54
大家在做全自动交易通常需要多个周期一起来看研究。一是为了寻找合适的入场时机,二是可以实现多周期共振
文华中,wh8 支持编写专业的跨周期模型,实现上面多周期同时判断的交易思路
本帖主要从以下方面,为大家介绍跨周期模型:
1、编写方法
4、编写及使用时的常见问题
在正式学习跨周期编写前,我们先做个比喻,方便更好的理解跨周期的编写格式:
比如:我需要完成一项工作。但工作的其中一小部分,需要A来辅助帮我。
也就是说,这项工作被分成2部分:我是这项工作的主要完成人,A是辅助人
跨周期模型也是这个道理,模型也是分成2部分的
如:
我在日线上想引用30分钟中的MA数据。 那日线,相当于是主模型。30分钟,相当于辅助的指标。
所以,跨周期一定需要分别建立2个模型:一个是主模型,用于装载日线所需要的判断,另一个是辅助的指标,用于装载30分钟所需要的MA数据
编写时,在主模型中只需要把辅助的指标引用过来,实际使用时,加载主模型即可
_________________________________________________________________
#IMPORT [PERIOD,N,FORMULA] AS VAR
① #IMPORT [ , , ] AS :这部分是跨周期的函数名(固定格式),是编写跨周期主模型中必须要写的;
② PERIOD :表示我想要引用的K线周期级别,比如:我在日线上想引用30分钟,这里就编写MIN N :表示我想要引用的具体K线周期数,比如:我在日线上想引用30分钟,这里就编写30
FORMULA :表示引用的辅助指标的名称,比如,我在日线上想引用30分钟MA,这里就是装载30分钟所需要的MA数据的指标名称
③ VAR :给引用的辅助的指标起一个新名字,比如,张三,李四,AA,BB 等
————————————————————————————————————————————————————————————
MA5:=MA(C,5); //定义MA5为5周期均线 MA10:=MA(C,10);
//定义MA10为10周期均线
#IMPORT [MIN,30,AA] AS VAR MA5Y:VAR.MA5; //跨周期引用,30分钟AA指标中的MA5函数 MA10Y:VAR.MA10;
//跨周期引用,30分钟AA指标中的MA10函数 CLOSE>MA5Y,BPK;
//当前周期最新价高于30分钟周期的MA5时,执行买平开指令 CLOSE<MA10Y,SPK;
//当前周期最新价低于30分钟周期的MA10时,执行卖平开指令 AUTOFILTER;
//启用一开一平信号过滤机制
二、注意事项:
——————————————————————————————————————————————
#IMPORT [PERIOD,N,FORMULA] AS VAR
支持:SEC(秒),MIN(分钟)、HOUR(小时),DAY(日),WEEK(周),MONTH(月),QUARTER(季),YEAR(年),和CUSHOUR(自定义周期)
2、被引用的周期N,需要为大于等于1的整数。比如:3分钟,4小时
周,月,季,年,只能引用1个周期数据,比如:1周,1月,1季,1年
这4个周期,编写超过1取1,比如: #IMPORT [WEEK,2,FORMULA] AS VAR //跨周期引用1周的数据
3、FORMULA为被引用指标的名称,可以为英文字母,也可以是汉字。比如:AA , 跨周期
那么跨周期对应引用名称,也要随之修改为,#IMPORT [DAY,2,AA] AS VAR
4、 VAR 名不能与函数名重复。比如: MA ,CLOSE,ABS,即 源码中标蓝的
可以和被引用指标名称相同。比如: 引用AA指标 , #IMPORT [DAY,2,AA] AS AA
5、 FORMULA 指标不需要加载,只将跨周期主模型加载到主图k线上
三、编写案例:
——————————————————————————————————————————————
例1: 在1分钟周期上引用30分钟周期的MA5和MA10指标
首先,新建一个被引用周期的模型AA,保存需要加载的MA5和MA10指标
其次,在引用模型模型中引用跨周期函数,之后建立好的跨周期模型加载到1分钟周期上
#IMPORT [MIN,30,AA] AS VAR
例2: 在1分钟周期上同时引用30分钟,1小时,1日周期的MA5和MA10指标
#IMPORT [MIN,30,AA] AS VAR1 //无分号结尾 #IMPORT [HOUR,1,AA] AS VAR2 #IMPORT [DAY,1,AA] AS VAR3 //表示多人完成一项工作,从不同人处调取数据,进行汇总
(2)跨周期引用条件判断
例3: 在1分钟周期上引用30分钟周期的MA5和MA10金叉、死叉
首先,新建一个被引用周期的模型AA,保存需要加载的MA5和MA10指标
JC:CROSS(MA5,MA10);//5,10均线金叉
SC:CROSSDOWN(MA5,MA10);//5,10均线死叉
其次,在引用模型模型中引用跨周期函数,之后建立好的跨周期模型加载到1分钟周期上
#IMPORT [MIN,30,AA] AS VAR
跨周期引用条件时,需要在被引用指标中先定义条件,在主模型中直接引用条件
在跨周期中引用函数在判断,与直接取条件判断值是不同的
___________________________________________________________
1、怎么核对被引用周期是否满足条件?
2、跨周期编写中是否可以引用未来函数?
3、被引用指标中含有开平仓指令,是否可以直接引用交易价格呢?
4、加载模组运行时有时候弹出“ 跨周期不能超过72个数据源”是怎么回事?
5、含有跨周期的模型回测慢是为什么?
6、在5Min的K线上引用1小时K线的60均线,但是没有画线为什么?
7、小周期引用大周期时,历史k线大周期没有显示条件满足,但是小周期就出现信号了是为什么?
1、怎么核对被引用周期是否满足条件?
单击k线图》右键》对比跨周期/合约k线图 ( 快捷键Alt + Q )
可以跨周期模型与被引用指标进行对比查看,方便核对信号,以及判断条件等思路

文件名:图片3.jpg
2、跨周期编写中是否可以引用未来函数?
不支持的
未来函数是向后调取数据计算的,存在一定的预测性,也可能会造成信号忽闪
一般都是在看盘指标画线时取点使用,交易模型中是不支持使用的,跨周期被引用指标中也不支持未来函数
因为交易模型中的信号必须要以真实准确为准,专业的程序化用户都不会使用未来函数来判断信号的
3、被引用指标中含有开平仓指令,是否可以直接引用交易价格呢?
不能的
被引用指标是不加载到主图k线上,所以无法取到对应的开平仓价格的
跨周期编写引用的是其他周期的函数,条件判断等,而不能引用未加载模型的交易价格
您这样的思路,可以通过引用满足条件的时候的收盘价来间接实现
4、加载模组运行时有时候弹出“ 跨周期不能超过72个数据源”是怎么回事?
弹出这个提示是因为软件中加载的跨周期模型超过了限制
72个数据源是指:整个软件中 主图、副图、模组、页面盒子等最大计算的数据源总量不超过72个
假设一个模型中用了4个数据源,模型加载了5个模组,那么软件中就调用了20个数据源
跨周期、跨合约是需要计算很多次,较多的计算会占用很多内存和CPU,如果本地电脑配置不足,会拖慢运行速度,所以建议合理使用
如果需要加载的模组比较多,可以通过运行多个客户端来实现加载更多的模组,或者精简下模型的思路
附:
数据源,指加载一个模型,需要调用的周期数,一个周期就是一个数据源
如,楼上案例1,调用2个数据源,加载的周期1min,与调用周期30Min,
楼上案例2,调用4个数据源,加载的周期1min,与调用周期30分钟,1小时,1日
5、含有跨周期的模型回测慢是为什么?
跨周期是需要计算很多次,较多的计算会占用很多内存和CPU的,所以模型中引用过多数据源,加载的速度相对慢一些
如果您认为回测慢,可以调整信号计算起始时间,把时间设置的短一些

文件名:图片4.png
6、在5Min的K线上引用1小时K线的60均线,但是没有画线,为什么?
跨周期是将基础数据合成之后引用的
不显示画线,说明本地的基础数据量不够合成均线数据
K线图右键》补充历史数据,选择1分钟基础数据,多补充一些就可以
7、小周期引用大周期时,历史k线大周期没有显示条件满足,但是小周期就出现信号了是为什么?
比如,大周期是阳线,小周期也是阳线的时候开仓,后续查看大周期是阴线,小周期就开仓了
这是正常的
因为跨周期是实时引用的, 不能用大周期收盘情况,来判断小周期盘中情况
大周期盘中可能是阳线,收盘变为阴线了,所以盘中出信号那个时刻是满足大小周期都是阳线的
这种情况,可以考虑判读大周期上一根情况,因为大周期没收盘前当根k线情况不固定,但上根k线情况是固定的
请不要在此跟帖