OCC 期權符號由 4 部分組成:
AAPL220121C00145000
TSLA220121C01050000
HD220121C00400000
- 標的股票或 ETF 的根符號,用空格填充至 6 個字符
- 到期日期,格式為 6 位數字
"%Y-%m-%d" - 期權型別,P 或 C,用于看跌期權或看漲期權
- 執行價格,為價格 x 1000,前面填充 0 到 8 位數字
作為一個實體AAPL220121C00145000指的是call上AAPL,截止于01/21/2022,具有的執行價格$145.00。
我想將這些 OCC 放入 data.table 如下
Symbol ExpDate Type Strike
AAPL 2022-01-21 call 145
TSLA 2022-01-21 call 1050
HD 2022-01-21 call 400
我嘗試了以下但似乎有一些問題 -
library(data.table)
read.table(text=gsub("(?=[A-Za-z])((\\d{2})(\\d{2})(\\d{2}))([PC])(\\d{8})", "\\1,\\2,\\3,\\4", "AAPL220121C00145000"),
colClasses = c("character", "date", "character", "numeric"), sep=",", stringsAsFactors = FALSE)
有人可以僅使用正則運算式幫助創建上述格式的 data.table 嗎?
uj5u.com熱心網友回復:
我們可以使用strcapture從base R
type.convert(strcapture("([A-Za-z] )(\\d{2}\\d{2}\\d{2})([PC])(\\d{8})",
"AAPL220121C00145000", proto = list(Symbol = "character",
ExpDate = "date", Type = "character", Strike = "numeric")), as.is = TRUE)
Symbol ExpDate Type Strike
1 AAPL 220121 C 145000
uj5u.com熱心網友回復:
library(dplyr)
df %>% mutate(stock = substring(option, 1, 4)) %>%
mutate(Strike = as.integer(substring(option, 12, 16))) %>%
mutate(Type = ifelse(substring(option, 11, 11) == 'C', 'CALL', 'PUT')) %>%
mutate(ExpDate = ymd(substring(option, 5, 10)))
option stock Strike Type ExpDate
1 AAPL220121C00145000 AAPL 145 CALL 2022-01-21
2 TSLA220121C01050000 TSLA 1050 CALL 2022-01-21
uj5u.com熱心網友回復:
您的探索涉及多個問題。我專注于一種將字串拆分為固定widt部分的簡單方法。
從那以后,您可能會解決其余的問題。
library(iotools)
v <- c(4,6,1,8)
iotools::dstrfw(
mystrings,
col_types = c("character", "character", "character", "numeric"),
widths = v)
# V1 V2 V3 V4
# 1 AAPL 220121 C 145000
# 2 TSLA 220121 C 1050000
日期部分不能一次性處理,因為 iotools 只支持 %Y-%m-%d 格式的日期(使用 fasttime 包)。不過,數字部分可以很容易地除以 1000,因為它已經作為數字讀入了(注意前導零被去除了)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368527.html
下一篇:如果然后R中的陳述句-基于值替換
