วิธีดึงข้อมูลราคาหุ้น Google sheet แถม Investment Portfolio

เชื่อว่าหลายคนคงเคยทำบัญชี หรือทำพอร์ต (portfolio) เก็บไว้ติดตามผล การลงทุนให้เป็นปัจจุบัน ลง google sheet กันมาบ้าง กำไรเท่าไหร่ ขาดทุนเท่าไหร่ แต่รู้หรือไม่ เราสามารถดึงข้อมูลมาลงได้แบบที่ไม่ต้องมากรอกเองปวดหัว ตาลายกันทุกรอบที่อัปเดตเลย มาดูกันว่าทำอย่างไร
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

1. วิธีดึงข้อมูลหุ้นสหรัฐ
google มีสูตรที่ดึงข้อมูลหุ้นอยู่แล้วซึ่งสามารถใช้ได้เลย

GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval])

ticker เป็นชื่อย่อของหลักทรัพย์ที่ต้องการดูข้อมูล ชื่อย่อของตลาดหลักทรัพย์ ตามด้วย ชื่อย่อของหลักทรัพย์ จริงๆ ชื่อย่อของหลักทรัพย์ อย่างเดียวก็ได้แต่มันจะเลือกให้เองถ้าใช่แค่สหรัฐ ใส่แค่ชื่อหุ้นก็ได้ เช่น ใช้ “NASDAQ:GOOG” แทน“ GOOG”

ตัวอย่าง GOOG โดย NASDAQ

GOOGLEFINANCE("NASDAQ:GOOG", "price") 

ได้ผลดังรูป

Ref
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
เราก็จะไม่ลืมที่จะลองของไทย และก็พบว่า ตลาดเหล่านี้ดึงไม่ได้ SHA SGX TYO KLSE TSE BKK(SET ของเรานั้นเอง)
ปล.ดึงอัตราแลกเปลี่ยนได้ด้วยนะ

ลองมาปรับตาราง port ดู ให้แสดงหน่วยเป็น บาท



2. วิธีดึงข้อมูลหุ้นไทย
เนื่องจากดึงผ่าน google ไม่ได้เราจึงต้องมาดึงท่าอื่นกันหน่อยโดยการอ่านจากเว็บต่างๆกันแทน

2.1 เว็บ yahoo finance
1.โดยไปที่ Extensions และ Apps Script นำโค้ดไปวาง และบันทึกด้วย

code: **แก้ไขเพิ่มเติมวันที่ 18/4/24
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

2. หา ticker ของ yahoo finance 
https://finance.yahoo.com/ 
ซึ่งดูได้จากตรงนี้ สังเกตว่าของไทยจะมี .BK ต่อท้าย
ใส่สูตร. ***โดยมันจะบอกว่าไม่รู้จัก กด enter หลังใส่สูตร


Ref
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
แต่วิธีนี้จะไม่มี DRX และ อื่นๆ เราก็อย่าลดความพยาม

2.2 เว็บ set (https://www.set.or.th/th/home)
เว็บแทนซึ่งก็ทำได้โดยใช้สูตร
IMPORTXML(url, xpath_query, locale)
url: link เว็บ
xpath : คำค้นหา (ที่อยู่ข้อมูลบนเว็บ)
Ref.  
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

URL หุ้นไทย
SET : https://www.set.or.th/th/market/product/stock/quote/[ชื่อหุ้น]/price
DRX: https://www.set.or.th/th/market/product/drx/quote/[ชื่อ DRX]/price
*** จากการใช้งานสักพักพบว่าช่วงก่อนตลาดเปิดเว็บจะไม่แสดงราคาเลยเป็น "-" ถ้าอยากได้แบบเก็บอัพเดตทุกเที่ยงคืนลองรีเควทกันมาได้ครับ
วิธีหา url
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

xpath ราคาหุ้น = "//div[contains(@class,'stock-info')]”
วิธีหา xpath
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

จะได้

=importxml("https://www.set.or.th/th/market/product/stock/quote/AOT/price","//div[contains(@class,'stock-info')]")

ผลลัพธ์:



3. วิธีดึงข้อมูลราคาทอง
ดึงจากสมาคมทองไทย https://www.goldtraders.or.th/
ใช้วิธี IMPORTXML เหมือนเดิม

=importxml("https://www.goldtraders.or.th/","//span[@id='DetailPlace_uc_goldprices1_lblBLBuy']")




4. ดึงข้อมูลราคากองทุน
ผ่าน settrade.in.th
url:https://www.settrade.com/th/home
หุ้นไทยก็แล้ว แลัวกองทุนละดึงยังไง ไม่รอช้าเราก็ลอง IMPORTXML ก่อน จะได้ค่าว่างมา 555 เพราะเว็บใช้ javascript ในการแสดงผลจึงต้องท่ายากกันหน่อย

ใช้การสร้าง app script เหมือน yahoo ต้องเขียนโค้ดกันหน่อย แต่ทำมาแล้วไม่ต้องห่วง copy paste ได้เลย
โดยไปที่ Extensions และ Apps Script ใส่ code และกดบันทึก

***มีการแก้ไขเป็น setMutualfundInfo
function getField(field, contentText, input, result) {
const regexPattern = new RegExp(`${field}:([\\w\\$]+)`);
// find nav variable
const matchAnswer = contentText.match(regexPattern);
const ansChar = matchAnswer[1]
//find index variable

const index = input.findIndex(ans => ans === ansChar)
return result[index]
}
function setMutualfundInfo(ticker) {
const url = `https://www.settrade.com/th/mutualfund/quote/${ticker}/overview`;
const res = UrlFetchApp.fetch(url, {
muteHttpExceptions: true
 });
const contentText = res.getContentText();

// get all variable ["a","b",...]
const matchInput = contentText.match(/window\.__NUXT__=\(function\(([^)]*)\)/);
const input = matchInput[1].split(',')
//get all value. [10.5,"KSAM"]
const matchResult = contentText.match(/}}\(([\s\S]*?)(?=\)\);)/);
const result = JSON.parse('[' + matchResult[1].replace(/(?<=,)(\.)(?=\d)/g, '0$1') + ']');
const navPerUnit = getField("navPerUnit", contentText, input, result)
 
return navPerUnit
}
2. ใช้งาน





ไหนๆทำขนาดนี้แล้ว ขอทำแยกแล้วเอาผลมารวมกันเลยได้ไหม ใช้สูตร เพื่อนำข้อมูลจากหน้าชีตอื่นๆมารวม และใส่สูตรคำนวณสัดส่วน จะได้ดังภาพ

แจกหน่อยเผื่อคนอยากเอาไปใช้งาน
Google Sheet:docs.google.com/spreadsheets/d/1BnFX2Kub-BevVBlykHwgG9JT8Qw0-nB_oST17y1IlaM/copy
ใครมีไอเดียแนะนำ แลกเปลี่ยนกันได้เลยครับ

ฝากติดตามด้วยนะครับ
https://www.facebook.com/my.money.toolkit

ตอนนี้มีเวอร์ชั่นดึงกราฟหุ้นสหรัฐด้วยครับ
https://ppantip.com/topic/42446965
แก้ไขข้อความเมื่อ

แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่