Best Day for DCA — EP. 1 | วันไหนเหมาะกับการ DCA มากที่สุด?

Boon Worayut Aksornukul
3 min readDec 6, 2023

--

ผมเป็นคนหนึ่งที่อยากลงทุนในหุ้นต่างประเทศ แต่ก็ไม่รู้ว่าจะหาจังหวะซื้อที่เหมาะสมยังไง เลยใช้วิธีการที่นิยมกันอย่าง DCA หรือ Dollar-Cost Averaging ซึ่งก็คือการซื้อหุ้นในราคาที่เท่ากันเป็นงวด ๆ (ส่วนใหญ่จะเป็นทุก ๆ เดือน) โดยงวดไหนราคาหุ้นสูง เราก็จะได้จำนวนหุ้นน้อย และงวดไหนราคาหุ้นต่ำเราก็จะได้จำนวนหุ้นเยอะ

ในแอพส่วนใหญ่จะมีบริการให้เราทำการ DCA อย่างแอพ Dime ที่ให้เรา DCA หุ้นอเมริกาได้ทุกเดือนโดนที่เราต้องระบุวันที่ต้องการซื้อหุ้นในแต่ละเดือน

ทีนี้ผมก็ติดอยู่นิดนึงว่าเราจะเลือกวันไหนดีล่ะ วันนี้เลยอยากมาลองทำโปรเจคง่าย ๆ ที่เอาข้อมูลราคาของหุ้นที่สนใจในอดีตมาดูว่าตั้งแต่วันที่ 1 ถึง 31 นั้นถ้าเรา DCA แล้วจะให้ผลตอบแทนเป็นยังไง และ DCA วันไหนในผลตอบแทนสูงที่สุด

ในโปรเจคนี้จะใช้เพียง HTML, CSS, และ Javascript ธรรมดา ๆ โดยไม่ได้ใช้ framework อะไรซับซ้อนครับ

ผมแบ่งสิ่งที่ต้องทำมาดังนี้

  1. ดึงข้อมูลราคาหุ้นในอดีต
  2. คำนวนว่าการ DCA ตั้งแต่วันที่ 1 ถึง 31 จะให้ผลตอบแทนเท่าไหร่บ้าง
  3. จัดเรียงลำดับว่าวันไหนได้ผลตอบแทนสูงสุด
  4. แสดงข้อมูลผ่านไฟล์ HTML

ก่อนอื่นเรามาสร้างไฟล์เตรียมไว้ 3 ไฟล์ดังนี้

  1. index.html
  2. style.css
  3. script.js

index.html

ในไฟล์ index.html จะมีโครงสร้างดังนี้

<!DOCTYPE html>
<html>
<head>
<title>Fetch API Data Example</title>
<script src="script.js" defer></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- Dropdown for stock selection -->
<label for="stockSelect">Choose a stock:</label>
<select id="stockSelect">
<!-- Add more stocks as needed -->
</select>

<!-- Radio buttons for time frame selection -->
<div id="timeFrame">
<label><input type="radio" name="timeframe" value="1"> 1 Year</label>
<label><input type="radio" name="timeframe" value="2"> 2 Years</label>
<label><input type="radio" name="timeframe" value="5"> 5 Years</label>
<label><input type="radio" name="timeframe" value="10"> 10 Years</label>
</div>

<!-- Fetch button for retrieving data and finding the best day-->
<button id="fetchButton">Fetch Data</button>
<div id="dataDisplay">...</div>
</body>
</html>

ในโครงสร้าง html จะแบ่งหน้าจอเป็น 3 ส่วนคือ

  1. ส่วนสำหรับเลือกชื่อหุ้น จะมีลักษณะเป็น drop down list
  2. ส่วนสำหรับเลือก timeframe เพื่อเลือกระยะเวลาในการคำนวน จะมีลักษณะเป็น radio buttons
  3. ปุ่มสำหรับดึงข้อมูลจาก API และคำนวนผลตอบแทนที่ดีที่สุดในการ DCA

ดึงข้อมูลราคาหุ้นในอดีต

เราจะใช้บริการ API สำหรับดึงข้อมูลราคาหุ้นในอดีตมาจากเว็ป https://www.alphavantage.co กันครับ โดยจะเป็นบริการฟรีครับ แต่จะมี limit การ request อยู่ที่ 25 request ต่อวัน

ก่อนอื่นเราต้องทำการขอ API Key ของเรามาก่อนครับโดยที่เข้าไปที่ https://www.alphavantage.co แล้วเลือก GET FREE API KEY

แล้วก็แค่กรอกราคาลงไปแล้วก็จะได้ API Key มา จากนั้นเราก็มาดูวิธีใช้งานกันครับ

เราสามารถไปที่หน้า https://www.alphavantage.co/documentation/ เพื่อดูรายละเอียดบริการทั้งหมดของ AlphaVantage ได้เลย

ฟังค์ชั่นหลักที่เราจะใช้งานจะเป็น TIME_SERIES_DAILY หรือข้อมูลราคารายวันของหุ้นครับ

เราสามารถทดลองโดยการใส่ url ตามในภาพใน web browser ได้เลยครับ

ยกตัวอย่างเช่น หากเราต้องการจะดูราคาหุ้น Microsoft ในอดีตจนถึงปัจจุบัน เราจะใส่ url ตามนี้

https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=xxxxxxxxxxxxxxxxx

ในที่นี้เราต้องเปลี่ยน apikey เป็นของเราเองนะครับ

ผลลัพท์จะมาในรูปแบบ JSON ตามในรูปด้านล่างนี้ครับ

เราจะนำไฟล์ JSON ที่ได้มานี้ในการคำนวนต่อไป

จะ fetch ข้อมูลโดยนำไปใส่ใน script.js ดังนี้

async function fetchData() {
try{
var symbol = "ibm"
var apiKey = "xxxxxxxxxxxxxxxxx" // put your own api key
var url = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&outputsize=full&symbol=${symbol}&apikey=${apiKey}`
var response = await fetch(url)
var data = await response.json()

}catch(e){
console.log("error:", e)
alert("Could Not Get Stock Data!!! - You may have exceeded API request limit" + "\n" + e.message)
}
}

หลังจากที่เราได้ข้อมูลราคาหุ้นในอดีตแล้ว ตอนต่อไปจะพาไปคำนวนและแสดงวันที่ DCA แล้วจะได้ผลตอบแทนที่ดีที่สุดกัน

หมายเหตุ: การลงทุนมีความเสี่ยง ผู้ลงทุนควรศึกษาข้อมูลก่อนการตัดสินใจลงทุน และผลการดำเนินงานในอดีต มิได้เป็นสิ่งยืนยันถึงผลการดำเนินงานในอนาคต

--

--