以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 高级功能研发区 (http://222.73.7.161/bbs/list.asp?boardid=5) ---- VBA选股与软件中选股的结果不一致 (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=93938) |
-- 作者:天涯doa -- 发布时间:2016/3/3 22:34:36 -- VBA选股与软件中选股的结果不一致 以下内容为程序代码:
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; 求解惑!! |
-- 作者:天涯doa -- 发布时间:2016/3/4 19:45:39 -- 版主,求答疑!!! |
-- 作者:天涯doa -- 发布时间: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 -- 发布时间:2016/3/11 11:08:48 -- 请问一下 set b=nothing什么时候用要?
|
-- 作者:yukizzc -- 发布时间:2016/3/11 13:29:23 -- 在你不再需要该对象的时候去执行 |
-- 作者:jinn -- 发布时间:2016/3/11 15:02:28 -- 谢谢 |