2014年12月1日 星期一

●裁縫線 Heiken-Ashi [程式碼]

EasyTrader ArtNo 223
     Heiken-Ashi燭圖是另外一種蠟燭圖,雖然看起來和一般的陰陽燭圖很相似,但是它們計算方式上有著基本的不同。Heikin-Ashi為2004年由Dan Valcu所提出的新理論,藉由對原本的「開高低收」做些調整,而期望能在各種指標的操作上有更好的表現。陰、陽燭圖標示一個時段的開盤價(O)、收盤價(C)、高價(H)和低價(L)。Heiken-Ashi燭圖也有這4個價位,但是計算方式不同,而且不像陰、陽燭圖中每根蠟燭都是獨立的,和前面沒有聯繫,它的每根蠟燭和前一燭是聯繫起來的。

     Heikenashi蠟燭圖以一種簡潔直觀的方式反映著市場趨勢。與傳統的日本蠟燭圖不同的是,Heikenashi並不反映市場的開市價、最高價、最低價和收市價,而是計算主導趨勢中的單根K線的價值,再通過顏色的變化來表明趨勢的變化。舉例,如果賣方佔據主導地位,Heiken-Ashi燭圖就會顯示紅色,即使是價格的收市價高於其開市價。對於喜歡遵從趨勢交易的交易者來說,Heiken-Ashi是一個完美的工具,因為它看起來相當的直觀和簡潔。
Heiken-Ashi燭四個價位的計算公式如下:
1、 開盤價=(前燭O+前燭C)/2
2、 收盤價=(O+C+H+L)/4
3、 高價=最高值(H,O,C)
4、 低價=最低價(L,O,C)

在計算開盤價時要用到前燭的開盤價、收盤價,而收盤價、高價、低價都會用到開盤價,所以也都受前燭的影響。所以Heiken-Ashi燭圖比陰、陽燭圖慢,它的信號延遲了,就像用移動平均線來交易時的情況一樣。但是延遲也有一定的好處,可以避免一些用假信號來交易的錯誤。 可以明顯看出陰陽燭圖比Heiken-Ashi燭圖快,而且只要交易方向正確,獲利能力比較強,那麼為什麼還要用後者呢?第一就是因為剛才說的慢的圖表可以過濾掉一些假信號,準確率比較高。第二是因為Heiken-Ashi沒有很多圖形,比較容易解讀。


如何解讀Heiken-Ashi燭圖
1、牛勢燭:有著較長燭身和上陰影,但是沒有下陰影,這是牛勢最強的燭。下陰影加長、燭身減短,顯示牛勢減弱。牛勢燭用桃紅色等表示。
2、熊勢燭:有著較長燭身和下陰影,但是沒有上陰影,這是熊勢最強的燭。上陰影加長、燭身減短,顯示熊勢減弱。熊勢燭用淺藍色表示。
3、逆轉燭:有點類似陰陽燭圖中的十字星或旋轉陀螺,上、下陰影都比較長,但燭身很短。
資料參考 Heiken-Ashi燭圖
我們可以利用裁縫線轉折的特性作依據,轉換應用到實際K棒價格的進出參考
測試程式碼
input:ExitType(4) ;
inputs:NBarL(10),NBarS(7),TradeProfit(0.035),TradeStopLoss(0.015),ATRs_L(12.7),ATRs_S(4.6);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);

inputs:TypAvgLength(20),HeiAvgLength(10),TrendAvgLength(48) ;
vars:haClose(0),haOpen(0),haHigh(0),haLow(0),HAAverage(0),TPAverage(0),TrendAverage(0);
vars:TrendValue(0),SignalCond(false),BarCond(false),TrendCond(false) ;

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 ;

haClose = AvgPrice ;
haOpen = (haOpen[1] + haClose[1])/2 ;
haHigh = MaxList( High, haOpen, haClose ) ;
haLow = MinList( Low, haOpen, haClose ) ;

HAAverage = Average((haClose + haOpen + haHigh + haLow)/4, HeiAvgLength ) ;
TPAverage = Average( TypicalPrice,TypAvgLength ) ;
TrendAverage = Average( Close, TrendAvgLength ) ;

SignalCond = TPAverage > HAAverage ;
BarCond = Close > Open ;
TrendCond = Close > TrendAverage ;

if SignalCond and BarCond and TrendCond then TrendValue = 1
else if SignalCond = false and BarCond = false and TrendCond = false then TrendValue = -1
else TrendValue = TrendValue[1] ;

if isBalanceDay = false then Begin
if TrendValue = 1 and MP <> 1 then Buy ("LE") next bar at market
else if TrendValue = -1 and MP <> -1 then Sell ("SE") next bar at market ;
end ;

if ExitType = 6 then Begin
if TPAverage crosses under HAAverage then
ExitLong ("LX")next bar at Lowest(Low,NBarL) stop
else if TPAverage crosses over HAAverage then
ExitShort ("SX") 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

0 留言:

張貼留言

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

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