以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  怎样判断Grid或HistoryData中要取的k线数据是不是存在?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=63574)

--  作者:szwangwei88
--  发布时间:2014/4/7 22:32:27
--  怎样判断Grid或HistoryData中要取的k线数据是不是存在?
在1分钟k线中,从Grid得到HistoryData,按教程说明,如果数据不存在,方法GetPosFromDate应返回-1,按下面程序我取周日(2014-3-30)的数据,结果返回849,而不是-1,这个是怎么回事?在程序中常需要判断要取的k线数据是否存在,应该怎样判断?
Set MyGrid = Technic.GetGridByName("Main")
Set History=MyGrid.GetHistoryData()
msgbox History.GetPosFromDate(#2014-3-30 15:00:00#)

--  作者:王锋
--  发布时间:2014/4/7 23:20:08
--  

GetPosFromDate返回的是最近的数据位置,这个函数是不能精确查找的。

你只能通过循环遍历来查找数据了


--  作者:szwangwei88
--  发布时间:2014/4/8 7:58:49
--  
GetPosFromDate返回的是最近的数据位置,是往前最近的,还是往后最近?这个教程上的说明应该改一下呀,以免用户耽误时间。数据不存在的情况,分为几种,一是周末,这个可用程序鉴别,但附加的停市和缺数据的就比较难鉴别了,循环遍历也很难做鉴别。强烈建议增加方法。
--  作者:王锋
--  发布时间:2014/4/8 18:20:52
--  

这个循环处理最容易鉴别了,用循环判断不就行了?

你可以自己先尝试写一下代码,不对的地方我们再帮你改改


--  作者:szwangwei88
--  发布时间:2014/4/8 19:41:21
--  
实话说,k线数据是不是存在,我还真想不出怎么循环判断,能不能提示下。
--  作者:王锋
--  发布时间:2014/4/8 21:03:57
--  

给你做个范例,可以遍历主图数据的,你应该看懂的

 

Sub Test()
Set Grid = Technic.GetGridByName("Main")

\'得到该窗格所对应的对象
Set History = Grid.GetHistoryData()

for i = 0 to History.Count-1
    Application.MsgOut History.Date(i)
next


End Sub


--  作者:szwangwei88
--  发布时间:2014/4/8 22:46:51
--  
我需要的是在输入日期和时间,得到数据,而这个数据就是真实的数据,而不是其他附近的数据,如果没有我要求的这个日期时间的数据,就返回一个标志让程序知道没有数据,看来你还是没有看懂我的问题。真晕,在Grid或HistoryData取数据,时间和数据要真实对应是最基本的要求啊,不然我输入一个休市的日期,也会得到一个数据,用这样的数据,运算后得到的结果有什么用啊。
--  作者:王锋
--  发布时间:2014/4/8 22:58:17
--  
上面代码都告诉你了遍历数据的方法,你就不知道做个函数?在函数里遍历数据,通过参数传递要检索的数据,函数返回-1表示没有检索到,返回一个大于等于0的就是找到数据了及数据的序号
--  作者:szwangwei88
--  发布时间:2014/4/9 0:53:44
--  
算了,这个问题不问了,晕。
--  作者:guotx2010
--  发布时间:2014/4/9 8:12:40
--  

function AAA(sDate)
Set Grid = Technic.GetGridByName("Main")

AAA=0

\'得到该窗格所对应的对象
Set History = Grid.GetHistoryData()

for i = 0 to History.Count-1
    \'Application.MsgOut History.Date(i)

     abc=History.Date(i) 

     if Cdate(sDate)=Cdate(abc) then

         AAA=1

        exit for

     end if
next


End function



\'以上是我根据王峰的代码给你做出来的现成的函数,你只要传递要判断的日期,如果有该日期的行情,就返回1,否则返回0

\'调用方法 :

    vvv=aaa("2014-04-09")