以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  自定义函数返回的数据在指标显示不对,请帮忙看一下  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=54731)

--  作者:lcooky
--  发布时间:2013/8/6 12:55:00
--  自定义函数返回的数据在指标显示不对,请帮忙看一下

各位老大们,我是金字塔的使用新手,现遇到一个问题,我写了一个自定义函数计算某只股票的涨跌幅,然后想把它当做一个指标来显示,函数计算的值是正确的(我把结果写到文件看了一下,没问题),但是在附图上的显示明显不对,不知道为啥,哪位大神指点一下。一下是自定义函数和公式的代码:

 

Function ZHZDF(Formula)
    \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
    ZHZDF=0
   
    dim fsObj
    dim file
    dim History
    dim DataCount
    dim LastClose
   
    Set fsObj = CreateObject("Scripting.FileSystemObject")
 Set file = fsObj.CreateTextFile("c:\\test.txt", True)

    Set History =  marketdata.GetHistoryData("600036","SH",0)
    DataCount=History.Count
   
    Dim Result
    Redim Result(DataCount)
   
    For i=0 to DataCount-1
     if i=0 then
      LastClose=History.Close(i)
      Result(i)=0
     else
      if DATEDIFF("d",History.Date(i-1),History.Date(i))>=1 then
       LastClose=History.Close(i-1)
      end if
      Result(i)=(History.Close(i) - LastClose) / LastClose * 100
     end if  
     file.WriteLine ("时间:" & History.Date(i) & "     昨收:" & LastClose  & "     收价:" & History.Close(i) & "     涨跌:" & Result(i) )
    Next
   
    file.Close
   
 ZHZDF=Result
 
End Function

 

公式:MA1:ZHZDF();

 

附上截图和日志
此主题相关图片如下:pic.jpg
按此在新窗口浏览图片
,从图上看涨跌幅大部分是负数,和日志文件不一样

 

 


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:test.txt


--  作者:lcooky
--  发布时间:2013/8/6 14:27:39
--  
有没有神飘过呀,在线等图片点击可在新窗口打开查看
--  作者:王锋
--  发布时间:2013/8/6 14:55:10
--  
你观察太不仔细了,金字塔K线图上的涨跌就只是简单的这根K线跟上根K线的幅度比较,你的代码好像是不是这么处理的
--  作者:lcooky
--  发布时间:2013/8/6 15:09:09
--  

大神终于现身了,太感谢了。其实我的问题不是具体哪根K线跟哪根K线比的问题,我关注的问题是为啥自定义函数中返回的数组怎么样才能在副图中显示正确,根据日志文件中的数据和副图曲线中数字的对比,明显不一样。怎么样才能解决?

[此贴子已经被作者于2013/8/6 15:10:03编辑过]

--  作者:王锋
--  发布时间:2013/8/6 23:14:01
--  
没看懂你的意图,你指的是自定义函数返回的数据在图形上显示的跟你写在文本中的不一致?
--  作者:lcooky
--  发布时间:2013/8/8 15:13:26
--  

和写的文本不一致,文本的数据是对的


--  作者:admin
--  发布时间:2013/8/8 22:46:41
--  

你的问题应该是数据的取值范围导致的,你的代码

 

    Set History =  marketdata.GetHistoryData("600036","SH",0)

这样表示的是从硬盘中读取数据,这样会导致从硬盘读取的数据跟你图表显示的在数据的起始时间是没法对齐的,如果你希望是按照你图表显示的完全对齐,那么你应该使用图表上的数据运算而不应该从硬盘读取。

 

    Set Grid = Formula.ParentGrid

    Set History =  Grid.GetHistoryData