Saya ingin mengimpor harga saham "Perdagangan Terakhir" dari Yahoo finance ke R. Tujuannya adalah untuk bekerja dengan (hampir) data waktu nyata. Apakah ada solusi?
Terima kasih sebelumnya atas komentar yang bermanfaat.
Saya ingin mengimpor harga saham "Perdagangan Terakhir" dari Yahoo finance ke R. Tujuannya adalah untuk bekerja dengan (hampir) data waktu nyata. Apakah ada solusi?
Terima kasih sebelumnya atas komentar yang bermanfaat.
Jawaban:
Ini benar-benar bukan pertanyaan statistik (mungkin ini bisa dipindahkan ke SO?), Tetapi ada fungsi yang bagus dalam kuantmod yang melakukan apa yang telah dilakukan Dirk dengan tangan. Lihat getQuote()
dan yahooQF()
. Mengetik yahooQF()
akan memunculkan menu dari semua format kutipan yang dapat Anda gunakan.
> require(quantmod)
> getQuote("QQQQ;SPY", what=yahooQF("Last Trade (Price Only)"))
Trade Time Last
QQQQ 2011-03-17 12:33:00 55.14
SPY 2011-03-17 12:33:00 128.17
Itu cukup mudah mengingat R dapat membaca langsung dari URL yang diberikan. Kuncinya adalah mengetahui cara membentuk URL. Berikut ini adalah contoh cepat dan kotor berdasarkan kode yang ditulis Dj Padzensky pada akhir 1990-an dan yang telah saya pertahankan dalam modul Perl Yahoo-FinanceQuote (yang tentu saja juga di CPAN di sini ) selama hampir sepanjang.
Jika Anda tahu sedikit R, kode harus jelas. Memperoleh dokumentasi untuk format string agak sulit tetapi misalnya modul Perl memiliki beberapa.
R> syms <- c("^GSPC", "^IXIC")
R> baseURL <- "http://download.finance.yahoo.com/d/quotes.csvr?e=.csv&f="
R> formatURL <- "snl1d1t1c1p2va2bapomwerr1dyj1x"
R> endURL <- "&s="
R> url <- paste(baseURL, formatURL, endURL, paste(syms, collapse="+"), sep="")
R> read.csv(url, header=FALSE)
V1 V2 V3 V4 V5 V6 V7
1 ^GSPC S&P 500 INDEX,RTH 1256.88 3/16/2011 4:04pm 0 0.00%
2 ^IXIC NASDAQ Composite 2616.82 3/16/2011 5:30pm 0 0.00%
V8 V9 V10 V11 V12 V13 V14
1 4282084608 0 N/A N/A 1256.88 1279.46 1249.05 - 1280.91
2 0 0 N/A N/A 2616.82 0.00 0.00 - 0.00
V15 V16 V17 V18 V19 V20 V21 V22
1 1010.91 - 1344.07 N/A N/A N/A N/A N/A N/A SNP
2 2061.14 - 2840.51 N/A N/A N/A N/A N/A N/A NasdaqSC
R>
Kolom tiga adalah perdagangan terakhir Anda. Selama jam pasar terbuka Anda akan mendapatkan NAs lebih sedikit dan lebih banyak variabilitas data. Namun perlu dicatat bahwa sebagian besar harga tertunda 15 atau 20 menit --- tetapi beberapa indeks adalah waktu-nyata. Data waktu nyata adalah bisnis besar dan pendapatan besar untuk pertukaran sehingga mereka cenderung tidak memberikannya. Juga, dan jika saya ingat dengan benar, tampilan yang lebih baru dan lebih real-time pada halaman Keuangan di Google dan Yahoo menggunakan sesuatu yang lebih AJAXy yang lebih sulit untuk diperah dari luar.
Inilah sedikit fungsi yang saya tulis untuk mengumpulkan dan memetakan data "pseudo-real time" dari yahoo:
require(quantmod)
Times <- NULL
Prices <- NULL
while(1) {
tryCatch({
#Load current quote
Year <- 1970
currentYear <- as.numeric(format(Sys.time(),'%Y'))
while (Year != currentYear) { #Sometimes yahoo returns bad quotes
currentQuote <- getQuote('SPY')
Year <- as.numeric(format(currentQuote['Trade Time'],'%Y'))
}
#Add current quote to the dataset
if (is.null(Times)) {
Times <- Sys.time()-15*60 #Quotes are delayed 15 minutes
Prices <- currentQuote['Last']
} else {
Times <- c(Times,Sys.time())
Prices <- rbind(Prices,currentQuote['Last'])
}
#Convert to 1-minute bars
Data <- xts(Prices,order.by=Times)
Data <- na.omit(to.minutes(Data,indexAt='endof'))
#Plot the data when we have enough
if (nrow(Data)>5) {
chartSeries(Data,theme='white',TA='addRSI(n=5);addBBands(n=5)')
}
#Wait 1 second to avoid overwhelming the server
Sys.sleep(1)
#On errors, sleep 10 seconds and hope it goes away
},error=function(e) {print(e);Sys.sleep(10)})
}
Ini menghasilkan grafik seperti ini:
Anda juga dapat menggunakan data untuk tujuan lain.
require(quantmod)
dari mengekor }
dengan sendirinya di baris terakhir. Anda harus menunggu setidaknya 5 menit sebelum grafik akan muncul.
library(quantmod)
getSymbols("LT.NS",src="yahoo")