為期貨連續(xù)合約生成除權(quán)復(fù)權(quán)數(shù)據(jù)的程序 [金字塔]
- 咨詢內(nèi)容:
寫了個(gè)計(jì)算連續(xù)合約除權(quán)復(fù)權(quán)數(shù)據(jù)的VBA程序,歡迎指正。
功能:在換月時(shí),把連續(xù)合約換月造成的跳空缺口按換月后合約的實(shí)際跳空缺口進(jìn)行復(fù)權(quán),壇上有許多方法介紹,如為期貨連續(xù)合約建立除權(quán)復(fù)權(quán)數(shù)據(jù)http://www.weistock.com/BBS/dispbbs.asp?boardid=2&id=7342&page=3&move=pre。
本程序的計(jì)算方法與股票分紅除權(quán)類似:例如,IF00在2013年6月19日的主力合約為IF06,6月20日主力合約切換到IF07,主力合約切換時(shí)IF06、IF07 的前收盤價(jià)(即6月19日收盤價(jià))分別為2395、2377.8,那么將生成一條除權(quán)日期為6月20日,每10股分紅為10*(2395-2377.8)=172的除權(quán)數(shù)據(jù)。如果新主力合約前收盤大于舊主力合約前收盤,則該值為負(fù)數(shù)。金字塔允許分紅數(shù)、送股數(shù)為負(fù)數(shù),大多數(shù)國(guó)內(nèi)股軟是不允許的,贊一個(gè)。
用法:
(1)停止VBA運(yùn)行,把后面的VBA程序復(fù)制到模塊中并修改需要計(jì)算的品種;
(2)運(yùn)行VBA,選擇“工具”“擴(kuò)展”“生成連續(xù)合約除權(quán)數(shù)據(jù)”,生成除權(quán)文件。
(3)在數(shù)據(jù)管理中引入除權(quán)數(shù)據(jù)。
問(wèn)題:一定把相關(guān)合約的日數(shù)據(jù)補(bǔ)充齊全,否則計(jì)算結(jié)果肯定有誤;似乎2010以前的除權(quán)算不出來(lái),可能是連續(xù)合約的持倉(cāng)與各月份合約不同,有待進(jìn)一步檢查。
以下內(nèi)容為程序代碼:
1 Sub Menu_Show()
2 call Menu.AddMenu(0, 0, "生成連續(xù)合約除權(quán)數(shù)據(jù)")
3 End Sub
4 Sub MENU_Command(Cmd)
5 select case cmd
6 case 0
7 GenSplit "ZJIF;SQRB","d:\split.txt" '這里根據(jù)您的需要修改,注意參數(shù)格式
8 end select
9 End Sub
10 Sub GenSplit(contract,cqfile)
11 '功能:生成連續(xù)合約除權(quán)數(shù)據(jù)文件
12 '參數(shù)contract為以半角分號(hào)分隔的交易所+合約品種代碼,如"ZJIF;SQCU;DQY;"
13 ' 其中,市場(chǎng)代碼:中金所是ZJ,上期所SQ,鄭商所ZQ,大連所DQ;合約品種代碼不包含月份;DQA、ZQWS、ZQSR等不加后面的X和Y。
14 '參數(shù)cqfile為除權(quán)文件名,如"d:\split.txt"
15 '注:本程序用持倉(cāng)量找主力合約。如果用成交量,確保計(jì)算時(shí)處于非復(fù)權(quán)狀態(tài),或者取消對(duì)成交量復(fù)權(quán)。
16
17 if msgbox("請(qǐng)確?!? & contract &"”的連續(xù)合約、各月份合約的日線歷史數(shù)據(jù)已保存在本地硬盤!"&vbcrlf&"確定繼續(xù)?",vbOKCancel,"確定")=vbCancel then exit sub
18 msg=""
19 out="證券代碼"& Chr(9) &"時(shí)間"& Chr(9) &"紅股(10送)"& Chr(9) &"配股(10配)"& Chr(9) &"配股價(jià)"& Chr(9) &"紅利(10送)" & vbcrlf '除權(quán)文件頭,漢字以TAB字符分隔
20 mktsecs=Split(contract,";")
21 mkt=""
22 sec=""
23 Set c_date_oi = CreateObject("Scripting.Dictionary") '連續(xù)合約日期、持倉(cāng)量
24 Set d = CreateObject("Scripting.Dictionary") '合約代碼
25 '====遍歷指定的品種====
26 for each mkt_sec in mktsecs
27 mkt=left(mkt_sec,2)
28 sec=mid(mkt_sec,3)
29 c_sym="" '保存連續(xù)合約代碼
30 '===遍歷指定市場(chǎng)下的所有合約,找出指定品種的連續(xù)合約和月份合約===
31 seccount = MarketData.GetReportCount(mkt)
32 for i=0 to seccount-1
33 Set rpt1 = MarketData.GetReportDataByIndex(mkt,i)
34 mm=Right(rpt1.Label, 2)
35 imm=CInt(mm)
36 if sec=left(rpt1.Label,len(sec)) and imm=0 then '連續(xù)合約
37 c_sym=rpt1.Label
38 set h=MarketData.GetHistoryData(c_sym,mkt,5)
39 for j=0 to h.Count-1
40 if not c_date_oi.Exists(h.Date(j)) then c_date_oi.Add h.Date(j), h.Openint(j)
41 next
42 End if
43 If sec=left(rpt1.Label,len(sec)) and imm>=1 and imm<=12 then '月份合約
44 if not d.Exists(rpt1.label) then d.Add rpt1.label,0
45 End If
46 Next
47 '===根據(jù)連續(xù)合約和月份合約日線數(shù)據(jù),生成除權(quán)數(shù)據(jù)===
48 if c_sym<>"" and d.Count>0 then
49 prevsym="" '保持前一個(gè)主力合約代碼
50 prevclose = 0 '保持前一個(gè)主力合約的收盤價(jià)
51 for each c_date in c_date_oi.Keys '遍歷連續(xù)合約的每個(gè)交易日
52 for each sym in d.Keys '遍歷每個(gè)合約,通過(guò)持倉(cāng)量找出主力合約
53 set h=MarketData.GetHistoryData(sym,mkt,5) '每次取歷史數(shù)據(jù),效率稍低
54 curpos=h.GetPosFromDate(c_date)
55 if h.Date(curpos)=c_date and h.Openint(curpos)=c_date_oi.item(c_date) then '判斷與連續(xù)合約持倉(cāng)相等的合約,即主力合約
56 newprevclose=h.Close(curpos-1) '新主力合約的前一收盤價(jià)
57 if prevsym<>sym and prevclose>0 then '找到新主力合約
58 msg=msg & mkt_sec& " " & c_sym &" " & c_date & " 前一主力合約 " & prevsym &" 前一交易日收盤價(jià)=" & prevclose & ",當(dāng)前主力合約 " & sym & " 的前一交易日收盤價(jià)=" & newprevclose &" 當(dāng)前收盤價(jià)=" & h.Close(curpos) & vbcrlf
59 out=out & mkt & c_sym & Chr(9) & ( year(c_date)*10000+month(c_date)*100+day(c_date) ) & Chr(9) & "0.0" & Chr(9) & "0.0" & Chr(9) & "0.0" & Chr(9) & FormatNumber((prevclose-newprevclose)*10,2,-1,0,0) & vbcrlf
60 end if
61 prevsym=sym
62 prevclose=h.Close(curpos)
63 exit for
64 end if
65 next
66 next
67 End if
68 c_date_oi.RemoveAll
69 d.RemoveAll
70 next ' for each mkt_sec in mktsecs
71 'Application.MsgOut msg
72 '====保存除權(quán)數(shù)據(jù)====
73 Set fso = CreateObject("Scripting.FileSystemObject")
74 Set f = fso.OpenTextFile(cqfile, 2, True) 'ForWriting = 2, ForAppending = 8
75 f.Write(out)
76 f.Close
77 'Application.MsgOut out
78 msgbox "除權(quán)數(shù)據(jù)文件保存在"&cqfile &",請(qǐng)用JZT數(shù)據(jù)管理器導(dǎo)入!"
79 End sub - 金字塔客服:
生成的IF00除權(quán)數(shù)據(jù)如下:
證券代碼 時(shí)間 紅股(10送) 配股(10配) 配股價(jià) 紅利(10送)
ZJIF00 20100519 0.0 0.0 0.0 -314.00
ZJIF00 20100618 0.0 0.0 0.0 -184.00
ZJIF00 20100716 0.0 0.0 0.0 -68.00
ZJIF00 20100819 0.0 0.0 0.0 -164.00
ZJIF00 20100917 0.0 0.0 0.0 -102.00
ZJIF00 20101015 0.0 0.0 0.0 -192.00
ZJIF00 20101112 0.0 0.0 0.0 -714.00
ZJIF00 20101216 0.0 0.0 0.0 -302.00
ZJIF00 20110121 0.0 0.0 0.0 -118.00
ZJIF00 20110216 0.0 0.0 0.0 -260.00
ZJIF00 20110317 0.0 0.0 0.0 -158.00
ZJIF00 20110415 0.0 0.0 0.0 -168.00
ZJIF00 20110518 0.0 0.0 0.0 -128.00
ZJIF00 20110617 0.0 0.0 0.0 -70.00
ZJIF00 20110715 0.0 0.0 0.0 -114.00
ZJIF00 20110817 0.0 0.0 0.0 -48.00
ZJIF00 20110916 0.0 0.0 0.0 -50.00
ZJIF00 20111020 0.0 0.0 0.0 -16.00
ZJIF00 20111117 0.0 0.0 0.0 -58.00
ZJIF00 20111216 0.0 0.0 0.0 -88.00
ZJIF00 20120119 0.0 0.0 0.0 -140.00
ZJIF00 20120216 0.0 0.0 0.0 -120.00
ZJIF00 20120315 0.0 0.0 0.0 -82.00
ZJIF00 20120419 0.0 0.0 0.0 -146.00
ZJIF00 20120517 0.0 0.0 0.0 -58.00
ZJIF00 20120614 0.0 0.0 0.0 76.00
ZJIF00 20120719 0.0 0.0 0.0 -84.00
ZJIF00 20120816 0.0 0.0 0.0 -122.00
ZJIF00 20120920 0.0 0.0 0.0 -156.00
ZJIF00 20121019 0.0 0.0 0.0 -180.00
ZJIF00 20121116 0.0 0.0 0.0 -74.00
ZJIF00 20121219 0.0 0.0 0.0 -142.00
ZJIF00 20130117 0.0 0.0 0.0 -130.00
ZJIF00 20130208 0.0 0.0 0.0 -206.00
ZJIF00 20130315 0.0 0.0 0.0 -50.00
ZJIF00 20130419 0.0 0.0 0.0 36.00
ZJIF00 20130516 0.0 0.0 0.0 170.00
ZJIF00 20130620 0.0 0.0 0.0 172.00 - 用戶回復(fù):
這個(gè)發(fā)高級(jí)研發(fā)區(qū)較妥
- 網(wǎng)友回復(fù):
以下是引用jinzhe在2013/6/24 16:06:01的發(fā)言:
這個(gè)發(fā)高級(jí)研發(fā)區(qū)較妥抱歉。無(wú)法編輯了,請(qǐng)幫忙移動(dòng)或刪除。
- 網(wǎng)友回復(fù):
感謝,補(bǔ)充數(shù)據(jù)后,能生成以前的除權(quán)數(shù)據(jù)。數(shù)據(jù)的準(zhǔn)確性,與金字塔數(shù)據(jù)準(zhǔn)確性有關(guān)。
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒(méi)有相關(guān)內(nèi)容