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

Re: [amibroker] Re: Ulcer Index and Ulcer Performance Index



PureBytes Links

Trading Reference Links

Thanks again Fred
 
I was at this past year's Clearwater conference and am waiting for Richard to get up to speed. Wish him a speedy recovery.
 
Your file works fine, now I gotta figure out all the pieces. This reminds me of the spreadsheet capability in FT which I used quit a bit and was hoping to replicate in AB. It's too bad there isn't a way to make it more "interactive" with the watch list, i.e. ranking the watch list as the results of  say Explore can be ranked by clicking on a column heading.  Being a visual guy, clicking through the various curves in some rank order like UI gave an intuitive sense for the change in the numbers. I'd have an index or another issue on the same screen for comparison.
Thanks again for your help
 
Dave
 
----- Original Message -----
From: Joe Landry
Sent: Friday, April 15, 2005 5:35 AM
Subject: Re: [amibroker] Re: Ulcer Index and Ulcer Performance Index

Dave
There's a neat package in the Clearwater FT Monitor Conference CDs for 2005 written by Bill Barnard
that bridges the a lot of the gaps between FT and Amibroker, except TRADE, and provides the UI UPI metrics
plus others.  You even get the black (ugh!) screens and all the conventions of FT(red for buy and green for sell)
The CDs have not been released yet but due to be released any month now.  Although conf was in Feb, the coordinator Richard Boroff was
under the weather for a while but is back at it now I believe.
 
Write me if you have questions about the Explorer.  Tell me what database you have and I
could clip the just the UI UPI section from it.
 
JOE
----- Original Message -----
From: dave9542
Sent: Thursday, April 14, 2005 8:47 PM
Subject: [amibroker] Re: Ulcer Index and Ulcer Performance Index


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.





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





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





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