2014年1月23日 星期四

不一樣的 MACD 交易模型 MACD BBand (程式碼)

EasyTrader ArtNo 104
布林線指標(Bollinger Bands)指標是美國股市分析家約翰·布林根據統計學中的標準差原理設計出來的一種非常簡單實用的技術分析指標。一般而言,股價的運動總是圍繞某一價值中樞(如均線、成本線等)在一定的範圍內變動,布林線指標指標正是在上述條件的基礎上,引進了“股價通道”的概念,其認為股價通道的寬窄隨著股價波動幅度的大小而變化,而且股價通道又具有變異性,它會隨著股價的變化而自動調整。正是由於它具有靈活性、直觀性和趨勢性的特點,Bollinger Bands指標漸漸成為投資者廣為應用的市場上熱門指標。

布林線指標中的上、中、下軌線的意義

 1.Bollinger Bands指標中的上、中、下軌線所形成的股價通道的移動範圍是不確定的,通道的上下限隨著股價的上下波動而變化。在正常情況下,股價應始終處於股價通道內運行。如果股價脫離股價通道運行,則意味著行情處於極端的狀態下。

 2.在Bollinger Bands指標中,股價通道的上下軌是顯示股價安全運行的最高價位和最低價位。上軌線、中軌線和下軌線都可以對股價的運行起到支撐作用,而上軌線和中軌線有時則會對股價的運行起到壓力作用。

 3.一般而言,當股價在布林線的中軌線上方運行時,表明股價處於強勢趨勢;當股價在布林線的中軌線下方運行時,表明股價處於弱勢趨勢。
參考MBA 智庫百科的說明
通常的用法是將商品價格與布林線指標放在一起看,本篇介紹另一種的思考方式

MACD BBand 的交易模型,先看下圖


副圖為 MACD BBand 的指標,透過MACDBB紅線與上軌藍線/下軌黃線的交叉產生買賣信號,能否發生效用呢?一起動手作看看!!

指標程式碼

inputs: FastLen( 12), SlowLen( 26), AvgLen(10), StDv(1);
VARS:MacdBB(0),Avg(0),SDev(0),UBuy(0),USell(0);

MacdBB= MACD( Close, FastLen, SlowLen ) ;
Avg = XAverage(MacdBB,AvgLen);
SDev = StdDev( MacdBB, AvgLen ) ;
UBuy = Avg + StDv * SDev ;
USell = Avg - StDv * SDev ;

Avg = XAverage(MacdBB,AvgLen);
SDev = StdDev( MacdBB, AvgLen ) ;

UBuy = Avg + StDv * SDev ;
USell = Avg - StDv * SDev ;

Plot1(MacdBB);
Plot2(UBuy);
Plot3(USell);

基本設定: 台指期 60分K 留倉 回測週期 2001/1 ~ 2013/12/31 交易成本





測試程式碼
inputs: EntryType(1),ExitType(1),TradeProfit(0.05),TradeStopLoss(0.03),NBarL(2),NBarS(2);
input: MacdType(1),FastLen(5),SlowLen(21),AvgLen(9),SHB(1),SLB(1),K1(0.7),HB(70),LB(30);
input:UpRatio(1),DnRatio(1),HighBand(90),LowBand(10),UpBand(80),DnBand(20);
VARS:MacdBB(0), Avg(0), SDev(0), RatioLen(0),BBGap(0);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),UBuy(0),BuyStop(0),USell(0),SellStop(0),movAvg(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 ;

if MacdType = 1 then Begin
   MacdBB= MACD( Close, FastLen, SlowLen ) ;
end else Begin
   if K1 > 1 then RatioLen = IntPortion(K1*FastLen)+1 else RatioLen = FastLen*2 ;
   MacdBB= MACD( Close, FastLen, RatioLen ) ;
end;

Avg = XAverage(MacdBB,AvgLen);
SDev = StdDev( MacdBB, AvgLen ) ;

UBuy = Avg + SHB * SDev ;
USell = Avg - SLB * SDev ;
BBGap = UBuy - USell ;

if EntryType = 1 then Begin
   if MacdBB cross over UBuy then Buy next bar at Market ;
   if MacdBB Cross under USell then Sell next bar at Market ;
end;

if EntryType = 2 then Begin
   if MacdBB cross over USell then Buy next bar at Market ;
   if MacdBB Cross under UBuy then Sell next bar at Market ;
end;

if EntryType = 3 then Begin
   if MacdBB cross over UBuy and BBGap > HB then Buy next bar at Market ;
   if MacdBB Cross under USell and BBGap > LB then Sell next bar at Market ;
end;

if EntryType = 4 then Begin
   if MacdBB cross over UBuy and BBGap > Average(BBGap,3)*UpRatio then 
      Buy next bar at Market ;
   if MacdBB Cross under USell and BBGap > Average(BBGap,3)*DnRatio then 
      Sell next bar at Market ;
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) ;
   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 IsBalanceDay then setExitonClose ;
MagicQS038

4 則留言:

  1. 請問 EasyTrader大,測試程式碼需另加濾網嗎?同樣的資料期間及週期,只改用MC跑,為什麼權益曲線向右下滑。

    回覆刪除
  2. 可以寄給我您測試的條件參數嗎?程式上的是預設初始值
    eamil: easytrader788@gmail.com

    回覆刪除
  3. 了解,我以為測試程式碼已經是最佳參數,利用這個年假來試試條件組合。
    謝謝 EasyTrader 大 !

    回覆刪除
  4. 好的 ,測試後有不清楚的再告知我

    回覆刪除