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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → [讨论]逐k模式下,有些统计函数不能用在if 后面

   

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


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

主题:[讨论]逐k模式下,有些统计函数不能用在if 后面

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


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
[讨论]逐k模式下,有些统计函数不能用在if 后面  发帖心情 Post By:2016/2/20 20:00:41 [只看该作者]

逐k模式下,有些统计函数或者要用到回溯函数,比如ref  ma  ema这些不能用在if 内,

为什么要做这样的限制

比如
if c>o then
BEGIN
  value1:=ref(c,1);
  value2:=ma(c,2);
end;

逐k下  满足条件就执行  不满足条件就返回上一个值  ,逻辑很正常呀,可为什么软件要做这样的限制

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/2/21 13:53:53 [只看该作者]

限制的目的是让你的PEL代码更健壮的工作,如果不限制很容易在控制语句中出现统计函数的计算错误


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
sadrick
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
疑惑  发帖心情 Post By:2016/2/21 17:37:56 [只看该作者]



if c>o then
BEGIN
  value1:=ref(c,1);
  value2:=ma(c,2);
end;

如果上面的例子变成
if c>o then
BEGIN
  value1:=ref(c,100);
  value2:=ma(c,200);
end;
不做限制的话是担心满足条件的时候图里少于200根bar  ,算不了,产生错误吗
但变成规范的 ,一样面临这样的问题呀
value3=ref(c,100);
value4=ma(c,200);
if c>o then
BEGIN
  value1:=value3;
  value2:=value4;
end;
不知道这个健壮如何理解




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


加好友 发短信
等级:管理员 帖子:1516 积分:229 威望:0 精华:0 注册:2012/3/30 12:40:56
  发帖心情 Post By:2016/2/21 18:10:44 [只看该作者]

简单理解就是你必须要保证MA函数每根bar都能执行得到,不能被控制语句跳开去执行。

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


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
疑惑  发帖心情 Post By:2016/2/22 10:52:33 [只看该作者]

那就证明金字塔的ma 函数  比如ma(c,10)  是采用加最新的值再减去最最早的值的算法   
那如果我自己编一个函数最原始的算法就是向前循环累加再求平均  那么,就可以了( 只要采取仅刷最后一根k的模式 ,实时效率不会差太远)


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


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
疑惑  发帖心情 Post By:2016/2/22 11:02:53 [只看该作者]

可是ref完全没有这样的必要呀,反正都是要往前回溯

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


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2015/1/18 18:04:22
疑惑  发帖心情 Post By:2016/2/22 11:52:33 [只看该作者]

其实用excel vba 来分别算两种算法,如果是只计算一根bar 的平均值 ,两种算法的时间基本没差别,对应软件里仅刷最后一根bar 的模式
Sub average()
    tr = ActiveSheet.UsedRange.Rows.Count
    For x = 1 To 501
      If x >= 500 Then
        a = 0
        For y = x To (x - 499) Step -1
          a = a + Cells(y, 3)
        Next
        Cells(x, 5) = a / 500
      End If
    Next
End Sub  

Sub averagefc()
   tr = ActiveSheet.UsedRange.Rows.Count
   For x = 1 To 501
     If x = 500 Then
       For y = x To (x - 499) Step -1
         a = a + Cells(y, 3)
       Next
       Cells(x, 6) = a / 500
      ElseIf x > 500 Then
         a = a + Cells(x, 3) - Cells(x - 500, 3)
         Cells(x, 6) = a / 500
     End If
   Next
End Sub


所以我的建议是与其将那些带有回溯的函数都列出来,说不能放在控制语句之下  还不如在编译公式时将这些这些函数的计算值在底层拿数组存起来
这样客户在使用的时候就没有那么多顾虑,这是参考其他两款软件的做法

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/2/22 12:11:25 [只看该作者]

Ref 这种用法实际上你可以通过数组来实现,效率还高比如:

REF(CLOSE,1) = CLSOE[BARPOS-1]



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部