欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 对新逐K模式的困惑

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有5767人关注过本帖树形打印复制链接

主题:对新逐K模式的困惑

帅哥哟,离线,有人找我吗?
无极无名
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
对新逐K模式的困惑  发帖心情 Post By:2012/4/17 16:28:23 [显示全部帖子]

采用刷新最后一根K线的逐K模式,搞不太懂。有如下代码测试,来提出我的问题。

 

IF TIME=OPENTIME(1)+60 THEN //开盘第一分钟初始化X、Y//
 BEGIN
  X:=0;
  Y:=0;
 END

 

IF ISLASTBAR THEN
 BEGIN
  X:=X+1;
 END

 

IF NOT(ISLASTBAR) THEN
 BEGIN
  Y:=Y+1;
 END

 

XX:X,LINETHICK0;
YY:Y,LINETHICK0;

 

在1分钟周期,逐K模式下,
 1、XX输出是(0,0,0......0,1)这样一个序列,每一分钟一个值;
 2、YY输出的是(1,2,3.......269,269)这样一个序列,每一分钟一个值;
这个不难理解。

 

但是改成只刷新最后一根K线模式之后,奇怪的事情发生了。
1、XX每分钟输出(1-116),数字可能不准,因为太快,我是目测。
   但是可以明白大致每秒刷新两次,每刷新一次就迭代计算一次,直到下一分钟,又从1开始迭代计算,反复循环。
2、YY输出的依然是(1,2,3.......269,269)这样一个序列,每一分钟一个值;


我的问题是:
1、两种模式下,XX的输出为何发生如上变化?
2、两种模式下,YY的输出为何是一样的。我以为,因为只刷新最后一根K线的情况下,
   Y:=Y+1应该永远得不到执行(因为该句在非最后一个周期得到执行的控制语句内),因此在盘中,

   从加载公式那一刻起,YY应该始终等于0,而实际情况并非如此,因此我不能理解。


 回到顶部
帅哥哟,离线,有人找我吗?
无极无名
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
  发帖心情 Post By: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编辑过]


 回到顶部
帅哥哟,离线,有人找我吗?
无极无名
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
  发帖心情 Post By: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依然累加了一次。


 回到顶部
帅哥哟,离线,有人找我吗?
无极无名
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
无极无名
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
  发帖心情 Post By:2012/4/18 10:29:14 [显示全部帖子]

谢谢各位大佬关注,确实不好意思,想当然了,原帖第一控制语句改错了,没有实现X/Y初始化。原代码如下:

 

if TIMETOT0(time)=timetot0(opentime(1))+60 then
 begin
  x:=0;
  y:=0;
 end
 
 
IF ISLASTBAR THEN
  BEGIN
    X:=X+1;
  END

 

IF NOT(ISLASTBAR) THEN
  BEGIN
    Y:=Y+1;
  END

 

XX:X,LINETHICK0;
YY:Y,LINETHICK0;

 

 

因为我的源代码改成新逐K模式之后,运行错误,究其原因是新模式下,迭代计算发生了变化,于是简化成这一段代码来咨询,

看新模式有没有问题,是不是金字塔的本意。

 

现将上述代码分别在两种模式(逐K模式和只刷最后一根的逐K模式)下运行,假设当前最后一个周期是开盘第N个周期,那么从开盘第

一个周期开始到当前,结果如下:

一、X值

    逐K模式,输出的是(0,0,,,,,,,,,1);

    新逐K模式,输出的是(0,0,,,,,,,,(1-120));

    相同点是除掉最后一个周期,其他周期恒定为0;区别是新逐K最后一周期输出不恒定为1,而是从1开始,大致每0.5秒加1跳动,

    直到下一周期开 始, 再从1开始。不仅如此,,X从1开始跳动并不一定是从新K线产生瞬间开始的,而是任何时候加载公式的一瞬间

    都是从1开始跳动的。

   显然,我不需要这样的X输出。如何解决?

 

二、Y值

  逐K模式,输出的是(1,2,3,,,,,,N-1,N-1);

  新逐K模式,输出也是(1,2,,3,,,,,,N-1,N-1);

两者完全相同。然而我以为,假设我是第M周期加载公式,那么在新逐K模式下,Y的输出应该是(1,2,3,,,,,M-1,M-1,,,,M-1),也就是说在只刷最后

一根K线情况下,从加载公式第M周期开始,Y:=Y+1始终不被执行。这是我根据新逐K模式的标准解释的理解。

 

余虽愚钝,还请大佬解惑,谢谢!

 

[此贴子已经被作者于2012-4-18 10:42:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
无极无名
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
  发帖心情 Post By:2012/4/18 13:01:31 [显示全部帖子]

明白了!明白了!

 

结合X和Y的输出情况,可以证明新逐K模式下,除了第一次加载公式之外,每次K线走完或者说生成新K线时,从第一根开始到最后一根也完整地执行了一遍公式。如阿火所说,但模式说明里面没有说清楚。

 

正因为如此,X值每次启动公式或者新生K线时,都被清零(因为对历史K线,X只运算初始化那一次),而对于Y值,由于每次换K时都要逐一计算历史K线,因此新逐K和逐K结果一样。

 

新逐K只在加载公式或者换K时,逐一计算历史K线,在未换K或者K线未走完期间,每次刷新只计算最后一根K线,这当然比每次刷新都要从头算到尾好很多了。但是也正是由于换完K线之后,每次刷新只计算最后一根K线,X值不再被清零,每刷新一次就加一跳动,直到再换K时被清零。老逐K模式,X值之所以在最后一周期恒定为1,是因为每刷新一次,初始化语句都被执行,X被清零了。


 回到顶部