以下内容为程序代码:
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(涨停));
求解惑!!
经过逐句调试已经发现问题了,在循环中执行下面语句后,数据提取会失败,比如板块中1000个股票,在10个股票中符合IF条件,然后会执行下面的语句。执行完毕后第11个股票的数据就提取不出来了
以下内容为程序代码:
1 call b.open("两连板",1)
2 31 call b.AddStock(TCMARKET,TCCODE)
3 32 call b.ToSave("自选","两连板") '保存数据
解决方案是建立数组,在循环结束后统一添加进板块