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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → marketdata.GetHistoryData("if11","zj",0) 获取的是当前K以前的所有数据吗?

   

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


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

主题:marketdata.GetHistoryData("if11","zj",0) 获取的是当前K以前的所有数据吗?

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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
marketdata.GetHistoryData("if11","zj",0) 获取的是当前K以前的所有数据吗?  发帖心情 Post By:2021/1/17 21:40:04 [显示全部帖子]

如题:marketdata.GetHistoryData("if11","zj",0) 获取的是当前K以前的所有数据吗?

dim d2

Set d2 = CreateObject("Stock.Array")       

set Data2= marketdata.GetHistoryData("if11","zj",0)  

for i=Data2.Count-2 to Data2.Count-1

  d2.AddBack(Data2.Close(i))    

next

问题:1、若marketdata.GetHistoryData("if11","zj",0) 获取的是当前K以前所有1分钟K,意味若确保D2数组加载的数据同步于              marketdata.GetHistoryData("if11","zj",0),需要:

  if d2.Count < Data2.Count then

       d2.AddBack(Data2.Close(i))    

  end if

这样对吗?

        2、若marketdata.GetHistoryData("if11","zj",0) 不是获取的是当前K以前所有1分钟K,是当前K的那根K?

菜鸟问题,请谅解。因为在盘后,无法测试比较。请老师耐心解答!!谢谢




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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/18 9:48:16 [显示全部帖子]

我这样理解老师的回答,不知道对不对:
在当天为交易日时
1、marketdata.GetHistoryData("if11","zj",0) 就是指今天开盘前所有数据,其中0代表1分钟,这点老师可能没注意到。
2、今天所有交易时段的数据在marketdata.GetReportData("if11","zj",0) 之中。
谢谢

另外问一个问题,技术分析框架,加载的k线,是不是自动读取marketdata.GetHistoryData("if11","zj",0) 后,再依据marketdata.GetReportData("if11","zj",0)刷新? 

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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/18 10:27:01 [显示全部帖子]

谢谢,老师。
请告诉我:
我这样理解老师的回答,不知道对不对:
在当天为交易日时
1、marketdata.GetHistoryData("if11","zj",0) 就是指今天开盘前所有数据,其中0代表1分钟,这点老师可能没注意到。
2、今天所有交易时段的数据在marketdata.GetReportData("if11","zj",0) 之中。
3、在发生收盘后,marketdata.GetReportData("if11","zj",0) 之中的数据就会写入到marketdata.GetReportData("if11","zj",0) 之中,对吗?

因为,我想自编个合约,读取marketdata.GetHistoryData("if11","zj",0) 数据,然后再读取marketdata.GetReportData("if11","zj",0) 数据。然后加载在技术分析框架上,还能够自动刷新。
请知道,谢谢

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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/26 6:54:26 [显示全部帖子]

老师给个qq,以前运行完全正常的VBA突然出现如图的情况.
图片点击可在新窗口打开查看此主题相关图片如下:捕获1.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/26 7:01:36 [显示全部帖子]

我就是直接把文档拷贝在记事本上编辑,然后再直接拷贝回来就发生正中情况.

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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/27 8:10:37 [显示全部帖子]

我想把IF合约的的分钟历史数据与当天的分时数据合并,添加再一个新名称的合约里。但老是出现上面的非法退出,各种版本都试过,包括6.0beta5
代码如下:
'-------------------------------------------------------------K开始---------------------------------------------------
dim qj
qj=0
dim StartIndex
StartIndex = 0     

dim minuteout'
minuteout = 0     
dim timeString
timeString=""
dim KstartTime
KstartTime =0
dim shanchu
shanchu=1


dim dangtianshuju '当日是否有数据,0为没有
dangtianshuju = 0

dim bili 
bili = 0.002    


dim xinheyue
xinheyue = "IF88"  

dim xinmingcheng
xinmingcheng = "IFK线" 
dim xinshichang
xinshichang = "ZJ" 

dim laoheyue
laoheyue = "IF00" '标的合约代码
dim laoshichang
laoshichang = "ZJ" '标的合约市场
dim laozhishu
laozhishu = "IF13"

dim laoheyueStartDate
laoheyueStartDate = laoheyue+"StartDate" '
dim laoheyueDataCount
laoheyueDataCount = laoheyue+"DataCount" '

dim newKOpen'
newKOpen=0
dim newKClose'
newKClose=0
dim newKHigh'
newKHigh=0
dim newKLow'
newKLow=0
dim newKVolume
newKVolume=0
dim mxVolume'
mxVolume=0
dim newKDate'
newKDate=0
dim newkOpenInt'
newkOpenInt=0

dim PKOpenP
dim PKClose
dim PKHigh
dim PKLow
dim PKVolume
dim PKDate
dim PKOpenInt

Sub lishishuju()
        '查询品种是否存在,不存在则新建
        cunzai = marketdata.IsExistStock(xinheyue,xinshichang)
        if cunzai = 0 then
            call marketdata.AddStock(xinheyue,xinshichang, xinmingcheng) 
        else
            'call marketdata.DeleteStock(xinheyue,xinshichang) 
            'call marketdata.AddStock(xinheyue,xinshichang, xinmingcheng) 
        end if
    '删除历史数据,创建第一根K线
    if shanchu = 0 then     
       Set History1 =marketdata.GetHistoryData(xinheyue,xinshichang,0)     
       for j = 0 to History1.Count-1
       History1.RemoveAt(j)
       next    
       call History1.SaveData(xinheyue,xinshichang,1)        
       application.MsgOut
    end if        
        '+++++++++++++++++++更新新合约的历史数据++++++++++++++++++++++++++                                                 
        VarStartDate=Document.GetExtString(laoheyueStartDate)'取存储的老合约1分钟数据的0号数据的时间   
        VarDataCount=Document.GetExtData(laoheyueDataCount)'取储的新合约1分钟数据的数据的个数
        Set History00=marketdata.GetHistoryData(laoheyue,laoshichang,0)'取老合约1分钟数据                
        Hs00PosDate=History00.date(0)'按时间取老合约1分钟数据的,看是否为0号数据
        Hs00DataCount=History00.count'取老合约1分钟数据的数据的个数
        application.MsgOut "instr(VarStartDate,Hs00PosDate) <>0 or VarDataCount<>Hs00DataCount【创建成功】CStr(History00.Count)"  +CStr(History00.Count)                                               

  
           Set PKOpen=CreateObject("Stock.Array")
           Set PKClose=CreateObject("Stock.Array")
           Set PKHigh=CreateObject("Stock.Array")
           Set PKLow=CreateObject("Stock.Array")
           Set PKVolume=CreateObject("Stock.Array")
           Set PKDate=CreateObject("Stock.Array")
           Set PKOpenInt=CreateObject("Stock.Array")             
           h00=History00.Count-1               
           for i = 0 to  H00
               PKOpen.AddBack(History00.Open(i))
               PKClose.AddBack(History00.close(i))
               PKHigh.AddBack(History00.high(i))
               PKLow.AddBack(History00.low(i))
               PKVolume.AddBack(History00.Volume(i))
               PKDate.AddBack(History00.date(i))
               PKOpenInt.AddBack(History00.OpenInt(i))
               if i=h00 then
                  '加载当天分时数据
                      
                     for j = KstartTime to mc-2                                         
                         PKOpen.AddBack(minutedata.Open(j))
                         PKClose.AddBack(History00.close(j))           
                         PKHigh.AddBack(minutedata.high(j))
                         PKLow.AddBack(minutedata.low(j))
                         PKVolume.AddBack(minutedata.Volume(j))
                         PKDate.AddBack(minutedata.date(j))
                         PKOpenInt.AddBack(minutedata.OpenInt(j))            
                     next
                             
               end if 
           Next                                             


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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/27 8:12:12 [显示全部帖子]

'**********************加载历史数据,并形成等价K线******************************                                  
           for i = 0 to  PKOpen.Count-1              
               Thigh=PKHigh.GetAt(i) 
               Tlow=PKLow.GetAt(i)               
               TVolume=PKVolume.GetAt(i) 
               TDate=PKDate.GetAt(i)                  
                  newkopen=PKOpen.GetAt(i)
                  newkHigh=Thigh
                  newkLow=Tlow
                  mxVolume=TVolume  
               newkVolume=TVolume-mxVolume
               newkClose=PKClose.GetAt(i)    
               newkDate=TDate
               newkOpenInt=PKOpenInt.GetAt(i) 
                                                          
                  PKOpen.AddBack(newkOpen)
                  PKClose.AddBack(newkClose)
                  PKHigh.AddBack(newkHigh)
                  PKLow.AddBack(newkLow)
                  PKVolume.AddBack(newkVolume)
                  PKDate.AddBack(newkDate)
                  PKOpenInt.AddBack(newkOpenInt)
  
           next            


          '将变化的合约标识数据——该数据实际成为老数据,写入全局变量
          Set History10=marketdata.GetHistoryData(xinheyue,xinshichang,0)'取老合约1分钟数据
 
             for i = 0 to  PKOpen.Count-1
               Set History11=marketdata.GetHistoryData(xinheyue,xinshichang,0)'取老合约1分钟数据             
               call History11.InsertAt(i)           
               History11.Open(i)=PKOpen.GetAt(i)
               History11.Close(i)=PKClose.GetAt(i)
               History11.High(i)=PKHigh.GetAt(i)
               History11.Low(i)=PKLow.GetAt(i)
               History11.Volume(i)=PKVolume.GetAt(i)
               History11.Date(i)=PKDate.GetAt(i)
               History11.OpenInt(i)=PKOpenInt.GetAt(i)

             Next                                                           
             Set PKOpen=nothing
             Set PKClose=nothing  
             Set PKHigh=nothing
             Set PKLow=nothing
             Set PKVolume=nothing
             Set PKDate=nothing
             Set PKOpenInt=nothing           
 
End Sub

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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/27 11:55:27 [显示全部帖子]

老师您将
Sub lishishuju()
        '查询品种是否存在,不存在则新建
        cunzai = marketdata.IsExistStock(xinheyue,xinshichang)
        if cunzai = 0 then
            call marketdata.AddStock(xinheyue,xinshichang, xinmingcheng) 
        else
            'call marketdata.DeleteStock(xinheyue,xinshichang) 
            'call marketdata.AddStock(xinheyue,xinshichang, xinmingcheng) 
        end if
    '删除历史数据,创建第一根K线
    if shanchu = 0 then     中的shanchu=0改为if shanchu = 1 then
  试一试。谢谢


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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/27 12:42:39 [显示全部帖子]

marketdata这个函数不好掌握,好容易出问题,我有如下感觉:
1.函数的调用不可靠;
2、函数的销毁不可靠


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


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2021/1/27 12:45:41 [显示全部帖子]

marketdata这个函数不好掌握,好容易出问题,我有如下感觉:
1.函数的调用不可靠;
2、函数的销毁不可靠
3、同minutedata函数混合使用,易于导致内存溢出

 回到顶部
总数 21 1 2 3 下一页