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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → VBA选股与软件中选股的结果不一致

   

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


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

主题:VBA选股与软件中选股的结果不一致

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


加好友 发短信
等级:新手上路 帖子:43 积分:1 威望:0 精华:0 注册:2013/3/9 23:18:00
VBA选股与软件中选股的结果不一致  发帖心情 Post By:2016/3/3 22:34:36 [只看该作者]

以下内容为程序代码:

1 Set b = CreateObject("Stock.Block")
2 b.ClearBlock "自选","两连板"
3 call b.ToSave("自选","两连板") '保存数据
4 Dim blocktype2(5)
5 Dim blockname2(5)
6
7 TIMAX2=1
8 blocktype2(TIMAX2)="上海证券交易所"
9 blockname2(TIMAX2)= "上海A股"
10 TIMAX2=TIMAX2+1
11 blocktype2(TIMAX2)="深圳证券交易所"
12 blockname2(TIMAX2)= "深圳A股"
13 TIMAX2=TIMAX2+1
14 blocktype2(TIMAX2)="深圳证券交易所"
15 blockname2(TIMAX2)= "深圳创业"
16
17
18 FOR I=1 TO TIMAX2
19 call b.open(blockname2(I),0)
20 tnblockcount=b.count
21 application.MsgOut tnblockcount & blockname2(I)
22 for J=0 TO tnblockcount-1
23
24 TCMARKET=b.GetStockMarket(J)
25 TCCODE=b.GetStockCode(J)
26 Set Formula1 = marketdata.STKINDI(TCCODE,TCMARKET,"两连扳测试",0,5)
27 DataSize=Formula1.DataSize
28 IF Formula1.GetBufData("两连扳",DataSize-1) =1 and Formula1.GetBufData("连续涨停数",DataSize-1)=2 and Formula1.GetBufDateData(DataSize-1)=date THEN '非停牌股
29 application.MsgOut TCCODE & TCMARKET & ":" & Formula1.GetBufData("两连扳",DataSize-1) & ", " & Formula1.GetBufData("连续涨停数",DataSize-1)
30 call b.open("两连板",1)
31 call b.AddStock(TCMARKET,TCCODE)
32 call b.ToSave("自选","两连板") '保存数据
33 END IF
34 next
35 next

以上是VBA的选股代码,在今天执行,得到的结果有3个,600490.000505,300023

但是用选股系统选出来的要多,像000626,000657,002133,002145都是符合公式条件的,就是没有被选进去

公式代码如下:

涨停:=C>REF(C,1)*1.095;
两连扳:ref(涨停,1) and 涨停;
连续涨停数:BARSLast(not(涨停));

求解惑!!


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


加好友 发短信
等级:新手上路 帖子:43 积分:1 威望:0 精华:0 注册:2013/3/9 23:18:00
  发帖心情 Post By:2016/3/4 19:45:39 [只看该作者]

版主,求答疑!!!

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


加好友 发短信
等级:新手上路 帖子:43 积分:1 威望:0 精华:0 注册:2013/3/9 23:18:00
  发帖心情 Post By:2016/3/4 21:53:05 [只看该作者]

经过逐句调试已经发现问题了,在循环中执行下面语句后,数据提取会失败,比如板块中1000个股票,在10个股票中符合IF条件,然后会执行下面的语句。执行完毕后第11个股票的数据就提取不出来了

以下内容为程序代码:

1 call b.open("两连板",1)
2 31 call b.AddStock(TCMARKET,TCCODE)
3 32 call b.ToSave("自选","两连板") '保存数据

解决方案是建立数组,在循环结束后统一添加进板块


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


加好友 发短信
等级:论坛游侠 帖子:217 积分:0 威望:0 精华:0 注册:2016/3/3 13:31:35
  发帖心情 Post By:2016/3/11 11:08:48 [只看该作者]

请问一下
set b=nothing什么时候用要?

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2016/3/11 13:29:23 [只看该作者]

在你不再需要该对象的时候去执行

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


加好友 发短信
等级:论坛游侠 帖子:217 积分:0 威望:0 精华:0 注册:2016/3/3 13:31:35
  发帖心情 Post By:2016/3/11 15:02:28 [只看该作者]

谢谢

 回到顶部