2014年10月30日 星期四

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

EasyTrader ArtNo 214
移動平均線簡介
 市場經濟中,要賺錢無非是降低成本或者提高收入,以期獲得較高利潤。就股市而言,也就是要低買高賣,買時越低越好,賣時越高越好。然而,股價上竄下跳,並非個人的意志所能決定。那麼,如何研判大勢呢?在技術分析各項指標中,移動平均線是運用得最多、準確性也相對最好的指標之一。 要瞭解移動平均線,首先要掌握移動平均數。
 移動平均這一概念是建立在著名的道·瓊斯理論上的。道·瓊斯理論雖已名揚天下,但理論畢竟有點玄,而移動平均將這套理論加以數字化,從數字的變動中去預測未來股價短期、中期、長期的變動方向,更易為廣大投資者所接受。
 移動平均的另一個優點是它公開了平均成本這一秘密。事實上,移動平均數就是平均成本。另外,平均成本對於個股乃至大勢的未來走向還有研判的作用。股價(或指數)的上下波動大,無規律性,不易看出它的趨勢。

如果走勢是上升的,平均成本勢必與日俱增,待到有一日,平均成本遠遠超過了該股所值,走勢必然要掉頭向下。因為股價太高,購股成本日益增大,無人接手,而另一方面持股者則要忙不迭地清倉獲利。市道有賣無買,自然是這種結果。反之,走勢向下時,平均成本勢必越來越小,小到遠遠低於該股所值時,持股的套牢,自然不肯拋;空倉的以為時機已到,開始接手,行市到了有買無賣的時候,走勢便要掉頭轉上了。

 當我們將每日不同大小的移動平均數標於圖表上,連接起來,便得到一條上下起伏的曲線,這便是著名的移動平均線。平均線,取樣太小,線路不規則,取樣太大,線路過於平滑,無明顯轉點,這是投資者應註意的。

移動平均線計算方法
N日移動平均線=N日收市價之和/N


 移動平均線說到底是一種趨勢追蹤的工具,便於識別趨勢已經終結或反轉。它不會領先與市場,只是忠實地追隨市場,所以它具有滯後的特點,然而卻無法造假。
資料參考:MBA智庫
本篇要從另一個角度來運用移動平均線 - 若我們將連續 20根不同的均線畫出來,在圖表上會呈現出一張均線網,而且也因不同參考 K棒數的均線特性 -有敏銳的有遲緩的 -讓均線網也有擴張與收縮的形狀若我們將網的高點與低點分別連線,就可以畫出類似布林帶的通道,如下圖。由於平均線代表的意義是期間內的交易成本所以通道上下緣就構成了交易成本的壓力與支撐

系統參數與變數
input:ExitType(2) ;
inputs:NBarL(28),NBarS(3),TradeProfit(0.045),TradeStopLoss(0.025),ATRs_L(5.4),ATRs_S(10.9);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);

inputs:Ratio(16),LongLenA(8),ShortLenA(4),LongLenB(2),ShortLenB(5);
Vars:Price(AvgPrice),Base(1),HighLine(0),LowLine(0),MedLine(0),SumLine(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 ;

{ 高低點初值設定 }
HighLine = Average(Price,Ratio) ;
LowLine = Average(Price,Ratio) ;

{ 連續期間的均線高低點與中值計算 }
SumLine = 0 ;
for Base = Ratio to 20+Ratio Begin
if Average(Price,Base) > HighLine then HighLine = Average(Price,Base) ;
if Average(Price,Base) < LowLine then LowLine = Average(Price,Base) ;
SumLine = SumLine+Average(Price,Base) ;
end;
MedLine = SumLine/20 ;

{ 買方環境建立 }
Condition1 = Close[1] < MedLine[1] or Close[1] < HighLine[1] ;
{ 通道下緣上升 }
Condition2 = LowLine > LowLine[1] and LowLine[1] > LowLine[2] ;

{ 賣方環境建立 }
Condition3 = Close[1] > MedLine[1] or Close[1] > HighLine[1] ;
{ 通道上緣下降 }
Condition4 = HighLine[2] > HighLine[1] and HighLine[1] > HighLine;

{ 通道寬度 }
HLRange = (HighLine-LowLine) ;

{ 空手進場 規則 }
{ 買方環境 + 通道壓縮 }
if MP = 0 and HLRange = Lowest(HLRange,LongLenA) and Condition1 and Condition2 then Buy next bar at HighLine stop ;
{賣方環境 + 通道壓縮 }
if MP = 0 and HLRange = Lowest(HLRange,ShortLenA) and Condition3 and Condition4 then Sell next bar at LowLine Stop ;

{ 手中有部位反手單 + 通道擴張 }
if MP < 0 and HLRange = Highest(HLRange,LongLenB) then Buy next bar at HighLine stop ;
if MP > 0 and HLRange = Highest(HLRange,ShortLenB) then Sell next bar at LowLine 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 ;

 台指期 日 K 多空留倉 交易週期 2004/8/31~ 2014/8/29 交易成本 1200
 台指期 60 min K 多空留倉 交易週期 2004/8/31~ 2014/8/29 交易成本 1200
結論:均線通道結合了一連續K棒數的均線高低點,功效類似布林帶,通道上緣為期間內成本壓力區,通道下緣為期間內成本支撐區,當有趨勢時上下緣會被突破,在過去績效表現雖然不是突出但在MDD的表現卻是不錯的
MagicQS122

3 則留言:

  1. 請問For迴圈只能使均線長度遞增1嗎?遞增1以上的均線的長度無法用For實現a嗎?謝謝

    回覆刪除
  2. 透過變數再回圈內運算 如下例
    for value1 = 1 to 100 begin
    value1=value1+1 ;
    print(value1) ;
    end ;

    回覆刪除