ถึงคราวหุ้นไทย กองทุนไทยที่หลายคนรอคอย (ไม่รู้มีไม่ใครรอกันรึเปล่า555)
หุ้นไทย
เนื่องจากหุ้นไทย ไม่สามารถถึงข้อมูลกันมาโชว์มาได้จาก api ตรงๆ หรือหน้าเว็บได้ง่ายๆ เราเลยดึงจากเว็บต่างประเทศแทนโดยได้ข้อมูลกราฟซึ่งมีการดีเลย์บ้างจาก
https://finance.yahoo.com/
โดยดึงข้อมูลเป็น json ซึ่งเราได้ใช้ app script มาช่วยในการแปลงขอมูลในรูป sheets จาก
https://github.com/thisdavej/getJSON-google-sheets
ส่วนค่าเปลี่ยนแปลงในแต่ละวันก็ดึงจาก set.or.th ซึ่งอาจจมี delay แล้วแต่ทาง google แต่ถ้าสำหรับดูภาพรวมแล้วใช้ได้แน่นอนครับ
โดยใช้ importxml ของ google
หน้าตาจะออกมาประมาณนี้ครับโดยตัด treemap และวันประกาศงบ ออกไปจากเวอร์ชั่นหุ้นอเมริกา เพราะดึงข้อมูลไม่ได้ ใครมีช่องทางแนะนำบอกได้เลยนะครับ
แต่ใช่ว่าเราจะปล่อยให้ข้างล่างว่างเราเลยเอาราคาทองมาโชว์สักหน่อยโดยเป็นราคาจากตัวเทียบเคียงซึ่งจะใกล้เคียงแต่คงไม่เป๊ะดังรูป
ในส่วนของหน้าตั้งค่า watchlist เราก็จะทำหน้าตาออกมาคล้ายกับแบบเดิม แต่หลังจากที่ลองใช้สักพัก ปรากฏว่าเราดึงจากเว็บถ้าดึงใหม่ที่ละช่องจะช้ามากจนโหลดไม่ขึ้นกันเลย เราเลยต้องดัดแปลงหน้าหน่อยโดยดึงข้อมูลพร้อมกันในหลายช่องในทีเดียว
=TRANSPOSE(importxml("<https://www.set.or.th/th/market/product/stock/quote/"&C3&"/price","(//div[contains(@class,'quote-info')>]/div[2]/div[1])[2]|//div[contains(@class,'stock-info')][1]|(//div[contains(@class,'date-range-week-value')]/span[1])[1]|(//div[contains(@class,'date-range-week-value')]/span[2])[1]"))
เห็นอย่าพึ่งตกใจ 555 คือ importxml ธรรมดา แต่การดึงข้อมูลมาครั้งละหลายตัวแทนในรูปแบบ
(”xpath”)[1] | (”xpath”)[1] | (”xpath”)[1]
จะเห็นว่ามีประโยขน์มากไม่ต้องดึงหลายรอบถ้าเว็บเดียวกัน (ซึ่งใช้วิธีนี้เหมือนกันกับหน้า dashboard) แต่ข้อสังเกตคือมันจะไม่เรียงตามที่เราต้องการ มันจะมาตามที่เจอก่อน
และในส่วนของ data ในช่องสุดท้ายที่เราดึงจาก yahoo เช่นกัน ดึงมาเก็บไว้แล้วให้ช่องอื่นๆในการคำนวณราคาที่เปลี่ยนไปในช่วง 1m 3m เป็นต้น
ส่วน sinal ก็ไปปรับสูตรกันเองนะครับ555

แต่ถ้าสังเกตรอบนี้เราจะเพิ่ม หน่วยที่ลงด้วยเพราะคิดว่าจะเป็นประโยชน์กันกับการติดตาม port ไว้ให้ตกใจเล่น 555

แจกหุ้นไทย
https://cutt.ly/iwNxqvIZ
กองทุนไทย
รอบนี้เราดึงข้อมูลจากเว็บเดิมโดยต้องมาอ่านเพิ่มกันหน่อย แต่ว่ากองทุนเราติดตามกันได้แค่ภาพรวมเลยจะเหลือแค่หน้า watchlist
code
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้function setMutualfundChart(ticker) {
const url = `https://www.settrade.com/th/mutualfund/quote/${ticker}/overview`;
const res = UrlFetchApp.fetch(url, {
muteHttpExceptions: true
});
const contentText = res.getContentText();
const output = getChartData(contentText)
return output
}
function getChartData(contentText){
const output = [];
try {
//get quotations
const regexQuotations = /quotations:\\[(.*?)\\]/;
const quotations = contentText.match(regexQuotations);
//get navPerUnit per day
const regex = /date:"([^"]+)",navPerUnit:(\\d+\\.\\d+)/g
const matches = quotations[1].match(regex);
const dataChart = matches.map(q => {
const text = q.split(',')
return {
date: Utilities.formatDate(new Date(text[0].match(/date:"([^"]+)"/)[1]), Session.getScriptTimeZone(), "dd/MM/yyyy"),
nav: parseFloat(text[1].match(/navPerUnit:(\\d+\\.\\d+)/)[1])
}
})
dataChart.forEach((item) => {
output.push([item.date, item.nav])
});
} catch {
return []
}
return output
}
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)
console.log(field, ansChar, result[index])
return result[index]
}
function getPercentChanges(data) {
const percentChangesRegex = /percentChange:([\\-0-9.]+)/g;
const percentChanges = [];
let match;
while ((match = percentChangesRegex.exec(data)) !== null) {
percentChanges.push(parseFloat(match[1]));
}
return percentChanges;
}
function setMutualfundInfo(ticker = "KFHTECH-A") {
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)
const amcName = getField("amcName", contentText, input, result)
const name = getField("name", contentText, input, result)
const dividendPolicy = getField("dividendPolicy", contentText, input, result)
const factsheetUrl = getField("factsheetUrl", contentText, input, result)
const percentChanges = getPercentChanges(contentText).slice(0, 7); // [ ytd,1w,1m,3m,6m , 1y, 3y ,...]
const chart = getChartData(contentText).map(d=>d[1]).join(",")
return [navPerUnit,name.replace(/"/g, ''), amcName.replace(/"/g, ''), dividendPolicy.replace(/"/g, ''), factsheetUrl.replace(/"/g, ''), ...percentChanges,chart
];
}
อธิบายคร่าวๆคือการ map ข้อมูลให้อ่านรู้เรื่องจากการที่มันทำการลดการใช้ข้อมูลซ้ำ

โดยที่ดึงมามีข้อมูล ราคาปัจจุบัน ชื่อ ชื่อ บลจ. จ่าย/ไม่จ่ายปันผล factsheet ราคาย้อนหลัง 1 ปี และกราฟไว้ดูความเคลื่อนไหวของ port

อาจจะมีช้าๆกันบ้างก็รอๆ หรือกดไปเว็บ settrade ที่แปะไว้ขวาสุดกันเลย 555
แจกกองทุนไทย
https://cutt.ly/PwND9yuy
ใครที่อยากติดตามเรื่องราวดีๆ เครื่องมือที่จะช่วยให้ชีวิตคุณง่ายขึ้น ติดตามเราได้ไว้เลย ฝากเพจ My Money Toolkit ไว้ด้วยนะครับ
https://www.facebook.com/my.money.toolkit
สร้าง Trading View Watchlist ด้วย Google sheets
https://pantip.com/topic/42530849
วิธีดึงข้อมูลราคาหุ้น Google sheet แถม Investment Portfolio
https://pantip.com/topic/42446965
สร้าง Trading View Watchlist ดึงราคาหุ้นไทย กองทุน
ถึงคราวหุ้นไทย กองทุนไทยที่หลายคนรอคอย (ไม่รู้มีไม่ใครรอกันรึเปล่า555)
หุ้นไทย
เนื่องจากหุ้นไทย ไม่สามารถถึงข้อมูลกันมาโชว์มาได้จาก api ตรงๆ หรือหน้าเว็บได้ง่ายๆ เราเลยดึงจากเว็บต่างประเทศแทนโดยได้ข้อมูลกราฟซึ่งมีการดีเลย์บ้างจาก https://finance.yahoo.com/
โดยดึงข้อมูลเป็น json ซึ่งเราได้ใช้ app script มาช่วยในการแปลงขอมูลในรูป sheets จาก https://github.com/thisdavej/getJSON-google-sheets
ส่วนค่าเปลี่ยนแปลงในแต่ละวันก็ดึงจาก set.or.th ซึ่งอาจจมี delay แล้วแต่ทาง google แต่ถ้าสำหรับดูภาพรวมแล้วใช้ได้แน่นอนครับ
โดยใช้ importxml ของ google
หน้าตาจะออกมาประมาณนี้ครับโดยตัด treemap และวันประกาศงบ ออกไปจากเวอร์ชั่นหุ้นอเมริกา เพราะดึงข้อมูลไม่ได้ ใครมีช่องทางแนะนำบอกได้เลยนะครับ
แต่ใช่ว่าเราจะปล่อยให้ข้างล่างว่างเราเลยเอาราคาทองมาโชว์สักหน่อยโดยเป็นราคาจากตัวเทียบเคียงซึ่งจะใกล้เคียงแต่คงไม่เป๊ะดังรูป
ในส่วนของหน้าตั้งค่า watchlist เราก็จะทำหน้าตาออกมาคล้ายกับแบบเดิม แต่หลังจากที่ลองใช้สักพัก ปรากฏว่าเราดึงจากเว็บถ้าดึงใหม่ที่ละช่องจะช้ามากจนโหลดไม่ขึ้นกันเลย เราเลยต้องดัดแปลงหน้าหน่อยโดยดึงข้อมูลพร้อมกันในหลายช่องในทีเดียว
เห็นอย่าพึ่งตกใจ 555 คือ importxml ธรรมดา แต่การดึงข้อมูลมาครั้งละหลายตัวแทนในรูปแบบ
และในส่วนของ data ในช่องสุดท้ายที่เราดึงจาก yahoo เช่นกัน ดึงมาเก็บไว้แล้วให้ช่องอื่นๆในการคำนวณราคาที่เปลี่ยนไปในช่วง 1m 3m เป็นต้น
ส่วน sinal ก็ไปปรับสูตรกันเองนะครับ555
แต่ถ้าสังเกตรอบนี้เราจะเพิ่ม หน่วยที่ลงด้วยเพราะคิดว่าจะเป็นประโยชน์กันกับการติดตาม port ไว้ให้ตกใจเล่น 555
แจกหุ้นไทย
https://cutt.ly/iwNxqvIZ
กองทุนไทย
รอบนี้เราดึงข้อมูลจากเว็บเดิมโดยต้องมาอ่านเพิ่มกันหน่อย แต่ว่ากองทุนเราติดตามกันได้แค่ภาพรวมเลยจะเหลือแค่หน้า watchlist
code
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
อธิบายคร่าวๆคือการ map ข้อมูลให้อ่านรู้เรื่องจากการที่มันทำการลดการใช้ข้อมูลซ้ำ
โดยที่ดึงมามีข้อมูล ราคาปัจจุบัน ชื่อ ชื่อ บลจ. จ่าย/ไม่จ่ายปันผล factsheet ราคาย้อนหลัง 1 ปี และกราฟไว้ดูความเคลื่อนไหวของ port
อาจจะมีช้าๆกันบ้างก็รอๆ หรือกดไปเว็บ settrade ที่แปะไว้ขวาสุดกันเลย 555
แจกกองทุนไทย
https://cutt.ly/PwND9yuy
ใครที่อยากติดตามเรื่องราวดีๆ เครื่องมือที่จะช่วยให้ชีวิตคุณง่ายขึ้น ติดตามเราได้ไว้เลย ฝากเพจ My Money Toolkit ไว้ด้วยนะครับ
https://www.facebook.com/my.money.toolkit
สร้าง Trading View Watchlist ด้วย Google sheets
https://pantip.com/topic/42530849
วิธีดึงข้อมูลราคาหุ้น Google sheet แถม Investment Portfolio
https://pantip.com/topic/42446965