EasyTrader ArtNo 249
慣性指標(Inertia Index)是由唐納德·多西(Donald Dorsey)發明的,建立在多西的相對波動性指標(RVI)基礎上。多西選擇“慣性”這個名字,是因為他對趨勢的定義,他斷言趨勢簡單的說就是“慣性的外在結果”。對市場來說,扭轉趨勢方向所需要的能量要遠大於維持趨勢沿原來方向運動所需要的能量。因此,趨勢就是對市場慣性的度量。在物理學上,慣性是根據運動的質量來定義。利用技術分析方法來分析證券價格時,運動的方向很容易定義。然而,質量不那麼容易定義。多西斷言“波動性”也許是對慣性最簡單和最準確的度量。這個理論引導他採用RVI(相對波動性指標)作為趨勢指標的基礎。在1993 年發表的 RVI 原始定義是以收盤價為基礎.
S = 10 天收盤價的標準差
如果收盤價大於前日收盤價 U = S 否則 U = 0 ;
RVIorig= 14日U的指數平均數 / 14日S的指數平均數
在1995 年作者修正了的 RVI 是以當日最高價與最低價為基礎.
RVIorig of highs + RVIorig of lows RVI = 2
慣性指標(Inertia Index)則是將 RVI 以20天期的最小方差統計將之平滑化,作為多空趨勢判斷基礎
在1995 年作者修正了的 RVI 是以當日最高價與最低價為基礎.
RVIorig of highs + RVIorig of lows RVI = 2
慣性指標(Inertia Index)則是將 RVI 以20天期的最小方差統計將之平滑化,作為多空趨勢判斷基礎
慣性指標的使用
很簡單,我們看到箭頭1處的紅色虛線為50中間值,慣性指標大於50表示正的慣性,長期趨勢是上升的,只要該指標保持在50以上,未來趨勢將繼續上升。慣性指標小於50表示負的慣性,長期趨勢是下降的,只要該指標保持在50以下,未來趨勢將繼續下降。
測試程式碼
input:EntryType(1),ExitType(2);
inputs:NBarL(33),NBarS(2),TradeProfit(0.02),TradeStopLoss(0.02),ATRs_L(15),ATRs_S(10);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);
inputs:BaseLen(10),Len(14),InerTiaLen(20),HB(60),LB(40),HighBar(5),LowBar(5) ;
Vars:BaseDev(0),UpDev(0),RVI(0),Inertia(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 ;
{ 計算慣性指標 }
BaseDev = StdDev(Close,BaseLen) ;
UpDev = iff(Close > Close[1],BaseDev,0) ;
if Xaverage(BaseDev,Len) <> 0 then RVI = 100 * Xaverage(UpDev,Len)/Xaverage(BaseDev,Len) ;
很簡單,我們看到箭頭1處的紅色虛線為50中間值,慣性指標大於50表示正的慣性,長期趨勢是上升的,只要該指標保持在50以上,未來趨勢將繼續上升。慣性指標小於50表示負的慣性,長期趨勢是下降的,只要該指標保持在50以下,未來趨勢將繼續下降。
測試程式碼
input:EntryType(1),ExitType(2);
inputs:NBarL(33),NBarS(2),TradeProfit(0.02),TradeStopLoss(0.02),ATRs_L(15),ATRs_S(10);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);
inputs:BaseLen(10),Len(14),InerTiaLen(20),HB(60),LB(40),HighBar(5),LowBar(5) ;
Vars:BaseDev(0),UpDev(0),RVI(0),Inertia(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 ;
{ 計算慣性指標 }
BaseDev = StdDev(Close,BaseLen) ;
UpDev = iff(Close > Close[1],BaseDev,0) ;
if Xaverage(BaseDev,Len) <> 0 then RVI = 100 * Xaverage(UpDev,Len)/Xaverage(BaseDev,Len) ;
最小方差利用內建線性迴歸的函數來計算
Inertia = LinearRegValue(RVI,InertiaLen,0) ;
{ 原始策略以參考分界線來進出 }
if EntryType = 1 then Begin
if MP <> 1 and Inertia > HB then Buy next bar at Highest(High,HighBar) stop ;
if MP <> -1 and Inertia < LB then Sell next bar at Lowest(Low,LowBar) stop ;
end;
{ 修正策略以轉折方向來進出 }
if EntryType = 2 then Begin
if MP <> 1 and Countif(Inertia > Inertia[1],2) = 2 and Inertia[3] > Inertia[2] then Buy next bar at Highest(High,HighBar) stop ;
if MP <> -1 and Countif(Inertia < Inertia[1],2) = 2 and Inertia[3] < Inertia[2] then Sell next bar at Lowest(Low,LowBar) 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;
{ 結算日增加 20150224 }
if IsBalanceDay or Date = 1150224 then setExitonClose ;
策略1台指期 60 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200
Inertia = LinearRegValue(RVI,InertiaLen,0) ;
{ 原始策略以參考分界線來進出 }
if EntryType = 1 then Begin
if MP <> 1 and Inertia > HB then Buy next bar at Highest(High,HighBar) stop ;
if MP <> -1 and Inertia < LB then Sell next bar at Lowest(Low,LowBar) stop ;
end;
{ 修正策略以轉折方向來進出 }
if EntryType = 2 then Begin
if MP <> 1 and Countif(Inertia > Inertia[1],2) = 2 and Inertia[3] > Inertia[2] then Buy next bar at Highest(High,HighBar) stop ;
if MP <> -1 and Countif(Inertia < Inertia[1],2) = 2 and Inertia[3] < Inertia[2] then Sell next bar at Lowest(Low,LowBar) 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;
{ 結算日增加 20150224 }
if IsBalanceDay or Date = 1150224 then setExitonClose ;
策略1台指期 60 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200
MagicQS157
沒有留言:
張貼留言