計(jì)算股指合約當(dāng)天收盤前結(jié)算價(jià)并輸出到Excel [金字塔]
- 咨詢內(nèi)容:
Public MyXLL
private StockCod(14),StockMarke(30)Sub APPLICATION_VBAStart()
Call Application.SetTimer(10, 500)
GetExcelFile("F:\test_jzt\Stock_index_fut.xlsx")
End Sub
Sub APPLICATION_Timer(ID)
if cdate(time)>="10:52:00" then
GetStockCode
GetNewPrice
end if
end sub'取得要監(jiān)控的品種代碼
Sub GetStockCode()
dim i
dim j
i=CDbl(Document.GetPrivateProfileString("Stock","StockCount",1,"F:\test_jzt\Stock_index_fut.INI")) '品種數(shù)量
For j=0 to i
StockCod(j)=Document.GetPrivateProfileString("Stock","Cod" & Cstr(j),"","F:\test_jzt\Stock_index_fut.INI") '品種號(hào)碼
Next
End Sub'取得對(duì)應(yīng)品種的最新價(jià)格
Sub GetNewPrice()
dim j
dim i
on error resume next
i=CDbl(Document.GetPrivateProfileString("Stock","StockCount",1,"F:\test_jzt\Stock_index_fut.INI")) '取得合約數(shù)量
For j=0 to i
Set Report1 = marketdata.GetReportData(StockCod(j),"ZJ") '
if cdate(time)<="14:15:01" then '取得到兩點(diǎn)十五分的數(shù)據(jù)
if Report1.volume>0 then
MyXLL.Application.activesheet.Range("B" & Cstr(j+2)) = StockCod(j)
MyXLL.Application.activesheet.Range("C" & Cstr(j+2)) = report1.newprice
MyXLL.Application.activesheet.Range("D" & Cstr(j+2)) = report1.volume
MyXLL.Application.activesheet.Range("E" & Cstr(j+2)) = report1.SellAmount
MyXLL.Application.activesheet.Range("F" & Cstr(j+2)) = report1.BuyAmount
end if
else
if Report1.volume>0 then '取得最新數(shù)據(jù)
MyXLL.Application.activesheet.Range("G" & Cstr(j+2)) = report1.newprice
MyXLL.Application.activesheet.Range("H" & Cstr(j+2)) = report1.volume
MyXLL.Application.activesheet.Range("I" & Cstr(j+2)) = report1.SellAmount
MyXLL.Application.activesheet.Range("J" & Cstr(j+2)) = report1.BuyAmount
end if
end if
Next
End Sub
'打開Excel
Sub GetExcel()
Const ERR_APP_NOTRUNNING = 429
On Error Resume Next
Set MyXLL = GetObject(, "Excel.Application")
If Err = ERR_APP_NOTRUNNING Then
Set MyXLL = CreateObject("Excel.Application")
End If
MyXLL.Application.Visible = True
End Sub
'打開某個(gè)excel文件
Sub GetExcelFile(sFileName)
'此過程暫停使用,替代過程為:GetExcelDim sWinName '窗口名
Dim iPos
'測(cè)試 Microsoft Excel 的副本是否在運(yùn)行。
On Error Resume Next '延遲錯(cuò)誤捕獲。
'不帶第一個(gè)參數(shù)調(diào)用 Getobject 函數(shù)將
'返回對(duì)該應(yīng)用程序的實(shí)例的引用。
'如果該應(yīng)用程序不在運(yùn)行,則會(huì)產(chǎn)生錯(cuò)誤。
Set MyXLL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Set MyXLL = CreateObject("Excel.Application")
End if'將對(duì)象變量設(shè)為對(duì)要看的文件的引用。
Set MyXLL = GetObject(sFileName)
iPos = InStrRev(sFileName, "\", -1, vbTextCompare)
sWinName = Mid(sFileName, iPos + 1, Len(sFileName) - iPos - 4)
'設(shè)置其 Application 屬性,顯示 Microsoft Excel。
'然后使用 MyXL 對(duì)象引用的 Windows 集合
'顯示包含該文件的實(shí)際窗口。
MyXLL.Application.Visible = True
MyXLL.Application.ScreenUpdating = True
MyXLL.Parent.Windows(1).Activate
MyXLL.Application.Sheets(1).Visible=true
End Sub'關(guān)閉Excel
Sub CloseExcel()
On Error Resume Next
MyXLL.Application.DisplayAlerts = False
'MyXL.Application.Save
MyXLL.Application.Quit
' Set MyXL = Nothing '釋放對(duì)該應(yīng)用程序
End Sub
建立一個(gè)名為F:\test_jzt\Stock_index_fut.ini格式文件,內(nèi)容為:
[Stock]
StockCount=13
Cod0=IF00
Cod1=IF01
Cod2=IF02
Cod3=IF03
Cod4=IF04
Cod5=IF05
Cod6=IF06
Cod7=IF07
Cod8=IF08
Cod9=IF09
Cod10=IF10
Cod11=IF11
Cod12=IF12
Cod13=IF13建立一個(gè)F:\test_jzt\Stock_index_fut.xls表格。
小生從此論壇學(xué)到不少東西,現(xiàn)將最近做的一個(gè)程序上傳,里面有不少內(nèi)容借鑒論壇內(nèi)前輩高人的知識(shí),如有版權(quán)侵犯,還請(qǐng)包涵。同時(shí)該程序還不少不足之處,有待改正,望塔友建議之。
- 金字塔客服: 直接把計(jì)算結(jié)算價(jià)部分的代碼寫到vba代碼內(nèi)部,不用excel,效果會(huì)更好。
- 用戶回復(fù): 學(xué)習(xí)了,大師有傳人了。
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 262069696 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)