这期文章我们继续介绍跨周期的使用——主要介绍我之前使用跨周期时遇到的一些问题和后面是怎么解决的。
简单说下这个信号思想:主图(5分钟周期)有两条均线,当它们发生了金叉并且在数据2(15分钟周期)结束时,此时数据2的K线也是阳线的情况下,希望下根K线进行买入,反之主图周期发生死叉数据2是阴线的时候就卖出。下图是对应的图表信号:
我用上面的代码加载后发现图表上有的信号是正确的,但是有的信号就不对了。譬如图表上这根K线有发生死叉(图表上红线是快线黄线是慢线),在这根K线走完后数据2的K线也是阴线,它应该卖出的才对,但是这里没有任何信号,下图是输出的信息
输出的语句很简单,第一列输出YYtfDw变量,第二列是快线和慢线发生死叉,第三和第四列分别输出时间和日期。
在14:50的这根K线显示都是true,但是下根K线又变成了false,因为这里变量YYtfDw是data2的周期变量,在data2的周期没走完的情况下给它赋值(因为data2的变量是在data2周期走完后才会给对应的变量赋值),它是不起作用的,下根K线会变回原来的值的,知道问题的原因,最简单的方式就是把YYtfDw改回data1的类型,如下图。
信号明显比上面多了好几笔,这笔信号也正常了,用这种最简单的方式改回去可能能解决一些问题,但是有时候实际情况可能是:在data2没走完的情况下,这里出现了一个譬如上面说的金叉死叉情况,我需要在data2走完后,把这个情况告诉data2的变量,让data2的变量记录下来供后续使用,这种需求该怎么写代码呢?如下图:
这里我定义了两个数据1的变量crossup和crossdw主要用于记录主图双均线发生金叉或者死叉时的状态,在数据2的一根K线走完后Time = Time of data2这句代码判断,如果crossup是真就把数据2的变量YYtfUp设置为真,并且这时把crossup清零设置为假,否则下根data2的K线走完后就会把YYtfUp清零(这里我两次说了把变量清零,这两个变量的作用相当于是记录某个条件成立后的状态,之后是需要用它们做进一步的判断的,那我们就需要想清楚这类变量能持续多久维持真的状态)。
这样就能达到一个效果:不论这个大周期的K线是否走完了,都能把主图数据层的信息传递给较大周期的数据层。
从图表信号看这里的信号和上面的把变量改回主图周期的信号是完全一致的。
我自己使用跨周期的感受是:在定义变量的时候需要想清楚这个变量是干嘛的,有时候需要定义主图周期的变量(主图周期变量我们应该很熟悉),有时候需要定义子图周期的变量,在定义的时候需要注意的点前面几篇文章都有介绍过,在使用的时候需要注意,用对应的数据层的周期来看待这些变量,而不是用主图周期的变量思维来看待它们。
关注MC公众号并回复【跨周期】即可领取本期策略,可供投资者直接加载进MC软件使用和学习。
程序化交易的实现需要好的工具辅助
欢迎使用MultiCharts专策版v14
辅助你的量化交易!
立
即
体
验
▼
欢迎前往Multicharts官网,或公众号后台回复【MC14】,下载软件免费试用1个月;
开通指南:点击“阅读原文” → 登录MC官网 → 购买内盘年度会员 → 会员中心付款 → 自动开通权限