2016-05-01 11 views
1

これはこのサイトの最初の投稿です。私はコード作成のスキルが向上するにつれ、より多くの関わりを持つことを楽しみにしています。Rのオプション価格設定に関するウェブスクレイピングデータの実装方法

私の最初の質問は、ヤフーやGoogleの金融を使ってウェブからオプション(コールとプット)データを取り出すことです。私はRでコードを実行することに興味があります。これは特定の株式のコール/プットの請求価格を調べます。具体的には、すべてのオプションストック(CSVファイルはすべてhttps://www.cboe.com/tradtool/symbols/symboldirectory.aspxにあります)を調べるコードを実行して、指定されたコール/プットに希望する価格を持つ株式に対応する株式記号のリストを返しますまたは現在の取引価格の所定の割合内のストライキ価格で特定の価格を下回る。

例えば、現在、株式1株あたり100ドルで取引されている仮説会社ABCを見ているとします。この株式に$ 1プレミアム以下のプレットまたはコールオプションが存在し、ストライク価格が$ 90〜$ 110(現在の価格の10%以内)の場合、この株式を取引することに興味があります。

これを展開すると、すべてのオプションストックを検索し、この基準を満たすストックに対応するストックシンボルのリストを返すアルゴリズムを生成することに興味があります。

私はこのサイトの利用可能なリソースを幅広く検索し、特に以下に示すようなスクリプト(Apple用のデータ収集)とhttps://mktstk.com/2014/12/29/start-trading-like-a-quant-download-option-chains-from-google-finance-in-r/で記述されているオプションデータのスクラップ方法についていくつかの洞察を得ました。

library(RCurl) 
    library(jsonlite) 

    getOptionQuote <- function(symbol){ 
    output = list() 
    url = paste('http://www.google.com/finance/option_chain?q=', symbol, '&output=json', sep = "") 
    x  = getURL(url) 
    fix = fixJSON(x) 
    json = fromJSON(fix) 
    numExp = dim(json$expirations)[1] 
    for(i in 1:numExp){ 
     # download each expirations data 
     y  = json$expirations[i,]$y 
     m  = json$expirations[i,]$m 
     d  = json$expirations[i,]$d 
     expName = paste(y, m, d, sep = "_") 
     if (i > 1){ 
       url = paste('http://www.google.com/finance/option_chain?q=', symbol, '&output=json&expy=', y, '&expm=', m, '&expd=', d, sep = "") 
       json = fromJSON(fixJSON(getURL(url))) 
     } 
     output[[paste(expName, "calls", sep = "_")]] = json$calls 
     output[[paste(expName, "puts", sep = "_")]] = json$puts 
    } 
    return(output) 


    fixJSON <- function(json_str){ 
        stuff = c('cid','cp','s','cs','vol','expiry','underlying_id','underlying_price','p','c','oi','e','b','strike','a','name','puts','calls','expirations', 'y','m','d') 
        for (i in 1:length(stuff)){ 
         replacement1 = paste(',"', stuff[i], '":', sep = "") 
         replacement2 = paste('\\{"', stuff[i], '":', sep = "") 
         regex1  = paste(',', stuff[i], ':', sep = "") 
         regex2  = paste('\\{', stuff[i], ':', sep = "") 
         json_str  = gsub(regex1, replacement1, json_str) 
         json_str  = gsub(regex2, replacement2, json_str) 
        } 
        return(json_str) 
       } 

aapl_opt = getOptionQuote("AAPL") 

しかし、このように一度に複数の銘柄を調べサポートしていません。このコードは自分のアプリケーションのために成功していません。

答えて

1

複数の株のためにこれを行うのは簡単です。これを試してみてください:

res=lapply(c("AAPL","MSFT"),getOptionQuote) 
names(res)<-c("AAPL","MSFT") 
#str(res) 
i=2 
plot(res$AAPL[[i]]$strike, res$AAPL[[i]]$oi, type = "s", main = paste("Open Interest by Strike", names(res$AAPL)[i])) 

質問の他の部分については、resオブジェクトから情報を入手してください。

関連する問題