以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://weistock.com/bbs/list.asp?boardid=2) ---- 对新逐K模式的困惑 (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=11130) |
-- 作者:无极无名 -- 发布时间:2012/4/17 16:28:23 -- 对新逐K模式的困惑 采用刷新最后一根K线的逐K模式,搞不太懂。有如下代码测试,来提出我的问题。
IF TIME=OPENTIME(1)+60 THEN //开盘第一分钟初始化X、Y//
IF ISLASTBAR THEN
IF NOT(ISLASTBAR) THEN
XX:X,LINETHICK0;
在1分钟周期,逐K模式下,
但是改成只刷新最后一根K线模式之后,奇怪的事情发生了。
从加载公式那一刻起,YY应该始终等于0,而实际情况并非如此,因此我不能理解。 |
-- 作者:rushtaotao -- 发布时间:2012/4/17 16:29:03 -- 客服稍后回复 |
-- 作者:阿火 -- 发布时间:2012/4/17 19:11:51 -- Y的累加条件是not(islastbar) 所以,刷新最后一根K线时Y是不累加的。就一直为269了 X的累加条件是最后一根K线,每执行一次就累加一次,60秒执行120次左右呀。 很容易理解
当然,个人觉得x:=x+1; 的取值结果应该一直为1才符合本意。跟老大反馈一下 [此贴子已经被作者于2012-4-17 19:14:27编辑过]
|
-- 作者:无极无名 -- 发布时间:2012/4/17 20:18:39 -- 以下是引用阿火在2012-4-17 19:11:51的发言:
Y的累加条件是not(islastbar) 所以,刷新最后一根K线时Y是不累加的。就一直为269了 X的累加条件是最后一根K线,每执行一次就累加一次,60秒执行120次左右呀。 很容易理解
当然,个人觉得x:=x+1; 的取值结果应该一直为1才符合本意。跟老大反馈一下
是的,在只刷最后一根K线情况下,Y应该是不累加的,但是实际还是累加了,这是我的困惑。 另外,对于X:=X+1;每刷新一次就执行一次,的确不是本意,本意是每新增一个周期执行一次。 [此贴子已经被作者于2012-4-17 19:14:27编辑过] |
-- 作者:阿火 -- 发布时间:2012/4/17 21:18:43 -- 在只刷最后一根K线情况下,Y应该是不累加的,但是实际还是累加了,这是我的困惑。
实际也没有累加啊。一直都是269呀。 在刚加载或者K线走完瞬间,也是从第一根K线开始执行的。执行完毕后才只执行最后一根,所以Y是从1开始一直到269,然后一直都是269,直到K线走完重新计算 [此贴子已经被作者于2012-4-17 21:20:17编辑过]
|
-- 作者:无极无名 -- 发布时间:2012/4/17 21:57:24 -- 我今天在盘中看到,在只刷新最后一根K线情况下,Y还是在累加,直到倒数第二个周期等于269,并不是恒定的等于269。
按道理,假如我是开盘第81分钟(之前的历史有效数据忽略)加载公式,那么公式完整地从第一根执行到第81根K线,除掉此时的最后一根即第81根,Y:=Y+1被执行了80次,此后由于始终只刷新最后一根K线,那么Y:=Y+1应该始终得不到执行,所以Y应该恒定等于80。但我今天盘中看到的不是这样,每过一个周期,Y依然累加了一次。 |
-- 作者:阿火 -- 发布时间:2012/4/17 22:03:46 -- 刚才不是说了嘛,K线走完瞬间是从头到尾重新执行呀 你去好好了解一下执行过程 [此贴子已经被作者于2012-4-17 22:16:46编辑过]
|
-- 作者:无极无名 -- 发布时间:2012/4/17 22:25:00 -- 仅刷最后一根K线,当选中逐K线计算模式,并勾选本选项,在图表上加载本公式。当客户端接收到最新一笔行情数据后,在历史 K线上不再重新执行本公式,而只是在最后一根K线上重新计算一次公式(本质是:只在第一次加载公式时在每根历史K线上完整的计算一遍公式,其后就只在最后一根K线上做完整计算了,历史K线上产生的信号一直保留不再随行情更新而变化。)。通过这种方式提高执行效率,避免当行情更新时系统在每根历史K线上都需要做大量重复计算而消耗CPU处理时间。
以上是对仅刷新最后一根K线模式的标准说明,只说在第一次加载公式时才从头到尾每根K线都计算公式,并没有看出“在刚加载或者K线走完瞬间,也是从第一根K线开始执行的“(阿火语)再者,如果每次K线走完瞬间,还是要从头到尾每根K线计算公式,那这也不是只刷新最后一根呀。
当然,实际情况可能是阿火所说的那样。因为无论是否勾选只刷新最后一根K线模式,我测试,Y值的执行计算没有区别。或许是我看花了眼,明天再看看。 [此贴子已经被作者于2012-4-17 22:28:39编辑过]
|
-- 作者:admin -- 发布时间:2012/4/18 1:06:03 -- 以下是引用阿火在2012-4-17 19:11:51的发言:
Y的累加条件是not(islastbar) 所以,刷新最后一根K线时Y是不累加的。就一直为269了 X的累加条件是最后一根K线,每执行一次就累加一次,60秒执行120次左右呀。 很容易理解
当然,个人觉得x:=x+1; 的取值结果应该一直为1才符合本意。跟老大反馈一下 [此贴子已经被作者于2012-4-17 19:14:27编辑过]
没看出来X这个变量有什么问题 |
-- 作者:admin -- 发布时间:2012/4/18 1:32:15 -- IF TIME=OPENTIME(1)+60 THEN //开盘第一分钟初始化X、Y//
IF ISLASTBAR THEN
随便加个msgout函数调试一下便知,你之前的IF语句根本就没有满足过条件而去初始化,对于没有初始化的变量,金字塔会默认变成GLOBALVARIABLE超全局变量来进行处理 |