2014年3月6日 星期四

Larry Williams - 價格的循環型態(續篇) [程式碼]

EasyTrader ArtNo 118
ATR作為市場波動性指標具有的通用性和適應性的使用價值無論怎麽肯定都不過分。ATR對於建立堅實的投資理論是非常有價值的(也就是說投資理論可能在未來同樣有效),而且他們能不加修飾的用於多個市場。

波動區間收縮背景:許多技術派已經註意到大幅價格運動往往出現在價格平靜的橫盤整理之後。通過比較短期ATR和長期ATR可以非常容易的鑒別出價格平靜的橫盤整理區間,比如當10期ATR小於等於0.75倍50期ATR時,就表明近期市場不尋常的平靜。這就是一個背景條件,表明關鍵的入場時機就在眼前。
波動區間擴張背景:許多技術派相信不同尋常的價格移動意味著一個幅度可觀的趨勢正在形成。波動區間擴張時期正好與波動區間收縮時期相反,這時我們要求10期ATR大於50期ATR,例如10期ATR大於等於50期ATR的1.25倍。

如果你對這兩種截然相反的情況有興趣,我們可以非常容易的將兩者融合在一起。我們尋找的入場機會在什麽時候呢?在波動區間收縮之後緊跟著波動區間擴張的時候。

回檔或反彈背景:假定我們只想在市場回檔時買入,在市場反彈時賣出。當價格比5天前的價格至少低3倍ATR時,我們可以讓我們的系統準備買入。當價格比5天前的價格至少高出3倍ATR時,我們可以讓我們的投資理論準備賣空。

入場觸發器

波動性突變:該理論認為突然出現的某個方向的大幅運動表明與該方向相同的趨勢正在形成。一般來說,我們的入場規則可以表述為:當價格比上一交易日收盤價高2ATR時買入,當價格比上一交易日收盤價低2ATR時賣出。這裏的一般概念是在平常交易日裏價格漲跌不會超過上一交易日收盤價1ATR,超過上一交易日收盤價2ATR的價格漲跌是不尋常的事件,這表明有什麽不同尋常的事發生了。由此可以做出的結論是:促使價格這麽運動的原因是實質性的,一個新的趨勢正在形成。
這篇文章也呼應了 Larry Williams 的價格循環(小價差區間與大價差區間) , 本文中提到了波動區間的壓縮與擴張 , 因此我們也用此概念對歷史數據作回測 

基本設定 台指期 日K 回測週期 2001/1 ~ 2014/2 交易成本 1200
短期ATR與長期 ATR的比值來作為策略元素(AvgTrueRange(N)/AvgTrueRange(M))

AvgTrueRange(5)/AvgTrueRange(20)

測試程式碼
Inputs: XL1 (1.3),XS1 (1.09),NBar_LE (4),Frac_LE (1.02),Ratio_TL (4.92),
TRPct_L (10.0000),NBar_LX (14),NBar_SX (4);

Var: ATRL(0),UBuy (0),USell (0),BuyStop (0),NewBuyStop (0),Trigger_TL (false);
Var: VarL1(0),VarS1 (0),Cond_LE (false),Cond_SE (false);

ATRL = AvgTrueRange(NBar_LE);

UBuy = Close + Frac_LE * ATRL;
USell = Low;

VarL1 = AvgTrueRange(5)/AvgTrueRange(20);
VarS1 = AvgTrueRange(5)/AvgTrueRange(20);
Cond_LE = VarL1 < XL1;
Cond_SE = VarS1 <= XS1;

If Cond_LE then begin
Buy next bar at UBuy stop;
end;

If Cond_SE then begin
Sellshort next bar at USell stop;
end;

If MarketPosition > 0 then begin
If BarsSinceEntry = 0 then begin
BuyStop = 0;
Trigger_TL = false;
end;

If Close - EntryPrice > Ratio_TL * ATRL then
Trigger_TL = true;
If Trigger_TL then begin
NewBuyStop = EntryPrice + TRPct_L * (Close - EntryPrice)/100.;
BuyStop = MaxList(BuyStop, NewBuyStop);
end;

If BarsSinceEntry >= NBar_LX then
Sell  next bar at market;
If Trigger_TL then
Sell next bar at BuyStop stop;
end;

If MarketPosition < 0 then begin
If BarsSinceEntry >= NBar_SX then
Buytocover next bar at market;
end;

AvgTrueRange(5)/AvgTrueRange(10)
績效兩者相當 ,交易次數降低約 35% ,讀者也可以試試不同的長短期間的變化

加上如意網的結果


沒有留言:

張貼留言