2014年2月19日 星期三

KD 隨機指標交易策略 [程式碼]

EasyTrader ArtNo 111
隨機指標(KDJ)由 George C.Lane 創製。它綜合了動量觀念、強弱指標及移動平均線的優點,用來度量股價脫離價格正常範圍的變異程度。KDJ指標考慮的不僅是收盤價,而且有近期的最高價和最低價,這避免了僅考慮收盤價而忽視真正波動幅度的弱點。

隨機指標的原理
隨機指標(KDJ)一般是根據統計學的原理,通過一個特定的周期(常為9日、9周等)內出現過的最高價、最低價及最後一個計算周期的收盤價及這三者之間的比例關係,來計算最後一個計算周期的未成熟隨機值RSV,然後根據平滑移動平均線的方法來計算K值、D值與J值,並繪成曲線圖來研判股票走勢。

 隨機指標(KDJ)是以最高價、最低價及收盤價為基本數據進行計算,得出的K值、D值和J值分別在指標的坐標上形成的一個點,連接無數個這樣的點位,就形成一個完整的、能反映價格波動趨勢的KDJ指標。它主要是利用價格波動的真實波幅來反映價格走勢的強弱和超買超賣現象,在價格尚未上升或下降之前發出買賣信號的一種技術工具。它在設計過程中主要是研究最高價、最低價和收盤價之間的關係,同時也融合了動量觀念、強弱指標和移動平均線的一些優點,因此,能夠比較迅速、快捷、直觀地研判行情。
 隨機指標(KDJ)最早是以KD指標的形式出現,而KD指標是在威廉指標的基礎上發展起來的。不過威廉指標只判斷股票的超買超賣的現象,在KDJ指標中則融合了移動平均線速度上的觀念,形成比較準確的買賣信號依據。在實踐中,K線與D線配合J線組成KDJ指標來使用。由於KDJ線本質上是一個隨機波動的觀念,故其對於掌握中短期行情走勢比較準確。

KDJ的取值範圍在0-100之間(J線有時有所超越)。將這0-100之間按區域,按流行的,常用的判研標準,可劃分為超買區、超賣區、徘徊區。

 超買區:K值在80以上,D值在70以上,J值大於90時為超買。一般情況下,股價有可能下跌。投資者應謹慎行事,局外人不應再追漲,局內人應適時賣出。

 超賣區:
K值在20以下,D值在30以下為超賣區。一般情況下,股價有可能上漲,反彈的可能性增大。局內人不應輕易拋出股票,局外人可尋機入場。

 徘徊區:KD值處於50左右分三種情況。如在多頭市場,50是回擋支撐線;如是空頭市場,50是反彈壓力線;如果在50左右徘徊,說明行情還在整理,應以觀望為主,不宜匆忙決定買賣。

大家所熟悉的指標現在是否仍然適用呢? 且看歷史回測的結果(是還不錯喔)
基本設定 台指期 日K 回測週期 2001/1~2013/12/31 交易成本 1200




台指期 30分K



測試程式碼(日K)
Inputs: KD_Len(9),Band_1(70),Band_2(30),ATR_Len(10),ATR_Ratio(1.5),Stop_Ratio(2.1),NBarL(10),NBarS(10),TradeStopLoss(0.03),TradeProfit(0.05);

Var:ATREn(0),Ubuy(0),Usell(0),BuyStop(0),SellStop(0);
Var:VarL1(0),VarS1(0),EntCondL(false),EntCondS(false);
Var: IsBalanceDay(False),MP(0),PF(0),PL(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 ;

ATREn = Average(TrueRange, ATR_Len);

UBuy = Close[1] + ATR_Ratio * ATREn;
USell = Close[1] - ATR_Ratio * ATREn;

VarL1 = FastK(KD_Len);
VarS1 = FastK(KD_Len);

EntCondL = VarL1 > Band_1;
EntCondS = VarS1 < Band_2;

If (EntriesToday(Date) < 1 ) and EntCondL then begin
   Buy next bar at UBuy stop;
end;

If (EntriesToday(Date) < 1 ) and EntCondS then begin
   Sell next bar at Usell stop;
end;

If MP > 0 then begin
   If BarsSinceEntry >= NBarL then ExitLong next bar at market;
end;

If MP < 0 then begin
   If BarsSinceEntry >= NBarS then ExitShort next bar at market;
end;

if IsBalanceDay then SetexitonClose ;
MagicQS020

沒有留言:

張貼留言