Day: May 14, 2015

  • เทคนิคการอ่านค่าจากเว็บไซต์ที่มีการเปลี่ยนแปลง (ราคาหุ้น) มาเก็บไว้บน 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