2015年2月5日 星期四

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

EasyTrader ArtNo 244
振動升降指標又稱ASI指標(Accumulation Swing Index)、實質線,由Welles Wilder所創。 ASI企圖以開盤、最高、最低、收盤價構築成一條幻想線,以便取代目前的走勢,形成最能表現當前市況的真實市場線(Real Market)。

振動升降指標的原理
 韋爾達認為當天的交易價格,並不能代表當時真實的市況,真實的市況必須取決於當天的價格,和前一天及次一天價格間的關係,他經過無數次的測試之後,決定了ASI計算公式中的因數,最能代表市場的方向性。由於ASI相對比當時的市場價格更具真實性,因此,對於股價是否真實的創新高或新低點,提供了相當精確的驗證,又因ASI精密的運算數值,更為投資提供了判斷股價是否真實突破壓力,或支撐的依據。ASI維持“N”字型的波動,並且也以突破或跌破“N”型高、低點,為觀察ASI的主要方法。 ASI不僅提供辨認股價真實與否的功能,另外也具備了“停損”的作用,及時地給投資人多一層的保護。
ASI的計算公式
1、
A=當天最高價-前一天收盤價
B=當天最低價-前一天收盤價
C=當天最高價-前一天最低價
D=前一天收盤價-前一天開盤價
A、B、C、D皆採用絕對值

2、
E=當天收盤價-前一天收盤價
F=當天收盤價-當天開盤價
G=前一天收盤價-前一天開盤價
E、F、G採用其+-差值

3、X=E+1/2F+G。
4、K=比較A、B兩數值,選出其中最大值
5、比較A、B、C三數值:
若A最大,則R=A+ 1/2B+ 1/4D
若B最大,則R=B+1/2A十1/4D
若C最大,則R= C+1/4D
6、L=3
7、SI= 50* X/R * K/L
8、ASI=累計每日之SI值
公式雖然看起來有點複雜不過我們可以直接引用內建的 SwingIndex函數與AccumSwingIndex
指標程式碼(均線)
Inputs:FastLen(5),SlowLen(21);
Vars: ASI(0);
ASI = AccumSwingindex ;
Plot1(ASI,"ASI") ;
Plot2(Average(ASI,FastLen),"Fast") ;
Plot3(Average(ASI,SlowLen),"Slow") ;

指標程式碼(通道)
Inputs:Length(4),Frac(2);
Vars: ASI(0),BuyPrice(0),SellPrice(0);
ASI = AccumSwingIndex;
{利用前後 ASI 變化量超過 N 根變化量的某個比例作為關鍵變化量 }
if ASI-ASI[1] > Average(AbsValue(ASI-ASI[1]),Length)[1]*Frac then Begin
BuyPrice = High + Average(Range,Length) ;
SellPrice = Low - Average(Range,Length) ;
end;

Plot1(BuyPrice ,"BuyPrice") ;
Plot2(SellPrice , "SellPrice") ;

ASI指標使用法則
1、ASI走勢幾乎和股價是同步發展,當股價由下往上,欲穿過前一波的高點套牢區時,於接近高點處,尚未確定能否順利穿越之際。如果 ASI領先股價,提早一步,通過相對股價的前一波ASI高點,則次一日之後,可以確定股價必然能順利突破高點套牢區。股民可以把握ASI的領先作用,提前買入股票,輕鬆的坐上上漲的轎子。
2、股價由上往下,欲穿越前一波低點的密集支撐區時,於接近低點處,尚未確定是否將因失去信心,而跌破支撐之際。如果ASI領先股價,提早一步,跌破相對股價的前一波ASI低點,則次一日之後,可以確定股價將隨後跌破低點支撐區。投資人可以早一步賣出股票,減少不必要的損失。
3、向上爬升的ASI,一旦向下跌破其前一次顯著的N型轉折點,一律可視為停損賣出的訊號。
4、股價走勢一波比一波高,而ASI卻未相對創新高點形成“牛背離”時,應賣出。
5、股價走勢一波比一波低,而ASI卻未相對創新低點形成“熊背離”時,應買進。
資料參考 MBA智庫
{系統參數與變數}
input:EntryType(2),ExitType(5);
inputs:NBarL(55),NBarS(35),TradeProfit(0.05),TradeStopLoss(0.015),ATRs_L(4.5),ATRs_S(10.5);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);
inputs:FastLen(5),SlowRatio(6),Length(5),Frac(2.1),SWLength(8),LookBack(15);
Vars: ASI(0),SlowLen(0),BuyPrice(0),SellPrice(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 ;

{計算 ASI }
ASI = AccumSwingIndex;
SlowLen = IntPortion(FastLen*SlowRatio)+1 ;

{ 進場法則 - 突破ASI 均線進場作多 ,跌破ASI 均線進場作空}
if EntryType = 1 then Begin
if MP <> 1 and ASI Cross over Average(ASI,SlowLen) then Buy next bar at Highest(High,LookBack) stop ;
if MP <> -1 and ASI Cross under Average(ASI,SlowLen) then Sell next bar at Lowest(low,LookBack) stop ;
end;

{ 進場法則 - 突破關鍵ASI 變化的高通道進場作多 ,跌破鍵ASI 變化的低通道進場作空}
if EntryType = 2 then Begin
if ASI-ASI[1] > Average(AbsValue(ASI-ASI[1]),Length)[1]*Frac then Begin
if Length <> 0 then BuyPrice = High+Range/Length ;
if Length <> 0 then SellPrice = Low-Range/Length ;
if MP <> 1 then Buy next bar at BuyPrice stop ;
if MP <> -1 then Sell next bar at SellPrice stop ;
end;
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 IsBalanceDay then setExitonClose ;
台指期 30 min K 留倉 交易期間 2004/11/29 ~ 2014/11/28 交易成本 1200

台指期 60 min K 留倉 交易期間 2004/11/29 ~ 2014/11/28 交易成本 1200


套用如意多空網,績效如下
台指期 30 min K 留倉 交易期間 2004/11/29 ~ 2014/11/28 交易成本 1200

結論:本篇範例應用了 ASI 轉折的關鍵變化量來建立進場的通道,而對於文中所談到的 N型運動突破可以利用 SwingHigh/SwingLow 來記錄前幾個ASI 高低點轉折位置,並以突破近期最高/跌破近期最低轉折位置來作為進場交易的時機點。
MagicQS152

沒有留言:

張貼留言