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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 将指定期货最新行情数据写入Excel的代码

   

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


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

主题:将指定期货最新行情数据写入Excel的代码

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
将指定期货最新行情数据写入Excel的代码  发帖心情 Post By:2011/5/17 8:54:21 [显示全部帖子]

Public MyXL
private StockCode(30),StockMarket(30)

Sub APPLICATION_VBAStart()
 Call Application.SetTimer(10, 500)
 GetExcelFile("D:\Stock.xls")
End Sub

Sub APPLICATION_Timer(ID)
 GetStockCode
 GetNewPrice
end sub

Sub GetNewPrice()
  dim i
 dim j
 on error resume next
 i=CDbl(Document.GetPrivateProfileString("Stock","StockCount",1,"D:\StockCode.INI"))
 For j=1 to i
  application.MsgOut "正在导出:" & StockCode(j) & "行情..."
   Set Report1 = marketdata.GetReportData(StockCode(j),StockMarket(j))
   MyXL.Application.activesheet.Range("C" & Cstr(j+3)) =  StockCode(j)
  MyXL.Application.activesheet.Range("D" & Cstr(j+3)) =  report1.BuyPrice1
  MyXL.Application.activesheet.Range("E" & Cstr(j+3)) =  report1.SellPrice1
 Next  
End Sub

'取得要监控的品种代码
Sub GetStockCode()
 dim i
 dim j
 i=CDbl(Document.GetPrivateProfileString("Stock","StockCount",1,"D:\StockCode.INI"))
 For j=1 to i
  StockCode(j)=Document.GetPrivateProfileString("Stock","Code" & Cstr(j),"","D:\StockCode.INI")  '品种号码
  StockMarket(j)=Document.GetPrivateProfileString("Stock","Market" & Cstr(j),"","D:\StockCode.INI") '交易所代码
  'application.MsgOut "i:" & i & "," & stockcode(j) & "," & StockMarket(j)
 Next
End Sub
'打开Excel
Sub GetExcel()
    Const ERR_APP_NOTRUNNING = 429
 
    On Error Resume Next
    Set MyXL = GetObject(, "Excel.Application")
    If Err = ERR_APP_NOTRUNNING Then
        Set MyXL = CreateObject("Excel.Application")
    End If
   
    MyXL.Application.Visible = True
End Sub
'打开某个excel文件
Sub GetExcelFile(sFileName)
    '此过程暂停使用,替代过程为:GetExcel

    Dim sWinName                '窗口名
    Dim iPos
   
    '测试 Microsoft Excel 的副本是否在运行。
    On Error Resume Next    '延迟错误捕获。
    '不带第一个参数调用 Getobject 函数将
    '返回对该应用程序的实例的引用。
    '如果该应用程序不在运行,则会产生错误。
    Set MyXL = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
  Set MyXL = CreateObject("Excel.Application")
 End if

    '将对象变量设为对要看的文件的引用。
    Set MyXL = GetObject(sFileName)
   
    iPos = InStrRev(sFileName, "\", -1, vbTextCompare)
    sWinName = Mid(sFileName, iPos + 1, Len(sFileName) - iPos - 4)
   
    '设置其 Application 属性,显示 Microsoft Excel。
    '然后使用 MyXL 对象引用的 Windows 集合
    '显示包含该文件的实际窗口。
    MyXL.Application.Visible = True
    MyXL.Application.ScreenUpdating = True
    MyXL.Parent.Windows(1).Activate
    MyXl.Application.Sheets(1).Visible=true
End Sub

'关闭Excel
Sub CloseExcel()
    On Error Resume Next
    MyXL.Application.DisplayAlerts = False
    'MyXL.Application.Save
    MyXL.Application.Quit
'    Set MyXL = Nothing    '释放对该应用程序
End Sub

 

使用说明:

   1、新建一个模块,将上述代码复制到新建的模块;

   2、在D:\建立一个Excel文件,命名为Stock.xls

   3、在D:\建立一个StockCode.ini文件,设置需要导出的代码,格式如下:

     [Stock]
     StockCount=5           

     Code1=TWGD
     Market1=XH

     Code2=XHAP
     Market2=XH

     Code3=XHGT
     Market3=XH

     Code4=XHPD
     Market4=XH

     Code5=XHGT
     Market5=XH

     ...

    说明:StockCount=5那行指定要导出的期货品种数

            下面的Code1是第一个品种的代码,Market1是该商品的市场代码,以下代码依次按照序号往下编排。


 

 



[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/5/17 23:18:50 [显示全部帖子]

使用此模块可以同时导出15个左右品种的行情数据,每0.5秒导出一次,品种再多的话,可能会出现延时现象,我试过使用多个计时器同时导出,每一个计时器导出10个品种,可以减小延时现象,但是会出现运行不稳定,运行10几分钟就自动停止,如果金字塔的VBA后台能支持多线程,可能就可以很好的解决这个问题。

 


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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/6/15 15:27:04 [显示全部帖子]

先打开Excel文件,再启动金字塔就行了。

 


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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/6/16 22:18:47 [显示全部帖子]

Code1=IF06

Market1=ZJ

 

股指市场代码都是ZJ

 


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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/6/21 17:23:23 [显示全部帖子]

好像不能导入数据吧,只能导出数据。

 


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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/7/26 14:22:51 [显示全部帖子]

在getNewPrice过程中,on error resume next那句下面加上下面一句就可以激活stock.xls文件,而不会写到别的文件中。 MyXl.Parent.Windows("Stock.xls").Activate

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/7/29 22:07:08 [显示全部帖子]

操作某一个工作表就是在写数据前,选择那个表,语法:MyXl.Sheets("sheet1").Select或MyXl.Application.Sheets("sheet1").Select,具体哪个行,自己试试看。

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2011/7/29 22:09:07 [显示全部帖子]

要写入最新价、卖一量、买一量这些即时行情数据,参考marketdata对象,现在的report1引用的数据只有三个,增加就行了。

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/1/1 14:15:18 [显示全部帖子]

如果无意中关闭了Excel这行代码可以再次打开。

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/1/15 13:45:26 [显示全部帖子]

楼上的要求是导出历史数据,可以实现,只是方式不同,使用marketdata对象来做就行了,如果需要导出成其他数据库格式,比如Access,Sql Server等都是可以的,使用ActiveX ADO 对象来实现就行。 至于实现的细节,自己去琢磨就行了,想要现成的,暂时没有。

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