2016-05-01 16 views
1

Dies ist mein erster Beitrag auf dieser Website und ich freue mich darauf, mich stärker zu engagieren, wenn meine Fähigkeiten im Codieren zunehmen.Wie implementiert man Web-Scraping-Daten zum Preis von Optionen in R?

Meine erste Frage beinhaltet kratzen Optionen (Anrufe und puts) Daten aus dem Internet mit Yahoo oder Google Finanzen. Ich bin daran interessiert, Code auszuführen, in R, die auf den Angebotspreis für einen Anruf/Put auf eine bestimmte Aktie aussehen wird. Insbesondere hoffe ich, einen Code laufen zu lassen, der alle wählbaren Aktien prüft (CSV Datei, die alle Symbole enthält, kann unter https://www.cboe.com/tradtool/symbols/symboldirectory.aspx gefunden werden) und gibt eine Liste der Aktiensymbole zurück, die den Aktien entsprechen, die einen Preis für einen gegebenen Call/Put haben oder unter einem bestimmten Preis mit einem Ausübungspreis innerhalb eines bestimmten Prozentsatzes des aktuellen Handelspreises.

Nehmen wir zum Beispiel an, dass ich die hypothetische Firma ABC betrachte, die derzeit bei $ 100 pro Aktie gehandelt wird. Wenn es für diese Aktie eine Put- oder Call-Option für eine Prämie von 1 $ oder weniger mit einem Ausübungspreis zwischen 90 $ und 110 $ (z. B. innerhalb von 10% des aktuellen Kurses) gibt, würde ich diese Aktie handeln.

Ich wäre daran interessiert, einen Algorithmus zu entwickeln, der alle verfügbaren Aktien sucht und eine Liste der Aktien-Symbole zurückgibt, die den Aktien entsprechen, die diese Kriterien erfüllen.

Ich habe ausgiebig die verfügbaren Ressourcen auf dieser Website durchsucht und einige Einblicke in Methoden zum Scraping von Optionsdaten gefunden, insbesondere mit dem unten dargestellten Skript (Sammeln von Daten für Apple) und in https://mktstk.com/2014/12/29/start-trading-like-a-quant-download-option-chains-from-google-finance-in-r/ beschrieben.

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") 

Doch dieser Code nicht unterstützt mehrere Aktien auf einmal untersuchen und so hat meine Bewerbung nicht erfolgreich gewesen.

Antwort

1

Das für mehrere Aktien tun, ist geradlinig. Versuchen Sie dies:

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])) 

Für andere Teile Ihrer Fragen erhalten Informationen von res Objekt.