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
不過本篇我們使用另一個方式來測試,基礎邏輯為長短週期 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 留言:
張貼留言
如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!