2015年11月12日 星期四

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

EasyTrader ArtNo 279
艾略特波浪理論(Elliott Wave Principle)——道氏理論告訴人們何謂大海,而波浪理論指導你如何在大海上衝浪。波浪理論是技術分析大師拉爾夫•.納爾遜•.艾略特(R.N.Elliott)發明的一種分析工具,與其他追隨趨勢的技術方法不同,波浪理論可以在趨勢確立之時預測趨勢何時結束,是現存最好的一種預測工具。
美國證券分析家拉爾夫•.納爾遜•.艾略特(R.N.Elliott)利用道瓊斯工業指數平均(Dow Jones Industrial Average,DJIA)作為研究工具,發現不斷變化的股價結構性形態反映了自然和諧之美。根據這一發現他提出了一套相關的市場分析理論,精煉出市場的13種型態(Pattern)或謂波(Waves),在市場上這些型態重覆出現,但是出現的時間間隔及幅度大小並不一定具有再現性。爾後他又發現了這些呈結構性型態之圖形可以連接起來形成同樣型態的更大圖形。這樣提出了一系列權威性的演譯法則用來解釋市場的行為,並特別強調波動原理的預測價值,這就是久負盛名的艾略特波段理論,又稱波浪理論。

波浪理論的基礎 - 五升三降是波浪理論的基礎
在1938年的著書《波動原理》和1939年一系列的文章中,艾略特指出股市呈一定的基本韻律和型態,五個上升波和三個下降波構成了八個波的完整迴圈。三個下降波作為前五個上升波之調整(Correction),圖2表示五個代表上升方向的推進波(Impulse Waves)和三個調整波(Corrective Waves)。




波浪理論的四個基本特點
(1)股價指數的上升和下跌將會交替進行;
(2)推動浪和調整浪是價格波動兩個最基本型態,而推動浪(即與大市走向一致的波浪)可以再分割成五個小浪,一般用第1浪、第2浪、第3浪、第4浪、第5浪來表示,調整浪也可以劃分成三個小浪,通常用A浪、B浪、C浪表示。
(3)在上述八個波浪(五上三落)完畢之後,一個迴圈即告完成,走勢將進入下一個八波浪迴圈;
(4)時間的長短不會改變波浪的形態,因為市場仍會依照其基本型態發展。波浪可以拉長,也可以縮細,但其基本型態永恆不變。
資料參考 MBA智庫
本篇利用多頭波浪是一浪比一浪高 、空頭波浪是一浪比一浪低的概念來作策略元素測試

{系統參數與變數} 
input:EntryType(1),ExitType(2);
inputs:NBarL(20),NBarS(20),TradeProfit(0.05),TradeStopLoss(0.03),ATRs_L(14),ATRs_S(12);
vars:IsBalanceDay(False),MP(0),PF(0),PL(0);
inputs:LBar(2),RBar(2),Strength(4),TrailBar(4),HighBar(7),LowBar(4) ;
vars :HighHA(false),HighLA(false),LowHA(false),LowLA(false);
Vars: HighPriceA(0),LowPriceA(0);
Vars: HighPrice1(0),LowPrice1(0),HighPrice2(0),LowPrice2(0);

MP = MarketPosition ;
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;
end;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

{計算最近一次轉折高點}
if PivotHighVS(1,high,LBar,RBar,TrailBar) >-1 then HighPriceA=PivotHighVS(1,high,LBar,RBar,TrailBar);

{計算最近一次轉折低點}
if PivotLowVS(1,Low,LBar,RBar,TrailBar) >-1 then LowPriceA=PivotLowVS(1,Low,LBar,RBar,TrailBar);

{計算最近二次轉折高點}
if PivotHighVS(2,high,LBar,RBar,TrailBar) >-1 then begin
HighPrice1 = PivotHighVS(1,high,LBar,RBar,TrailBar);
HighPrice2 = PivotHighVS(2,high,LBar,RBar,TrailBar);
end else HighPrice2 = Highest(high,TrailBar) ;

{計算最近二次轉折低點}
if PivotLowVS(2,Low,LBar,RBar,TrailBar) >-1 then begin
LowPrice1=PivotLowVS(1,Low,LBar,RBar,TrailBar);
LowPrice2=PivotLowVS(2,Low,LBar,RBar,TrailBar);
end else LowPrice2 = Lowest(Low,TrailBar) ;

{建立是否過高判斷}
if HighPriceA <> HighPriceA[1] then begin
if HighPriceA < HighPriceA[1] then LowHA = true else LowHA = false;
end;

if HighPriceA <> HighPriceA[1] then begin
if HighPriceA > HighPriceA[1] then HighHA = true else HighHA= false;
end;

{建立是否破低判斷}
if LowPriceA <> LowPriceA[1] then begin
if LowPriceA < LowPriceA[1] then LowLA = true else LowLA = false;
end;

if LowPriceA <> LowPriceA[1] then begin
if LowPriceA > LowPriceA[1] then HighLA = true else HighLA = false;
end;

{ 進場方式一 }
if EntryType = 1 then begin

{ 過高點且收盤價在均線上 ,以最近高點 + 1/2 最近兩高點差價進場作多 }
if MP <> 1 and HighHA and Close > Average(Close,NBars) then buy next bar at HighPriceA + AbsValue(HighPriceA[1]-HighPriceA)/2 stop;

{ 多單在倉且收盤價在均線下 ,以最近低點 - 1/2 最近兩低點差價進場反手作空 }
if MP > 0 and LowLA and Close < Average(Close,NBars) then sell next bar at LowPriceA - AbsValue(LowPriceA[1]-LowPriceA)/2 stop;

end;

{ 進場方式二 }
if EntryType = 2 then Begin

{過高點且收盤價在均線上 ,以最近高點 + 1 進場作多}
if MP <> 1 and HighPrice1 > HighPrice2 and Close > Average(Close,NBarL) then Buy next bar at HighPrice1 + 1 stop ;

{ 多單在倉且破低點 且收盤價在均線下 ,以最近低點 - 1 反手作空 }
if MP > 0 and LowPrice1 < LowPrice2 and Close < Average(Close,NBarS) then Sell next bar at LowPrice1 + 1 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 IsBalanceDay or date = 1150224 then setExitonClose ;

進場方式一 ~ 台指期 60 min K 多空留倉 交易週期 2005/6/30~ 2015/6/30 交易成本 1200


進場方式二 ~ 台指期 30 min K 多空留倉 交易週期 2005/6/30~ 2015/6/30 交易成本 1200

波浪理論的交易策略
第1浪:嘗試性建立部分倉位; 
第2浪:愛好風險者可在50%時建倉; 
第3浪:突破1浪時買進或加碼買進; 
第4浪:在形態底部線或靠近1浪頂的地方買進; 
第5浪:指標頂背離時立刻賣出; 
a浪: 清倉; 
b浪: 最後賣出機會; 
c浪: 如前未賣出,跌破a浪底時止損賣出。
結論:在測試的過程中發現台指期先作多進場後,再作空反手單的績效會比隨時雙向進場的績效好 ( 以往 作多開頭 if MP <> 1 , 作空開頭 if MP <> -1 , 此策略是作空開頭 if MP > 0 )
MagicQS187

沒有留言:

張貼留言