PureBytes Links
Trading Reference Links
|
The CME has a booklet, "Determining the Relevant Fair Value(s) of
S&P Futures" which not only explains the rationale and the procedure
for a fair value calculation, but gives several slightly different
versions tailored to the exact use which one will make of the result.
Basically, fair value ("FV") is the cash index plus a fair premium.
The latter, in turn, is an interest component minus a dividend
component. The interest component is the risk-free earning potential
of the cash you would have to fork over to purchase the stocks, but
which you do NOT need to pay out to "purchase" the future. It equals
the risk-free rate times the number of days remaining in the contract
divided by 365 times the S&P cash index: rf * n/365 * SPX
The dividend component represents the estimated dividends which you
would earn during the remainder of the contract period if you were
instead holding the stocks but which you will NOT receive as a holder
of a future. There are two ways to figure this: an annualized
earning rate estimate times the number of days remaining in the contract
divided by 365 times the S&P cash index: er * n/365 * SPX
A more accurate dividend component, and that used by Bloomberg, is a
current estimate of the dividends expected from S&P stocks during the
period from today until contract expiration, expressed in index
points. I use an approximation of this method.
Calculating the FV in real time within TradeStation requires a few
approximations. (DBC/Signal is my data source and I subscribe only
to the CME, so I have to make do with the indexes which these
provide.)
$SPX is the cash index; $IRX + delta is the risk-free rate, where
delta is usually 1.2 or 1.3 and is manually updated once every couple
of weeks to make the sum equal to what Bloomberg is reporting as the
"risk-free rate". (Note that $IRX is reported as 10x the percentage;
5% appears as 50.00.)
The dividend estimate is:
divest = spdiv - 10*$SXD - (91-remdays)*0.0000051*$SPX
where spdiv, a dividend estimate for the entire quarter, is hard-coded
and manually updated every couple of weeks. The other expressions
(-10*$SXD - ...) represent dividends already paid this quarter. ($SXD
is the actual cumulative dividend so far on the SPDR, which is 1/10 of
the S&P index. But a management fee has been deducted from this
dividend, so the (91-remdays)*0.0000051*$SPX representing this fee is
added back.)
I have coded spdiv as a "function" which simply returns a constant.
When I get an updated estimate, divest, from Bloomberg, I recalculate
spdiv as: spdiv = divest + 10*$SXD + (91-remdays)*0.0000051*$SPX and
update my "function" accordingly. (Note that when you plug this value
into the equation above for divest you simply get back the value just
obtained from Bloomberg.) The value of spdiv will vary relatively
little over the course of a quarter.
Two little glitches must be dealt with. $SXD resets to zero (or
S H O U L D) on contract expiration day. The front contract switches,
however, eight days prior to that. I get new Bloomberg values on the
contract-switch day and update spdiv and delta. I do this again when
$SXD resets to zero.
2nd glitch: $SXD is updated by the AMEX once each day, shortly after
9:30 NY time, WHETHER OR NOT THE VALUE HAS CHANGED. And they reset
it to zero on contract expiration day. I believe, unfortunately, that
all the data vendors get the value, not directly from AMEX, but from
an intermediary and that intermediary filters out zero values! You
can either insert a zero tick on expiration day, or ignore it in which
case it will later appear to reset to some low value like 0.02. But
you MUST recalculate spdiv when it resets. Note that during the
interval from switch day to reset day, spdiv will include both most
of LAST quarter's AND all of next q's dividends. This is OK.
I use $SPX + $PREM as a surrogate for SPmy. In other words, spratio =
100 * ($SPX+$PREM)/($SPX+fairprem) - 100. I use this surrogate
because, after all, this is a measure of the "fairness" of the premium
and the high/low of $PREM often does not coincide with the high/low of
SPmy or $SPX.
Finally, I am interested in the extremes which are reached briefly by
my spratio. Therefore, I make two calculations, one each for the
high and the low of $PREM for each bar.
So, here is my fairprem function:
Var: RemDays(0);
RemDays = @DateToJulian(@Expire)-@xxxxxxxxxxxx(date of today);
@FairPrem = ((close of data3)+1.3)/1000*RemDays/365*(close of data2)
- @SPdiv + 10*(close of data5) + (91-remdays)*0.0000051*
(close of data2);
data2 is $SPX, data3 is $IRX, & data5 is $SXD
I plot the results as a histogram of two indicators:
SP Ratio UP:
Fair_prem=@xxxxxxxx;
Prem=high of data4 / 100;
Actual=close of data2 + prem;
Fair=close of data2 + fair_prem;
Ratio=(actual/fair-1)*100;
If prem > fair_prem then plot1(ratio,"");
SP Ratio Dn:
Fair_prem=@xxxxxxxx;
Prem=low of data4 / 100;
Actual=close of data2 + prem;
Fair=close of data2 + fair_prem;
Ratio=(actual/fair-1)*100;
If prem < fair_prem then plot2(ratio,"");
Note differences on 2nd line (high vs. low) and last
line (> vs. < and plot1 vs. plot2).
Hope this is of value to all who asked.
Carroll Slemaker
|