2014年2月24日 星期一

Larry Williams - 價格的循環型態 [程式碼]

EasyTrader ArtNo 113
[----- 摘譯 Larry Williams 短線交易秘訣 ------ ]
價格的確存在某種循環波動(或是一種型態),你可以很快地在任何圖表、任何時段、任何市場、或任何我所交易過的國家中看出來。一旦你瞭解了這些型態之後,就更能順著最可能的價格趨勢走了。

多年來,我系統地整理並定義出三種循環:小差價區間/大差價區間(range);區間內的移動收盤價(movingclose);以及收盤價與開盤價。

現在正是我們開始學習解讀線圖的第一課,我們將以價差變換的研究做為開始。我所謂的價差區間是指某只股票或商品期貨在一日、一周、一月、一年,甚或一分鐘內移動的整個距離。你可以把價差區間想像成是你選取的任何時段內的價差。對於你將要學到的三個循環而言,無論是在哪一種時間段這個規則都很適用,而且我提成的規則,也適用所有時間段的市場。

區間改變的自然循環

任何一天商品的價差千變萬化,這是讓線圖分析師最為困惑的地方。但是在你所要研究的任何時間段中,你會發現價差區間變化會出現一種清晰的、精確的節拍。在任何時段、任何市場,價差區間變化會從一系列的小價差區間走向一串密集的大價差區間,這點非常重要。這樣的循環會終年不斷地重複出現:一些小價差區間之後是大價差區間,大價差區間之後是小價差區間。這種循環極為準確,這是短線交易獲利的基本關鍵。
這個看起來很明顯的循環非常有效,而且對我們十分重要,因為投機客必須利用價差來賺錢,差異越大,獲利的潛力就越高。假如沒有價差,或是差別極小,投機客就會陷在價格趨勢不明確的泥潭中。

這就是為什麼短線交易員期待價格走勢能夠在數個小時或幾天內出現爆發性的走勢。

常見的狀況是,大價差區間會變成許多小價差區間。你的目標就是趕在價格呈現大幅波動以前建立倉位。最過癮的莫過於看到市場因為一、兩天的大幅波動而變得活躍,而在市場退燒或波動停滯以前,吸引大眾搶進。大多數短線交易員都是輸家,因為他們不瞭解喝醉水手的腳步變化規則,不瞭解價格走勢何以會超出他們大量垃圾線圖的波動範圍,卻不斷追逐熱門的市場做致。

相反的,我們這些瞭解規律的少數人士則會反向操作。我們尋找過去波動性高、而且每日價差區間很大、但是最近卻出現小幅波動的市場,因為我們知道大價差區間來臨的日子已經不遠了!

你可以不管線圖上的瘋狂變化,只要找到低點的時候冷靜地在一旁觀望、小心地守候,直到區間縮小、消失為止。這段自然迴圈結束之際,就是短線慶功之日。

同理,大價差區間則告訴我們行情將很快陷入無利可圖的小價差區間泥潭中,當日這不是我們所願意見到的。

[----------------------------------------------------------]


利用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);

Var: UBuy(0),USell(0),BuyStop(0),NewBuyStop(0),LTrailOn(false),SellStop(0),NewSellStop(0),STrailOn (false);

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 ;

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);

UBuy = Close + Entry_RL * ATREnL;
USell = Low - Entry_RS * ATREnS;

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;

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;

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 ;


MagicQS032

3 則留言:

  1. EasyTrader您好,感謝您分享這麼多的資訊給我們學習
    想請問一下,關於這個方法的交易策略是否可以說明一下

    感謝

    回覆刪除
  2. EasyTrader您好,感謝您分享這麼多的資訊給我們學習
    想請問一下,關於這個方法的交易策略是否可以說明一下

    感謝

    回覆刪除
    回覆
    1. 這策略的幾個主要計算
      1. 計算不同週期長度的 TrueRange 均值作為進出場的計算參考值
      2. 以當根K棒的收盤價+某比例 TrueRange均值作為多方進場價
      3. 以當根K棒的最低價-某比例 TrueRange均值作為空方進場價
      4. 空方進場條件為當 TrueRange均值 <= 前幾根K棒 TrueRange時進場
      5. 平倉方式都是利用 ATR變化作參考

      刪除