以下這本書的內容早於2006年時完成, 所以今次貼上的是原版,
全本書資料及更新請到論壇瀏覽: http://www.bp-system.com/discuz/forum.php?mod=forumdisplay&fid=38
或 http://www.bp-system.com/
第七章 模擬買賣測試System Tester
全本書資料及更新請到論壇瀏覽: 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” 圖示
這個畫面分為: 1) 測試系統列表(左面)
2) 報告總結(右上部)
3) 測試報告列表(右下部)
3) 於這裡選取用來測試的方程,我們用例子: Equis - MACD
最後可以開始測試:
接下來我們會製作兩個測試程式,並同時進行測試。
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)
如於程式中打錯字會有提示出現解釋, 按 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 開始。 對話視窗會消失, 此時會出現一個細小視窗於右下角, 顯視執行中的資料。
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
由於須進行多次代數於置換,所以須要的測試的時間亦到會較長。
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 )。
一般資料頁(General)
你可於這裡修改程式系統的名稱,輸入有關該程式系統的資料訊息。
這裡有3個條件選項供你選取:
當多個買入或賣出訊號同時現時的處理:
Order Bias 有時測試中的買或賣訊號會非常接近,甚至同一時間出現,這時會跟據這個選項設定選擇以買或賣的方法進行。
Portfolio Bias 當買賣訊號同時出現時,可指示 MetaStock 將同時進行或單一進行。
Position Limit 指定開新買賣單時,必須平舊買賣倉先。如果不設定時,最多可同時有 65536 個開倉。
System Editor 提供4種投資規則來判斷獲得買賣訊號
以指定的技術指標或計算方法去買入股票。
以指定的技術指標或計算方法去沽出股票。
以指定的技術指標或計算方法去沽空股票。
以指定的技術指標或計算方法去買入股票。
沽空及沽空補回 此方法多為借貨沽空,道理其實是在高位先行沽出借來的股票,然後在低位買回股票還給原股票持有人,取其差價獲取利潤。
全部買賣規則都是使用相同的選項、欄位及描述如下:
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價格時,限價停損單便被使用。
外加條件規則, 每一個測試系統可有最多5個”停損設定”。
當類別中的 Stop 被選取,便會使用這5 個設定值。
損益平衡(Breakeven):
當價格到達最少利潤或損失時執行。停損會以先前買入價位作評估,除了當買入價位為收市價時,便會以下一日來作評估比較。
最大損失(Maximum Loss):
當價格到達一指定的最大損失時執行。
不活躍最少轉變(Inactivity Minimum Change):
由買入位計起或當買入價位為收市價時,便會以下一日收市價計萛,於指定的時間內沒有進行賣出動作便執行.
利潤保護(Profit Stop):
決定獲利目標為投資金額的百分之幾,以及容許已獲利損失的百分比。
追蹤停損(Trailing Stop):
追蹤停損可以用來保護獲利,它的構想是隨著投資人累積的利潤調整停損。投資人買入某股票之後,計算該股今日股價與最近的最高股價差距的百分比作為停損依據。停損的百分比通常設定在10%~50%之間。
測試日數設定
請按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 價位買賣,即系統測試時可執行的價格差買賣。
移動平均匯聚背馳指標(MACD),相信大家都會認識,
現在以它做例子:
向好: 當MACD的M1升 穿M2
向淡: 當MACD的M1跌破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跌破其訊號線就賣出。
註:因為MACD的9天平均線便是它的訊號線
向好: 當隨機指數的%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的平均線正是它的訊號線
這個買賣策略是最簡單,但有系統的「見低買、見高賣」策略,當股價從低位回升一定百分比(例如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% 的位置便沽出。
陰陽燭有多種不同的形態組合,例如:
向好的有「破腳穿頭」(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( )
除了以收市價 升穿或跌破 平均線 作為買賣策略外,也可以用兩條不同天數的平均線作為買賣策略。
當天數較短的平均線升穿天數較長的平均線就買入,而天數較短的平均線跌破天數較長平均線就賣出,但應該以多少天作為短、多少天作為長,就見人見智了。
以下便是利用 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 內的設定是否正確,如之前有更改,再運用時便要修改回正確常用的設定。
有朋友問 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
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
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
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
M1 := Mov(C,Opt1,E);
M2 := Mov(C,Opt2,E);
myMACD := M1 - M2;
myMACDmov := Mov(myMACD,Opt3,E);
myMACD > myMACDmov
沒有留言:
張貼留言