2015年2月16日 星期一

十字過濾線 [程式碼]

EasyTrader ArtNo 247
十字過濾線,英文全名Vertical Horizontal Filter,縮寫VHF。1991年8月於Futures雜誌,由懷特(Adam White)首次發表,其主要的作用在於分辨行情的種類。
趨勢行情應該採用趨勢指標,橫向整理行情應該採用超買超賣指標,不同的指標適用於不同的市場走勢。但是,如何區別目前的走勢,屬於單一方向的趨勢行情?還是橫向震蕩的整理行情?是許多使用技術分析的投資人,共同遭遇的難題。
 MACD指標及移動平均線,都是典型的趨勢指標。當行情朝單一方向前進時,這兩種指標,可以提供投資人明確的方向指示及買賣訊號。然而,行情一旦朝橫向箱型發展時,MACD和移動平均線,會因為波動頻繁的關係,出現很多假訊號陷阱,使得投資人頓時失去方向感。股價呈箱型走勢波動時,相對強弱指標(RSI)及KD指標可以提供短期的買賣訊號,然而,行情的發展沒有一定的規則。當弱勢的箱形行情,演變成強勢的趨勢行情時,投資人如果仍然參考RSI和KD指標的買賣訊號,則會在指標到達80時立即賣出股票。結果,這個價位卻是趨勢行情的起漲點,此時賣出股票真的很冤枉。

為了讓技術分析的訊號,充分的發揮功能,不同的市況,必須搭配不同的指標。如果指標的選擇錯誤,必然沒辦法得到好的操作結果。因此,辨別目前行情的地位,是每一位投資人進行交易投資之前最重要的工作。懷特所設計的VHF指標,解決了上述的問題,提供投資人清晰明確的訊號,可以澄清“趨勢行情”與“箱型行情”的界限。經過VHF指標過濾後的行情,可以幫助投資人選擇最佳的指標組合。

十字過濾線的公式
1、NUM=HCP-LCP
2、DEN=SUM(│CLS-CLSn│)
3、VHF=NUM÷DEN
4、本指標參數一般設為28天,視個股狀況不同,可調整為14天或7天。

input:Period(14),LineA(0.35),LineB(0.4) ;
Vars: Denominator(0), Numerator(0),VHF(0) ;

Numerator = Highest(Close,Period)-Lowest(Close,Period) ;
Denominator = Summation(AbsValue(Close-Close[1]),Period) ;
if Denominator <> 0 then VHF = Numerator/Denominator ;

Plot1(VHF,"VHF") ;
Plot2(LineA,"LA") ;
Plot3(LineB,"LB") ;

十字過濾線的指標劍法
1、VHF的值越高,代表目前正處於趨勢行情,應選擇趨勢指標為參考工具。
2、VHF的值越低,代表目前正處於箱型行情,應選擇超買超賣指標為參考工具。
3、VHF處於上升狀態時,代表股價處於趨勢行情。
4、VHF處於下跌狀態時,代表股價處於箱型行情。
5、如果動向指數(DMI)中的+DI值高於-DI值,而VHF曲線向上或向下突破X軸時,為中線買點。
6、如果DMI指標中的+DI值低於-DI值,而VHF曲線向上或向下跌破X軸時,為中線賣點。

VHF指標的圖表上,可以切劃一條中界線,分隔趨勢和箱型的波動範圍。這一條中界線一般位於0.35~0.4之間,但是,不同的個股,其中界線位置稍有差異,讀者應自行設定最佳的中界線。將中界線視為X軸,另外設一條Y軸與X軸交叉成十字坐標軸,Y軸可任意左右移動。將Y軸移至VHF曲線穿越X軸處,如果VHF曲線位於十字坐標軸的右上方,代表股價處於趨勢行情。如果VHF曲線位於十字坐標軸的右下方,則代表股價處於箱型行情。
資料參考 MBA智庫
測試程式碼
input:ExitType(2);
inputs:NBarL(50),NBarS(28),TradeProfit(0.025),TradeStopLoss(0.045),ATRs_L(15),ATRs_S(10);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);

input:Period(14),LineA(0.4),LineB(0.4),HighBar(3),LowBar(12);
Vars: Denominator(0), Numerator(0),VHF(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 ;

{ 計算 VHF }
Numerator = Highest(Close,Period)-Lowest(Close,Period) ;
Denominator = Summation(AbsValue(Close-Close[1]),Period) ;
if Denominator <> 0 then VHF = Numerator/Denominator ;

{突破中界線作多 ,跌破中界線作空}
if MP <> 1 and VHF Cross over LineA then Buy next bar at Highest(High,HighBar) stop ;
if MP <> -1 and VHF Cross under LineB then Sell next bar at Lowest(Low,LowBar) stop ;

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 then setExitonClose ;
台指期 30 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200
 台指期 60 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200
MagicQS155

3 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 多次看到程式碼裡有ExitType 請問在使用策略的時候ExitType有什麼特定講究嗎?還是說自行選擇合適的便好?

    回覆刪除
  3. 我放了幾種不同的出場方式 ,方便回測時作篩選搭配

    回覆刪除