[R-SIG-Finance] Extract option IDs from option chain

rex rex at nosyntax.net
Tue Sep 7 02:37:55 CEST 2010


rex <rex at nosyntax.net> [2010-09-06 16:11]:
>Format is:
>
>>allOpts <- getOptionChain("AAPL", Exp=optExpire)
>>allOpts                                                                  
>$calls                                                                      
>                    Strike   Last   Chg    Bid    Ask   Vol    OI           
>AAPL100918C00150000    150 108.50 16.50 106.80 108.85     3    13           
>AAPL100918C00155000    155  96.77  0.00 102.40 103.85     4    10           
>AAPL100918C00160000    160  95.75  4.50  97.40  98.85    10    30           
>[...]
>
>$puts
>                    Strike  Last   Chg   Bid   Ask   Vol    OI
>AAPL100918P00150000    150  0.01  0.00    NA  0.01     6   876
>AAPL100918P00155000    155  0.02  0.00    NA  0.01    30   666
>AAPL100918P00160000    160  0.02  0.00    NA  0.01    79  1535
>[...]
>
>$symbol
>[1] "AAPL"
>
>The obvious thing fails to produce the desired result:
>>index(allOpts$puts)
>[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>
>What I need are the indexes of both $calls and $puts as a set of
>strings that can be split, etc. (I need the expiration date of the
>options as a Date to be used to calculate the days to expiration.)

A solution (fugly, for sure):
 
> dimnames(allOpts$puts)
[[1]]
 [1] "AAPL100918P00150000" "AAPL100918P00155000" "AAPL100918P00160000"
 [4] "AAPL100918P00165000" "AAPL100918P00170000" "AAPL100918P00175000"
 [7] "AAPL100918P00180000" "AAPL100918P00185000" "AAPL100918P00190000"
[10] "AAPL100918P00195000" "AAPL100918P00200000" "AAPL100918P00210000"
[13] "AAPL100918P00220000" "AAPL100918P00230000" "AAPL100918P00240000"
[16] "AAPL100918P00250000" "AAPL100918P00260000" "AAPL100918P00270000"
[19] "AAPL100918P00280000" "AAPL100918P00290000" "AAPL100918P00300000"
[22] "AAPL100918P00310000" "AAPL100918P00320000" "AAPL100918P00330000"

[[2]]
[1] "Strike" "Last"   "Chg"    "Bid"    "Ask"    "Vol"    "OI"
> id <- dimnames(allOpts$puts)[1]
> id
[[1]]
 [1] "AAPL100918P00150000" "AAPL100918P00155000" "AAPL100918P00160000"
 [4] "AAPL100918P00165000" "AAPL100918P00170000" "AAPL100918P00175000"
 [7] "AAPL100918P00180000" "AAPL100918P00185000" "AAPL100918P00190000"
[10] "AAPL100918P00195000" "AAPL100918P00200000" "AAPL100918P00210000"
[13] "AAPL100918P00220000" "AAPL100918P00230000" "AAPL100918P00240000"
[16] "AAPL100918P00250000" "AAPL100918P00260000" "AAPL100918P00270000"
[19] "AAPL100918P00280000" "AAPL100918P00290000" "AAPL100918P00300000"
[22] "AAPL100918P00310000" "AAPL100918P00320000" "AAPL100918P00330000"
> typeof(id)
[1] "list"
> id2 <- id[[1]]
> id2[2]
[1] "AAPL100918P00155000"
> substr(id2[2], 5, 10)
[1] "100918"
> dat <- paste("20", substr(id2[2], 5, 10), sep="")
< dat
[1] "20100918"
> expDate <- as.Date(paste(substr(dat,1,4), "-", substr(dat,5,6), "-", substr(dat,7,8), sep=""))
> expDate
[1] "2010-09-18"

The above has got to be about the most convoluted and arcane
method to get the expiration date one can imagine.

Surely there's a simple way? All I want is the number of trading
days to expiration of options of a particular type that expire in
a given month.

-rex
-- 
Expansion means complexity; and complexity decay.



More information about the R-SIG-Finance mailing list