NAV - Mutual Fund Performance Analyzer, Release 2. (c) Copyright 1996 Tekniq. All Rights Reserved. README date: 12/25/96 NAV --- NAV is a DOS shareware program for mutual fund performance analysis, which: * displays and prints graphs of weekly mutual fund price changes * analyzes volatility and reward/risk * compares performance of funds over various time periods * calculates five types of moving averages and buy&sell signals NAV comes with up-to-date data on 330 US mutual funds and indices, and can also analyze data that you supply. Registered users receive weekly data updates. Try the program to decide if it is useful to you. If it is, send your: (1) name (2) US mail address (3) Email address (4) phone number(s) (5) the location from which you downloaded NAV (6) registration fee ($20), checks payable to Tekniq (state of Washington residents add 8.2% sales tax=$1.64) to: Tekniq PO Box 201 Issaquah, WA 98027-0201 Email: randyn@eskimo.com URL: http://www.eskimo.com/~randyn (beginners: download readme) FTP: ftp.eskimo.com, directory u/r/randyn It is important to register, as up-to-date data is available only to registered users via an encryption key. The key is changed periodically, and registered users are notified. It is also important to include your Email address, for fastest notification of new keys. Your responsibility as a registered user is to notify me if your US mail address, Email address, or phone number changes. If within the first two months of use you are not satisfied with the software, notify me for a refund. Feel free to share NAV (but not the key) with others, and encourage them to register. A set of data files current to December 1994 are available to help you evaluate the program. A few of the up-to-date data files can also be viewed, but the majority of the data sets require the encryption key. The program can also evaluate data that you supply in ASCII (unencrypted) text form. The key is a short ASCII string, like a password. Please do not share the key with friends, to save them the cost of becoming registered users, and please do not put the key on a network or public bulletin board. Instead, show others what the program can do, and encourage them to become registered users. I've set the registration fee low so anyone with a computer can afford it. "NAV" stands for Net Asset Value. Date current key was created: November 06, 1996 (Release 1) Dates previous keys were created: April 23, 1996 (beta test) Expected date next key will be created: January 01, 1997 System Requirements ------------------- NAV requires VGA video (640x480, 16 colors), DOS (Windows is not necessary, though it will run under Windows), and about 4 Megabytes of memory. If you have less than 4 Megabytes of memory, read the sections below on "Out of Memory", "Installing Device Drivers", "LIM.SYS", and "EMS.SYS" for a technique to emulate the needed memory. NAV itself uses only a small amount of memory, but a large amount of memory is required to hold the data for all the funds. A mouse will be used if present. Disclaimer ---------- I try to provide accurate, up-to-date data on all the mutual funds and indices that I track, but I cannot guarantee accuracy. Use this information at your own risk. I am not responsible for financial decisions you make using this program and data. If you are going to make an investment decision, don't base it solely on this program and data; confirm it first with other sources of information. Then, only make the decision if you are willing to accept full responsibility for it. Other Mutual Fund Factors ------------------------- NAV performs technical analysis on mutual funds, but there are other fundamental factors you should consider before selecting a mutual fund. Some of them are: (1) Portfolio manager. Who runs the fund? How long have they been in charge? If not long, were they in charge of another fund prior to that? How was their record? Some fund families attempt to hide their portfolio managers by stating their funds are run by a "team", the members of which they are loathe to name. They are attempting to nullify the effects of a future departure of a "star" manager, which can cause shareholder assets to be withdrawn, perhaps to follow the manager to their new location. How old are the portfolio managers? If they are 70 years old, you have to wonder how long they will continue to be on the job, even if they have an outstanding record. What if you invest, and they announce their retirement the next day? (2) Fund objective and market capitalization, as affected by asset growth due to popularity resulting from outstanding recent performance. Some funds that started out as smallcap funds (and built outstanding records with that market capitalization), are now midcap funds with several billion dollars of assets. In general, smallcap funds are most effective as smallcap funds when they remain relatively small (under a billion dollars of assets). If significant and rapid asset growth has occured, previous performance should be discounted. Also, be sure the fund invests in what you think it does. Some funds with "blue chip" in their name don't invest in blue chips, etc. Read the prospectus and annual report. (3) Management fees and loads. Expensive funds need to do that much better than efficiently run funds just to match their performance. (4) Turnover. Low turnover funds in general will not generate as much of a tax burden due to capital gains distributions. (5) Foreign exposure. Many domestic equity funds invest significant portions of their portfolios overseas. Be sure to consider this if the percent of foreign investments is an important part of your personal portfolio strategy. Location -------- The files can be downloaded by anonymous FTP from host ftp.eskimo.com in directory ~randyn. Most are contained in NAV.ZIP, along with this README file, which serves as a user manual. Some are also available for separate download. Note that directory ~randyn will not be visible when you connect to the root directory at ftp.eskimo.com, but typing "cd ~randyn" will place you there. Alternatively, "cd u/r/randyn" will get you there too. They are also available on the world wide web at http://www.eskimo.com/~randyn. The files are: NAV.EXE Analysis program README Documentation (user manual) README.NEW Announcements of recent changes DATA.ZIP Data files (fund and index price histories), key encrypted 94.ZIP Data files, current to December 1994, default encrypted LIM.SYS LIM EMM (expanded memory) emulator XMS.SYS XMS (extended memory) emulator FUNDS List of the funds in DATA.ZIP A0.EXE Program to unencrypt .NAV files (default) A1.EXE Program to unencrypt .NAV files (key required) UPDATE.EXE Program to update .NAV files UPDATE.DAT Update data for .NAV files OPT New optimization values, if UPDATE.DAT is present NEWKEY.EXE Program to update files for a new encryption key X0.EXE Program to encrypt .NAV files (default) X1.EXE Program to encrypt .NAV files (key required) Also in that location is UNZ512X3.EXE, a self-extracting binary which contains UNZIP.EXE. If you need an unzip utility, I recommend you (1) create C:\UNZIP, (2) download UNZ512X3.EXE into it, (3) execute it to extract UNZIP.EXE, and (4) either copy UNZIP.EXE to a directory on your PATH, or put C:\UNZIP on your PATH. UNZIP is freeware; there is no fee for using it. Note that UNZ512X3.EXE contains a README file, so you do *not* want to unpack it in the same directory as NAV.ZIP (C:\NAV), or you will overwrite one README file with the other. There is a directory called Incoming which is available for uploading. For example, if you have acquired or created some data sets for mutual funds that aren't already present and you would like to have them added, upload them to Incoming and send me Email. Just use 'put' instead of 'get' in ftp. Note that eskimo is a linux system, and unlike DOS, letter case in filenames is significant. The file and directory names on eskimo will be in lowercase, and you need to type them that way to 'get' them. In this README, however, I'll use uppercase to make the names stand out. All files, including this README, should be retrieved using binary mode. If README.NEW is present, it contains announcements of recent changes, such as new features, key changes, and new data sets. An FTP Session -------------- FTP stands for File Transfer Protocol, a way to transfer files across the Internet. Once logged onto a computer connected to the Internet, use the following commands (comments are enclosed in angle brackets <>): ftp ftp.eskimo.com anonymous joeblow@internet.com cd ~randyn binary dir get nav.zip bye That's it. Some Internet providers put you into a "user friendly" menu system when you dial into their machine via a modem. Usually there is a menu selection for starting a command shell, from which you can issue the ftp command. If not, there may be an ftp service menu selection. If you can't figure out how to ftp, ask your system administrator. If you don't have an Internet account or for some reason ftp is not available, it is going to be tough to keep your data up-to-date, as anonymous ftp is the primary way I plan to make current data available. After you use ftp to transfer NAV.ZIP from ftp.eskimo.com to your Internet Service Provider, download it to your local PC. If you don't know how to do that, ask your system administrator; usually your ISP will have a program you can invoke to transfer a file to your modem's terminal emulator program. Installation ------------ Create a directory called NAV in the root directory of your hard disk, for example, C:\NAV, and place NAV.ZIP into it. Unpack with the command "UNZIP NAV". The UNZIP.EXE program is also available on ftp.eskimo.com (see above). This will unpack the files listed above. Then do "UNZIP DATA", which will create many .NAV files, and a file called OPT. The .NAV files each contain one data set, usually for a mutual fund, and are named by ticker symbols. For example, FMAGX.NAV contains data for Fidelity Magellan. Some of the .NAV files contain data for market indices, such as SP500.NAV, however I will refer to all data sets as "funds". NAV will look for its data files in the current directory, so leave them in the same directory, and execute NAV from there. OPT contains moving average values, and will usually be up-to-date. If not, NAV will generate a new OPT file. The simplest way to run NAV is to make C:\NAV the current directory and enter "NAV". This will cause NAV.EXE to execute, load in all the .NAV files, either calculate moving average values for each of them or fetch them from the OPT file, and display the data for you to evaluate. Most of the data is measured weekly, at the close of the week on either Friday or Sunday (which uses the previous Friday's closing price). The data also includes distributions for most funds. For some funds, the distribution data is represented explicitly and the price data is as reported on the given date; for others, the distribution data has been used to adjust the price data. The data also includes the fund name, and category ("growth", "bond", "international", etc.). Dates may also be present without corresponding prices; these are missing data. NAV handles these by interpolating from the previous and next known prices. Missing data points are represented by red dots when graphed (normal data are plotted with white dots). The data may also include information on share splits, which are rare for mutual funds, but do happen. DOS Functionality ----------------- A prerequisite to using NAV (or any application software) is a basic understanding of how your computer, its hardware, and its operating system work. Read the manuals that come with your machine. There are plenty of books you can buy at any bookstore that explain how to use DOS or Windows. I'll help you use NAV if you have problems, but I won't answer questions like: "What does 'file not found' mean?", or "How do I copy a file?" KEY --- Once you have registered NAV and have the encryption key, there are three ways to use it: (1) Create an environment variable KEY. For example, add the following to AUTOEXEC.BAT: SET KEY=FOO (2) Create a file called KEY in the same directory as NAV.EXE, usually C:\NAV, containing the key on a line all by itself. (3) When you run NAV.EXE, pass the key to it: "NAV /KEY=FOO" Keys are case sensitive; FOO and foo are different. The key will be changed every six months, in January and July. Check near the top of README (this file) for the date the current key was created, and the expected date of the next key. Keys are limited to 32 characters, and cannot be blank. NEWKEY ------ When an encryption key change is announced, you can use NEWKEY.EXE to update your data files to the new key. You should do this before you run UPDATE.EXE. NEWKEY will update the following files: OPT, UPDATE.DAT, *.NAV, KEY. NEWKEY takes one or two parameters. If the old key is contained in a KEY file or in a KEY= environment variable, you only need to give the new key, for example: NEWKEY BAR If you use the key by passing it to NAV on the command line ("NAV /KEY=FOO"), then you need to supply both the old and new keys to NEWKEY, for example: NEWKEY FOO BAR The first (optional) parameter is the old key and the second is the new key. If there is a KEY file, NEWKEY will update it. If there is a KEY= environment variable, NEWKEY will remind you to update it. If you download new OPT and UPDATE.DAT files (which use the new key) before running NEWKEY, it will tell you that they already use the new key, and they will not be changed. To reencrypt files, NEWKEY uses a temporary file called __NEWKEY.@@@, which is deleted before NEWKEY exits. Parameters ---------- Usually you will run NAV.EXE with no parameters, other than perhaps /KEY=, and it will display the data for all .NAV files in the current directory (C:\NAV). If you wish to look at only one or a few .NAV files, you can give their names on the command line like this: NAV FMAGX which will only display Fidelity Magellan (the .NAV extension is implied), or: NAV F*.NAV which will display all .NAV files starting with F, which includes all Fidelity and Founders funds, and a few others. Giving a parameter of /UMA, /WMA, /EMA, /AMA, or /VIDYA will select the corresponding type of moving average to use for all funds (see Moving Averages below); this selection will be recorded in the OPT file. By default, NAV selects the type of moving average that is optimal for each fund. Giving a parameter of /OPT will cause it to calculate the optimal moving average values, and then exit (prior to running the interactive graphical portion of the program); this is useful in batch files when values must be recalculated but the interactive portion of the program is not needed. When running NAV in this fashion, it is useful to redirect output to a file: NAV /OPT >LOG Executing "NAV /HELP" will display the list of valid parameters. Giving a parameter of /REMA will cause NAV to reselect the optimal type of moving average for each fund; this is useful if all funds have been forced to use EMA, for example. Giving a parameter of /REOPT will cause NAV to recalculate all moving average values, and is equivalent to deleting the OPT file prior to running NAV. Data Updates ------------ Normally I will update all funds with weekly closing prices by Sunday evening for the previous Friday market close. My ISP is difficult to dial into on Sunday evening, so I expect to upload fresh data every Monday morning. This is the plan; I don't guarantee it. I expect to be about 90% successful at getting the data available by Monday morning. I'll do my best to keep fresh data available, but I can't guarantee it. If you notice a missing distribution, let me know, as they are easy to miss. I don't know if distribution by anonymous FTP will be feasible; if you encounter unreasonable difficulties, let me know. Most of the data files will be updated weekly, but there are a few exceptions. The 44 Wall Street fund was merged into the 44 Wall Street Equity fund in mid-1993, so there will be no new data on it. (During 1996, the 44 Wall Street Equity fund was renamed to the Matterhorn Growth fund.) The S&P 500 dividend yield and P/E ratio data sets are updated only every few months, since I have to go to the library to get them. If you learn of an on-line source for those numbers, let me know. Currently the data sets for the Money Market yield and the CPI (Consumer Price Index) are updated on a yearly basis. I'm looking for a few more index data sets: the price of 1 oz of gold, the original yield at issue (not "price") of 30-year treasury bonds, and the inflation rate (CPI), going back to 1986. The current CPI numbers are yearly summaries; I'd prefer monthly or weekly data. NAV.ZIP is a large file (currently 850K), so I won't update it often. There is a separate DATA.ZIP available on ftp.eskimo.com, but it is over 750K, and tiresome to download every week. DATA.ZIP will be updated about every two months; it contains the complete price and distribution histories. Every week, a new UPDATE.DAT file will be placed on ftp.eskimo.com. When you see one with a date later than your last update, download it and run UPDATE.EXE. By default, UPDATE.EXE will use the information in UPDATE.DAT; if the update information is in a different file, you can supply the file name as an argument to UPDATE.EXE, for example: UPDATE NEWINFO.DAT UPDATE.DAT is encrypted, but UPDATE.EXE can read it, provided the key is available. UPDATE.EXE extracts the new data from UPDATE.DAT and appends it to the end of each of the encrypted .NAV files. If you try to apply the same changes twice, the .NAV files are not changed. When UPDATE.EXE adds information to a .NAV file, it will report the file name and new data. If your .NAV files have become significantly out of date, download the current DATA.ZIP and unzip it, then download UPDATE.DAT and run UPDATE.EXE. The plan is for all new price and distribution data to be accumulated in UPDATE.DAT over a period of a few months, after which a new DATA.ZIP will be generated with all changes included, and UPDATE.DAT will be deleted. Registration includes access to all files, plus the current encryption key. Registered users will also be notified of key changes. Registration does *not* include a guarantee that I will continue to provide weekly data updates forever, though my intent is to provide them for the foreseeable future. If the time comes when I'm no longer able (or no longer desire) to provide weekly data updates, I will try to find someone to take over that task. If I can't find someone, I'll offer a full or partial refund to recently registered users. As of 12/96, I've been doing weekly data updates for the last six years. Registered users have access to encryption and unencryption utilities (see below) which enable them to view the data in plain text (ASCII) format. If necessary, they can make modifications, corrections, or fill in missing data. The utilities are not to be used to resell or redistribute the data provided with NAV; that is prohibited. Registered users can use the data with other analysis programs, as long as they do not allow anyone else to access the data. Moving Averages --------------- NAV displays a number of statistics relating to fund performance, but its real job is calculating moving averages. These are trend curves which compare recent prices to historical behavior, and are used to make buy and sell decisions. NAV supports five moving averages: UMA - Unweighted Moving Average. This is calculated by adding the previous N prices and dividing by N. For example, let P[i] be the price at week i, and U4[i] be the 4-week UMA at week i. U4[5]=(P[1]+P[2]+P[3]+P[4])/4, U4[6]=(P[2]+P[3]+P[4]+P[5])/4, and so on. Window sizes range from 2 to 60, in increments of 2 (2,4,6,8,...). For U4[i] where i<5, use Uj[j+1] where j+1=i; that is, U4[1]=U0[1]=P[1], U4[2]=U1[2]=P[1], U4[3]=U2[3]=(P[1]+P[2])/2, and U4[4]=U3[4]=(P[1]+P[2]+P[3])/3. In other words, if there are not enough preceding points for the window size, use the largest window size possible that does have enough points. WMA - Weighted Moving Average. Similar to UMA, but gives more weight to recent price points. W4[5]=(P[1]+2*P[2]+3*P[3]+4*P[4])/(1+2+3+4). The most recent price point, P[4], receives four times the weight of the most distant price point, P[1]. Window sizes are the same as for UMA. Like UMA, Wi[k] for i>=k is defined as Wj[j+i] where j+1=i. EMA - Exponential Moving Average. The number of data points used to calculate UMA and WMA are called a "window size", but EMA has no fixed window size. Instead, E[i]=C*P[i]+(1-C)*E[i-1], and 01, volatility is "high" Next, determine the maximum value of Wt (primary weight) by: K*Wt<1 -> Wt<1/K. After 1/K is calculated, subtract .01 and assign the value to Max. Now: VIDYA=K*Wt*C0 + (1-K*Wt)*V1 where C0 is today's price and V1 is yesterday's VIDYA. Wt is the EMA coefficient and K is the volatility index. This implementation of VIDYA is based on "The New Technical Trader", by Tushar Chande and Stanley Kroll, Wiley, pp. 49-72. The one difference is that Chande and Kroll use VIDYA=K*Wt*C0+(1-K*Wt)*C1, where C1 is yesterday's price. V1 seems to give slightly better results. AMA and VIDYA are adaptive, in the sense that they try to capture the concept of fluctuating volatilty. When volatility is low, they move very slowly. When volatility increases, they move more quickly to "catch up" with the trend. NAV can use any of these moving averages (but only one at a time) for each fund; by default NAV will try them all, and select the one that gives the best result over the eval period (see Trial and Eval Periods, below). Once a moving average type has been selected, NAV will continue to use it for the fund until either the eval period changes (a new year is started), or it is changed manually by the user. The /REMA switch can be used to reselect optimal moving averages, or the Y key. The buy and sell signals generated by NAV are offset from the moving average by buy and sell thresholds. To generate a signal, the price must meet or exceed the moving average plus the threshold. For example, "EMA .64 (+3-5)" means the coefficient (weight) is .64, a buy signal is generated when P[i]>=1.03*E[i], and a sell signal is generated when P[i]<=.95*E[i]. The positive number is the buy threshold and the negative number is the sell threshold. So for a buy signal to be generated, the price must meet or exceed the moving average by 3%, and for a sell signal to be generated, the price must meet or fall below the moving average by 5%. "UMA 12 (+1-0)" means the unweighted window size is 12 data points (usually weeks), a buy signal is generated when P[i]>=1.01*U[i], and a sell signal is generated when P[i]