วันศุกร์ที่ 31 มกราคม พ.ศ. 2557

Optimization: ปรับค่า parameter ที่เหมาะสมใน systematic trading

เมื่อสร้างระบบ trade เลือกระบบ trade ที่เหมาะสม ตรงกับวัตถุประสงค์ในการออกแบบและมีผลลัพธ์ metric ค่าต่างๆอยู่ในระดับที่น่าพอใจแล้วขั้นตอนก่อนนำไปใช้จริง อาจค้นหาว่าค่า parameter ที่เลือกมาในการออกแบบ มีค่าที่เหมาะสมดีที่สุดแล้วหรือไม่ เพื่อนำไปใช้งานจริง บทความนำเสนอมุมมองการหาค่าที่เหมาะสม optimize value สำหรับ indicator โดยการหาค่า optimize ทำมาจากเครื่องมือ AmiBroker


การสร้างระบบ trade ในแบบ systematic trading หลังจากการสร้างระบบด้วย indicator หรือเทคนิคที่เลือกสรรมาตามหลักการ และมีการทดสอบย้อนหลัง backtest ประเมินผลการทดสอบจาก metric ด้วยค่าต่างๆ CAR(Compound Annual Return กำไรทบต้นต่อปี) win ratio, payoff, profit factor
เราก็จะสามารถเลือก กลยุทธที่ systematic tradig ที่เหมาะสมจากค่า metric เหล่านี้ได้ ว่าระบบแบบไหนที่เราต้องการใช้งาน

ในการสร้างระบบ มักจะมีตัวเลข parameter ที่ต้องกำหนดเป็นค่าตายตัวในการสร้างและทดสอบเช่น period จำนวนวันในเส้นค่าเฉลี่ย 10 วัน 25 วัน ระดับ overbought- oversold 30-70 ค่า parameter เหล่านี้เป็นค่าที่เหมาะสมดีที่สุดสำหรับระบบหรือไม่
คำตอบจะสามารถหาได้ด้วยเครื่องมือที่มี optimization แบบ amibroker หรือ metastock ที่จะ run backtest ย้อนหลัง โดยเปลี่ยนค่า parameter หลายๆค่าตามที่กำหนด เพื่อเปรียบเทียบให้ได้กำไรออกมามากที่สุด
parameter ที่ทำกำไรสูงสุดในการทำ optimize จะเป็นค่าที่น่าสนใจ

เครื่องมือแบบ amibroker metastock จะเป็นเรื่องที่ง่ายมากถ้าจะทำ optimize โดยการเพิ่มคำสั่ง keyword optimize,opt เข้าไปใน coding แล้วเลือกทดสอบแต่ถ้าไม่มีเครื่องมือเหล่านี้การทดสอบ run หา parameter จะเป็นงานที่ใช้เวลาอย่างมากในการเปลี่ยน parameter และทดสอบซ้ำ เครื่องมือเหล่านี้จะสร้างความได้เปรียบให้เวลาในการสร้างลดลงอย่างมากถ้าเทียบกับการ manual test

การประเมิน optimize จะไม่ใช้ค่าใดค่านึงเป็นตัวแทนแต่จะใช้วิธีดูที่ช่วงค่า parameter ว่าค่ามากหรือน้อยที่จะทำให้กำไรดีที่สุด เพือดูผลกระทบ บางครั้งค่า optimize อาจให้ค่าที่เป็นค่าโดดๆ ไม่มีค่าใกล้เคียง การเลือกใช้ค่านี้อาจจะไม่ได้ผลตามที่ต้องการ
แต่ถ้าค่า optimize ที่ให้กำไรดี มีค่า optimize อื่นๆ ที่อยู่ในช่วงติดกัน ก็ให้กำไรดี แม้จะน้อยกว่าก็น้อยกว่ากันไม่มาก การเลือกใช้ค่า optimize ก็จะทำให้ความผิดพลาดที่ใช้ค่าในอดีตมาดำเนินกลยุทธน้อยลง เช่น ค่า optimize ที่ได้สูงสุดคือค่า 53 รองลงไปคือ 48 ,52,49,46,50 ก็จะมีความหมายว่า ค่าในช่วงนี้น่าจะเป็นค่าที่เหมาะสม เราอาจใช้ค่า 50 เป็นตัวแทนของกลุ่มได้ แม้กำไรจะน้อยกว่าค่าอื่นๆ แต่ก็เป็นค่าที่เหมาะสมเกาะกลุ่มในกลุ่มกำไรสูงสุด หรือจะเลือก 53 โดยตรงก็ได้เช่นกัน กำไรจะไม่ต่างกันมากนัก

การ optimize ถ้าสร้างมาจากระบบที่ไม่ดี มีกลยุทธไม่เหมาะสม เป็นกลยุทธที่ขาดทุนในระยะยาว การ optimize จะไม่ช่วยให้กลยุทธดีขึ้น แต่ถ้ากลยุทธที่สร้างเป็นกลยุทธที่ดีทนทาน มีกำไรในระยะยาว การ optimize จะเพิ่มประสิทธิภาพกำไรขึ้นมาได้ อาจเพิ่มมาได้ไม่มาก แต่ก็เป็นการบ่งบอกว่า ระบบที่เราสร้างมานั้นเป็นกลยุทธที่ดี แม้มีการเปลี่ยน parameter ก็ให้กำไร และให้กำไรที่ดีขึ้นได้ด้วย

ตัวอย่างการ optimize จากกลยุทธ RSI Oversold Overbought

 การทดสอบกลยุทธและการทำ optimize ในภาพ จะใช้กลุยทธ RSI Oversold Overbought โดยใช้กลยุทธแรกภาพทางซ้ายเป็น กลยุทธซื้อของถูกและขายแพง กลยุทธนี้ในระยะยาว SET 20 ปี จะให้ผลขาดทุน -2 % ทบต้นต่อปี หลังจาก optimize Oversold Overbought level ที่ปกติจะเป็นค่า 30-70  แล้วพบว่าเกือบทุก period จะให้ผลขาดทุนคงเดิมอยู่ใต้ net profit watermark ระดับที่ทำให้ระบบกำไรแทบทั้งสิ้น
แต่มี ค่า 10-90,90-10 ที่ให้กำไร ถ้าดูไปให้ลึกจะพบว่าทั้งสองค่า optimize นี้มีการซื้อขายแค่ 1 และ 5 ครั้งในรอบ 20 ปี คงไม่ใช่กลยุทธปกติที่ใช้งานได้จริง
การ optimize กลยุทธซือถูกขายแพง ก็ไม่ได้ช่วยให้กลยุทธนี้ทำกำไรขึ้นมาได้
ความรู้เรื่อง oversold overbought นี้นับเป็นความลับของ rsi ที่ถ้าไม่มีเครื่องมือทดสอบยากที่จะรู้ข้อเท็จจริงนี้

คลิ๊กที่ภาพเพื่อดูรายละเอียด


ทดสอบการทำ Anti-RSI ภาพทางขวา คือซื้อแพงแล้วขายถูก พบเรื่องน่าประหลาด ว่า optimize หาค่า Oversold Overbought ที่ทำให้ระบบมีกำไรขึ้นมาได้ เป็นค่าที่อยู่ประมาณ 50 ถึง 55
ค่าที่เป็นเช่น 50-55,55-50,50-50 (การ optimize ใช้ step 5 ระยะห่างจึงเป็นเช่นนี้ ถ้าใช้ค่าละเอียดกว่านี้ผลลัพธ์จะต่างไปจากนี้ไม่มาก ค่าเป็นค่าที่เกาะกลุ่ม)
และให้กำไรออกมาที่ CAR 19% ต่อปี มากกว่า SET ที่ buy and hold ถือเฉยๆที่มี CAR 5-6% ได้แบบน่าพึงพอใจ
ถ้ากลยุทธ Anti-RSI เป็นกลยุทธดีที่ให้กำไร กลยุทธปกติ RSI Over ก็คงเป็นกลยุทธที่แย่ให้ผลขาดทุนนั่นเอง

สรุป

การทำ optimize จะช่วยในการเลือกค่า parameter ที่เหมาะสมให้กับกลยุทธที่ทำกำไรได้อยู่แล้ว และยังเป็นการยืนยันถึงความทนทานของกลยุทธที่แม้จะเปลี่ยนค่า parameter ระบบก็ยังทำกำไรได้ และทำกำไรได้ดี การเลือกใช้ค่า parameter หลังจาก optimize อาจใช้ค่าที่ให้กำไรที่มากทีสุดหรือค่าในช่วงที่ให้กำไรดีก็ได้ เพราะไม่ว่าอย่างไรการ backtest ก็ไม่ได้การันตีผลงานในอนาคต เลือกค่าที่เกาะกลุ่มให้กำไรดีก็เป็นที่ยอมรับได้

การมี optimize แม้จะเหมือนการทายซุ่มตัวเลขเปลี่ยน parameter ไปหลายค่า แต่ก็เป็นการทายในกลุ่มค่าที่ดี ทายผิดก็ผิดในกลุ่มที่กำไร ทายถูกก็กำไรเพิ่มขึ้นและถ้า optimize เป็นส่วนประกอบของการสร้างระบบที่มี ปรัชญาที่ดี หลักการออกแบบที่ดี ระบบที่ดี ผลทดสอบ metric ที่ดี optimize ก็จะเป็นส่วนที่ส่งเสริมให้ ผลงานที่ออกมาอยู่ในระบบที่ดีได้อย่างน่าประทับใจได้



ไม่มีความคิดเห็น:

แสดงความคิดเห็น