r_candlestick_recognition_gornnutagorn_banner1

สวัสดีครับ ในตอนนี้ ผมจะมาแนะนำเกี่ยวกับการใช้ ภาษา 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 กำหนดวันเวลาได้เลย จากนั้น ผมเปลี่ยนชื่อคอลัมน์เพื่อความสะดวกเล็กน้อย และสุดท้ายลองมาพล้อตกราฟดูก่อน  จะได้ตามแบบด้านล่างครับ

AAPL_R_Quantmod_2014_2016

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 จะได้หน้าตาประมาณนี้ครับ
output_excel_example_goennutagorn_ตรวจจับกราฟแท่งเทียนด้วย_R

จากผลลัพธ์ที่ได้ รวมทั้ง Pattern อื่นๆที่ผมลอง ก็ได้ผลลัพธ์ที่ไม่ค่อยแม่น แบบ ทำนายกำไรไม่ค่อยได้ครับ หรือไม่ต่างจากโยนเหรียญเท่าไหร่เลยครับ

แต่นั่นมันไม่ใช่เรื่องแปลกครับ เพราะการใช้กราฟแท่งเทียน ควรจะต้องประกอบไปด้วยปัจจัยหลายๆอย่าง เช่น Trend / Time Frame บลาๆๆ คืออย่างผม จะใช้แท่งเทียนเป็นจุดตัดสินใจสุดท้ายก่อนซื้อขาย หลังจากทีไ่ด้คิดเรื่องอื่นมาอย่างถี่ถ้วนแล้วเท่านั้น (เป็นความชอบเฉพาะตัวครับ – คนอื่นๆหรือสายเทคนิค อาจต่างไปจากนี้ครับ)

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

และนี่ก็คือความสามารถของ R อีก 1 อย่างครับ

ขอขอบคุณที่อ่านจนจบครับ

Created by : GornNutagorn

 

ช่องทางอื่นๆของ GornNutagorn

Facebook : https://www.facebook.com/GornNutagorn/

Youtube : www.youtube.com/c/GornNutagornChannel

 

Sponsored by :

#####################################

grocerlock_โกรเซอล็อค

 

สนับสนุนโดย : www.grocerlock.com (คลิกเพื่อเข้าเว็บ)

ซุปเปอร์มาร์เก็ตออนไลน์ ขายสินค้าอุปโภคบริโภคทั่วไป

ขายปลีก-ส่ง / ต่อรองได้ / ส่งทั่วประเทศ

FB อินบ้อกได้ที่ : https://www.facebook.com/grocerlock (คลิกเพื่อส่งข้อความทางอินบ็อกซ์)

ซื้อผ่านไลน์ได้ที่ Line ID : @grocerlock (คลิกเพื่อเพิ่มเพื่อน)

#####################################

LEAVE A REPLY

Please enter your comment!
Please enter your name here