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

0 留言:

張貼留言

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

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