金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3708|回复: 12

取得的数据不正确

[复制链接]

47

主题

134

帖子

144

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
发表于 2023-6-5 16:29 | 显示全部楼层 |阅读模式
002.png 我用VB代码写的,取得的数据不对,还请指教下:
'建议窗体对象内的代码只编写与本窗体事件有关的代码,不要使用作用于整个工程的变量及过程函数。
Sub GetcodeVolume()'获取大于指定成交量的品种列表
Dim TestCode
  Dim TestVolume
  TestVolume=10'日成交10手以上的品种才加入
  '得到市场所有品种
Count = MarketData.GetReportCount("ZQ")
For i = 0 To Count-1
   Set Report1 = MarketData.GetReportDataByIndex("ZQ",i)
    '只处理有效合约
    IF Right(Report1.Label,2) >= "01" And Right(Report1.Label,2) <= "12" Then
      If Report1.Volume >= TestVolume Then
        TestCode = Report1.Label
        TestVolume = Report1.Volume
        Form1_ListBox1.additem  TestCode & " " & TestVolume
      End if
     End if
  Next
  '显示成交量最大得合约
End Sub

Sub Form1_CommandButton1_Click()
    GetcodeVolume
End Sub

以上代码TestVolume=10'日成交10手的品种加入列表,但是运行后无论这个值改成多少,都是选出同样的结果,不知道错在哪里
001.png
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-6-5 16:54 | 显示全部楼层
你想得到什么样的效果。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

47

主题

134

帖子

144

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2023-6-5 21:15 | 显示全部楼层
我想在VB中用一段代码实现:从三大期货交易所中所有的合约中自动选出每日成交量大于指定值(比如每天最低交易量1万手)的合约,并自动添加到指定的版块,比如:我的自选
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-6-5 21:42 | 显示全部楼层
[Visual Basic] 复制代码
Sub GetcodeVolume()'获取大于指定成交量的品种列表
Dim TestCode
  Dim TestVolume
  TestVolume=10'日成交10手以上的品种才加入
  '得到市场所有品种
Count = MarketData.GetReportCount("ZQ")

For i = 0 To Count-1
	Set Report1 = MarketData.GetReportDataByIndex("ZQ",i)
   if  StrComp(Right(Report1.Label,2), "01")>=0 And StrComp(Right(Report1.Label,2), "12")<=-0 Then
	If Report1.Volume >= TestVolume Then
        TestCode = Report1.Label
        Form1_ListBox1.additem  TestCode & " " & Report1.Volume
      End if
	
   end if
  Next
  '显示成交量最大得合约
End Sub

Sub Form1_CommandButton1_Click()
    GetcodeVolume
End Sub
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

47

主题

134

帖子

144

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2023-6-5 22:27 | 显示全部楼层
技术006 发表于 2023-6-5 21:42
[mw_shl_code=vb,true]Sub GetcodeVolume()'获取大于指定成交量的品种列表
Dim TestCode
  Dim TestVolum ...

非常感谢!
还有问题,我想取得前一天的成交量又该如何修改?
或者向前任意一天的日K线的成交量
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-6-6 05:35 | 显示全部楼层
使用MarketData 对象的GetHistoryDataByDate方法
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

47

主题

134

帖子

144

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2023-6-6 09:38 | 显示全部楼层
我使用了另一个函数,代码如下,但是有一个数值比较语句,一直得不到想要的结果,还请帮助看下是哪儿的问题:
Sub GetcodeVolume()'获取大于指定成交量的品种列表
        marketdata.HistoryDataMode=1'不同品种为独立的缓冲区
          Dim TestVolume
          DIM Tempvol
          TestVolume=Form1_TextBox1.text '日成交量大于设定值的品种才加入,此处文本框输入的值是10000

          '得到郑期所有品种
          Count = MarketData.GetReportCount("ZQ")
        For i = 0 To Count-1
            Set Report1 = MarketData.GetReportDataByIndex("ZQ",i)
                   if  StrComp(Right(Report1.Label,2), "01")>=0 And StrComp(Right(Report1.Label,2), "12")<=-0 Then
                        set History = marketdata.GetHistoryData(Report1.Label,"ZQ",5)      
                        '成交量
                        tempvol = History.volume(History.Count-2) '获取前一天的成交量
                        '数据处理完毕后,清理缓冲区
                        If  tempvol >= TestVolume  Then '此处为何一直是  tempvol >= TestVolume 不成立,无论tempvol 与 TestVolume 值是多少
                            Form1_ListBox1.additem  Report1.Label & " " & tempvol
                          End if
                     marketdata.DestroyHistoryData
                   end if
          Next

End Sub

回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-6-6 09:51 | 显示全部楼层
TestVolume的类型是字符串。字符串和数值比较之间,要转化成数值类型
cint(TestVolume)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

47

主题

134

帖子

144

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2023-6-6 11:53 | 显示全部楼层
下面的代码有一句一直报错,不知道什么原因,                        If  CLong(tempvol)>  CLng(TestVolume) Then'这一句一直报错:类型不匹配
Sub GetcodeVolume()'获取大于指定成交量的品种列表
        marketdata.HistoryDataMode=1'不同品种为独立的缓冲区
          Dim TestVolume
          DIM Tempvol
          TestVolume=Form1_TextBox1.text '日成交量大于设定值的品种才加入,此处文本框输入的值是10000
    'Form1_ListBox1.additem VarType(TestVolume)
          '得到郑期所有品种
          Count = MarketData.GetReportCount("ZQ")
        For i = 0 To Count-1
            Set Report1 = MarketData.GetReportDataByIndex("ZQ",i)
                   if  StrComp(Right(Report1.Label,2), "01")>=0 And StrComp(Right(Report1.Label,2), "12")<=-0 Then
                        set History = marketdata.GetHistoryData(Report1.Label,"ZQ",5)      
                        '成交量
                        tempvol = History.volume(History.Count-2) '获取前一天的成交量
                        '数据处理完毕后,清理缓冲区                        
                        If  CLong(tempvol)>  CLng(TestVolume) Then'这一句一直报错:类型不匹配
                                  Form1_ListBox1.additem  Report1.Label & " " & tempvol
                        End if
                     marketdata.DestroyHistoryData
                   end if
          Next

End Sub
回复

使用道具 举报

47

主题

134

帖子

144

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2023-6-6 12:01 | 显示全部楼层
刚才试了下,当TestVolume<32768时,使用cint函数可以正常运行,大于32767时,使用clong可以正常运行,这种情况,怎么处理呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-7-10 04:37 , Processed in 0.110602 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表