สวัสดีครับ ในตอนนี้ ผมจะมาแนะนำเกี่ยวกับการใช้ ภาษา R มาช่วยในเรื่องของการลงทุนนะครับ อาจจะเริ่มไม่เกี่ยวแล้วว่า ใช้แทน Excel เพราะอะไร? อันนี้ง่ายๆเลยครับ คือ “ผมหาตัวช่วยนี้ใน Excel ไม่เจอเลยครับ”
บทความนี้ สำหรับท่านที่ไม่เคยเล่นหุ้นเล่นทอง เชิงเทคนิคหรือใช้กราฟ อาจไม่เก็ท เลยนะครับ แต่คนที่เล่น โดยเฉพาะสายเทคนิค น่าจะคุ้นเคยเป็นอย่างดีเลยครับ
คือผมเป็นคนที่ เล่นหุ้น เล่นทอง แต่ปกติผมจะเน้นการเล่นแบบอิงพื้นฐานเป็นหลัก อย่างไรก็ตาม มันก็จำเป็นต้องรู้เรื่องเทคนิคควบคู่ไปด้วย ซึ่งตัวที่ผมสนใจเป็นพิเศษมานานแล้ว คือ การวิเคราะห์แนวโน้มราคาโดยกราฟแท่งเทียน ( Candlestick Chart Pattern ) เนี่ยแหละครับ
ผมเคยเขียนบทความเรื่อง กราฟแท่งเทียน และ สรุป Pattern ไว้ ตามลิงค์นี้เลยนะครับ
https://gornnutagorn.com/2018/04/27/candlestick-chart-80-pattern-cheat-sheet/
มาเริ่มกันเลยครับ คือวันนึงผมนึกอยากลองวิเคราะห์ว่า จะ ดักจับ “สัญญาณแท่งเทียน” ( pattern ทั้งแบบ Reversal และ Continuation ) ของหุ้นอย่างเป็นระบบ ขึ้นมาได้อย่างไร เลยลองไปค้นว่า R จะช่วยผมในเรื่องนี้ได้หรือไม่ ปรากฏว่า มีคนทำ Package เรื่องนี้ไว้ครับ ถึงแม้ว่า ผู้ที่ทำ อาจไม่ได้ใส่ Pattern ไว้ทุกอย่าง (เช่นผมหา Tri Star ไม่เจอ) และผมไม่รู้ว่าปรับแต่งค่าแบบละเอียดๆได้อย่างไร แต่ผมว่าแค่มีคนทำไว้ให้ ก็สุดยอดมากแล้วครับ
อันที่จริง ตอนแรกผมค้นจากภาษา Python ก่อนว่าทำเรื่องนี้ได้หรือไม่ ก็ไปเจอ TA-Lib library ว่าทำได้เหมือนกัน แต่พอใช้ก็รู้สึกแปลกๆ เลยหยุดไว้ก่อน (อยากทราบว่าเพราะอะไร ลอง google ดูได้เลยครับ)
ผมจะแบ่งการอธิบายเป็น 2 แบบนะครับ คือเฉพาะคำสั่ง / และตัวอย่างที่ผมคิดขึ้นมาเองครับ
**ผู้ที่ไม่เคยใช้ R ลองอ่านวิธีการลง R แบบคร่าวๆที่ท้ายบทความตามลิงค์นี้นะครับ**
https://gornnutagorn.com/2018/04/29/r-excel-2-market-basket-analysis/
แบบที่ 1
เฉพาะคำสั่งในการใช้
การใช้ก็ไม่มีอะไรมากเลยครับ ท่านจะต้องมีข้อมูลหุ้นแบบ Time Series โดยเป็นข้อมูลประเภท xts ใน R นะครับ (ในตัวอย่าง แบบที่ 1 นี้ ผมโหลดราคาหุ้น AAPL โดยใช้ Package quantmod ซึ่งจะอธิบายเพิ่มใน แบบที่ 2 ด้านล่างครับ) และใส่คำสั่งได้เลยครับ
(ผู้ที่ไม่เคยใช้ Library นี้ ให้ใช้คำสั่ง install.packages() ตามด้านล่าง เพื่อลงไว้ในเครื่องก่อนนะครับ)
> install.packages("candlesticks", repos="http://R-Forge.R-project.org")
(อ้างอิงจาก : https://rdrr.io/rforge/candlesticks/ )
เริ่มตามนี้เลยครับ
> library(candlesticks) > CSPEngulfing(AAPL['201401'])
คือโหลด library มาก่อน จากนั้นใส่คำสั่งเพื่อที่จะหาตอนที่เกิด Pattern แบบ Engulfing จากหุ้นชื่อ AAPL ในช่วง JAN2014 นะครับ ซึ่งผลลัพธ์ที่ได้จะเป็น จะประมาณตารางด้านล่างนะครับ คือออกมาเป็น Boolean นะครับ
Bull.Engulfing | Bear.Engulfing | |
02-01-14 | FALSE | NA |
03-01-14 | FALSE | FALSE |
06-01-14 | FALSE | FALSE |
07-01-14 | FALSE | FALSE |
08-01-14 | FALSE | FALSE |
09-01-14 | FALSE | TRUE |
Pattern ที่ใช้ตรวจจับได้ ก็จะมีเช่น
CSPDarkCloudCover
CSPDoji
CSPEngulfing
CSPGap
…. และอื่นๆ
โดยถ้าอยากรู้ว่าสามารถตรวจจับ Pattern อะไรได้บ้าง หรือใช้งาน Package นี้อย่างไร ผมจะอธิบายต่อใน แบบที่ 2 ด้านล่างนี้ครับ
แบบที่ 2
ตัวอย่างการใช้งานจริง
ผมใช้ข้อมูลราคารายวันหุ้น AAPL (Apple) ช่วงปี 2014 – 2016 และหาความแม่นยำของ Pattern Engulfing ในการทำกำไรวันถัดไป โดยผมจะแบ่งโค้ดเป็น 2 ส่วนย่อยนะครับ คือรันต่อกัน แต่ผมแบ่งอธิบายครับ ( ปล. โค้ดผมไม่ค่อยสวยนะครับ เน้นถึกให้ได้ผลลัพธ์อย่างเดียวครับ -_-“)
2.1 : เตรียมข้อมูล
library(candlesticks) library(quantmod) library(ggplot2) library(xlsx) library(data.table) ##1. Investigate how to use candlesticks package library(help="candlesticks" ) help(CSPHammer) ##2. Import Apple Inc data by using quantmod package from 2014 - 2016 and plot chart start <- as.Date("2014-01-01") end <- as.Date("2016-12-31") ticker1 <- getSymbols("AAPL", src = "yahoo", from = start, to = end,auto.assign=FALSE) colnames(ticker1) <- c("open","high","low","close","volume","adjusted") chartSeries(ticker1)
อธิบายนะครับ ผมเริ่มจากโหลด library ที่จำเป็นมา จากนั้น
##1 คือการเปิด help ว่า Package Candlesticks ใช้อย่างไร และมี Pattern อะไรบ้าง
##2 คือการใช้ Package Quantmod โหลดข้อมูลหุ้นมาจาก Yahoo และเรียงมาให้เรียบร้อยในรูปแบบ xts ที่เราต้องการ โดยสามารถใส่ parameter กำหนดวันเวลาได้เลย จากนั้น ผมเปลี่ยนชื่อคอลัมน์เพื่อความสะดวกเล็กน้อย และสุดท้ายลองมาพล้อตกราฟดูก่อน จะได้ตามแบบด้านล่างครับ
2.2 : แปลงและวิเคราะห์สรุปข้อมูล
##3. Create Apple time series data (xts) to be a dataframe ticker1df <- as.data.frame(ticker1) ##4. Add Next Day Profit Column ticker1df[,c("NDProf")] <- c(NA) for(i in 1:nrow(ticker1df)){ ndprof <- (ticker1df[i+1,"close"]-ticker1df[i,"close"])/ticker1df[i,"close"] ndproftrim <- formatC(ndprof,digits = 4, format = "f") ticker1df[i,"NDProf"] <- ndproftrim } ticker1df$NDProfRe <- ifelse(ticker1df$NDProf>0,TRUE,FALSE) ##5. Create "Candlestick Chart Pattern Recognition dataframe" from selected pattern ##Boolean output will be created ticker1dfpattern1 <- as.data.frame(CSPEngulfing(ticker1)) ##6. Combine them all to 1 dataframe ticker1dfall=cbind(ticker1df,ticker1dfpattern1) ##7. Check Pattern Recognition Accuracy by Printing Summary for(a in 9:ncol(ticker1dfall)){ temptab1 <- subset(ticker1dfall,ticker1dfall[,a]==TRUE) obs1 <- nrow(temptab1) positive1 <- sum(temptab1[,8], na.rm=TRUE) result1 <- positive1/obs1 result1x100 <- result1*100 result1x100trim <- formatC(result1x100,digits = 0, format = "f") pattern1 <- colnames(ticker1dfall)[a] print(paste("Pattern : ",pattern1)) print(paste(("All Observations ="),nrow(ticker1dfall))) print(paste("Selected Observations = ",obs1)) print(paste("Percent Acccuracy = ",result1x100trim,"%")) print(paste("----------")) } ##Optional - Export output dataframe to Excel File write.xlsx(ticker1dfall, "pattern_test1.xlsx")
อธิบายต่อนะครับ
##3 แปลงข้อมูลราคาให้เป็น dataframe เพื่อเตรียมวิเคราะห์ต่อไป
##4 เพิ่ม 2 คอลัมน์โดยเป็น
คอลัมน์กำไรวันถัดไป และ
คอลัมน์แบบ boolean (True/False) ว่าวัดถัดไปกำไรหรือไม่
##5 ทำ dataframe ใหม่ เช็คว่าเกิด Engulfing ตอนไหน / แบบไหนบ้าง
##6 รวม dataframe ทั้งหมดเข้าด้วยกัน
##7 ทำคำสั่งให้สรุปข้อความออกมาว่าแม่นแค่ไหน คือ ผมแค่นำจำนวนครั้งที่กำไร หารกับ จำนวนครั้งที่เกิด pattern ทั้งหมด ทำเป็น % ครับ
หากรันคำสั่งมาตั้งแต่ต้น จะได้ผลลัพธ์ออกมาตามนี้เลยครับ
[1] “Pattern : Bull.Engulfing”
[1] “All Observations = 756”
[1] “Selected Observations = 28”
[1] “Percent Acccuracy = 46 %”
[1] “———-“
[1] “Pattern : Bear.Engulfing”
[1] “All Observations = 756”
[1] “Selected Observations = 32”
[1] “Percent Acccuracy = 34 %”
[1] “———-“
จากด้านบน จะมี 2 ก้อน ผมอ่านก้อนที่ 1 แบบนี้นะครับ
Pattern : Bullish Engulfing จากข้อมูลราคาจำนวน 756 วัน / มี 28 ครั้งที่เกิด Pattern นี้ / โดยเมื่อเกิด Pattern นี้แล้วอัตราที่วันถัดไปจะได้กำไรคือ 46% (หรือได้กำไร 13 ครั้งจาก 28 ครั้ง)
##Optional สุดท้าย ถ้าอยากดูข้อมูลที่สร้างขึ้นก่อนสรุป (ข้อ ##6) ในรูป Excel ก็รันโค้ดบรรทัดสุดท้าย เพื่อ Export จะได้หน้าตาประมาณนี้ครับ
จากผลลัพธ์ที่ได้ รวมทั้ง Pattern อื่นๆที่ผมลอง ก็ได้ผลลัพธ์ที่ไม่ค่อยแม่น แบบ ทำนายกำไรไม่ค่อยได้ครับ หรือไม่ต่างจากโยนเหรียญเท่าไหร่เลยครับ
แต่นั่นมันไม่ใช่เรื่องแปลกครับ เพราะการใช้กราฟแท่งเทียน ควรจะต้องประกอบไปด้วยปัจจัยหลายๆอย่าง เช่น Trend / Time Frame บลาๆๆ คืออย่างผม จะใช้แท่งเทียนเป็นจุดตัดสินใจสุดท้ายก่อนซื้อขาย หลังจากทีไ่ด้คิดเรื่องอื่นมาอย่างถี่ถ้วนแล้วเท่านั้น (เป็นความชอบเฉพาะตัวครับ – คนอื่นๆหรือสายเทคนิค อาจต่างไปจากนี้ครับ)
ดังนั้นบทความนี้ผมเขียนขึ้นมา เพราะเห็นว่ามันน่าสนใจ + ความชอบส่วนตัว และคิดว่าน่าจะเอาไปเสริมการคิดทำโมเดลแบบอื่นๆได้ครับ โดยเฉพาะนักลงทุนสายเทคนิคครับ
และนี่ก็คือความสามารถของ R อีก 1 อย่างครับ
ขอขอบคุณที่อ่านจนจบครับ
Created by : GornNutagorn
ช่องทางอื่นๆของ GornNutagorn
Facebook : https://www.facebook.com/GornNutagorn/
Youtube : www.youtube.com/c/GornNutagornChannel
Sponsored by :
#####################################
สนับสนุนโดย : www.grocerlock.com (คลิกเพื่อเข้าเว็บ)
ซุปเปอร์มาร์เก็ตออนไลน์ ขายสินค้าอุปโภคบริโภคทั่วไป
ขายปลีก-ส่ง / ต่อรองได้ / ส่งทั่วประเทศ
FB อินบ้อกได้ที่ : https://www.facebook.com/grocerlock (คลิกเพื่อส่งข้อความทางอินบ็อกซ์)
ซื้อผ่านไลน์ได้ที่ Line ID : @grocerlock (คลิกเพื่อเพิ่มเพื่อน)