Translate

2012年4月28日 星期六

第七章 模擬買賣測試System Tester

 以下這本書的內容早於2006年時完成, 所以今次貼上的是原版,
全本書資料及更新請到論壇瀏覽:
http://www.bp-system.com/discuz/forum.php?mod=forumdisplay&fid=38
http://www.bp-system.com/

第七章 模擬買賣測試System Tester

模擬買賣測試System Tester 功能,以過往數據作測試,利用你選定的技術指標,作出入市買賣測試後,最後得一個報告,檢討報告便可知道盈利如何。
7.1 運用方法
1)      擊選 模擬買賣測試System Tester” 圖示
2)      出現可選用的程式列表,按下 New Simulation

這個畫面分為:  1) 測試系統列表(左面)
2) 報告總結(右上部)
3) 測試報告列表(右下部)
3) 於這裡選取用來測試的方程,我們用例子: Equis - MACD


4)加入測試用的不同股票,可以選擇測試用日期數目。


5) 這裡有很多選項選擇,包括使用起始資金及運用方法。



6) 按下 More 鍵後,有更多選項選擇,包括扣除佣金,以甚麼價作出入市,開市價(Open) 、最高價(High)、最低價(Low)或收市價(Close)




最後可以開始測試:

7.2 建立新測試系統(Create New Systems)

接下來我們會製作兩個測試程式,並同時進行測試。

1.    模擬買賣測試管理員於左上角,按 "New System" 鍵,系統程式修改對話視窗便會出現。
2.    在一般資料頁 (General page)名稱欄位輸入系統程式的名稱  "我的第一個測試程式"


3.  點選買入指示(Buy Order) 及輸入以下的買進條件式
      cross(close, mov(close,20,simple))
上述的條件式, 同大部份於MetaStock 內的買賣條件式一樣,可以以英文簡易地譯讀解釋出其意義。
解譯, "Buy the security when the close crosses above a 25-period simple moving average of the close."
(你可以將 “close” 縮寫成 “c” and "simple" "s".)

其它的選項暫時忽略,我們於較後章節再為大家解釋。
接下來請輸入以下3個賣買規則於Sell Order, Sell Short Order Buy to Cover Order 4
Sell Order:               cross(mov(close,20,simple),close)
Sell Short Order:     cross(mov(close,20,simple),close)
Buy to Cover Order: cross(close,mov(close,20,simple))

如於程式中打錯字會有提示出現解釋, OK 鍵去了解錯在那裡。
游標(cursor) 會出現於錯誤位置, 你可以修正後再按OK


4.     以上4條公式輸入完成後, 便按 OK 鍵。
點選 我的第一個測試程式, 再按 Copy .  便出現一複製的 Copy of 我的第一個測試程式於列表頂。
5.     點選這個 Copy of我的第一個測試程式, 按修改  Edit
於一般資料頁 (General page) 名稱欄位更改名稱為   "我的第二個測試程式".
6.     將先前的買賣條件更改 (Buy Order, Sell Order, Sell Short Order, Buy to Cover Order), 轉所有數字 20 50

Buy Order:              cross(close, mov(close,50,simple))
Sell Order:               cross(mov(close,50,simple),close)
Sell Short Order:      cross(mov(close,50,simple),close)
Buy to Cover Order: cross(close,mov(close,50,simple))


7.     完成按 OK.

第一個程式解釋: 是以 收市價(Close) 升或跌穿 20天平均線時做買賣。
第二個程式解釋: 是以 收市價(Close) 升或跌穿 50天平均線時做買賣。


7.3 測試建立好的系統程式 (Test the Systems)
1.    先按New Simulation , 模擬測試對話視窗便會出現。
2.    第一個對話視窗是用於選取用系統程式, 請選取我的第一個測試程式
按著 Ctrl 不放及 點選 "我的第一個測試程式", 這樣便可同時選取兩個系統程式。



3.    Next   便會出現選擇股票的對話視窗。
4.    按加入股票鍵 ( Add Securities ),  選取股票對話視窗便會出現, 這裡你可選取任何已存在的股票檔案。
5.     現在選取 33 隻成份股票後按 Open,這時會返回選取股票的對話視窗。




6.     Next System Testing Option 選項視窗便出現。
我們於這次使用示範中暫不作任何選項改動。


7.     Ready to Begin Simulation 選項對話視窗中, Next 便出現開始賣買測試 對話視窗。
8.     "The System Tester will now perform the simulation"欄中輸入 我的第一個測試報告方便以後作識別。


 
Start 開始。 對話視窗會消失, 此時會出現一個細小視窗於右下角, 顯視執行中的資料。



11.   當完成測試後, View Results 看測試報告結果。




7.4 查看測試結果 (View the Results)
當你點選 View Results , 模擬測試( The Enchanced System Tester) 測試報告視窗出現


 
這裡很明顯 我的第一個測試報告中,我的第二個測試程式 我的第一個測試程式好,

:   由於我們以多於一個的系統程式進行測試, 所以第一個視窗報告,是用以比較測試用的系統程式之間的表現。
視窗報告於上半部以圖表顯示,每一個系統程式的平均淨回報,下半部是回報的數字報告。
這個測試中,"我的第二個測試程式" 有更佳的回報。
現在我們可以進入這個程式的個股表現報告,請雙擊滑鼠左鍵 (double-click) 進入。
我的第二個測試程式,這時會出現另一個版本的個別股份表現測試報告頁。
同樣報告中上半會以圖表顯示,下半會以數字顯示。





這個報告中綠色柱狀代表有盈利,紅色柱狀代表有損失,盈利越多向上發展的柱身越高,損失越多向下發展的柱身越低。

報告中的欄位有排列功能,只要按下欄位的名稱,便會依據該欄之數字由大至小或由小至大自動排列,而圖表亦會跟隨排列改動,你便可以很方便的找出最好及最差回報的股份。



決定你要檢視的股份後,用滑鼠指著該股份列雙擊左鍵(double-click) 或選取後按 View 鍵去顯示個別股份的詳細測試資料報告。


個別股份的詳細測試資料報告



 




7.5 最佳化處理 (Optimizing)

最佳化處理(Optimizing) System Tester 的強勁功能之一,須要將程式的某些數值以變數代替,這個變數指定以 "OPT" 來代表,最多可以用10個變數,由 OPT1 - OPT10
(: 這個 OPT 只有在 System Tester 才有用。)
System Tester 會以每一個變數的設定範圍進行測試,此設定範為,是你預先於程式中輸入的。

"我的第一個測試程式" 的設定是以  25天平均線進行的,現在改用最佳化處理 (Optimizing)

我們會於原先的程式條件內,將數字更改為代數,測試一下 "我的第一個測試程式" 對該33 隻成份股票 以幾多天的平均線設定,才會有最大的回報。



 
更改開始:
1.          開啟模擬測試功能,現在我們先將 "我的第一個測試程式" 複製 (copy) 一份,按左上方 COPY 鍵,在列表頂會出現 "copy of我的第一個測試程式"
2.          選取它及按  "EDIT" 鍵,將"copy of我的第一個測試程式" 改為 "我的優化測試程式"
3.          再將買賣規則於Sell Order, Sell Short Order Buy to Cover Order 內的數字 25 改為 OPT1

Buy Order:     cross (close, mov (close, OPT1, simple))
Sell Order:               cross (mov (close, OPT1, simple), close)

Sell Short Order:     cross (mov (close, OPT1, simple), close)
Buy to Cover Order: cross (close, mov (close, OPT1, simple))



修改完成後 OPT1會於 Optimizations 那一頁自動出現,現在到 Optimizations 那一頁,按 EDIT 輸入最少值(Minimum), 最大值(Maximum) 及每次遞增數值(Step),按 OK 完成。

Description:  移動平均日數  (選擇性:可以不輸入)
Minimum:         10
Maximum:        70
Step:                10


當你以以上設定執行測試時,程式便會以 10 開始代入 OPT1,完成後再加上10代入OPT1再測試,每次加 10再測試,如此類推,直至OPT1完成代入 70的測試為止。
由於須進行多次代數於置換,所以須要的測試的時間亦到會較長。


7.6 現在開始測試Optimizing
New Simulation 鍵,選 "我的優化測試程式",再按 NEXT
你會發現之前選了的10 隻股票仍然在這個選項內,因為預設是會保留最近一次的測試股票設定,請按NEXT




System Test Options 預設是保留最好的頭 5 個報告,如要顯示多些報告請於 System Test Options 頁,輸入你想保留及顯示的報告數目。

再按 Start 開始測試,當測試完成後,按 View Results,就會顯示出最大回報的頭 5 (預設值)個報告。




圖中OPT1便顯示了所使用 50 的代數於該 33 隻成份股票的回報會是最好的。
以這個測試結果來看,亦即以 50 天平均線作條件,會是最好的買賣指標。






7.7 顯示最佳化系統測試結果

顯示最佳化系統測試結果(Display the Optimization Reports) --自由選項(optional)

Double-click 最好的回報報告,並於 Net Profit 欄頂按下,將報告以遞增排列,你便可知 50天平均線進行買賣,對該 33 隻成份股票中,那一隻最有較及回報會最高。





Double-click 最大回報的一隻股票,你使可以得到更詳細的報告。


 

7.8 其它設定簡介
現在簡單介紹 System Tester 內的其它設定,先選回 我的第一個測試程式並按下 修改( Edit )


7.8.1程式系統修改器(System Editor)

一般資料頁(General)
你可於這裡修改程式系統的名稱,輸入有關該程式系統的資料訊息。


這裡有3個條件選項供你選取:
當多個買入或賣出訊號同時現時的處理:
Order Bias     有時測試中的買或賣訊號會非常接近,甚至同一時間出現,這時會跟據這個選項設定選擇以買或賣的方法進行。
Portfolio Bias        當買賣訊號同時出現時,可指示 MetaStock 同時進行或單一進行。
Position Limit   指定開新買賣單時,必須平舊買賣倉先。如果不設定時,最多可同時有 65536 個開倉。


 
7.8.2 買賣訊號(Buy/Sell Signals)


 

System Editor 提供4種投資規則來判斷獲得買賣訊號
        以指定的技術指標或計算方法去買入股票。

        以指定的技術指標或計算方法去沽出股票。

        以指定的技術指標或計算方法去沽空股票。

        以指定的技術指標或計算方法去買入股票。
沽空及沽空補回 此方法多為借貨沽空,道理其實是在高位先行沽出借來的股票,然後在低位買回股票還給原股票持有人,取其差價獲取利潤。


7.8.3 買賣規則設定
全部買賣規則都是使用相同的選項、欄位及描述如下:

Formula   在這裡輸入方程式或條件式。
Functions 按鍵       這個按鍵開啟貼上程式對話視窗,這裡你可看到所有方程(及參數)有效用於MetaStock 方程語言
指示類別(Order Type)
此指示設定於模擬測試(System Tester)中的 Option - Trade Execution.
要求以Open, High, Low, Close價格買進或賣出股票的指示。

跟據 Limit or Stop Price 的設定價格,進行買/賣股票的指示。

股票到達Limit or Stop Price價格( Stop Price )時買進或賣出的指示。

此種委託單結合了限價買單( Buy Limit Order ) 以及限價賣單( Sell Limit Order ) 二種形式。當股票達到Limit or Stop Price價格時,限價停損單便被使用。

限價或停損價 ( Limit or Stop Price)    指定價位不是市場價格Open, High, Low, Close


7.8.4 停損選項設定:


外加條件規則, 每一個測試系統可有最多5停損設定
當類別中的 Stop 被選取,便會使用這5 個設定值。

損益平衡(Breakeven):         
當價格到達最少利潤或損失時執行。停損會以先前買入價位作評估,除了當買入價位為收市價時,便會以下一日來作評估比較。
最大損失(Maximum Loss):
當價格到達一指定的最大損失時執行。

不活躍最少轉變(Inactivity Minimum Change):
由買入位計起或當買入價位為收市價時,便會以下一日收市價計萛,於指定的時間內沒有進行賣出動作便執行.

利潤保護(Profit Stop)     
決定獲利目標為投資金額的百分之幾,以及容許已獲利損失的百分比。

追蹤停損(Trailing Stop)   
追蹤停損可以用來保護獲利,它的構想是隨著投資人累積的利潤調整停損。投資人買入某股票之後,計算該股今日股價與最近的最高股價差距的百分比作為停損依據。停損的百分比通常設定在10%~50%之間。


7.8.5 執行時的選項

測試日數設定
請按New Simulation 鍵,選"我的優化測試程式",再按 NEXT
在這個視窗的右下角按Dates 你便可設定想要測試日數(預設為250),又可用日期來作設定。



設定買賣條件
Trading
Points Only Test       
當測試 期指 期貨商品 類時選用這項,得出賺取或損失的點數代替現金價值。

預設資本(Initial Equity)            
這是開始測試前的資本。
(當使用Point only 選項時這個設定會變成無效。)

預設買賣數量(Default Size)    
這個可以設定以每次買賣的股票數量,每單買賣成本、資本的可用百分比。
(當使用Point only 選項時這個設定會變成無效。)

投資意向(Portfolio)
可以設定為先以買、賣或兩者一起(以買賣訊號)進行的方法。並設定於最後一日平倉。

保留報告(Results)
如選取了 ”Quick Test” 這項,測試會以簡報快速進行,但不會製作Positions, Equity Orders 的報告。
當你使用optimization變數值時,你可以設定保留幾多個optimization報告。





More...  開啟System Testing Options選項視窗。


 
可以在這裡設定Margin Commissions 的數據。
Commissions 選項又可分為3項設定,以每筆買賣記錄的:
每筆買賣計萛                Point Per Transation
每筆買賣股/張數計       Point Per Unit($)
每筆買賣百分比計        Percent of Transaction(%)


System Testing Options - Trade Execution
當選取Realistic Market Prices 這項時,所有買賣將以另一日的Open價進行。

當不選取時, 買賣將跟據指定設定進行,以Buy, Sell, Sell Short Buy to Cover Prices 進行,並且可獨立以 (Open, Close, High or Low) 設定。

輸入Delay order opening  幾多日, 便會延遲設定日數進行買賣。

容許損失Slippage (Points, Percentage)
這個設定容許進行買賣時,以偏離Open, Close, High or Low 價位買賣,即系統測試時可執行的價格差買賣。


7.9 其他System Tester的例子

7.9.1移動平均匯聚背馳指標(MACD)
移動平均匯聚背馳指標(MACD),相信大家都會認識,
現在以它做例子:
向好:       MACDM1穿M2
向淡:       MACDM1跌破M2
Name:              MACD
Buy order:        CROSS(MACD( ), MOV(MACD( ),9,E))
Sell order: CROSS(MOV(MACD( ),9,E),MACD( ))


解釋:
CROSS(MACD( ), MOV(MACD( ),9,E))代表當MACD升穿其訊號線就買入。

CROSS(MOV(MACD( ),9,E),MACD( ))代表當MACD跌破其訊號線就賣出。

:因為MACD9天平均線便是它的訊號線




7.9.2隨機指數 (Stochastics)\

向好:       當隨機指數的%K升穿%D
向淡:       當隨機指數的%K跌破%D
Name:              Stochastics
Buy order:        Cross(STOCH(18,5),MOV(STOCH(18,5),5,E))
Sell order: Cross(MOV(STOCH(18,5),5,E),STOCH(18,5))


 

解釋:
%K = STOCH(18,5)
%D = MOV(STOCH(18,5),5,E)

Cross(STOCH(18,5),MOV(STOCH(18,5),5,E))代表當Stochastic升穿其訊號線就買入。

Cross(MOV(STOCH(18,5),5,E),STOCH(18,5))代表當Stochastic跌破其訊號線就賣出。

:因為Stochastic的平均線正是它的訊號線



7.9.3 笨人策略

這個買賣策略是最簡單,但有系統的「見低買、見高賣」策略,當股價從低位回升一定百分比(例如10%)就買入,當股價從高位回落一定百分比(例如10%)就賣出,所以構成買賣的訊號就是:

向好:       當股價從低位回升一定百分比就買入
向淡:       當股價從高位回落一定百分比就沽出

Name:              Moron
Buy order:       
Cross(C, Trough(1,C, 5)*(1+OPT1/100))
Sell order:
Cross(Peak(1,C, 5)*(1-OPT2/100), C)

Optimize 那頁 進入 Optimization Variables 畫面,選擇OPT1, 然後按Edit 鍵進入設定OPT1畫面,並輸以下資料:

Description     鍵入 Up By 代表 上升百分比
Minimum        鍵入  5 代表 由最少的5%開始測試
Maximum       鍵入 20代表 至最大的20%結束測試
Step           鍵入 1 代表  每一步增加1%
OK離開設定OPT1畫面。

OPT2之後,然後按Edit...進入設定OPT2畫面,並輸以下資料:
Description     鍵入Down By 代表 下跌百分比
Minimum        鍵入 5 代表  由最少的5%開始測試
Maximum       鍵入 20  代表 至最大的20%結束測試
Step           鍵入 1 代表  每一步增加1%
OK離開設定OPT2畫面。

Close 離開Optimization Variables 畫面,再按OK便完成這個 System Tester



今次用了最佳化功能 Optimization,得出一對最佳的組合:
收市價升穿低位回上 6% 的位置便買入。
收市價跌穿高位回落 19% 的位置便沽出。



7.9.4 陰陽燭形態

陰陽燭有多種不同的形態組合,例如:
向好的有「破腳穿頭」(Engulfing Bull)、「早晨之星」(Morning Star)
向淡的側有「穿頭破腳」(Engulfing Bear)、「黃昏之星」(Evening Star)等。
MetaStock 本身可以認定大部份的陰陽燭形態,所以亦可以測試陰陽燭形態的準確性。

例如要測試「破腳穿頭」(Engulfing Bull)的形態,買賣策略是當破腳穿頭形態出現後就買入,形態出現後的2天就沽出。

Name:              Candlestick - EngulfingBull
Buy order:        Engulfingbull( )
Sell order: Barssince(engulfingbull( ))=2

Barssince(engulfingbull( ))=2是代表當破腳穿頭出現後的第二天就沽出。
另外,陰陽燭圖形態是出現後的下一天(T+1)才可以入市,而出市是在形態出現後的第二天(T+2)以收市價沽出,所以要在測試時改一些選項。
進行測試中按 Next System Testing Option 選項視窗,按下 More 鍵,便出現更多選項,在Trade Execution :
1)      除消選取 Realistic Market Prices
2)      更改 Buy Price Open
3)      Sell Price 保持為 Close
4)      Delay order opening 1



 
其他的陰陽燭形態亦可以用同樣方式測試,而以下是較常用的陰陽燭形態,於MetaStock 的函式表示方法:

破腳穿頭        EngulfingBull( )
穿頭破腳        EngulfingBear( )
曙光初現        PiercingLine( )
烏雲蓋頂        DarkCloud( )
身懷六甲        BullHarami( ) BullHaramiCross( )
身懷六甲        BearHarami( ) BearHaramiCross( )
早晨之星        MorningStar( )
黃昏之星        EveningStar( )


7.9.5 怎樣利用Optimization 選擇平均線組合?

除了以收市價 升穿或跌破 平均線 作為買賣策略外,也可以用兩條不同天數的平均線作為買賣策略。
當天數較短的平均線升穿天數較長的平均線就買入,而天數較短的平均線跌破天數較長平均線就賣出,但應該以多少天作為短、多少天作為長,就見人見智了。
以下便是利用 System Tester  找出由10天、20天、30 ......直至 250天的平均線中,那一組的天數有最可觀的利潤。

第一步    建立新測試系統(Create New Systems)

Name             鍵入        MA-OPT2
Buy order    鍵入        OPT1<OPT2 AND CROSS(MOV(C,OPT1,S),MOV(C,OPT2,S))
Sell order       鍵入        OPT1<OPT2 AND CROSS(MOV(C,OPT2,S),MOV(C,OPT1,S))


Optimize 那頁 進入 Optimization Variables 畫面,選擇OPT1, 然後按Edit 鍵進入設定OPT1畫面,並輸以下資料:
Description     鍵入        Short MA
Minimum        鍵入        10    代表        由最少的10天平均線開始測試
Maximum       鍵入        250  代表        至最大的250天平均線結束測試
Step           鍵入        10    代表        每一步增加10
OK離開設定OPT1畫面。

OPT2之後,然後按Edit鍵進入設定OPT2畫面,並輸以下資料:
Description     鍵入        Long MA
Minimum        鍵入        10    代表        由最少的10天平均線開始測試
Maximum       鍵入        250  代表        至最大的250天平均線結束測試
Step           鍵入        10    代表        每一步增加10
OK離開設定OPT2畫面。
Close 離開Optimization Variables 畫面,再按OK便完成這個 System Tester
但使用時要檢查 More 內的設定是否正確,如之前有更改,再運用時便要修改回正確常用的設定。




7.9.6 可調較 MACD MA1 MA2 MOV 的模擬測試程式
有朋友問 system tester 內有沒有可以測試 MACD MA1 MA2 線的方法 ?而預設 system tester 內只有一條可以測試 MACD MOV 線的程式,所以我特地做了一個作示範使用 Opt1, Opt2, Opt3 ( system tester Opt1 - Opt10 最多 10個變數值 ) !!


{Buy Order}
M1 := Mov(C,Opt1,E);
M2 := Mov(C,Opt2,E);
myMACD := M1 - M2;
myMACDmov := Mov(myMACD,Opt3,E);
myMACD > myMACDmov

{Sell Order}
M1 := Mov(C,Opt1,E);
M2 := Mov(C,Opt2,E);
myMACD := M1 - M2;
myMACDmov := Mov(myMACD,Opt3,E);
myMACD < myMACDmov



{Sell Short Order}
M1 := Mov(C,Opt1,E);
M2 := Mov(C,Opt2,E);
myMACD := M1 - M2;
myMACDmov := Mov(myMACD,Opt3,E);
myMACD < myMACDmov

{Buy to Cover Order}
M1 := Mov(C,Opt1,E);
M2 := Mov(C,Opt2,E);
myMACD := M1 - M2;
myMACDmov := Mov(myMACD,Opt3,E);
myMACD > myMACDmov