繁体   English   中英

如何使用正则表达式解析 R 中的 OCC 选项符号?

[英]How can I use regex to parse an OCC Option Symbol in R?

OCC 选项符号由 4 个部分组成:

AAPL220121C00145000
TSLA220121C01050000
HD220121C00400000
  1. 标的股票或 ETF 的根代码,用空格填充至 6 个字符
  2. 到期日期,6 位数字,格式为"%Y-%m-%d"
  3. 期权类型,P 或 C,用于看跌或看涨
  4. 行权价,为价格×1000,前面补0到8位

例如, AAPL220121C00145000表示对AAPLcall ,到期日为 2022 年 1 月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 吗?

    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

你的探索跨越了多个问题。 我专注于一种将字符串拆分为固定 widt 部分的简单方法。

从那里开始,您可能能够解决 rest。

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

日期部分无法在 1 go 中处理,因为 iotools 仅支持 %Y-%m-%d 格式的日期(使用 fasttime 包)。 数字部分可以很容易地除以 1000,因为它已经作为数字读入(注意前导零被去除)。

我们可以使用来自base R strcapture strcapture

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM