re: "bid/ask spread in price terms to the volatility in price terms"
That can only be done effectively with intraday snapshots.
What is your measurement frequency ? Hourly ? 15 minutes ?
re: "if corn had 3 times the % volatility it would still only have the same price volatility as corn"
I believe you meant "if Soybeans had 3 times..."
You might be right on this, but I think you are using the wrong volatility measure....if in fact, it is an intraday-based value. You're average time-in-trade is probably in days, so it doesn't make sense to use anything but stats using DAILY bars.
Bloomberg's volatility is expressed in Annual % of price volatility, but CALCULATED using something the last 30 days using the closing price for the day.
You should be using a vol measure based on daily price movement IMHO.
Uh.... yeah I am. From a couple of posts ago you might remember that I said I use:
"....a 35 day exponentially weighted moving average of daily returns."
That's pretty close to bloomberg, although as I said I'm using an average of those estimates over a year for the purposes of cost calculation, wheras they clearly have only the most recent measure.
For interest on my most recent measure of vol I have corn at $7.2 a day and soya at $15.68 (so almost exactly twice, same as in my cost calculation); with prices of $434 and $992 respectively that comes out to annual percentage vol of 27% for corn and 26% for soya.
That still doesn't get me to bloomberg's levels, but I'm pretty confident that the calculation is correct (the actual vol calculation is done by a python library, not by my code), and just eyeballing the chart's it doesn't look unreasonable for them to have the same percentage vol, given they both rallied about 20% in the same period.
Anyway bid/ask spread I basically measure by taking snapshots roughly hourly during trading hours. The stuff at the end of this screen dump is the bid/ask for the last few days.
Code:
run@bilbo ~/workspace/systematic_engine/sysdiag/scripts $ . showinstrument LIVE CORN
**************************************************************************************
Instrument code CORN, Corn
rollcycle Z, pricecycle HKNUZ, assetclass Ags
exchange ECBOT, pointvalue 50.000000 currency USD
lastrolloffset -60 days, firstrolloffset -90 days, carryoffset -1 priced contracts
IBSymbol ZC
IB factor 1.000000 IB Price exchange ECBOT
Priced contract is 201512, forward is 201612, carry is 201509
Contracts with positions:
[position:-1, code:CORN, contractid:201512;]
Limit data
{'maxdonetoday': 0, 'maxposition': 20, 'lastaccess': Timestamp('2015-07-09 06:05:15'), 'maxorderoneday': 5, 'maxorderall': 1000, 'maxdoneall': 54}
Size
2015-07-06 16:04:52 28
2015-07-06 17:05:12 29
2015-07-06 18:05:32 31
2015-07-07 14:43:09 34
2015-07-07 15:43:31 18
2015-07-07 16:43:49 123
2015-07-07 17:44:16 103
2015-07-08 15:16:44 27
2015-07-08 16:17:13 118
2015-07-08 17:17:36 23
2015-07-08 18:18:06 8
2015-07-09 14:02:21 5
2015-07-09 15:14:36 38
2015-07-09 16:15:03 65
2015-07-09 17:15:37 235
dtype: float64
2015-07-06 16:04:52 0.25
2015-07-06 17:05:12 0.25
2015-07-06 18:05:32 0.25
2015-07-07 14:43:09 0.25
2015-07-07 15:43:31 0.25
2015-07-07 16:43:49 0.25
2015-07-07 17:44:16 0.25
2015-07-08 15:16:44 0.25
2015-07-08 16:17:13 0.25
2015-07-08 17:17:36 0.25
2015-07-08 18:18:06 0.25
2015-07-09 14:02:21 0.00
2015-07-09 15:14:36 0.25
2015-07-09 16:15:03 0.25
2015-07-09 17:15:37 0.25
dtype: float64
**************************************************************************************
I take the median (more robust than the mean) of half these spreads over the period I'm calibrating for, say a year.
I compare this to what I actually achieve in trading over the same period (which is obviously a lot noisier measure, and biased downwards due to my execution algo making me money on average) as a sanity check. For corn my median fill price was 0.125 to the mid of slippage, which obviously equates to the same level as I get from hourly sampling above. Note that the standard deviation of my slippage on actual trades was 1.74 ticks versus 0.055 for the hourly samples so you can see using trades is a much noisier measure (partly because there are many fewer trades than there are samples).
So I've got: (Average spread over 12 months plus average commission paid) divided by average of 35 daily return volatility, again over 12 months.
Hope this makes sense.
GAT
Last edited: