2014年6月23日 星期一

●彈性指數動態平均線(VIDYA) [程式碼]

EasyTrader ArtNo 168
     彈性指數動態平均線 (Chande's Variable Index Dynamic Average, VIDYA)與指數加權移動平均線 (EMA) 相似,但是它會根據價格的波動率自動調整平滑權重。VIDYA 由 Tushar Chande 創立,並於 1992 年 3 月在《股票與商品技術分析》(Technical Analysis of Stocks & Commodities) 雜誌中提出。在第一個版本中,標準差被用作波動率指數。1995 年 10 月,Chande 對 VIDYA 進行了修改,使用新的錢德動量擺動指標 (CMO)作為波動率指數。
VIDYA 透過以下公式計算:


其中:F 是由以下公式算出的平滑因數:


是指數加權移動平均線 (EMA) 的週期數;
是錢德動量擺動指標 (CMO) 的當前絕對值;
是上一週期內的 VIDYA 值。

用途 - VIDYA 本身一般不用於交易,而是使用 VIDYA 上下 N% 的邊界(軌線)。

VIDYA 可用於識別市場趨勢:
當市價突破 VIDYA 上軌時,可能表明上升趨勢的開始。
當市價突破 VIDYA 下軌時,可能表明下降趨勢的開始。

買進和賣出信號
當價格向上及向下穿越軌線時,VIDYA 產生買進和賣出信號:
價格穿越 VIDYA 上軌時,可解讀為買進信號。
價格穿越 VIDYA 下軌時,可解讀為賣出信號。
參考來源

不過本篇我們使用另一個方式來測試,基礎邏輯為長短週期 Vidya 的交叉作多空進出,加上一個 MACD 作濾網確認 , 當進場條件消失則出場或其他停損利方式出場

{ Function _SS_Vidya 公式內容有一些不同}
Inputs: Length(NumericSimple), Smooth(NumericSimple);
Vars: Up(0), Dn(0), UpSum(0), DnSum(0), AbsCMO(0), SC(0);
Up=IFF(Close>Close[1], Close-Close[1],0);
Dn=IFF(Close<Close[1],AbsValue(Close-Close[1]),0) ;
UpSum=Summation(Up,Length);
DnSum=Summation(Dn,Length);
if(UpSum+DnSum) <> 0 then AbsCMO=AbsValue((UpSum-DnSum)/(UpSum+DnSum));
if (Smooth+1) <> 0 then SC= (2/(Smooth+1)) * AbsCMO;
If Currentbar=Length then _SS_Vidya=Close;
If Currentbar>Length then _SS_Vidya=(SC*Close)+((1-SC)*_SS_Vidya[1]);

策略程式碼
input:EntryType(1),ExitType(0);
Vars:FastLen(12),SlowLen(26),AvgLen(9) ;
vars:Ref_L(14),Trend_L(3.6),Ref_S(30),Trend_S(3.7) ;
vars: BarNo(10),NBarL(29),NBarS(31),TradeProfit(0.051),TradeStopLoss(0.053) ;
Vars: ATRs_L(9.4),ATRs_S(2.3);
vars: IsBalanceDay(False),MP(0),PF(0),PL(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 ;

Value1 = Macd(Close,FastLen,SlowLen)-Xaverage(Macd(Close,FastLen,SlowLen),AvgLen) ;

{ 均線向上交叉進場 + 濾網確認 }
if _SS_Vidya(Ref_L,Trend_L) Cross over _SS_Vidya(Ref_S,Trend_s) and Value1 > 0 then Buy next bar at Market ;

{ 進場條件消失則出場 }
if _SS_Vidya(Ref_L,Trend_L) Cross under _SS_Vidya(Ref_S,Trend_s) then Exitlong next bar at Market ;

{ 均線向下交叉進場 + 濾網確認 }
if _SS_Vidya(Ref_L,Trend_L) Cross under _SS_Vidya(Ref_S,Trend_s) and Value1 < 0 then Sell next bar at Market ;

{ 進場條件消失則出場 }
if _SS_Vidya(Ref_L,Trend_L) Cross over _SS_Vidya(Ref_S,Trend_s) then ExitShort next bar at Market ;

{ 其它出場方式 }
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 ("RevSell") {ExitLong} next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then Buy ("RevBuy") {ExitShort} next bar at Market ;
end;

if IsBalanceDay then setExitonClose ;

台指期 日K 留倉 2004/5/31 ~ 2014/5/30 交易成本 1200


台指期 60分K 留倉 2004/5/31 ~ 2014/5/30 交易成本 1200

0 留言:

張貼留言

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

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