เขียน indicator ของตัวเอง - II
RSI เป็น indicator ที่ใช้งานได้ดี แต่ก็นับว่าค่อนข้างเก่าแล้วในแง่ของ indicator สมัยใหม่ ในแบบฝึกหัดนี้ คุณจะได้เขียน indicator อีกตัวหนึ่งขึ้นมาเองแบบง่าย indicator นี้มีชื่อว่า David Varadi Oscillator (DVO) สร้างขึ้นโดย David Varadi นักวิจัยเชิงปริมาณ
จุดประสงค์ของ oscillator นี้คล้ายกับ RSI ตรงที่พยายามหาโอกาสซื้อเมื่อราคาลดลงชั่วคราว และขายเมื่อราคาปรับตัวขึ้นชั่วคราว นอกจากข้อมูลตลาดพื้นฐานแล้ว ฟังก์ชัน oscillator ยังรับช่วงเวลาย้อนหลัง (lookback period) อีก 2 ค่า
ขั้นแรก ฟังก์ชันจะคำนวณอัตราส่วนระหว่างราคาปิดกับค่าเฉลี่ยของราคาสูงและราคาต่ำ จากนั้นนำค่า SMA มาปรับให้เรียบเพื่อลด noise โดยปกติใช้กรอบเวลาสั้นมาก เช่น 2 วัน สุดท้าย ฟังก์ชันจะใช้ runPercentRank() เพื่อคำนวณ running percentage rank ของค่าเฉลี่ยอัตราส่วนนี้ แล้วคูณด้วย 100 เพื่อแปลงเป็นสเกล 0-100
ลองนึกถึงการที่นักเรียนได้รับ percentile score หลังสอบมาตรฐาน เช่น หากนักเรียนได้คะแนน 800 ในส่วนคณิตศาสตร์ อาจอยู่ใน percentile ที่ 95 ระดับประเทศ runPercentRank() ทำสิ่งเดียวกัน แต่คำนวณตามช่วงเวลา indicator นี้ให้ rank ของการสังเกตล่าสุดเมื่อเปรียบเทียบกับข้อมูลในช่วงเวลาย้อนหลังที่ผู้ใช้กำหนด ตัวอย่างเช่น หากค่า runPercentRank เท่ากับ .90 โดยใช้ lookback period 126 หมายความว่าค่านั้นอยู่ใน percentile ที่ 90 เมื่อเทียบกับตัวเองและข้อมูล 125 จุดก่อนหน้า
หน้าที่ของคุณคือสร้าง indicator นี้และบันทึกไว้เป็น DVO โค้ดส่วนหนึ่งได้เตรียมไว้ให้แล้ว และแพ็กเกจ quantstrat, TTR และ quantmod ถูกโหลดเข้า workspace ของคุณเรียบร้อยแล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเทรดหุ้นด้วย R
คำแนะนำการฝึกหัด
- สร้างและตั้งชื่อฟังก์ชัน
DVOสำหรับ indicator ที่อธิบายไว้ข้างต้น โดยฟังก์ชันนี้มี 3 อาร์กิวเมนต์ ได้แก่HLC,navg(ค่าเริ่มต้นคือ 2) และpercentlookback(ค่าเริ่มต้นคือ 126) - อัตราส่วนของราคาปิด (
Cl()) ของHLCหารด้วยค่าเฉลี่ยของราคาสูง (Hi()) และราคาต่ำ (Lo()) ได้เตรียมไว้ให้แล้ว - ใช้
SMA()เพื่อคำนวณค่าเฉลี่ยเคลื่อนที่ของอัตราส่วนนี้ โดยกำหนดพารามิเตอร์ผ่านอาร์กิวเมนต์navgและบันทึกผลลัพธ์เป็นavgratio - ใช้
runPercentRank()เพื่อสร้างระบบจัดอันดับเปอร์เซ็นต์สำหรับavgratio
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Declare the DVO function
DVO <- function(___, navg = ___, percentlookback = ___) {
# Compute the ratio between closing prices to the average of high and low
ratio <- Cl(HLC)/((Hi(HLC) + Lo(HLC))/2)
# Smooth out the ratio outputs using a moving average
avgratio <- SMA(ratio, n = ___)
# Convert ratio into a 0-100 value using runPercentRank()
out <- runPercentRank(___, n = percentlookback, exact.multiplier = 1) * 100
colnames(out) <- "DVO"
return(out)
}