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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → vba每分钟轮询所有A股的行情

   

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


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

主题:vba每分钟轮询所有A股的行情

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
vba每分钟轮询所有A股的行情  发帖心情 Post By:2017/9/10 23:27:00 [显示全部帖子]

需求:每分钟对A股所有个股行情进行获取。获取的是最后一根完整的1分钟线数据。比如14:29:01的时候,去获取所有个股的14:28:00-14:29:00的开高低收量。
如果过于频繁,可以改成每5分钟。请问能否实现。

请问MarketData.GetReportCount函数和MarketData.GetReportDataByIndex函数可以实现吗?
另外我尝试MarketData.GetReportDataByIndex("SZ",i)去循环获取数据,得到的包括了一些债券,B股等等的数据,怎么样只获取A股的?谢谢指导


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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/11 11:43:35 [显示全部帖子]

代码段是有点不对吗?显示深圳A股的代码段是000000-029999,其中有些比如002920,是债券,不是A股

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/11 16:30:21 [显示全部帖子]

请问我想读取一个硬盘中的txt文件应该怎么打开?

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/11 23:03:39 [显示全部帖子]

MarketData.GetReportData拿下来的数据,由于网络延时,可能不是最后一根完整的K线。如果要保证最后一根K线完整,比如最后一根完整的5分钟线,需要改用MarketData.GetHistoryData吗?

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/12 10:41:50 [显示全部帖子]

需求:每分钟对A股所有个股行情进行获取。获取的是最后一根完整的1分钟线数据。比如14:29:01的时候,去获取所有个股的14:28:00-14:29:00的开高低收量。
MarketData.GetReportData拿下来的数据,是最新的行情,由于网络的延时,未必可以准点获取到刚好完整的最后一根一分钟线。
是否需要改用MarketData.GetHistoryData来获取,保证数据的完整?

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/12 13:27:22 [显示全部帖子]

Sub APPLICATION_VBAStart()
    Call Application.Settimer(0,1000)
End Sub

Sub APPLICATION_Timer(ID)
   if Hour(now) >= 9 And Hour(now) <= 15 And Minute(Now) > 1 And Second(Now) < 1 Then
      DifMin = Minute(Now) Mod 2
      
      IF DifMin = 0 Then
      set fso = CreateObject("Scripting.FileSystemObject")
      set tf = fso.OpenTextFile("E:\SarZ\sarz_py\quant\test\all_stock_code.csv", 1)
      while (not tf.AtEndOfStream)
stock_str = Split(tf.ReadLine, ",")
'msgbox (stock_str(0) & "  " & stock_str(1))
      set stock = MarketData.GetReportData(stock_str(0),stock_str(1))
     
      Set tf2 = fso.OpenTextFile("E:\SarZ\sarz_py\quant\test\jzt.txt", 8)
      tf2.WriteLine(stock.Date & "," & stock.Label & "," & stock.NewPrice)
      tf2.close
      wend
      tf.close
      End If
   End if
End Sub

以上是每两分钟获取的代码,以下是保存的结果:
2017/9/12 13:24:01,603277,19.59
2017/9/12 13:23:57,000868,6.25
2017/9/12 13:24:00,002455,13.38
2017/9/12 13:24:00,002497,20.9
2017/9/12 13:24:00,002747,14.81
2017/9/12 13:24:00,002782,21.69
2017/9/12 13:24:01,603882,12.08
2017/9/12 13:24:00,002407,29.92
2017/9/12 13:24:00,600884,26.68
2017/9/12 13:24:00,600558,7.86
2017/9/12 13:23:57,300484,35.05
2017/9/12 13:24:00,600699,35.33
2017/9/12 13:23:42,002897,39.64
2017/9/12 13:24:01,603305,55.66
2017/9/12 13:24:01,601012,26.35
2017/9/12 13:23:57,300693,69.4
2017/9/12 13:23:51,300681,71.94
2017/9/12 13:23:51,300697,14.63

可以看到,有很多不是整点的,想请教这应该怎解决?

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/12 13:39:43 [显示全部帖子]

但是MarketData.GetHistoryData这个,我应该可以每分钟过了10秒才去取数据,拿最后一根完整的K线,这样应该可以解决了吧?

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/12 13:43:36 [显示全部帖子]

请问要用MarketData.GetHistoryData取最后时间的完整K线,应该怎么写?比如每1分钟取一次的

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/12 14:01:13 [显示全部帖子]

昨天已经搜索过了,各个变量的索引不会用。比如:
set stock = MarketData.GetHistoryData(stock_str(0),stock_str(1), 3)
msgbox stock.Close(stock.Count - 1) 这样取出来的时间很奇怪,机制不明白
定时器我知道怎么用,是GetHistoryData返回的数据如何索引不知道
[此贴子已经被作者于2017/9/12 14:01:53编辑过]

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


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2017/9/13 13:49:50 [显示全部帖子]

Sub APPLICATION_VBAStart()
    Call Application.Settimer(0,1000)
End Sub

Sub APPLICATION_Timer(ID)
if Hour(now) >= 1 And Hour(now) <= 15 And (minute(now) mod 5 = 0) and Second(now) = 10 Then      

set fso = CreateObject("Scripting.FileSystemObject")
      
set fp_code = fso.OpenTextFile("E:\SarZ\sarz_py\quant\test\all_stock_code.csv", 1)
      
while (not fp_code.AtEndOfStream)

stock_str = Split(fp_code.ReadLine, ",")

'msgbox (stock_str(0) & "  " & stock_str(1))
      
set stock = marketdata.GetHistoryDataByDate(stock_str(0),stock_str(1), 1, now, now)
            
Set fp_data = fso.OpenTextFile("E:\SarZ\sarz_py\quant\test\time_read.txt", 8)
      
fp_data.WriteLine(stock_str(0) & "," & stock.Date(stock.Count-2) & "," & stock.open(stock.Count-2) & "," & stock.high(stock.Count-2) & "," & stock.low(stock.Count-2) & "," & stock.close(stock.Count-2) & "," & stock.volume(stock.Count-2)  & "," & now)
      
fp_data.close
marketdata.DestroyHistoryData
      
wend
      
fp_code.close
    End if
End Sub

002022,2017/9/13 13:40:00,17.96,17.97,17.96,17.97,439,2017/9/13 13:40:12
000666,2017/9/13 13:40:00,21.2,21.22,21.2,21.21,481,2017/9/13 13:40:12
601718,2017/9/13 13:35:00,8.84,8.84,8.82,8.83,3314,2017/9/13 13:40:12
000668,2017/9/13 13:35:00,17.47,17.47,17.46,17.46,47,2017/9/13 13:40:12
000517,2017/9/13 13:40:00,4.38,4.39,4.38,4.39,673,2017/9/13 13:40:12
300310,2017/9/13 13:40:00,13.08,13.08,13.06,13.06,719,2017/9/13 13:40:12
002825,2017/9/13 13:40:00,34.02,34.12,33.99,34.11,291,2017/9/13 13:40:12
300439,2017/9/13 13:35:00,21.31,21.32,21.3,21.3,59,2017/9/13 13:40:12
600531,2017/9/13 13:40:00,8.55,8.56,8.54,8.56,1463,2017/9/13 13:40:12
002799,2017/9/13 13:35:00,20.69,20.7,20.69,20.7,97,2017/9/13 13:40:12
300313,2017/9/13 13:35:00,15.58,15.6,15.55,15.56,533,2017/9/13 13:35:12
603277,2017/9/13 10:55:00,21.55,21.55,21.55,21.55,10,2017/9/13 13:40:10
000868,2017/9/13 13:40:00,6.88,6.88,6.88,6.88,155,2017/9/13 13:40:10
002455,2017/9/13 13:40:00,14.08,14.2,14.08,14.19,2924,2017/9/13 13:40:10
002497,2017/9/13 13:40:00,21.02,21.28,21.02,21.14,26613,2017/9/13 13:40:10
002747,2017/9/13 13:40:00,14.42,14.43,14.39,14.43,1759,2017/9/13 13:40:10
002782,2017/9/13 13:40:00,20.48,20.48,20.45,20.45,976,2017/9/13 13:40:10
603882,2017/9/13 9:55:00,13.29,13.29,13.29,13.29,66,2017/9/13 13:40:10

代码和输出结果。输出结果格式为:代码,时间,开高低收,当前时间。
有几个问题:
第一,部分涨停板的股票,时间怎么会是9:55:00或10:55:00等等,我代码是取最后一根完整K线的,为什么会出现这种情况。
第二,当前时间为13:40:12,为什么最后一根完整K先会取到13:35:00
第三,有些停牌的票,开高低收都是0,日期时间也是0,有些停牌的票,是停牌的最后日期
这几个问题麻烦解答一下,谢谢

 回到顶部
总数 14 1 2 下一页