นำเข้าราคาหุ้นจาก Yahoo Finance เข้าสู่ R หรือไม่


26

ฉันต้องการนำเข้าราคาหุ้น "การซื้อขายครั้งสุดท้าย" จากการเงินของ Yahoo เข้าสู่ R. ความตั้งใจคือการทำงานกับข้อมูลเรียลไทม์ (เกือบ) มีวิธีแก้ไขไหม?

ขอบคุณล่วงหน้าสำหรับความคิดเห็นที่เป็นประโยชน์


หัวข้อนี้ก็อาจจะเป็นที่น่าสนใจ: API ข้อมูล / ฟีดพร้อมใช้งานเป็นแพคเกจในการวิจัย
gung - Reinstate Monica

คำตอบ:


14

นี่ไม่ใช่คำถามเชิงสถิติ (บางทีนี่อาจถูกย้ายไปที่ SO?) แต่มีฟังก์ชั่นที่ดีในควอนตัมที่ทำในสิ่งที่เดิร์กทำด้วยมือ ดูและgetQuote() yahooQF()การพิมพ์yahooQF()จะแสดงเมนูของรูปแบบการเสนอราคาที่เป็นไปได้ทั้งหมดที่คุณสามารถใช้ได้

> 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

ขอบคุณสำหรับคำตอบ. ฉันค่อนข้างใหม่ที่นี่ที่ stackexchange ฉันจะย้ายคำถามของฉันไปที่ SO ได้อย่างไร
Steven

@ สตีเว่น: ไม่เป็นไร ฉันไม่แน่ใจว่าจะย้ายคำถามอย่างไร ฉันคิดว่าผู้ดูแลสามารถทำได้
Joshua Ulrich

15

ค่อนข้างง่ายเนื่องจากRสามารถอ่าน URL ที่กำหนดโดยตรงได้โดยตรง กุญแจสำคัญคือการรู้วิธีสร้าง URL นี่คือตัวอย่างที่รวดเร็วและสกปรกตามโค้ด Dj Padzensky ที่เขียนในปลายปี 1990 และที่ฉันได้รับการบำรุงรักษาในโมดูลPerl Yahoo-FinanceQuote (ซึ่งแน่นอนว่ายังอยู่ที่CPAN ที่นี่ ) มานาน

ถ้าคุณรู้ R เล็กน้อยรหัสควรอธิบายตนเอง การรับเอกสารสำหรับสตริงรูปแบบนั้นยุ่งยากเล็กน้อย แต่เช่นโมดูล Perl มีบางอย่าง

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> 

คอลัมน์ที่สามคือการซื้อขายครั้งสุดท้ายของคุณ ในช่วงเวลาเปิดตลาดคุณจะได้รับ NAs น้อยลงและความแปรปรวนของข้อมูลมากขึ้น แต่โปรดทราบว่าราคาส่วนใหญ่ล่าช้า 15 หรือ 20 นาที --- แต่ดัชนีบางรายการเป็นแบบเรียลไทม์ ข้อมูลแบบเรียลไทม์เป็นธุรกิจขนาดใหญ่และมีรายได้หลักสำหรับการแลกเปลี่ยนดังนั้นพวกเขาจึงมักจะไม่แจกมัน นอกจากนี้และถ้าฉันจำได้อย่างถูกต้องการแสดงแบบเรียลไทม์บนหน้าการเงินที่ Google และ Yahoo จะใช้ AJAXy มากกว่าที่ยากต่อการรีดนมจากภายนอก


สิ่งนี้ไม่ได้ผลสำหรับฉันในวันนี้ฉันไม่สามารถดาวน์โหลดดัชนี Nasdaq แบบคอมโพสิตที่จะย้อนกลับไปก่อนปี 2544 จากแหล่งข้อมูลปกติของฉัน (Quandl และ quantmod) ด้วยเหตุผลบางอย่างและมองหาทางเลือกอื่น
PatrickT

4

นี่เป็นฟังก์ชั่นเล็กน้อยที่ฉันเขียนเพื่อรวบรวมและจัดทำแผนภูมิข้อมูล "หลอกเวลา" จาก 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)}) 
}

มันสร้างแผนภูมิเช่นนี้: แผนภูมิ

คุณยังสามารถใช้ข้อมูลเพื่อจุดประสงค์อื่น


ขอบคุณสำหรับสคริปต์นี้ แต่ฉันประสบปัญหาโง่ ๆ กับ "}" ฉันไม่สามารถรันได้ :(

@acabahe มันยังทำงานได้ดีสำหรับฉัน ตรวจสอบให้แน่ใจว่าคุณได้จับทุกอย่างตั้งแต่เริ่มต้นrequire(quantmod)จนถึงท้าย}สุดในบรรทัดสุดท้าย คุณจะต้องรออย่างน้อย 5 นาทีก่อนที่จะเห็นกราฟแสดงขึ้น
ซัค

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.