第四章 交易測試系統(tǒng)和程式化交易函數(shù)
無論是指標(biāo)、條件選股,或者交易系統(tǒng)的編制,都是一個循序漸進(jìn)的過程。這一點在交易系統(tǒng)中表現(xiàn)得尤為突出,從一個方案的提出,到量化,編制公式,然后在以后的不斷的檢驗--歷史數(shù)據(jù)下的靜態(tài)檢驗,當(dāng)前數(shù)據(jù)下的動態(tài)檢驗,實戰(zhàn)檢驗,任何其中的一個環(huán)節(jié)如果發(fā)現(xiàn)有不合理的,不準(zhǔn)確的的地方都需要我們對整個公式系統(tǒng)進(jìn)行修改,使之更加完美,也許可以將之稱為“優(yōu)化”。
在金字塔1.90的版本中,突出了這個功能的實現(xiàn),可以通過測試平臺對所有的公式化分析工具或者交易工具進(jìn)行全方位的測評,并提交一份翔實可信的測試報告,在以下的幾節(jié)中,我們將通過融合測試平臺的使用對指標(biāo)、條件選股以及交易系統(tǒng)的公式進(jìn)行優(yōu)化。
1、測試平臺的基本內(nèi)容和架構(gòu)
在金字塔中為技術(shù)指標(biāo)、條件選股以及交易系統(tǒng)建立了統(tǒng)一的測試平臺。在【交易】欄中選“程式化交易評測”,或按Ctrl + F7
假設(shè)我們選擇了技術(shù)指標(biāo)當(dāng)中的MA進(jìn)行測試,在設(shè)定好一定的買入條件和賣出條件以及測試的市場模型之后即可對任意的指標(biāo)、公式等進(jìn)行測試。金字塔中提供了兩種不同的測試模型,一種是針對全部信號的單個股票測試,另外一種是為了最佳的模擬真實的買入和賣出條件,以及參與市場的投資策略的測試模型,具體的內(nèi)容和區(qū)別請看后面的說明。
開倉信號,選擇模型和分析周期。
入場規(guī)則,入場條件設(shè)定測試時段,也即測試的時間區(qū)間,金字塔默認(rèn)的區(qū)間為20000101到當(dāng)前。如果默認(rèn)的入場規(guī)則無法滿足您的要求,可以在模型當(dāng)中編制您的入場條件。
出場規(guī)則,金字塔提供以上7種平倉條件,包括賣出指令和止損指令:
目標(biāo)周期為終點,到時自動平倉,20周期以后的收盤價平倉;
目標(biāo)利潤為終點,到時自動平倉,10%帳面盈利以后的收盤價平倉;
以及5類止損平倉:分別設(shè)定不同類型下的規(guī)避風(fēng)險條件。
交易費用:按證券和期貨,根據(jù)成交額和成交量計算傭金。
市場模型:金字塔提供兩類市場模型供測試分析。
測試報告
系統(tǒng)信號指示和資金曲線同圖顯示
金字塔擁有可供引用的函數(shù)超過660個,并還在增長中。
其中交易系統(tǒng)函數(shù)46個,主要用于實現(xiàn)模型的測試和前臺圖表程式化交易。
交易系統(tǒng)之開多操作,
用法:BUY(COND,V,Type,P);
表示當(dāng)COND條件成立時,
買入V股(手)當(dāng)前品種,TYPE表示買入類型,
P表示買入價格,所有參數(shù)均可以省略。
V:買入股(手)數(shù)或買入資金百分比(N%),省略表示100%;
TYPE:可以是本周期收盤(THISCLOSE),次周期開盤(MARKET),
次周期限價單(LIMIT),次周期停損單(STOP)等交易方式控制符;
P:對于限價單、停損單需要指定的買入價格
例如:BUY(C>O ,1000,THISCLOSE);表示收陽線則在本周期收盤價上買入1000股(手)。
BUY(C>0,50%,LIMIT,CLOSE-0.2);表示在次周期CLOSE-0.2元位置下買入限價單,
若價格達(dá)到或低于該價格則用50%資金買入。
交易系統(tǒng)之平多操作,
SELL(COND,V,Type,P); 用法同上
交易系統(tǒng)之開空操作,
BUYSHORT(COND,V,Type,P); 用法同上
交易系統(tǒng)之平空操作,
SELLSHORT(COND,V,Type,P); 用法同上
ASSET當(dāng)前資產(chǎn)
戶賬戶客的凈自有資產(chǎn)=可用現(xiàn)金+占用保證金-融資(現(xiàn)金+品種市值-融資)
AVGENTERPRICE 持倉均價
當(dāng)前持有品種的平均持倉成本——最近空倉以來計
BESTPERCENT 最大利潤率
當(dāng)前位置之前所有交易中利潤率最大一次的利潤率,其數(shù)值在0—1之間
BESTTRADE 最大盈利額
當(dāng)前位置之前所有交易中盈利最大一次的利潤額
CASH(N) 現(xiàn)金存量
得到當(dāng)前帳戶的可用資金余額
用法:CASH(N),N表示投資方向 0多頭;1空頭
例如:CASH(0)表示取當(dāng)前多頭帳戶的可用現(xiàn)金余額
ENTERBARS 開倉歷時
返回上次開倉到當(dāng)前的周期數(shù),若之前沒有開倉記錄返回-1
ENTERPRICE 上次開倉價
得到當(dāng)前位置的上次開倉價
ENTERVOL 上次開倉量
得到當(dāng)前位置的上次開倉量
EXITBARS 平倉歷時
返回上次平倉到當(dāng)前的周期數(shù),若之前沒有開倉記錄返回-1
EXITPRICE 上次平倉價
得到當(dāng)前位置的上次平倉價
EXITVOL 上次平倉量
得到當(dāng)前位置的上次平倉量
HOLDING 持倉量
得到當(dāng)前帳戶持倉量,多倉返回正數(shù)空倉返回負(fù)數(shù)
LIMIT 限價交易
交易方式控制符:加入限價單,次周期達(dá)到限價即操作,否則放棄。
LIMITR 限價交易
交易方式控制符:加入限價單,本周期達(dá)到限價即操作,否則放棄。
Market 市價交易
交易方式控制符:按照次周期開盤價操作
例如:buy(cond ,1000,market);
該控制符僅對交易評測時有效
MAXSEQLOSS 最大連續(xù)虧損次數(shù)
當(dāng)前位置之前連續(xù)虧損交易的最大次數(shù)
MAXSEQWIN 最大連續(xù)盈利次數(shù)
當(dāng)前位置之前連續(xù)盈利交易的最大次數(shù)
NEXTHIGH 次周期最高價交易
交易方式控制符:按照次周期最高價操作
例如:BUY(COND ,1000,NEXTHIGH);
該控制符僅對交易評測時有效
NEXTLOW 次周期最低價交易
交易方式控制符:按照次周期最低價操作
NEXTMID 次周期中價交易
交易方式控制符:按照次周期中間價操作
NEXTOPEN 次周期開盤價交易
交易方式控制符:按照次周期開盤價操作
NUMLOSSTRADE 虧損次數(shù)
當(dāng)前位置之前總共有多少次虧損的交易,注意每次賣出算一次交易,而買入不算
NUMSEQLOSS 連虧次數(shù)
當(dāng)前位置之前連續(xù)有多少次虧損的交易,注意每次賣出算一次交易,而買入不算
NUMSEQWIN 連盈次數(shù)
當(dāng)前位置之前連續(xù)有多少次盈利的交易,注意每次賣出算一次交易,而買入不算
NUMWINTRADE 盈利次數(shù)
當(dāng)前位置之前總共有多少次盈利的交易,注意每次賣出算一次交易,而買入不算
OPENBAR 開倉歷時
上一次倉位=0以來的周期數(shù)
OPENPROFIT 浮動盈虧
當(dāng)前浮動盈虧(當(dāng)前持倉市值與持倉成本之差)
PERCENTWIN 交易勝率
當(dāng)前位置之前盈利交易占總交易次數(shù)的比例,其數(shù)值在0—1之間
SEQLOSS 連虧金額
當(dāng)前位置之前連續(xù)虧損總額,注意每次賣出算一次交易,而買入不算
SEQWIN 連盈金額
當(dāng)前位置之前連續(xù)盈利總額,注意每次賣出算一次交易,而買入不算
STATE 帳戶狀態(tài)
得到當(dāng)前帳戶狀態(tài),無倉輸出0;有多頭倉輸出1;有空頭倉輸出-1
STOP 停損交易
交易方式控制符:加入停損單,或又稱突破交易,次周期達(dá)到設(shè)定價格即操作買入,否則放棄。
所謂停損就是交易價比設(shè)定的價格要差,具體說來對于買入或賣空就是高于設(shè)定價格,
對于賣出或買空就是低于設(shè)定價格
例如:BUY(COND ,1000,STOP,CLOSE-0.01);
該控制符僅對交易評測時有效
STOPR 停損交易
為本周期的,其它同STOP
THISCLOSE 收盤價交易
交易方式控制符,按照本周期收盤價操作
例如:BUY(COND ,1000,THISCLOSE);
該控制符僅對交易評測時有效
TOTALDAYTRADE 日內(nèi)交易次數(shù)
當(dāng)前位置之前總共有多少次當(dāng)日的交易,注意每次賣出算一次交易,而買入不算
用法: TOTALDAYTRADE
TOTALTRADE 交易次數(shù)
當(dāng)前位置之前總共有多少次交易,注意每次賣出算一次交易,而買入不算
TYPE(N) 上N次信號類型
得到當(dāng)前位置之前上N次信號類型
輸出:0、無信號;1、開多;2、平多;3、開空;4、平空;
TYPEBAR 表示上次信號,
得到當(dāng)前位置之前上N次信號指定類型距當(dāng)前周期
TYPEBAR(N,TYPE)N表示上次信號,
TYPE表示信號類型 0、無信號;1、開多;2、平多;3、開空;4、平空;
例如:TYPEBAR(2,1)表示:倒數(shù)第2個開多信號歷時
WORSTPERCENT 最大虧損率
當(dāng)前位置之前所有交易中虧損率最大一次的利潤率,其數(shù)值在0—1之間
WORSTTRADE 最大虧損額
當(dāng)前位置之前所有交易中虧損最大一次的虧損額
3、 程式化交易函數(shù)
程式化交易函數(shù)共有41個,主要適于實際程式化交易,在后臺運行,而不會在圖表中顯示。
大部分是在測試交易系統(tǒng)函數(shù)后加“T”,如
程式化交易系統(tǒng)之開多操作,
用法:TBUY(COND,V,[Type,P1,P2,AC,STOCK]);表示當(dāng)COND條件成立時,
買入V股(手)當(dāng)前品種,
TYPE表示開倉類型,LMT限價 MKT市價 STP止損 STPLMT限價止損
P1表示開倉價格,當(dāng)TYPE為LMT和STP,STPLMT時為指定限價和止損價格,其他情況填0
P2為止損限價,當(dāng)TYPE為STPLMT時,必須指定P2的止損限價,其他情況填0,當(dāng)P1止損價觸發(fā)時按照P2價格止損操作.
當(dāng)TYPE參數(shù)省略時,為市價開倉。
AC為帳戶ID,為空時為系統(tǒng)默認(rèn)帳戶,否則將下單到指定帳戶中
STOCK為品種代碼,比如'SH600215',為空或者不填時為當(dāng)前品種
例如:TBUY(C>O ,1000,LMT,C);表示收陽線則在本周期收盤價上買入1000股(手)。
TBUY(C>0,1000,STP,CLOSE+0.2);表示收陽線則在本周期收盤價高于0.2元下1000股(手)止損單,當(dāng)盤中價格到了觸發(fā)價時按市價開倉止損.
TBUY(C>0,1000,STPLMT,CLOSE+0.2,CLOSE);表示收陽線則在本周期收盤價高于0.2元下1000股(手)止損單,當(dāng)盤中價格到了觸發(fā)價時按CLOSE價格開倉止損
程式化交易系統(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)的差別
DEBUGOUT(STR,NUM) 調(diào)試輸出
用戶可以在程式化交易中通過輸出指定的字符串來實現(xiàn)調(diào)試的目的,可以借助這個功能來完成監(jiān)控程式化交易的各種細(xì)節(jié)參數(shù),因為在后臺執(zhí)行程式化交易時,用戶在前臺的圖表上是看不到內(nèi)部數(shù)據(jù)的。
用法:DEBUGOUT(STR,NUM),STR為用戶指定輸出的一個行文字,NUM為用戶指定的一個監(jiān)控數(shù)字.
例如:DEBUGOUT('當(dāng)前資產(chǎn)為%.
"%
該函數(shù)僅在做程式化交易時有效
SLEEP(D) 延時
當(dāng)位于最后一個周期時,延時指定數(shù)量時間后再執(zhí)行下條語句。
用法:SLEEP(D),D為延時的設(shè)置時間,單位為毫秒(1秒鐘等于1000毫秒)。
例如:SLEEP(1000)表示等待1秒后再執(zhí)行下行語句。
TODAYHOLDING 今持倉量
得到當(dāng)前帳戶的今日持倉量,多倉返回正數(shù)空倉返回負(fù)用法:TODAYHOLDING
TSUBMIT(N) 委托單歷時
用法:TSUBMIT(N)仍未成交時,函數(shù)返回未成交歷時的秒數(shù),有效值范圍為(1-1000);成交函數(shù)返回0.
N為委托方向.0所有方向;1開多;2平多;3開空;4平空;
便于控制未成交交易,采取其他補(bǔ)救措施
TTOTALDAYTRADE 日內(nèi)交易次數(shù)
當(dāng)前位置之前總共有多少次當(dāng)日的交易,注意每次賣出算一次交易,而買入不算
用法:TTOTALDAYTRADE
其它的程式化交易函數(shù),類似,請自己依次查看
注意:在公式編輯中,點擊 [ << ] 可彈出函數(shù)列表,可按類查找需要的函數(shù),如果需要可直接也雙擊改函數(shù)即可引入。公式中的藍(lán)色字段為函數(shù)名,將鼠標(biāo)放在未知的藍(lán)色字段上,將看到該函數(shù)的描述和基本用法。
程式化交易執(zhí)行語句常用的其它函數(shù):
MINDIFF 最小變動價位
返回當(dāng)前品種最小變動價位(可在市場管理中設(shè)置)。
若市場分類小數(shù)點為2時最小變動價位則為0.01
注意:該函數(shù)返回常數(shù)
VOLUNIT 每手單位
返回每手單位(可在市場管理中設(shè)置),注意:該函數(shù)返回常數(shù)
MULTIPLIER 乘數(shù)
當(dāng)前品種的乘數(shù)或單位
用法:MULTIPLIER
OPENTIME(N) 開盤時間
返回交易所的指定時段的開盤時間
用法:OPENTIME(N),N表示對應(yīng)市場分類中交易所交易時間設(shè)置的節(jié)數(shù)(自上而下)1表示第一個
函數(shù)返回有效值范圍為(000000-235959),此函數(shù)返回常數(shù),對于日線及更長周期此函數(shù)無效.
CLOSETIME(N) 收盤時間
返回交易所的指定時段的收盤時間
用法:CLOSETIME(N),N表示對應(yīng)市場分類中交易所交易時間設(shè)置的節(jié)數(shù)(自上而下),特設(shè)0表示最后一節(jié)的節(jié)數(shù)(即日收盤的節(jié)數(shù))
函數(shù)返回有效值范圍為(000000-235959),此函數(shù)返回常數(shù),對于日線及更長周期此函數(shù)無效.
PLAYSOUND 播放聲音文件
播放一首指定位置的一個聲音文件,可以是MP3或者WAV等格式.
用法:PLAYSOUND(COND,PATH),當(dāng)最后一個周期得COND條件成立時,播放指定位置PATH的一個聲音文件
聲音文件可以是絕對路徑,也可以只是一個聲音文件,只有一個文件名時用戶需要將它安放在DOCUMENT目錄.
例如:PLAYSOUND(CLOSE>OPEN,'D:\ONTIFY.MP3'),當(dāng)最后一個周期為陽線時播放D:\ONTIFY.MP3位置的聲音文件.
SENDMAIL 發(fā)送郵件
發(fā)送一封郵件到指定的郵箱.
用法:SENDMAIL(COND,MAILTO,SUB,CON),當(dāng)最后一個周期得COND條件成立時,發(fā)送到MAILTO用戶,標(biāo)題為SUB,內(nèi)容為CON
例如:SENDMAIL(CLOSE>OPEN,'ABC@SINA.COM;XYZ@WEISTOCK.COM','警報','大陽線'),
表示當(dāng)最后一個周期為陽線時,往ABC@SINA.COM和XYZ@WEISTOCK.COM這兩個郵箱發(fā)送郵件,標(biāo)題是'警報',內(nèi)容是'大陽線'.
用戶使用該功能之前,需要預(yù)先設(shè)置郵件發(fā)送的SMTP信息,具體操作位置在 工具->網(wǎng)絡(luò)->郵件發(fā)送設(shè)置里,并需要構(gòu)選'允許程式化交易'選項.
DYNAINFO(4) 取得最新動態(tài)行情: 今開
DYNAINFO(5) 取得最新動態(tài)行情: 最高
DYNAINFO(6) 取得最新動態(tài)行情: 最低
DYNAINFO(7) 取得最新動態(tài)行情: 最新
DYNAINFO(28) 取得最新動態(tài)行情: 買一價
DYNAINFO(34) 取得最新動態(tài)行情: 賣一價
DYNAINFO(54) 取得最新動態(tài)行情: 漲停
DYNAINFO(55) 取得最新動態(tài)行情: 跌停
4、 賬戶函數(shù)介紹
為了方便交易員編寫資金管理程序,金字塔增加了賬戶函數(shù)(43個),今后還將擴(kuò)充更多頭寸管理函數(shù)。
TACCOUNT(1); 交易帳戶: 返回當(dāng)前交易帳戶ID(該函數(shù)返回字符串類型數(shù)值)
TACCOUNT(2); 帳戶類型: 返回當(dāng)前交易帳戶類型(0 盈透;1 CTP)
TACCOUNT(3); 現(xiàn)金余額: 返回當(dāng)前交易帳戶中的現(xiàn)金余額
TACCOUNT(4); 浮動盈虧: 返回當(dāng)前交易帳戶中的浮動盈虧
TACCOUNT(6); 平倉凈值: 返回當(dāng)前交易帳戶中的平倉凈值
TACCOUNT(19); 當(dāng)前可用資金: 返回當(dāng)前交易帳戶中的當(dāng)前可用資金
TACCOUNT(20); 當(dāng)前流動資產(chǎn): 返回當(dāng)前交易帳戶中的當(dāng)前流動資產(chǎn)
TACCOUNT(26); 上次結(jié)算準(zhǔn)備金: 返回當(dāng)前交易帳戶中的上次結(jié)算準(zhǔn)備金(CTP專有)
TACCOUNT(27); 結(jié)算準(zhǔn)備金: 返回當(dāng)前交易帳戶中的期貨結(jié)算準(zhǔn)備金(CTP專有)
TACCOUNT(28); 占用保證金: 返回當(dāng)前交易帳戶中的占用保證金(CTP專有)
TACCOUNT(29); 可取資金: 返回當(dāng)前交易帳戶中的可取資金數(shù)量(CTP專有)
TACCOUNT(30); 平倉盈虧: 返回當(dāng)前交易帳戶中的平倉盈虧數(shù)額(CTP專有)
TACCOUNT(31); 手續(xù)費: 返回當(dāng)前交易帳戶中的手續(xù)費(CTP專有)
TACCOUNT(32); 入金金額: 返回當(dāng)前交易帳戶中的入金金額(CTP專有)
TACCOUNT(33); 出金金額: 返回當(dāng)前交易帳戶中的出金金額(CTP專有)
TACCOUNT(34); 上次信用額度: 返回當(dāng)前交易帳戶中的上次信用額度(CTP專有)
TACCOUNT(35); 上次質(zhì)壓: 返回當(dāng)前交易帳戶中的上次質(zhì)壓(CTP專有)
TACCOUNT(36); 質(zhì)壓金額: 返回當(dāng)前交易帳戶中的質(zhì)壓金額(CTP專有)
TACCOUNT(36); 信用額度: 返回當(dāng)前交易帳戶中的信用額度(CTP專有)
。。。
TACCOUNT(43)
其它的賬戶函數(shù),請自己依次查看
注意:在公式編輯中,點擊 [ << ] 可彈出函數(shù)列表,可按類查找需要的函數(shù),雙擊該函數(shù)將直接引入公式。公式中的藍(lán)色字段為函數(shù)名,將鼠標(biāo)放在未知的藍(lán)色字段上,將看到該函數(shù)的描述和基本用法。