2015年1月8日 星期四

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

EasyTrader ArtNo 235
趨勢理論研究的是整個市場的價格走向趨勢,最早是由道氏(Charles H.Dow)所提出趨勢的概念,其後繼者William P.Hamilton將之整理及編寫而成為道氏理論。道氏理論的創始者道氏(Charles H. Dow)是Dow-Jones金融新聞社的創辦人,道氏也是今日被全球重視的Dow-Jones Index的創始者,足見道氏的宏觀及十分具開創性的視野。根據趨勢理論,股票價格運動有三種趨勢
一、主要趨勢
 即從大的角度來看的上漲和下跌的變動。其中,只要下一個上漲的水準超過前一個高點。而每一個次級的下跌其波底都較前一個下跌的波底高,那麼,主要趨勢是上升的。這被稱為多頭市場。相反地,當每一個中級下跌將價位帶至更低的水準,而接著的彈升不能將價位帶至前面彈升的高點,主要趨勢是下跌的,這稱之為空頭市場。

二、次級趨勢
 它是主要趨勢運動方向相反的一種逆動行情,干擾了主要趨勢。在多頭市場里,它是中級的下跌或“調整”行情;在空頭市場里,它是中級的上升或反彈行情。通常,在多頭市場里,它會跌落主要趨勢漲升部分的三分之一至三分之二。屬於調整行情可能是回落不少於10%,甚至多於20%。然而,需要註意的是:三分之一到三分之二的原則並非是一成不變的。它只是機率的簡單說明。大部分的次級趨勢的漲落幅度在這個範圍里。

三、短期變動
 它們是短暫的波動。很少超過三個星期,通常少於六天。它們本身儘管是沒有什麼意義,但是使得主要趨勢的發展全過程富於了神秘多變的色彩。通常,不管是次級趨勢或兩個次級趨勢所夾的主要趨勢部分都是由一連串的三個或更多可區分的短期變動所組成。由這些短期變化所得出的推論很容易導至錯誤的方向。在一個無論成熟與否的股市中,短期變動都是唯一可以被“操縱”的。而主要趨勢和次要趨勢卻是無法被操縱的。
資料參考 - MBA 智庫 趨勢理論
本篇要探討的是次級趨勢或者是說修正趨勢,也就是常聽到的回檔與反彈。費波那西係數在這樣的概念中扮演了非常重要的角色
費波那西係數在交易中常會被用到,其中最常用的數字是0.382、0.5、0.618,就是大家經常說的回調(Retracement)會是原來趨勢的三分之一到三分之二。一個強烈的趨勢最少會回調到0.382。一個弱的趨勢可能會回調到0.618,而0.5,就是回調到一半是被用得最多的參考數值。

回調常會突然變成逆轉,所以在交易時一定要小心,設定停損是必須的,停損可以設在支撐/阻力位的附近。回調交易法首先要確認的確是回調,一般來說止損可以設在0.5回調線附近。當然確認回調不可能每次都準確,但止損使失敗交易的虧損在可控制的範圍內,如果判斷準確,則交易的盈利可能非常可觀。

接下來介紹一個利用此概念來介紹我們的交易系統
1. 指標建立 - 以60根K棒內的高低點作基準,並以 0.382作為回調參考線
inputs: Retrace(.382),HiLoLen(60);
Vars: HiHi(0),LoLo(0),Retracement(0);

HiHi = Highest(High, HiLoLen);
LoLo = Lowest(Low, HiLoLen);
Retracement = (HiHi - LoLo) * Retrace;
plot1(HiHi,"HH") ;
Plot2(LoLo,"LL") ;
Plot3(HiHi-Retracement,"HR") ;
Plot4(LoLo+Retracement,"LR") ;

2.策略程式碼
系統參數與變數input:ExitType(1) ;
inputs:NBarL(21),NBarS(2),TradeProfit(0.04),TradeStopLoss(0.04),ATRs_L(12.7),ATRs_S(4.6);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);
inputs: XAvgLen(60),Retrace(0.382),HiLoLen(60),SetUpLen(24);
Vars: Price(Close),XAvg(0),HiHi(0),HiHiBar(0),LoLo(0),LoLoBar(0),Retracement(0),BuySetup(0),SellSetup(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 ;

{計算近期高低點及K棒位置}
XAvg = XAverage(Price, XAvgLen);
HiHi = Highest(High, HiLoLen);
LoLo = Lowest(Low, HiLoLen);
HiHiBar = HighestBar(High, HiLoLen);
LoLoBar = LowestBar(Low, HiLoLen);

{以高低點區間差作回調係數的計算}
Retracement = (HiHi - LoLo) * Retrace;

{買方環境建立 - 重點是 高點必需在低點左方}
IF Close <= HiHi - Retracement and HiHiBar < LoLoBar Then
BuySetup = 0;

{賣方環境建立 - 重點是 高點必需在低點右方}
IF Close >= LoLo + Retracement and HiHiBar > LoLoBar Then
SellSetup = 0;

{計算經過的K棒數量}
BuySetup = BuySetup + 1;
SellSetup = SellSetup + 1;

{多方進場邏輯 - 空手 + 買方條件成立 + 收盤價小於回檔參考線 + K棒計數範圍內}
IF BuySetup <= SetUpLen Then Begin
if MP = 0 and Close < HiHi - Retracement then Buy Next Bar at HiHi - Retracement stop;
BuySetup = SetUpLen;
End;

{空方進場邏輯 - 空手 + 賣方條件成立 + 收盤價大於反彈參考線 + K棒計數範圍內}
IF SellSetup <= SetUpLen Then Begin
if MP = 0 and Close > LoLo + Retracement then Sell Next Bar at LoLo + Retracement stop;
SellSetup = SetUpLen;
End;

{ 幾個常用出場方式 }
if ExitType = 6 then Begin
If MP > 0 then ExitLong next bar at Lowest(Low,NBarL) stop;
If MP < 0 then ExitShort next bar at Highest(High,NBarS) 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 ExitType = 5 then Begin
{*******************************************************************
Description : ATR Trailing Stop Long Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{Inputs: ATRs_L(3);}
Variables: PosHigh(0), ATRVal_L(0);
ATRVal_L = AvgTrueRange(10) * ATRs_L;
If BarsSinceEntry = 0 Then PosHigh = High;

If MarketPosition = 1 Then Begin
If High > PosHigh Then PosHigh = High;
ExitLong ("ATR") Next Bar at PosHigh - ATRVal_L Stop;
End else ExitLong ("ATR eb") Next bar at High - ATRVal_L Stop;
{*******************************************************************
Description : ATR Trailing Stop Short Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{Inputs: ATRs_S(3);}
Variables: PosLow(0), ATRVal_S(0);
ATRVal_S = AvgTrueRange(10) * ATRs_S;

If BarsSinceEntry = 0 Then PosLow = Low;
If MarketPosition = -1 Then Begin
If Low < PosLow Then PosLow = Low;
ExitShort ("ATR_1") Next Bar at PosLow + ATRVal_S Stop;
End else ExitShort ("ATR_1 eb") Next bar at Low + ATRVal_S Stop;
end;

if IsBalanceDay then setExitonClose ;
台指期 日K 留倉 交易期間 2004/11/1 ~ 2014/10/31 交易成本 1200

結論:在三種趨勢中,長期投資者最關心的是商品價格的主要趨勢,其目的是想儘可能地提前進入市場。短期變動的重要性較小,且易受人為操縱,因而不便作為趨勢分析的對象。而對於次級趨勢來說,若能掌握變化的轉折點,也能從中獲取不錯的利潤。
MagicQS146

3 則留言:

  1. 可否請問 幾個常用出場方式 ExitType 是哪些條件,如果能提供程式碼更是感激,謝謝

    回覆刪除
  2. { 幾個常用出場方式 } 底下的就是 exittype 程式碼 有 6組
    if ExitType = 6 then Begin
    If MP > 0 then ExitLong next bar at Lowest(Low,NBarL) stop;
    If MP < 0 then ExitShort next bar at Highest(High,NBarS) stop;
    end;

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

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

    回覆刪除
  3. 想請問
    {計算經過的K棒數量} BuySetup = BuySetup + 1 及
    {多方進場邏輯}IF BuySetup <= SetUpLen( 24 ) Then Begin
    這兩句不太明白 可否多作解釋程式碼 感激 謝謝

    回覆刪除