




已閱讀5頁,還剩94頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
上海金之塔信息技術(shù)有限公司2016金字塔決策交易系統(tǒng)高級(jí)教程l 本教程主要介紹金字塔的后臺(tái)程序化交易,VBA、C+二次開發(fā)的編程。目錄目錄2第一章 金字塔的后臺(tái)程序化交易11.1后臺(tái)程序化工作機(jī)理11.2 后臺(tái)程序化交易函數(shù)21.3 后臺(tái)套利模型范例51.4 后臺(tái)程序化的啟用71.5 后臺(tái)程序化的調(diào)試81.6 后臺(tái)程序化注意事項(xiàng)10第二章 圖表交易和后臺(tái)交易的主要區(qū)別和聯(lián)系122.1 圖表、交易函數(shù)的區(qū)別122.11 圖表交易函數(shù)122.12 后臺(tái)交易函數(shù)122.3圖表交易和后臺(tái)交易的主要區(qū)別13第三章 基于VBA的二次開發(fā)143.1金字塔VBA與OFFICE VBA區(qū)別和聯(lián)系143.2 VBA 原理的隱喻143.3 VBA 簡介153.3.1VBA 及其IDE 初步153.3.2模塊、函數(shù)和過程183.3.3數(shù)據(jù)類型和變量203.3.4VBA 語言基礎(chǔ)233.3.5用戶窗體293.4金字塔的對(duì)象模型333.4.1Application 對(duì)象343.4.2Order 對(duì)象363.4.3MarketData 對(duì)象453.4.4 ReportData對(duì)象493.4.5 HistoryData 對(duì)象503.4.6 Document對(duì)象523.4.7 Frame 對(duì)象543.4.8 Grid對(duì)象563.4.9 Formula 對(duì)象623.4.10 NetWork 對(duì)象633.4.11 TestReport 對(duì)象65第四章 VBA實(shí)用范例754.1 跨期套利交易范例754.2 金字塔VBA指標(biāo)調(diào)用數(shù)據(jù)庫教程764.2.1數(shù)據(jù)庫的準(zhǔn)備工作(vba使用數(shù)據(jù)庫首先我們需要連接數(shù)據(jù)庫)764.2.2 數(shù)據(jù)庫操作方法(具體代碼和注釋)77第五章 基于C+二次開發(fā)855.1使用金字塔C+ API開發(fā)策略的優(yōu)勢855.2金字塔的C+ API與主程序的組織結(jié)構(gòu)865.3金字塔的接口范例下載與簡要說明865.3.1 API接口報(bào)價(jià)行情訂閱865.3.2報(bào)價(jià)行情變化通知875.3.3獲取指定市場全部合約報(bào)價(jià)875.3.4歷史數(shù)據(jù)的獲取875.3.5下單委托指令885.3.6訂單狀態(tài)推送回報(bào)885.3.7策略編寫調(diào)試與跟蹤895.3.8API接口更多功能信息90第六章 自定義PEL函數(shù)916.1 使用VBA自定義PEL函數(shù)916.1.1自定義函數(shù)的格式916.1.2自定義函數(shù)的兩種工作模式926.2 使用C+DLL擴(kuò)展函數(shù)程序調(diào)用94第一章 金字塔的后臺(tái)程序化交易金字塔提供功能性和擴(kuò)展性更為強(qiáng)大的基于后臺(tái)預(yù)警模式的程序化交易模式(后臺(tái)程序化),可以在不影響用戶前臺(tái)圖形操作的情況下,高效地與預(yù)警系統(tǒng)一起工作,實(shí)現(xiàn)自動(dòng)交易。由于該模式運(yùn)行在后臺(tái),不需要打開圖表占用過多的資源,且只需最后一個(gè)周期的信號(hào),所以原則上公式不做多余計(jì)算,效率高,便于對(duì)多個(gè)品種同一個(gè)策略進(jìn)行輪循監(jiān)控。從某種意義講,后臺(tái)程序化屬于圖表程序的深化,它的優(yōu)點(diǎn)是更注重于策略的高效執(zhí)行,更完美地實(shí)現(xiàn)策略的設(shè)計(jì)初衷。雖然后臺(tái)程序化的功能強(qiáng)大,但用戶切忌直接使用后臺(tái)策略,而跳過學(xué)習(xí)圖表程序化的過程。原因是在后臺(tái)程序化中用戶無法直接在圖表上看到信號(hào)的整個(gè)出現(xiàn)過程,因此對(duì)用戶的公式編寫水平有一定的要求。其次,用戶需要對(duì)金字塔的后臺(tái)交易系統(tǒng)工作機(jī)理有比較深的了解,并且要對(duì)自己的公式系統(tǒng)有清晰的認(rèn)識(shí),這樣一旦遇到問題也能及時(shí)找到原因。后臺(tái)交易過程中,一旦遇到問題,需要客戶掌握第八章后臺(tái)程序化交易調(diào)試的技巧。以我們多年的經(jīng)驗(yàn)來看,用戶先將策略經(jīng)測評(píng)、優(yōu)化、圖表實(shí)盤上運(yùn)行后,再轉(zhuǎn)化成后臺(tái)策略,會(huì)取得非常好的效果。1.1后臺(tái)程序化工作機(jī)理在初級(jí)教程中,我們介紹了基于虛擬數(shù)據(jù)技術(shù)的圖表程序化交易。想必經(jīng)過一段時(shí)間的學(xué)習(xí),大家已將圖表程序化運(yùn)用的相當(dāng)純熟。不過當(dāng)你進(jìn)行實(shí)盤的時(shí)候,是否發(fā)現(xiàn)在某些情況下,例如碰到未成交單、未完全成交單、需要進(jìn)行追撤單等更精細(xì)的下單操作時(shí),圖表程序化就束手無策了。這是由于圖表基于虛擬數(shù)據(jù)的特性,無法與真實(shí)賬戶進(jìn)行交互,虛擬數(shù)據(jù)的成交并不考慮實(shí)盤的的流動(dòng)性情況,只要價(jià)格達(dá)到即成交。而實(shí)際情況可能并不是這樣。另一方面,當(dāng)圖表程序化碰上多品種、多策略、或者較復(fù)雜的策略時(shí),有時(shí)系統(tǒng)會(huì)顯得相對(duì)較慢、不流暢。這是由于圖表需要計(jì)算大量以往的歷史數(shù)據(jù)進(jìn)行判斷操作,并在圖表上進(jìn)行輸出。這消耗了相當(dāng)多的資源。但實(shí)盤并不需要考慮歷史曾經(jīng)如何,實(shí)時(shí)交易需要考慮的是如何高效的執(zhí)行,其實(shí)只需根據(jù)最后一根K線上的數(shù)據(jù),來確定開平倉的動(dòng)作。這也就是例如DYNAINFO等這些常數(shù)函數(shù)無法進(jìn)行測評(píng)而實(shí)盤的公式確可以用的主要原因,因?yàn)镈YNAINFO只有最新的一筆行情數(shù)據(jù),而沒有歷史的序列數(shù)據(jù)。金字塔后臺(tái)程序化也是這個(gè)道理,因?yàn)榻鹱炙暮笈_(tái)程序化只注重交易,因此無法用來測評(píng)??偨Y(jié)一下,金字塔的后臺(tái)程序化交易是金字塔很大的特色。從工作機(jī)制的角度看,后臺(tái)程序化在沿用PEL語言體系的情況下,為用戶創(chuàng)造了近似VB、C+才能達(dá)到的精細(xì)化、高效快捷程序化下單模式。因此它特別適合那些多周期、多策略、多品種的組合交易以及對(duì)效率要求較高的套利交易,為您的交易帶來無與倫比的便捷。1.2 后臺(tái)程序化交易函數(shù)金字塔的后臺(tái)程序化交易只能在專業(yè)版及更高級(jí)的版本中使用,它可以運(yùn)行在序列和逐K線兩種模式,但是推薦序列模式運(yùn)行,這樣可以極大提高后臺(tái)執(zhí)行的效率。為了讓用戶更快的編寫和熟悉金字塔的后臺(tái)程序化交易,金字塔的程序化交易函數(shù),前面都在交易系統(tǒng)函數(shù)名稱前加 T 字母,比如BUY改為TBUY, 使用方法大致相同,用戶仔細(xì)注意查看函數(shù)的使用說明。與圖表交易系統(tǒng)函數(shù)不同的是,后臺(tái)程序化交易的函數(shù)都使用實(shí)際的用戶持倉和資金。讓我們通過案例來學(xué)習(xí)后臺(tái)程序化交易函數(shù)。例1:MA指標(biāo)后臺(tái)公式/中間變量MA3:MA(C,3);MA5:MA(C,5);/交易系統(tǒng)TBUY(CROSS(MA3,MA5),1,LMT,C); /按照最新價(jià)限價(jià)開多TSELL(CROSS(MA5,MA3),0,LMT,C);/按照最新價(jià)限價(jià)平多,0表示平掉全部持倉請(qǐng)注意TBUY和TSELL函數(shù)的參數(shù)出現(xiàn)了變化,真正的下單時(shí),需要指定下單類型和價(jià)格的,否則系統(tǒng)會(huì)按照市價(jià)進(jìn)行交易。 用以模擬交易的函數(shù)和真實(shí)交易的函數(shù),大部分只是有了前面T字母差別,大部分的用以交易評(píng)測的交易系統(tǒng),只要將交易函數(shù)部分前面加T字母即可解決,唯一區(qū)別最大的就是TBUY,TSELL,TBUYSHORT,TSELLSHORT 這4個(gè)函數(shù)與模擬交易用的函數(shù)區(qū)別較大,請(qǐng)仔細(xì)辨別。請(qǐng)注意后臺(tái)程序化交易不能使用圖表交易功能,且圖表交易和后臺(tái)交易的函數(shù)不能混用。交易控制符 THISCLOSE 在真實(shí)交易中被 LMT 等真實(shí)交易控制符所取代,金字塔的模擬交易控制符和真實(shí)交易控制符兩者不能通用。金字塔的真實(shí)下單函數(shù)只支持LMT限價(jià) MKT市價(jià) STP止損 STPLMT限價(jià)止損 這4個(gè)交易控制符。真實(shí)下單交易函數(shù),下單數(shù)量不再支持百分比模式。程序化交易的函數(shù)介紹:程序化交易系統(tǒng)之開多操作:用法:TBUY(COND,V,Type,P1,P2,AC,STOCK);表示當(dāng)COND條件成立時(shí),買入V股(手)當(dāng)前品種,TYPE表示開倉類型,LMT限價(jià) MKT市價(jià) STP止損 STPLMT限價(jià)止損P1表示開倉價(jià)格,當(dāng)TYPE為LMT和STP,STPLMT時(shí)為指定限價(jià)和止損價(jià)格,其他情況填0P2為止損限價(jià),當(dāng)TYPE為STPLMT時(shí),必須指定P2的止損限價(jià),其他情況填0,當(dāng)P1止損價(jià)觸發(fā)時(shí)按照P2價(jià)格止損操作.當(dāng)TYPE參數(shù)省略時(shí),為市價(jià)開倉。AC為帳戶ID,為空時(shí)為系統(tǒng)默認(rèn)帳戶,否則將下單到指定帳戶中STOCK為品種代碼,比如SH600215,為空或者不填時(shí)為當(dāng)前品種后臺(tái)程序化交易不能使用圖表交易功能,且圖表交易和后臺(tái)交易的函數(shù)不能混用。例如,限價(jià)在圖表中函數(shù)為Limit,后臺(tái)為Lmt。市價(jià)在圖表是函數(shù)Market,在后臺(tái)是Mkt。例如:TBUY(CO ,1000,LMT,C);表示收陽線則在本周期收盤價(jià)上買入1000股(手)。TBUY(C0,1000,STP,CLOSE+0.2);表示收陽線則在本周期收盤價(jià)高于0.2元下1000股(手)止損單,當(dāng)盤中價(jià)格到了觸發(fā)價(jià)時(shí)按市價(jià)開倉止損.TBUY(C0,1000,STPLMT,CLOSE+0.2,CLOSE);表示收陽線則在本周期收盤價(jià)高于0.2元下1000股(手)止損單,當(dāng)盤中價(jià)格到了觸發(fā)價(jià)時(shí)按CLOSE價(jià)格開倉止損。程序化交易系統(tǒng)之平多操作:TSELL(COND,V,Type,P1,P2,AC,STOCK); 用法同上程序化交易系統(tǒng)之開空操作:TBUYSHORT(COND,V,Type,P1,P2,AC,STOCK); 用法同上程序化交易系統(tǒng)之平空操作:TSELLSHORT(COND,V,Type,P1,P2,AC,STOCK); 用法同上注意:程序化交易系統(tǒng)的函數(shù)中交易類型Type與交易測試系統(tǒng)的差別例2:唐奇安通道模型/中間變量input:N(20,5,100,1),NS(10,0,60,1);Price:=AVGENTERPRICE;/持倉價(jià)位/交易條件開多平空條件:=CROSS(H, hhv(ref(h,1),N);開空平多條件:=CROSS(llv(ref(l,1), N),L);/交易系統(tǒng)SELLSHORT(開多平空條件 and 持倉0,持倉,market);SELLSHORT(持倉0,持倉,market);SELL(持倉0,持倉,Stopr,Price-NS);/止損BUYSHORT(開空平多條件 and 持倉=0,30%,market);/其他資產(chǎn):asset,noaxis,colorgreen;持倉:HOLDING,LINETHICK0;總次數(shù): TOTALTRADE,LINETHICK0;盈利:NUMWINTRADE,LINETHICK0;勝率:ROUNDS(100*PERCENTWIN,1),LINETHICK0;連虧:MAXSEQLOSS,LINETHICK0;連盈:MAXSEQWIN,LINETHICK0;將交易模型轉(zhuǎn)換成程序化交易系統(tǒng),主要是涉及交易系統(tǒng)函數(shù)的轉(zhuǎn)化,即在交易系統(tǒng)函數(shù)前加“t”,以及交易類型的改動(dòng);并且程序化交易函數(shù)都是在后臺(tái)運(yùn)行,不能在圖表中顯示;交易數(shù)量不能用30%的寫法,只能用具體數(shù)量。因此,唐奇安通道模型轉(zhuǎn)化為可程序化交易的系統(tǒng):/中間變量input:N(20,0,60,1) ,NS(30,0,100,1);持倉:=tHOLDING,LINETHICK0;KCS:= intpart(tasset*0.3/(close*multiplier);/也表示30%的開倉數(shù)BUY1:=hhv(ref(h,1),N);SELL1:=llv(ref(l,1),N);Price:=tAVGENTERPRICE; /持倉價(jià)位/交易條件開多平空條件:=CROSS(H,BUY1);開空平多條件:=CROSS(SELL1,L);/交易系統(tǒng)TSELLSHORT(開多平空條件 and 持倉0,t持倉,mkt);TSELLSHORT(持倉0,持倉,mkt);TSELL(持倉0,持倉,Stp,Price-NS);TBUYSHORT(開空平多條件 and 持倉=0, KCS,mkt);若想與交易模型完全一樣,后句則需這樣寫:tSELLSHORT(ref(開多平空條件,1) and 持倉0,t持倉,mkt);tSELLSHORT(持倉0,t持倉,mkt);tSELL(持倉0,持倉,Stp,Price-NS);tBUYSHORT(ref(開空平多條件,1) and 持倉=0, KCS,mkt);注意:在公式編輯中,點(diǎn)擊 0; 平多開空條件 :=MACD0; /交易系統(tǒng)TSELLSHORT(平多開空條件,10, mkt, 0,0, , SQRB03); /平空TBUY(平空開多條件,10,mkt, 0,0, SQRB05);/開多TSELL(平多開空條件,10, mkt, 0,0, SQRB05); /平多TBUYSHORT(平空開多條件,10,mkt, 0,0, , SQRB03); /開空(3)如何編制技術(shù)指標(biāo)的多賬戶模型:賬戶1:16801賬戶2:16802/中間變量DIFF := EMA(C,12) - EMA(C,26); DEA := EMA(DIFF,9); MACD:=2*(DIFF-DEA); /交易系統(tǒng)IF THOLDING0 and THOLDING0,10, mkt, 0,0, 16802); /平空ENDIF THOLDING=0 THEN BEGINTBUY(MACD0 and THOLDING=0,10,mkt, 0,0, 16801);/開多TBUY(MACD0,10,mkt, 0,0, 16802);/開多ENDIF THOLDING0 THEN BEGINTSELL(MACD0, THOLDING,10, mkt, 0,0,16801); /平多TSELL(MACD0,10, mkt, 0,0,16802); /平多ENDIF THOLDING=0 THEN BEGINTBUYSHORT(MACD0 and THOLDING=0,10,mkt, 0,0,16801); /開空TBUYSHORT(MACD下單設(shè)置-程序化交易-將“記錄下單日志”打勾。打勾的同時(shí),會(huì)提醒您日志所保存的文件路徑。在圖表交易和后臺(tái)自動(dòng)交易的甚至手工下單的過程中,金字塔會(huì)將與交易有關(guān)的動(dòng)作記錄在內(nèi),便于用戶查找和分析問題原因。1.6 后臺(tái)程序化注意事項(xiàng)(1) 圖表BUY等顯示函數(shù)是不能放在后臺(tái)做監(jiān)控交易的,但是將允許程序化交易勾去掉后單獨(dú)做預(yù)警是可以的。(2)只有少數(shù)的帶T的后臺(tái)交易函數(shù)允許使用在BUY前臺(tái)圖表交易策略中. Tholding, TAVGENTERPRICE,Taccount,Tasset,但是金字塔強(qiáng)烈不建議使用,因?yàn)檫@樣會(huì)造成圖表上的交易信號(hào)與實(shí)際的下單記錄不符。(3)金字塔的后臺(tái)交易部分,使用手工閃電下單的記錄,將無法通過比如TENTERPRICE等與交易記錄有關(guān)函數(shù)中得到結(jié)果,但可以通過程序化交易監(jiān)控中的手工下單干預(yù)功能完成此項(xiàng)目的。(4)金字塔的后臺(tái)交易,查詢持倉和資產(chǎn)均為用戶當(dāng)前的實(shí)際數(shù)值,如果多個(gè)策略同時(shí)多一個(gè)品種或通一個(gè)帳戶進(jìn)行操作會(huì)產(chǎn)生相互干擾現(xiàn)象,解決辦法就是通過使用交易系統(tǒng)使用虛擬持倉和資金,這樣就完全可以避免這種共振現(xiàn)象,但是推薦高級(jí)用戶使用,因?yàn)樾枰芏嗉记尚枰幚?。?)用以圖表顯示的交易系統(tǒng)和后臺(tái)程序化交易的交易指令函數(shù),參數(shù)有明顯的不同,用戶不能簡單的將BUY函數(shù)加個(gè)T就可以直接后臺(tái)交易,使用前應(yīng)該將鼠標(biāo)放在TBUY函數(shù)上認(rèn)真看看函數(shù)說明。同名交易系統(tǒng)函數(shù)與程序化交易函數(shù)的差別:函數(shù)意義前臺(tái)圖表交易模型后臺(tái)交易系統(tǒng)開多BUYTBUY平多SELLTSELL開空BUYSHORTTBUYSHORT平空SELLSHORTTSELLSHORT其中TYPE:次周期限價(jià)LIMITREF(條件,1),LMTTYPE:本周期限價(jià)LIMITRLMTTYPE:次周期停損STOPREF(條件,1),STPTYPE:本周期停損STOPRSTPTYPE:次周期市價(jià)MARKETREF(條件,1),MKTTYPE:本周期市價(jià)MARKETRMKT開倉百分比30%KCS:= intpart(tasset*0.3/MULTIPLIER/close);語句語句T語句函數(shù)可在圖表上顯示不能在圖表上顯示總之,通過函數(shù)列表,了解他們的細(xì)微差別。第二章 圖表交易和后臺(tái)交易的主要區(qū)別和聯(lián)系2.1 圖表、交易函數(shù)的區(qū)別2.11 圖表交易函數(shù)BUY 開多BUYSHORT 開空SELL 平多SELLSHORT 平空適用于圖表程序式交易模式,本函數(shù)中可以設(shè)置下單條件、下單手?jǐn)?shù)、下單價(jià)格等參數(shù)。這種交易函數(shù)優(yōu)點(diǎn)在于可以將本交易函數(shù)套用到若干個(gè)循環(huán)邏輯判斷語句中,對(duì)下單手?jǐn)?shù)靈活設(shè)置,對(duì)下單價(jià)格靈活的掌控,與之配套使用的各類函數(shù)較多,因此能夠用于實(shí)現(xiàn)較為復(fù)雜的交易模型;缺點(diǎn)是沒有參數(shù)設(shè)置賬戶名、下單品種、只能運(yùn)行在逐K線模式等。例2.1: BUY(vol/ref(vol,1)3 AND CLOSEOPEN , 1 ,LIMIT ,CLOSE );SELL(vol/ref(vol,1)3 AND CLOSE3 THEN BEGINBUY(CLOSEOPEN , 1 ,LIMIT ,CLOSE );SELL(CLOSE3 AND CLOSEOPEN ,1,LMT ,CLOSE ,0,351579 ,al02);TSELL(vol/ref(vol,1)3 AND CLOSE圖表程序化交易”選項(xiàng)。后臺(tái)程序化交易的設(shè)置和啟用界面位于菜單欄的“交易后臺(tái)程序化交易”選項(xiàng)。 (4)虛擬和真實(shí)的區(qū)別圖表程序化交易采用的是虛擬持倉、虛擬資金等概念,各個(gè)買賣點(diǎn)以及中間過程返回給用戶的持倉和資金是根據(jù)歷史交易信號(hào)和相關(guān)初始化的數(shù)據(jù)計(jì)算得來,資金、費(fèi)率等初始化數(shù)據(jù)是在指標(biāo)編輯器中的“費(fèi)率設(shè)置”中進(jìn)行設(shè)置。后臺(tái)程序化交易采用的是真實(shí)持倉、真實(shí)資金的概念,它們調(diào)用的是賬戶欄中真實(shí)的賬戶數(shù)據(jù)。 第三章 基于VBA的二次開發(fā)一個(gè)優(yōu)秀的程序化交易軟件不僅需要滿足個(gè)人個(gè)性化的策略實(shí)現(xiàn)外,策略的執(zhí)行也至關(guān)重要,俗話說:細(xì)節(jié)決定成敗,前面章節(jié)我們都是介紹的使用金字塔內(nèi)置的PEL腳本語言作為程序化交易使用,但是PEL終歸還是為普通非計(jì)算機(jī)專業(yè)投資者準(zhǔn)備的腳本語言,方便投資者學(xué)習(xí)和使用的同時(shí),也帶來了其自身存在的格式固化,運(yùn)行不夠靈活,效率不足等問題,是無法滿足具有更多想法更多需求的程序化交易者的。在各種高級(jí)語言中,熟悉和精通VB的人無疑是最多的。著名的微軟OFFICE辦公軟件中的二次開發(fā)也是使用的VBA。但是金字塔不僅僅是一個(gè)被廣泛應(yīng)用的金融分析軟件,除了具有一般軟件的數(shù)據(jù)處理、統(tǒng)計(jì)分析、圖表功能外,最大的特點(diǎn)是集成了VBA 環(huán)境。并提供了VBA 的IDE 環(huán)境。可以應(yīng)用金字塔的所有現(xiàn)有功能,例如其數(shù)據(jù)處理、圖表繪制、數(shù)據(jù)庫連接、內(nèi)置函數(shù)等等。利用這些接口將極大的發(fā)揮我們專業(yè)程序化交易投資者的編程空間,使我們的交易系統(tǒng)具有強(qiáng)大的計(jì)算能力、擴(kuò)展能力和生命力。3.1金字塔VBA與OFFICE VBA區(qū)別和聯(lián)系盡管金字塔VBA與OFFICE VBA都是VBA,但是它們2個(gè)還是有些不同的地方,這里假設(shè)讀者是熟悉OFFICE VBA的用戶,如果你是VBA的初學(xué)者,那么可以不必理會(huì)這里的差別。金字塔的腳本引擎是VBS,與OFFICE的VBA主要區(qū)別在于變量無需聲明就可以使用。金字塔軟件的VBA系統(tǒng)是介于傳統(tǒng)VBS與VBA之間的系統(tǒng),支持VBA系統(tǒng)中才有的窗體,框架等等更多的對(duì)象,另外,語法上又兼容VBS。除了類模塊外,所有的框架和窗體對(duì)象模塊的數(shù)據(jù)都是公用的,框架和窗體之所以獨(dú)立是因?yàn)榉奖阌脩艟庉嫼凸芾?,?shí)際運(yùn)行代碼是合在一起的。比如你在框架或者窗體中定義了一個(gè)函數(shù)過程外的全局變量,實(shí)際上是所有VBS代碼都可以調(diào)用的,在窗體框架對(duì)象中的過程名在其他窗體中調(diào)用也無需使用 窗體.過程名 這種方式,可以直接使用過程名。金字塔中的窗體與OFFICE其他組件的窗體在訪問其內(nèi)部控件時(shí)稍有不同,例如訪問UserForm1窗體的Text1編輯控件,使其隱藏。代碼如下: UserForm1_Text1.Visible = False除此之外,金字塔VBA與OFFICE VBA在IDE界面,使用方法和布局上,完全一致,如果讀者熟悉OFFICE VBA的開發(fā),那么就應(yīng)該很快掌握金字塔VBA的開發(fā)。3.2 VBA 原理的隱喻VBA 的基本原理可通過下圖做示意性解釋。金字塔對(duì)象VBA代碼VBAVBA 作為應(yīng)用VBA 編寫的代碼和金字塔對(duì)象之間的一個(gè)橋梁,為2 者之間的調(diào)用提供支持,這種調(diào)用是通過COM 自動(dòng)化實(shí)現(xiàn)的。例如我們的代碼中一句代碼,調(diào)用金字塔中一個(gè)對(duì)象的一個(gè)屬性,那么這個(gè)過程大概是類似這樣的:VBA 環(huán)境解釋執(zhí)行這句代碼,如果發(fā)現(xiàn)對(duì)金字塔對(duì)象的調(diào)用,就通過COM 的方式調(diào)用這個(gè)對(duì)象,獲取其屬性,這樣VBA 代碼就可以和金字塔對(duì)象進(jìn)行交互。3.3 VBA 簡介要使用 VBA 進(jìn)行數(shù)據(jù)處理,第一要熟悉VBA 的IDE 環(huán)境,知道如何進(jìn)行代碼書寫,如何編寫代碼,設(shè)計(jì)窗體,創(chuàng)建類模塊(對(duì)象),第二要熟悉VBA 的基本語法和。二者都是VBA 程序設(shè)計(jì)的基礎(chǔ),需要認(rèn)真學(xué)習(xí)。VBA 語法不是一章就可以全部介紹完全的,本章介紹的內(nèi)容是最基本和應(yīng)該熟練掌握的內(nèi)容,對(duì)于不熟悉或者不理解的內(nèi)容可以在學(xué)習(xí)了后面的內(nèi)容后再反過頭來學(xué)習(xí)。有些內(nèi)容需要反復(fù)練習(xí)和熟悉。對(duì)于VBA 語法和用法的很多內(nèi)容可以隨時(shí)通過查看幫助來獲得相關(guān)信息。本章和下一章(金字塔 對(duì)象模型)的部分內(nèi)容,特別是表格內(nèi)的一些內(nèi)容,沒有必要完全記住,可以作為參考手冊來使用。3.3.1VBA 及其IDE 初步本部分將對(duì) VBA 及其開發(fā)環(huán)境IDE(集成開發(fā)環(huán)境)作一概略的介紹。VBA IDE 是進(jìn)行程序設(shè)計(jì)和代碼編寫的地方,同一個(gè)金字塔共享同一IDE。文中會(huì)涉及到一些諸如對(duì)象、事件等部分讀者可能不熟悉或不清楚的概念,對(duì)于此類問題可直接忽略之,因?yàn)樵诤竺鏁?huì)有詳細(xì)介紹。本部分也不是一個(gè)VBA 的參考文檔,只是其語法、特征的快速瀏覽和介紹。(1)VBA 集成開發(fā)環(huán)境(IDE)的組成VBA 代碼和金字塔文檔文件是保存在一起的,可以通過點(diǎn)擊“工具 宏 Visual Basic工程”打開VBA 的IDE 環(huán)境,進(jìn)行程序設(shè)計(jì)和代碼編寫。圖3-1Visual Basic IDE 環(huán)境圖 3-1 為金字塔 VBA 的IDE 環(huán)境,缺省情況下,VBA IDE 環(huán)境上方為菜單和工具條(圖 3-1),左側(cè)窗口為工程資源管理器窗口,右側(cè)最大的窗口為代碼窗口。每一個(gè)金字塔文檔文件,對(duì)應(yīng)的VBA 工程都有4 類對(duì)象,包括:框架、窗體、模塊和類模塊(圖 3-2)。這里的框架主要是金字塔運(yùn)行時(shí)的技術(shù)分析圖表,例如我們常見的K線走勢分析圖的框架對(duì)象,雙擊這些對(duì)象會(huì)打開代碼窗口(圖3-1 右側(cè)窗口),在此窗口中可輸入相關(guān)的代碼,響應(yīng)事件,例如框架的打開、關(guān)閉,窗格的激活、品種顯示的修改、選擇等(有關(guān)事件、金字塔 對(duì)象模型見后)。窗體對(duì)象代表了自定義對(duì)話框或界面,模塊為自定義代碼的載體,類模塊則是以類或?qū)ο蟮姆绞骄帉懘a的載體,關(guān)于各對(duì)象的具體含義和使用見后。在工程資源管理器窗口的右鍵菜單下,有添加用戶窗體、模塊、類模塊的選項(xiàng),也可以將已有的模塊移除、導(dǎo)入和導(dǎo)出。注意:建議用戶新建一個(gè)VBA工程來完成你的個(gè)性化VBA代碼,盡量不要在默認(rèn)的工程中添加,防止多個(gè)不同工程的代碼相互干擾,您可以點(diǎn)擊左側(cè)工程資源窗口上的工具欄來新建一個(gè)VBA工程。(2)在 VBA IDE 下進(jìn)行開發(fā)熟悉了 VBA 的IDE 環(huán)境后,我們來開發(fā)VBA 之旅的第一個(gè)程序。首先我們雙擊左側(cè)工程資源管理器上的窗口的模塊分類,然后雙擊“Macro”模塊,打開宏模塊代碼編輯窗口(圖3-3),然后選擇“插入”菜單-過程,再隨后彈出的宏名稱編輯窗口里輸入“MyFirstVBAProgram”,然后單擊確定,這樣系統(tǒng)會(huì)自動(dòng)將MyFirstVBAProgram這個(gè)過程函數(shù)插入到代碼編輯窗口中,我們只要在打開窗口中輸入以下代碼:Sub MyFirstVBAProgram()MsgBox “我的第一個(gè)自編程序?!盓nd Sub通過“運(yùn)行”菜單-宏,或者按Alt+F8快捷鍵,彈出宏運(yùn)行窗口,下拉框中選擇我們前面建立的“MyFirstVBAProgram”宏,然后就能看到運(yùn)行的結(jié)果了。圖3-2注意:與其他程序設(shè)計(jì)語言不同,VBA 程序是事件驅(qū)動(dòng)的,沒有Main 函數(shù)之類的入口的概念。本質(zhì)上,VBA 代碼應(yīng)該只是一些完成具體工作的集合,而通過界面元素或者金字塔 的事件驅(qū)動(dòng)執(zhí)行,你可以通過自定義按鈕、菜單,并指定一個(gè)宏(VBA 過程,自定義界面也可以通過編程手段完成此類工作),通過單擊此按鈕即可調(diào)用相應(yīng)的VBA代碼,或者將調(diào)用綁定在金字塔的某個(gè)事件下。下面我們簡單看一下這段代碼的組成,代碼第1 行表示這是一個(gè)新的過程,名稱為“MyFirstVBAProgram” 第2行調(diào)用MsgBox 這個(gè)函數(shù),顯示一個(gè)對(duì)話框,第3 行表示過程結(jié)束。VBA 程序由不同的模塊組成,在模塊內(nèi)部,可以定義不同的變量、過程或函數(shù),由此組成一個(gè)完整的程序。(3)善用工具及其他VBA 集成開發(fā)環(huán)境,提供了很多便利的工具可以幫助或輔助我們寫出好的程序,其中的方便必須親自使用才可以體會(huì),因此,一定要善用工具。VBA 的代碼編輯器提供了幾項(xiàng)非常有用的功能,代碼即時(shí)提示可以使我們不必記憶太多的東西,輸入對(duì)象后會(huì)自動(dòng)列出其屬性、方法等內(nèi)容。在實(shí)際的編程過程中,一定要善于利用在線幫助,VBA 的在線幫助包含了大量對(duì)編程有用的參考信息,任何人都不可能記得住所有的函數(shù)、對(duì)象的用法和程序語言的語法,所以一定要利用好幫助。幫助的使用可以在“幫助”菜單-VBA編程信息 處獲得。可以通過幫助目錄瀏覽,或者通過查找輸入關(guān)鍵字查找相關(guān)內(nèi)容。圖3-3在代碼書寫中,如果一句代碼過長,應(yīng)該使用接行字符(“-”)將其分為幾行,而不是書寫為一行,一般來說,代碼的長度不要超過80 個(gè)字符為宜,這樣閱讀方便,不需要橫向拉動(dòng)滾動(dòng)條,也不容易出錯(cuò)。例如上面第一個(gè)例子我們可以將對(duì)話框文字輸出分成2行:MsgBox _“我的第一個(gè)自編程序?!睂?duì)于代碼格式,一定要養(yǎng)成縮進(jìn)的習(xí)慣,在過程之后,循環(huán)語句、判斷語句之內(nèi),如本書的例子樣子,縮進(jìn)4 個(gè)字符,便于閱讀。代碼中,在一個(gè)邏輯或者操作完成之后,應(yīng)該空一行,以表示其邏輯關(guān)系,在過程與過程之間,也應(yīng)該空一行。VBA 中,使用單引號(hào)“”表示注釋,編寫程序時(shí),一定要養(yǎng)成注釋的習(xí)慣。注釋不是所有代碼都要注釋;一般來說,對(duì)一個(gè)模塊、過程、函數(shù),要大概說明其功能,參數(shù);對(duì)于一個(gè)過程,如果涉及較復(fù)雜的算法,要說明其使用的算法或流程。在過程和函數(shù)中,對(duì)關(guān)鍵代碼,說明其操作的目的、算法或流程。3.3.2模塊、函數(shù)和過程(1)模塊模塊是自定義的過程、函數(shù)保存的地方有兩種基本類型的模塊:類模塊和標(biāo)準(zhǔn)模塊,本節(jié)介紹標(biāo)準(zhǔn)模塊,類模塊將在專門介紹。模塊可以通過右鍵單擊工程資源管理器的工程名,選擇“插入 模塊”來新建,新建的模塊缺省的名稱為“模塊 1”,“模塊2”,建議在模塊右鍵-重命名中更改為有意義的名稱。模塊有2 個(gè)任務(wù):(1)保存過程和函數(shù);(2)定義類模塊內(nèi)的私有變量或整個(gè)工程的公有變量。在模塊中可以聲明變量(包括對(duì)象),定義過程和函數(shù)。過程和函數(shù)的定義見下文,變量的聲明如下。變量的聲明:Dim I Dim 表示聲明變量i注意:要求變量聲明VBA 缺省可以不聲明變量,在第一次使用的時(shí)候自動(dòng)聲明,但此功能也是VBA 代碼(包括其他Basic 代碼)的一個(gè)主要錯(cuò)誤之源。試想第一次使用了一個(gè)變量strMyFirstName,之后又通過strMyFirstNme(少一個(gè)a)來使用它,但由于拼寫不同,VBA 以為是一個(gè)新的變量,于是會(huì)新聲明一個(gè)變量,這樣的錯(cuò)誤極其難以發(fā)現(xiàn)。可以通過“工具 選項(xiàng)”對(duì)話框,在“其他”頁,選中“VBA變量名必須顯式聲明所有變量”,則在使用變量前,都必須先通過Dim 語句聲明。(2)過程過程是最基本的運(yùn)行單位。一個(gè)完整的過程一般類似如下格式:Sub Test(參數(shù)列表) End Sub在以上程序中,Sub 代表過程種類,表示運(yùn)行指定的操作,但不返回運(yùn)行結(jié)果;Test表示過程名稱,最后以End Sub 結(jié)束。其中按值按地址傳遞參數(shù)指一種將參數(shù)地址而不是將值傳遞給過程的方式,這就使過程訪問到實(shí)際的變量。結(jié)果,過程可改變變量的真正值。VBA 缺省按地址傳遞參數(shù)。Sub MyTest()dim V1,V2V1 = 1V2 = 2MyTestCall (v1,v2) v1,v2是參數(shù)MsgBox v1MsgBox v2End SubSub MyTestCall(V1,V2) V1=5 V2=.6End Sub調(diào)用的方法是:運(yùn)行結(jié)束后,你會(huì)發(fā)現(xiàn)V1和V2值都被改變了。所有的可執(zhí)行代碼都必須屬于某個(gè)過程。不能在別的過程中定義 Sub 過程。Exit Sub 語句使執(zhí)行立即從一個(gè) Sub 過程中退出。程序接著從調(diào)用該 Sub 過程的語句下一條語句執(zhí)行。在 Sub 過程的任何位置都可以有 Exit Sub 語句。在 Sub 過程中使用的變量分為兩類:一類是在過程內(nèi)顯式定義的,另一類則不是。在過程內(nèi)顯式定義的變量(使用 Dim 方法)都是局部變量。過程(包括函數(shù)等)的創(chuàng)建可以通過在代碼窗口直接鍵入“Sub”來創(chuàng)建,也可以使用菜單的“插入 過程”對(duì)話框來創(chuàng)建。(3)函數(shù)函數(shù)是包含在 Function 和 End Function 語句之間的一組語句。Function 過程與 Sub 過程類似,但是 Function 過程可以返回值。Function 過程可以使用參數(shù)(由調(diào)用過程傳遞的常數(shù)、變量或表達(dá)式)。如果 Function 過程無任何參數(shù),則 Function 語句必須包含空括號(hào) ()。Function 過程通過函數(shù)名返回一個(gè)值,這個(gè)值是在過程的語句中賦給函數(shù)名的。Function 返回值的數(shù)據(jù)類型總是 Variant。 在下面的示例中,Celsius 函數(shù)將華氏度換算為攝氏度。Sub 過程 ConvertTemp 調(diào)用此函數(shù)時(shí),包含參數(shù)值的變量被傳遞給函數(shù)。換算結(jié)果返回到調(diào)用過程并顯示在消息框中。 Sub ConvertTemp() temp = InputBox(請(qǐng)輸入華氏溫度。, 1) MsgBox 溫度為 & Celsius(temp) & 攝氏度。 End Sub Function Celsius(fDegrees) Celsius = (fDegrees - 32) * 5 / 9 End FunctionVBA 中有大量內(nèi)置函數(shù),例如前邊例子里使用過的MsgBox,InputBox。VBA 的函數(shù)主要包括數(shù)學(xué)函數(shù)(包括三角函數(shù)、隨機(jī)數(shù)等)、字符串函數(shù)等等,熟悉VBA 的內(nèi)置函數(shù)可以提高工作效率,更好的完成工作。對(duì)于VBA 的函數(shù),可以參考VBA幫助文檔。(4)在代碼中使用 Sub 和 Function 過程調(diào)用 Function 過程時(shí),函數(shù)名必須用在變量賦值語句的右端或表達(dá)式中。例如: Temp = Celsius(fDegrees)或 MsgBox 溫度為 & Celsius(fDegrees) & 攝氏度。調(diào)用 Sub 過程時(shí),只需輸入過程名及所有參數(shù)值,參數(shù)值之間使用逗號(hào)分隔。不需使用 Call 語句,但如果使用了此語句,則必須將所有參數(shù)包含在括號(hào)之中。 下面的示例顯示了調(diào)用 MyProc 過程的兩種方式。一種使用 Call 語句;另一種則不使用。兩種方式效果相同。 Call MyProc(firstarg, secondarg) MyProc firstarg, secondarg請(qǐng)注意當(dāng)不使用 Call 語句進(jìn)行調(diào)用時(shí),括號(hào)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動(dòng)教育揚(yáng)起成長之帆
- 中草藥飼料添加劑重點(diǎn)
- 采光井施工協(xié)議
- 汕尾鳳山中心小學(xué)二2班班級(jí)愿景
- ××中學(xué)數(shù)字資源使用規(guī)定
- 商業(yè)保密協(xié)議及保密事項(xiàng)責(zé)任劃分表
- 2025年電梯安裝維修工(中級(jí))考試試卷:電梯安裝工程管理
- 2025年初中化學(xué)九年級(jí)上冊期中測試卷化學(xué)實(shí)驗(yàn)報(bào)告撰寫指南
- 2025年電工(電力系統(tǒng)可靠性)職業(yè)技能鑒定試卷(電力系統(tǒng)可靠性分析)
- 我和我的寵物狗作文(12篇)
- 國開《Windows網(wǎng)絡(luò)操作系統(tǒng)管理》形考任務(wù)四
- 鐵道概論(第八版)佟立本主編
- 人體器官有償捐贈(zèng)流程
- 《運(yùn)動(dòng)生理學(xué)》期末考試復(fù)習(xí)題庫(含答案)
- 國開04623- 會(huì)計(jì)信息系統(tǒng)機(jī)考復(fù)習(xí)資料
- 第七次課第四章證據(jù)的學(xué)理分類
- 學(xué)生人力資源(董克用)復(fù)習(xí)題匯總
- 水產(chǎn)品加工項(xiàng)目實(shí)施方案
- IEEE33節(jié)點(diǎn)配電系統(tǒng)
- 兒科質(zhì)控中心建設(shè)方案
- 鍍鋅鋼管壁厚及重量
評(píng)論
0/150
提交評(píng)論