เทคนิคการอ่านค่าจากเว็บไซต์ที่มีการเปลี่ยนแปลง (ราคาหุ้น) มาเก็บไว้บน Google Sheets

มีโจทย์ว่าต้องการคำนวนค่า Indicator ชื่อ RSI ของกองทุนรวมในต่างประเทศ ซึ่งปิดการซื้อขายเวลา 04:00 ของเวลาในประเทศไทย ทางกองทุนจะประกาศราคา (NAV) ในเวลาประมาณ 09:00 แต่ในการตัดสินใจลงทุน จะต้องพิจารณาค่า RSI ซึ่งกองทุนจะคำนวนและประกาศให้ประมาณ 12:00 ซึ่งบางทีก็หลงลืม และไม่ทันการ

การคำนวนค่า RSI ใช้ค่าการเปลี่ยนแปลงของราคา แบ่งเป็น Gain และ Loss แล้วมาหาค่าเฉลี่ยและเข้าสูตรคำนวน (ไม่ขอกล่าวถึง หากต้องการทราบข้อมูลเพิ่มเติม อ่าน http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:relative_strength_index_rsi)

สรุปคือ หากต้องการทราบค่า RSI ก่อนที่ทางกองทุนจะประกาศให้ ก็ต้องคำนวนเอง โดยจดค่าการเปลี่ยนแปลงของราคาในแต่ละวันซึ่งเป็นงานที่น่าเบื่อ จึงต้องหาวิธีลดภาระ

แนวคิดคือ เว็บไซต์ http://www.bloomberg.com/quote/WGHCEPA:ID ซึ่งจะประกาศราคา NAV ในเวลา 09:00 นั้น หากเปิด HTML ดูจะพบว่าข้อมูลที่ต้องการจะอยู่ในรูปแบบของ

...
<meta itemprop="price" content="46.92">
...
<meta itemprop="priceChange" content="0.16">
...
<meta itemprop="priceChangePercent" content="0.34">
...
<meta itemprop="quoteTime" content="2015-05-11T00:59:30-0400">

จากนั้น สร้าง Function ตามนี้

function getWGHCEPA(){
 var content=UrlFetchApp.fetch("http://www.bloomberg.com/quote/WGHCEPA:ID");
 //'<meta itemprop="priceChange" content="0.16">';
 var data = content.getContentText().match(/meta itemprop="(.*)" content="(.*)"/mg );
 
 var id="xxxxxxxxxxxxxxxxxxxx Your file ID xxxxxxxxxxxxxx";
 var db=SpreadsheetApp.openById(id);
 var table=db.setActiveSheet(db.getSheetByName("Data"));
 
 var result=[];
 for (var i=0; i<data.length; i++){
 var temp=data[i].match(/meta itemprop="(.*)" content="(.*)"/); 
 result[temp[1]]=temp[2];
 } 
 
 table.appendRow([result["quoteTime"], result["price"], result["priceChange"], result["priceChangePercent"]]);
 
}

จากนั้น ตั้ง Trigger ให้ทำงานวันละครั้ง เวลาตั้งแต่ 09:00-10:00 เป็นอันเรียบร้อย

wghcepa-trigger

ผลที่ได้

wghcepa-result