4-2 การใช้งานฟังก์ชั่น Optimize

การใช้งานฟังชั้น Optimize เป็นการปรับแต่งค่าของระบบเพื่อใช้ในการเรียนรู้พฤติกรรมม หรือ เพื่อผลลัพธ์ ที่ดียิ่งขึ้น การทำ Optimize สามารถทำได้ โดยโปรแกรม AmiBroker ได้ทำการเตรียมเครื่องมือไว้แล้ว เพียงแต่เราต้องเข้าใจการใช้เครื่องมือ การใช้งาน ฟังชั่น Optimize สามารถนำไปประยุกต์ ได้หลากหลาย การใช้งานมากๆ ถ้าศึกษาให้เข้าใจอย่างลึกซึ้ง

จุดประสงค์: การใช้งานฟังก์ชั่น Optimize

  1. เข้าใจลักษณะการทำ Optimization
  2. เข้าใจ Code ในการทำ Optimization
  3. เข้าใจวิธีการปรับแต่งตารางผลลัพธ์ หลังทำ Optimization

เนื้อหา: การใช้งานฟังก์ชั่น Optimize

ในบทนี้จะกล่าวถึงการติดตั้ง code เพื่อทำการ Optimization ให้กับระบบ โดย บทก่อนหน้าที่เราทำการเขียน code เพื่อสร้างระบบออกมา โดย Code ที่เราทำการเขียนจะมีส่วนหนึ่งของ Code คือ

buyCon1 = Cross(MA(C, 40), MA(C, 200));

ในบทนี้เราจะทำการปรับแต่งค่าของ MA(C, 200) โดยจะใช้คำสั่ง

oMaSlow = Optimize (“oMaSlow”, 200, 150, 250, 50);
buyCon1 = Cross(MA(C, 40), MA(C, oMaSlow));

โดยโครงสร้างของคำสั่ง Optimize จะมีลักษณะดังนี้

Optimize( “description”, default, min , max, step )
default หมายถึง ค่าตั้งต้น ในที่นี้คือ ค่า 200 เมื่อทำการกด Backtest จะดึงค่านี้มาก่อน
min หมายถึง ค่าต่ำสุดที่จะให้โปรแกรม ทำการ Optimization ในที่นี้คือ 50
max หมายถึง ค่าที่มากที่สุดที่โปรแกรมจะทำการร Optimization ในที่นี้คือ 250
step หมายถึง ค่าที่จะให้โปรแกรมขยับ โดยโปรแกรมจะทำการขยับเป็นช่วงๆ ตาม step โดยในที่นี้คือ 50 ซึ่ง โปรแกรมจะทำการ Optimization ตามค่าดังนี้ 150, 200, 250 จะสังเกตว่าจะขยับทีละ 50

หลังทำการ Optimization แล้วโปรแกรมจะทำการสร้างตารางผลลัพธ์ ซึ่ง่เราสามารถ ปรับแต่งตารางได้ โดย คลิ้กขวาที่ Colum แล้วทำการปรับแต่ง Colum ต่างๆ
เว็ปปอ้างอิง https://www.amibroker.com/guide/afl/optimize.html

วีดีโอ: การใช้งานฟังก์ชั่น Optimize

คำบรรยายวีดีโอ

ใน VDO ชุดนี้เราจะมาพูดถึง Optimize Function น่ะครับ ก็เป็น function นึงใน AmiBrokerน่ะครับที่มาช่วยทำการ Optimization น่ะครับ อ่ะเปิด AmiBroker ขึ้นมาน่ะครับดึง scroll ลงมาก่อนแล้วก็เปิด formula ของเราที่เขียนทิ้งไว้น่ะครับ อ่ะ คราวนี้เนี่ยหลักๆในส่วนนี้เราก็จะมี แบ่งการ Optimize ออกเป็น 2ประเภทหลักๆ น่ะครับ ในการ Optimize parameter อันแรกเป็น Optimize พวก อันนี้เป็น period น่ะครับ period เพราะอะไร อันนี้เป็น 40 วัน อ่ะ นี้เป็น 200 วัน ใช่ไหมครับ และก็มีพวกตัวเลขทั่วไปน่ะครับ ตัวเลขทั่วๆไป จะOptimize say night เราจะพูดกันทีหลัง อันนี้มาโชว์ให้ดูก่อนว่า การทำ Optimizeใน AmiBroker ทำยังไงน่ะครับ ซึ่งอ่ะ เดี๋ยวเราจะ Optimize ตัวเลขตัวนี้น่ะครับ ตัว 200 วัน ลอง test ดูว่าจะเป็นยังไง เราก็เขียนสูตร Optimize ขึ้นมาก่อน ชึ่งอันนี้กรณีนี้เราจะเห็นว่าเป็นอะไรครับ Cross / moving average close 40 ใช่ไหมครับ Cross /moving average close 200 / 200 นี้เป็นอะไรครับ เป็น Slowเป็น Slow period อันนี้เป็น fast period อ่ะ แล้วก็ตั้งชื่อขึ้นมาว่าเป็น O นี่ Optimize น่ะครับ MA อืม MaSlow ก็ได้ นี่น่ะครับ MaSlow = แล้วก็พิมพ์ Optimize แล้วก็ถามชื่อ ชื่อควรเป็นชื่อกับตัวแปรเรา อันนี้คือฝั่งของตัวแปร อันนี้คือฝั่งของ function ที่จะเอาไป Optimize น่ะครับ เห็นไหมครับ เขาถามชื่อ name nameก็ชื่อนี้เลย Optimize MaSlow แล้วก็ ฟันหนูปิดไว้น่ะครับ ค่า default เราให้เป็นเท่าไหร่ ค่า default เราให้เป็น 200 น่ะครับ อ่ะค่า Minimum let say ว่าเราจะเริ่ม Optimize ถ้าเปลี่ยนค่าตัว Slow เราตั้งแต่เท่าไหร่ อ่ะตั้งแต่ 150 แล้วกัน ปาไปถึง 250 ก็คือปีนึงประมาณคร่าวๆน่ะครับ ก็คือ default ใช้ค่า default เป็นอะไร default เป็น 200 เป็น ปกติของเรา ตัวนี้น่ะครับ อ่ะตัวเลขนี้อยากจะเปลี่ยนจากเท่าไหร่ จาก ค่าน้อยที่สุด minimum คือ150 เปลี่ยนจาก 150 ไปเป็น 250 น่ะครับ โดยที่การเปลี่ยนแปลงมันจะไม่ได้เปลี่ยนทีละ 1 ไม่ใช่ 151 วิ่งไปถึง 250 อันนี้อ้วกน่ะครับ เราต้องบอกว่าตอนเปลี่ยนจาก 150 ไปเป็น 250 เนี่ย เปลี่ยนทีละเท่าไหร่ อ่ะกรณีนี้ผมเปลี่ยนทีละ 50ก่อนอันนี้หมายความว่าอะไรครับ หมายความว่าเราจะเริ่มต้นที่ 150……ปิดโปรแกรมน่ะครับ AmiBroker จะเริ่มที่ 150 และก็ทำการ backtest เก็บค่ามาและก็เปลี่ยนไปเป็น 200 backtest เก็บค่ามาและก็เป็น 250 backtestเก็บค่ามาให้เราเห็นไหมครับเพราะฉะนั้นเราก็ไม่ต้องมาเปลี่ยนตัวเลข 3 ครั้งถูกไหมครับ เพราะเราต้องเข้าใจว่าอันนี้ตัวเลขมันเยอะๆเนี่ย ถี่ๆ เราก็เปลี่ยนจนเหนื่อยเลย เสร็จปุ๊บเราก็เอาตัวแปรตัวนี้น่ะครับ control C น่ะครับ มาใช้ตรงนี้ แค่นี้เอง ถ้าเรา run backtest ตอนนี้ AmiBroker จะเอาค่า default มาใช้คือค่า 200 นี่น่ะครับคือค่า 200 อ่าเดี๋ยวผมปิดตรงนี้ก่อนดีกว่า และนี้เป็น 200 เหมือนเดิม และผมลอง run น่ะครับ tools / backtest อ่ะได้ค่ามาแล้ว และก็เปิดตัว results ขึ้นมาให้ดู เห็นไหมครับ 83 Net profit 83.79 4ปี เอาสูตรขึ้นมาใหม่น่ะครับ คราวนี้ผมเอานี้ออกเอาตัวแปรมาใช้ที่ MaSlow น่ะครับ แล้วผม backtest ใหม่ ดูน่ะครับ backtest ใหม่ เสร็จแล้วเปิด results มา เห็นไหมครับค่าเท่ากันแป๊บเลย เพราะว่าอะไร เพราะมันใช้ตัวเดียวกันไงครับ ผมบอกแล้วว่าถ้าเรากด backtest อย่างนี้ ตัว Optimization จะส่งตัวค่า default มาให้ ถ้าเรากด backtest น่ะครับ จะส่งค่า default มาให้ ถึง 200 ก็เหมือนตอนที่เราพิมพ์ เป็น 200ไงครับ อ่ะ แต่คราวนี้ถ้าเราใช้ตัวแปรนี้และบอกว่าให้เป็นการ Optimization แทน เดี๋ยวดูน่ะครับว่าจะเกิดอะไรขึ้นผมปิดอันนี้ไปก่อนจะได้เห็นภาพนี่นะครับเราจะไปที่ toolsและก็ run optimization น่ะครับ คราวนี้ถ้าเรา run พอเดาออกไหมครับว่าจะมี ค่ากี่ค่าออกมากี่แถวน่ะครับแต่ละแถวเทียบเท่ากับ 1 backtest โดยที่testครั้งแรกคือ 150 สอง คือ 200 สามคือ 250 ก็มี 3 ครั้ง ถูกไหมครับ ลอง optimize ดู 1 2 3 เห็นไหมครับเรียบร้อยเดี๋ยวผมsource อันนี้หน่อย กดขึ้น กดลง นี่คือ sourceน่ะครับ อันนี้คือตัวเลขตามลำดับของ backtest อันแรกนี้คือเท่าไหร่ครับค่าต่ำสุดคือ 150 และก็บวก step ไปที่ 50 150
Step 50 เป็น 200 step 50 ก็คือ 250 ก็จะได้ค่ามา และก็อยู่ที่ว่าเราจะ source column พวกเนี่ย เพื่อพิจารณาว่าจะใช้ตัวไหน เป็นตัวบอกว่า ok อันนี้ดีกว่าอันนั้น ดีกว่าตัว parameter ที่เป็นตัวอื่นน่ะครับ อ่ะเราปกติเราก็มีค่านี้ อ่ะดึงสลับกันครับ ใช้ RAR ก็ได้ เราซ้อนดูเห็นไหมครับก็แสดงว่าตัวที่สามตัวสุดท้ายดีที่สุดคือตัว 250ตัว CAR/MDD ก็สูงสุดเห็นไหมครับ Max.Sys Drawdown ก็ต่ำ ต่ำมาก เดี๋ยวคราวนี้ท่านตารางท่านอาจจะไม่เหมือนผม ผมclick ขวา ก่อน Setup column ก่อน ผมกด reset ก่อนดีกว่า reset เรียบร้อยแล้ว อ่าจะไม่เหมือนผม จะไม่มา order ไม่เหมือนกันถูกไหมครับ อ่าวิธีทำคือ click ขวา เหมือนกันครับ ไปที่ set columnคราวนี้เนี่ยหลักๆ เอ่อ เดี๋ยวเราปิดให้หมดก่อนดีกว่าไหมครับ จะปิดเปิดได้น่ะครับ ตัวแปรหลักๆที่เราใช้ เราจะใช้พวกนี้อยู่น่ะครับแล้วก็ CAR/MDD click ค้างไว้ แล้ว move up ขึ้นมา แล้วก็ RAR click ไว้ แล้วก็ move up ขึ้นมา คราวนี้ก่อนที่จะได้ 2 ตัวนี้ออกมาเห็นไหมครับ มันหารโดย Max.DD อยู่ ก็ต้องเอา % system Max. sys% DD ควรจะทำเป็นระบบน่ะครับลากขึ้นมา ขึ้นไปอีกอยู่ข้างบนมันแล้วก็จะดูคราวๆแค่นี้ก่อนพิจารณาก่อนที่เหลือก็อธิบายไปหมดแล้วน่ะครับว่าอะไรเป็นอะไร อ่ะคราวนี้เราอยากเห็นตัวแปรด้วยใช่ไหมครับ อ่ะนี่ตัวแปร อ่ะเราก็กดอันนี้น่ะครับ แล้วก็กด move up ไปเรื่อยๆ ถึงไหนแล้วหล่ะ ไม่ใช่วิธีที่ฉลาดน่ะครับ move upไปเรื่อยๆ อันนี้ทำให้ดูก่อนมาถึงไหนแล้วครับ มาแล้วเราไว้ตรงแรกเลยแล้วกด ok นี่คือตัวของเราถูกไหมครับ มาแล้วเห็นไหมครับว่าตัว oMaSlow นี่นะครับ ตัวperiod 250 คือ caseที่3 จะเป็นcaseที่ส่งผลให้เราได้ RAR/MDD ดีที่สุด นี่น่ะครับ compound annual return นี่นะครับ Max.system drawdown ก็ดีที่สุด ที่นี้เราสงสัยไหมว่า เนี่ยวิ่งขึ้นมาเรื่อยๆ แล้วก็ดีขึ้นมาเรื่อยๆ เราก็ควรจะต้องสงสัยน่ะครับว่าเอะถ้าเป็น 300 จะเป็นยังไง เราก็มาเปลี่ยน ตัว max. ให้ขึ้นไปถึง 350 เลย แล้วเราก็ run optimizeมาคราวนี้ก็จะวิ่งไปเรื่อยๆ 200 250 300 350 โดย step ทีละ 50 ถูกป่าวครับ run optimize ดูอ่ะเรียบร้อยแล้ว คราวนี้เราก็ source ตาม Adjusted Return เหมือนเดิมจากมากไปน้อย ลองกดหลายๆครั้งดูมันจะมีมากไปน้อยกดอีกทีน้อยไปมาก เห็นไหมครับว่าตัวนี้คือตัวที่ 4 ตัวที่ 4 คืออะไร อ้าวแล้วที่เรา set เอาไว้หายไปไหนครับ เห็นไหมครับตรงนี้จะมีปัญหาน่ะครับ เดี๋ยวเราใน VDO ชุดหน้าเราจะมา setup tableให้ถูกต้อง หมายความตอนที่เรา run optimization ทุกครั้งที่เรา run มันจะหายไปอยู่ไหนครับ ท้ายที่สุดตลอด น่าเบื่อมาก เดี๋ยวเรามาแก้ปัญหาเรื่องนี้กันและเรามาดูตารางพวกนี้กันดีกว่า ok