[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Ulcer Index and Ulcer Performance Index



PureBytes Links

Trading Reference Links


Joe,
Thanks a bunch. More than I bargained for..it'll take me a little 
while to digest. I'm familiar with FastTrack crowd. Now just trying 
to make switch over to AB without FT and still get some of the 
excellent tools I had at FT. Biggest problem is lack of programming 
skill. 
Thanks very much
Dave



--- In amibroker@xxxxxxxxxxxxxxx, "Joe Landry" <jelandry@xxxx> wrote:
> Dave 9542 -  
> 
>  All of the formulas can be attributed to Brian Stocks author of 
FastTools, Ed Gilbert author TRADE and SCRIPTS written by others, 
CHEESE CHARTS, 
> 
> and a local Amibroker guru (who become well know to you in the 
weeks ahead as he ramps up a virtual training room) .  
> 
> There are a few things with this routine that can trip you up 
depending on your data base. One is the money market rate, 2) the
> 
> assumed risk free interest rates where convention uses 5.4% (man I 
wish this were true), 3) the symbol of the Russell 2000 index,
> 
> and the window or so called MPT period.  The latter are in two 
parameters to adjust.  I've seen many versions of MPT calculations 
and they all present somewhat different values for UI and UPI.  All 
of the formulas can be attributed to FastTools,
> 
> TRADE SCRIPTS, CHEESE CHARTS, and a local Amibroker guru.  
> 
> You can strip the UI UPI code from this and make your own 
exploration routine that doesn't depend on BUY/SELL or the equity 
curve. 
> 
> Best regards
> JOE 
> 
> // *************************** Function Section to calculate Risk 
Free Fixed Rate *********
> 
> function Irate(interest_rate)
> 
> {
> 
> // This gets the log of the daily rate
> 
> logbarfactor = log(1 + interest_rate / 100) / 252;
> 
> // Force the first bar to 0
> 
> logvect = IIf(BarIndex() == 0, 0, logbarfactor);
> 
> // Sum the log of the daily gain factors and
> 
> // convert back to get equity
> 
> return(exp(Cum(logvect)));
> 
> }
> 
> // General Section
> 
> period = 22; // 22 trading days a month
> 
> MPT_Period = Param("MPT Period", 252,125,500,5); 
> 
> IndexSym = ParamStr("Russell 2000 Index Symbol","!rut"); 
> 
> // ------------------------------------MPT Section------------------
------------------
> 
> Index = Foreign(IndexSym,"Close"); 
> 
> rfFund = Foreign("FDRXX","C"); 
> 
> riskfree = ((rffund/ Ref(rfFund,-MPT_Period)))^(252); 
> 
> 
> // Correlation coefficient of Equity to the Index 
> 
> Corr = 100*Correlation(ROC(C,1),ROC(Index,1),MPT_Period);
> 
> SDF = StDev(ROC(Close, 1),MPT_Period);
> 
> SDI = StDev(ROC(Index, 1),MPT_Period);
> 
> RelStDev = SDF/SDI; 
> 
> // Calculation of Beta - 
> 
> Beta = Corr * RelStDev/100; // volatily relative to benchmark 
> 
> NCAlpha = MA(ROC(Close,1),MPT_Period) - RelStDev*MA(ROC
(Index,1),MPT_Period); // noncorrelated Alpha
> 
> Alpha = MA(ROC(Close,1),MPT_Period) - Beta*MA(ROC
(Index,1),MPT_Period); // textbook definition 
> 
> // SHARPE PERFORMANCE INDEX a risk adjusted measure of the 
performance of an equity compared to the risk free benchmark standard 
rate of return = 5%
> 
> SHARPE = ( MA(ROC(C,1),MPT_Period) - MA(ROC(irate
(2.2),1),MPT_Period) )/(SDF); 
> 
> 
> // ----------------------------------- UPI Code --------------------
-------------------
> 
> // Retracements from the Highest High Current Draw Down Here using 
Monthly Period to cal these numbers.
> 
> Cdd = (HHV(C,MPT_Period) - C)/HHV(C,MPT_Period);
> 
> // Max draw down
> 
> MaxDD = HHV(CDD,MPT_Period); 
> 
> // Sum of all retracements squared - 
> 
> R2 = (Sum(Cdd*Cdd,MPT_Period))/(MPT_Period-1);
> 
> // Ulcer Index -Cumulative downside volatility of an equity
> 
> UI = sqrt(R2);
> 
> // Annual compound percentage rate of return
> 
> TR = Close/Ref(Close,-MPT_Period); // Total Return for 1 year
> 
> ANN = (exp(log(TR))-1); // Annual compounded rate of return 
> 
> // Ulcer performance index - risk adjusted performance of an 
investment.
> 
> UPI = (ANN - irate(2.2)/100)/UI;     // I have 2.2% here, early 
analysts used 5.4% 
> 
> // ----------------------------- Performance Calculation -----------
-----------------
> 
> EndV = ValueWhen(DateNum()==DateNum(),C); // Today's Close
> 
> // hardcoded for 2005 
> 
> BegV = ValueWhen(DateNum()==1050103,Close); // Starts year with Jan 
3, 2005 Closing Value
> 
> YTD = 100*(EndV-BegV)/BegV;
> 
> // --------------------------- Calculate RSI / Stochastics - 
Exploration --------------------------------------
> 
> slow=LLV(C,21);
> 
> shigh=HHV(C,21);
> 
> faststoc=EMA(100*(C-slow)/(shigh-slow),13)/2 + RSI(14)/2;
> 
> momentum=faststoc-Ref(faststoc,-6); // as used in Cheese3 and FT
> 
> momentumchg=((faststoc-Ref(faststoc,-6))/Ref(faststoc,-6))
*100; //as used in Cheese3 and FT
> 
> // ---------------------------- Test Section -----------------------
---
> 
> xbar = MA(ROC(C,1),MPT_Period);
> 
> SumR2 = Sum((ROC(C,1)-xbar)^2,MPT_Period);
> 
> Sigma = (SumR2/(MPT_Period-1))^.5;
> 
> 
> 
> Filter =1;
> 
> 
> AddTextColumn(FullName(),"Name",1.2);
> 
> AddColumn(Corr,"Cor Coeff");
> 
> AddColumn(Alpha,"Alpha");
> 
> AddColumn(NCAlpha,"NCAlpha");
> 
> AddColumn(Beta,"Beta");
> 
> AddColumn(SDF,"Std Dev");
> 
> AddColumn(RelStDev,"RelSD");
> 
> AddColumn(Sharpe,"Sharpe");
> 
> AddColumn(100*Ann,"ANN");
> 
> AddColumn(100*MaxDD,"MDD %"); 
> 
> AddColumn(100*UI,"UI");
> 
> AddColumn(UPI,"UPI");
> 
> AddColumn(faststoc,"Stoch/RSI",1.2);
> 
> AddColumn(momentum,"Mom",1.2);
> 
> AddColumn(momentumchg,"Mom-Chg%",1.2);
> 
> AddColumn(ROC(C,Period)," 1 mnth");
> 
> AddColumn(YTD," YTD");
> 
> AddColumn(ROC(C,MPT_Period)," 1 yr ");
> 
>   ----- Original Message ----- 
>   From: dave9542 
>   To: amibroker@xxxxxxxxxxxxxxx 
>   Sent: Thursday, April 14, 2005 2:01 PM
>   Subject: [amibroker] Ulcer Index and Ulcer Performance Index
> 
> 
> 
> 
>   Newby needs help.
> 
>   I am interested in code that allows me to look at Ulcer Index and 
>   Ulcer Performance Index for individual issues. Marcin was good 
enough 
>   to point me to code written by Ken Close and then modified by TJ 
but 
>   I still cannot get it to work. When run in Explore I'm told 
>   that "variable Buy is used without being initialized". 
> 
>   Is it enough to place "Buy = 1" as first line in code or does 
this 
>   distort results?
> 
>   Here's code
> 
>   Filter = Buy OR Sell;
>   Eq=Equity(0,0);
>   Per = 252;
>   Per2 = 40;
>   Cdd = (HHV(Eq,Per2) - Eq)/HHV(Eq,Per2);
>   MaxCdd = HHV(Cdd,252)*100;
>   R2 = (Sum(Cdd*Cdd,Per))/Per;
>   UI = 100*sqrt(R2);
>   Gain = Eq/Ref(Eq,-Per);
>   ANN = 100 * ((Gain^(252/Per)) - 1);
>   UPI = (ANN - 0.054)/UI;
>   AddColumn(MaxCdd,"MaxCdd",1.2);
>   AddColumn(ANN,"ANN",1.2);
>   AddColumn(UPI,"UPI",1.3);
>   AddColumn(ANN/MaxCdd,"ANN/dd",1.3);
> 
>   Thanks
>   Dave
> 
> 
> 
> 
> 
> 
> 
> 
> 
>   Please note that this group is for discussion between users only.
> 
>   To get support from AmiBroker please send an e-mail directly to 
>   SUPPORT {at} amibroker.com
> 
>   For other support material please check also:
>   http://www.amibroker.com/support.html
> 
> 
> 
> 
> 
> --------------------------------------------------------------------
----------
>   Yahoo! Groups Links
> 
>     a.. To visit your group on the web, go to:
>     http://groups.yahoo.com/group/amibroker/
>       
>     b.. To unsubscribe from this group, send an email to:
>     amibroker-unsubscribe@xxxxxxxxxxxxxxx
>       
>     c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of 
Service.





------------------------ Yahoo! Groups Sponsor --------------------~--> 
In low income neighborhoods, 84% do not own computers.
At Network for Good, help bridge the Digital Divide!
http://us.click.yahoo.com/EpW3eD/3MnJAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For other support material please check also:
http://www.amibroker.com/support.html

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/