2014年2月24日 星期一

●Larry Williams - 價格的循環型態 (程式碼)

EasyTrader ArtNo 113
     價格的確存在某種循環波動(或是一種型態),你可以很快地在任何圖表、任何時段、任何市場、或任何我所交易過的國家中看出來。一旦你瞭解了這些型態之後,就更能順著最可能的價格趨勢走了。
     多年來,我系統地整理並定義出三種循環:小差價區間/大差價區間(range);區間內的移動收盤價(movingclose);以及收盤價與開盤價。
     現在正是我們開始學習解讀線圖的第一課,我們將以價差變換的研究做為開始。我所謂的價差區間是指某只股票或商品期貨在一日、一周、一月、一年,甚或一分鐘內移動的整個距離。你可以把價差區間想像成是你選取的任何時段內的價差。對於你將要學到的三個循環而言,無論是在哪一種時間段這個規則都很適用,而且我提成的規則,也適用所有時間段的市場。[----- 摘譯 Larry Williams 短線交易秘訣 ------ ]
區間改變的自然循環
任何一天商品的價差千變萬化,這是讓線圖分析師最為困惑的地方。但是在你所要研究的任何時間段中,你會發現價差區間變化會出現一種清晰的、精確的節拍。在任何時段、任何市場,價差區間變化會從一系列的小價差區間走向一串密集的大價差區間,這點非常重要。這樣的循環會終年不斷地重複出現:一些小價差區間之後是大價差區間,大價差區間之後是小價差區間。這種循環極為準確,這是短線交易獲利的基本關鍵。

這個看起來很明顯的循環非常有效,而且對我們十分重要,因為投機客必須利用價差來賺錢,差異越大,獲利的潛力就越高。假如沒有價差,或是差別極小,投機客就會陷在價格趨勢不明確的泥潭中。
這就是為什麼短線交易員期待價格走勢能夠在數個小時或幾天內出現爆發性的走勢。
常見的狀況是,大價差區間會變成許多小價差區間。你的目標就是趕在價格呈現大幅波動以前建立倉位。最過癮的莫過於看到市場因為一、兩天的大幅波動而變得活躍,而在市場退燒或波動停滯以前,吸引大眾搶進。大多數短線交易員都是輸家,因為他們不瞭解喝醉水手的腳步變化規則,不瞭解價格走勢何以會超出他們大量垃圾線圖的波動範圍,卻不斷追逐熱門的市場做致。
相反的,我們這些瞭解規律的少數人士則會反向操作。我們尋找過去波動性高、而且每日價差區間很大、但是最近卻出現小幅波動的市場,因為我們知道大價差區間來臨的日子已經不遠了!
你可以不管線圖上的瘋狂變化,只要找到低點的時候冷靜地在一旁觀望、小心地守候,直到區間縮小、消失為止。這段自然迴圈結束之際,就是短線慶功之日。
同理,大價差區間則告訴我們行情將很快陷入無利可圖的小價差區間泥潭中,當日這不是我們所願意見到的。
[----------------------------------------------------------]
利用Larry Williams 價格循環的理論 ,我們可以將價差區間(Range) 作成策略核心元素 ,進出場皆以此為中心來作歷史回測

基本設定 台指期 日K 回測週期 2001 ~ 2014 交易成本 1200
測試程式碼

Inputs: Bar_L(5),Shift_L1(10),Bar_S(5),Shift_S1(10),NoATR_Stop(4),NoATR_L(3),Entry_RL(0.70),NoATR_TL(2),Ratio_TL(2.14),Ratio_PL(90),LStopRatio(0.95),NoATR_S(4),Entry_RS(0.65),NoATR_TS(5),Ratio_TS(1.38),Ratio_PS(90),SStopRatio(3.60);

Var:ATREnL(0),ATRTrailL(0),ATRMML(0),ATREnS(0),ATRTrailS(0);

{ Variables for entry and exit prices }
Var: UBuy(0),USell(0),BuyStop(0),NewBuyStop(0),LTrailOn(false),SellStop(0),NewSellStop(0),STrailOn (false);

{ Variables for entry and exit conditions }
Var:VarS1(0),VarS2(0),EntCondL(false),EntCondS(false),IsBalanceDay(False),MP(0);;

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

{ Average true range }
ATREnL = Average(TrueRange, NoATR_L);
ATRTrailL = Average(TrueRange, NoATR_TL);
ATRMML = Average(TrueRange, NoATR_Stop);
ATREnS = Average(TrueRange, NoATR_S);
ATRTrailS = Average(TrueRange, NoATR_TS);

{ Entry prices }
UBuy = Close + Entry_RL * ATREnL;
USell = Low - Entry_RS * ATREnS;

{ Entry and exit conditions }
VarS1 = Average(TrueRange, Bar_S);
VarS2 = TrueRange[Shift_S1];
EntCondL = true;
EntCondS = VarS1 <= VarS2;

{ Entry orders }
If EntCondL then begin
Buy next bar at UBuy stop;
end;

If EntCondS then begin
Sell next bar at USell stop;
end;

{ Exit orders, long trades }
If MP > 0 then begin
If BarsSinceEntry = 0 then begin
BuyStop = EntryPrice - LStopRatio * ATRMML;
LTrailOn = false;
end;

If Close - EntryPrice > Ratio_TL * ATRTrailL then LTrailOn = true;
If LTrailOn then begin
NewBuyStop = EntryPrice + Ratio_PL * (Close - EntryPrice)/100.;
BuyStop = MaxList(BuyStop, NewBuyStop);
end;
ExitLong next bar at BuyStop stop;
end;

{ Exit orders, short trades }
If MP < 0 then begin
If BarsSinceEntry = 0 then begin
SellStop = EntryPrice + SStopRatio * TrueRange;
STrailOn = false;
end;

If EntryPrice - Close > Ratio_TS * ATRTrailS then STrailOn = true;
If STrailOn then begin
NewSellStop = EntryPrice - Ratio_PS * (EntryPrice - Close)/100.;
SellStop = MinList(SellStop, NewSellStop);
end;
ExitShort("ExStop-S") next bar at SellStop stop;
end;

if IsBalanceDay then setexitonclose ;

0 留言:

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------