2015年10月28日 星期三

開發商品的交易系統 - 基礎篇 [52]

EasyTrader ArtNo 278
在 TRADER'S NOTEBOOK Z-Score Indicator by Veronique Valcu 的文章裡介紹了
Z分數(z-score), 也叫標準分數(standard score)是一個數與平均數的差再除以標準差的過程。

Z分數可以回答這樣一個問題:"一個給定分數距離平均數多少個標準差?" 在平均數之上的分數會得到一個正的標準分數,在平均數之下的分數會得到一個負的標準分數。
Z分數是一種可以看出某分數在分佈中相對位置的方法。Z分數能夠真實的反應一個分數距離平均數的相對標準距離。如果我們把每一個分數都轉換成Z分數,那麼每一個Z分數會以標準差為單位表示一個具體分數到平均數的距離或離差。

將成正態分佈的資料中的原始分數轉換為Z分數,我們就可以通過查閱Z分數在正態曲線下面積的表格來得知平均數與z分數之間的面積,進而得知原始分數在資料集合中的百分等級。一個數列的各Z分數的平方和等於該數列資料的個數,並且Z分數的標準差和方差都為1.平均數為0.

 紐約大學斯特恩商學院教授、金融經濟學家愛德華•阿特曼(Edward Altman)在1968年發展出能用一個數字判斷公司的倒閉機率,就是Z分數(S-Score)。Edward Altman的Z分數公式(Z-Score Formula)是一個多變數財務公式,用以衡量一個公司的財務健康狀況,並對公司在2年內破產的可能性進行診斷與預測。 研究表明該公式的預測準確率高達72% - 80%。

Z—Score財務預警模型概述
  Z—Score模型在經過大量的實證考察和分析研究的基礎上,從上市公司財務報告中計算出一組反映公司財務危機程度的財務比率,然後根據這些比率對財務危機警示作用的大小給予不同的權重,最後進行加權計算得到一個公司的綜合風險分,即z值.將其與臨界值對比就可知公司財務危機的嚴重程度。Z—Score模型判別函數為:

Z = 1.2X1 + 1.4X2 + 3.3X3 + 0.6X4 + 0.99X5

X1=營運資本/資產總額,它反映了公司資產的變現能力和規模特徵。
X2=留存收益/資產總額,反映了公司的累積獲利能力。
X3=息稅前利潤/資產總額。即EBIT/資產總額。可稱為總資產息稅前利潤率。
X4=股東權益的市場價值總額/負債總額.測定的是財務結構,分母為流動負債和長期負債的帳面價值之和.分子以股東權益的市場價值取代了帳面價值,使分子能客觀地反映公司價值的大小。
X5=銷售收入/資產總額,即總資產周轉率,企業總資產的營運能力集中反映在總資產的經營水準上。

指標程式碼
inputs:AvgL1(20),Smooth1(3),Smooth2(5),UpSTD(2),DnSTD(-2) ;
vars: Curve1(0),Curve2(0),ZScore(0);

if StdDev( Close, AvgL1 ) <> 0 then ZScore = (Close - Average(Close, AvgL1))/StdDev( Close, AvgL1 ) ;

Curve1 = Average( ZScore, Smooth1 ) ;
Curve2 = Average( Curve1, Smooth2 ) ;

Plot1(Curve1 , "Fast") ;
Plot2(Curve2 , "Slow") ;
Plot3(UpSTD , "Up") ;
Plot4(DnSTD , "Dn") ;



{系統參數與變數} 
input:EntryType(1),ExitType(2);
inputs:NBarL(6),NBarS(9),TradeProfit(0.05),TradeStopLoss(0.045),ATRs_L(14),ATRs_S(12);
vars:IsBalanceDay(False),MP(0),PF(0),PL(0);
inputs:AvgL1(20), AvgL2(20), smooth1(3), Smooth2(5), UpSTD(2), DnSTD(-2), HighBar(3), LowBar(3) ;
vars: Curve1(0), Curve2(0), ZScore(0)  ;

MP = MarketPosition ;

if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

{ 計算 Z 分數 }
if StdDev( Close, AvgL1 ) <> 0 then ZScore = (Close - Average(Close, AvgL1))/StdDev( Close, AvgL1 ) ;

{ 將 Z分數作兩次平滑化處理 }
Curve1 = Average( ZScore, Smooth1 ) ;
Curve2 = Average( Curve1, Smooth2 ) ;

{ 以兩次平滑化曲線交叉作多空進場 }
if EntryType = 1 then Begin
if MP <> 1 and Curve1 Crosses Over Curve2 then Buy Next Bar at Highest(High,HighBar) stop ;
if MP <> -1 and Curve1 Crosses Under Curve2 then Sell Next Bar at Lowest(Low,LowBar) stop ;
end;

{ 以一次平滑化曲線上下界線突破/跌破作多空進場 }
if EntryType = 2 then Begin
if MP <> 1 and Curve1 Crosses Over  UpSTD then Buy Next Bar at Highest(High,HighBar) stop ;
if MP <> -1 and Curve1 Crosses Under  DnSTD then Sell Next Bar at Lowest(Low,LowBar) stop ;
end;

{出場規則}

if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
if MP > 0 and BarsSinceEntry = NBarL then {Sell } ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then {Buy} ExitShort next bar at Market ;
end;

if IsBalanceDay or date = 1150224 then setExitonClose ;

台指期 30 min K 多空留倉 交易週期 2005/6/30~ 2015/6/30 交易成本 1200


結論:Z-Score 概念與布林指標的標準差上下限的想法是很接近的 ,透過均化處理可以讓我們在進場交易的時機選擇上找到波動的開端,實際在績效的表現上也相當不錯。而 Z-score模型在公司企業財務好壞與否的判定,在美國、澳大利亞、巴西、加拿大、英國、法國、德國、愛爾蘭、日本和荷蘭得到了廣泛的應用。
MagicQS186

4 則留言:

  1. 是的 ,樣本外 20150701~20151030 也持續創高

    回覆刪除
  2. 您好!請問您是否有開發自己的下單機?目前希望在IB下海外商品,但卡在多商品、多帳號、多策略一直搞不定,是否可以請教您相關做法?謝謝

    回覆刪除
  3. 沒有特別開發多用途下單機

    回覆刪除