tradable/non-tradable underlier in a derivative contract

I guess in many, many entry-level quant questions, we are often given a task to find the Risk Neutral [2] dynamics of some variable X. Simple examples include Xa(t)=S(t)^2 or Xb=600/S, Xc=sqrt(S), Xd=exp(S), Xe=S*logS … where S is the IBM price following a GBM. In many simple cases the variable X is also GBM under the Risk Neutral measure. We use Ito’s rule…

Then we are asked to price a contract that guarantees to pay X(T) at maturity.

At this point, it’s easy to forget the X itself is not tradeable i.e. the X process is not the price process of a tradeable asset. When interest rate goes from 200 to 201, the mid-quote (of any security) doesn’t go from $200 to $201, even though the implied vol or implied yield could go from 200 to 201.Another Eg – suppose I were to maintain tight bid/ask quotes around current value of 600/ S_IBM. If IBM is trading at $30 then I quote $20. If IBM trades at $40 then I quote $15. This market-maker would induce arbitrage (– intuitive to the practitioners but not the uninitiated). A contract paying 600/S_T on maturity has a fair price today X_0 that’s very, very different from 600/S_0  [1].

Given X(t) process isn’t a tradeable (not a price process), X doesn’t have drift equal to risk-free rate “r” 😦

However, don’t lose heart — noting this Contract is a tradable , the contract’s price process C(t) is tradeable and C(t) has (exponential) drift = r 🙂

Q: Basic question – Given X(t) isn’t a price process, does it make sense to apply Ito’s on X = 600/S ?
A: Yes because 1) Ito lets us (fully) characterize the dynamics of the X(t) process, albeit NOT a price process. In turn, 2) the SDE (+ terminal condition) reveals the distro of X(T). From the distro, we could find the 3) expectation of X(T) and the 4) pre-expiry price. Note every step requires a probability measure, since dW, BM, distro, expectation are all probabilistic concepts.

[1] Try to develop intuition — By Jensen’s inequality, it should be above 600/S_0, provided S process has non-zero volatility.
[2] (i.e. using money market account probability measure)

wrapper function to add 0 – gotcha #c++ rval

Given calcTax(), I sometimes convert the returned value — simply add 0. I used to think this is completely harmless and has no effect on the program.

Now I don’t feel that way. calcTax() could return by reference, so we can take the address of this “expression” like

&calcTax()

In other words, calcTax() is an lvalue expression. If you add 0, you get a rvalue expression! Basically a temporary object. You can’t take its address.