3-9 ตัวอย่างลอง Improving Result from Backtesting

ตัวอย่างการทดสอบ Improving Result from Backtesting นี้แสดงให้เห็นถึงการปรับแต่งค่าต่างๆใน Code ย่อมจะส่งผลให้มีการเปลี่ยนแปลง ต่อผลลัพธ์ของระบบได้

จุดประสงค์: ตัวอย่างลอง Improving Result from Backtesting

  1. เข้าใจการปรับแต่งระบบเพื่อให้ผลลัพธ์ดีขึ้น
  2. เข้าใจคุณลักษณะของระบบ Trend Follower
  3. เข้าใจการกำหนดขนาดราคาหุ้น

เนื้อหา: ตัวอย่างลอง Improving Result from Backtesting

ในบทนี้จะมีส่วนที่กล่าวถึงการพัฒนาระบบเพื่อให้ระบบมีคุณภาพที่ดียิ่งขึ้น โดยให้ผลลัพธ์ เช่น กำไร หรือ Maximum Drawdown ทีดี โดยบทนี้จะยกตัวอย่างจากบทที่ผ่านมา โดยมุ่งหมายที่จะให้ผู้เรียนพัฒนาระบบได้ดียิ่งขึ้นไป

การแก้ไขในบทนี้จะแก้ไข อยู่ 4 ส่วน คือ

[1] การแก้ไขในส่วนของ คำสั่ง ApplyStop โดย ยกเลิกคำสั่ง stopTypeProfit และเพิ่มระยะ Trailing เป็น 50
[2] การแก้ไขในส่วนของ คำสั่ง Sell จะเพิ่มคำสั่ง sellCon2 = MACD() < 0; โดยจะใช้ Operator OR ในการเชื่อม sellCon1 และ sellCon2
[3] การแก้ไขในส่วนของ คำสั่ง Buy โดยกำหนดราคาของหุ้นว่าให้อยู่ในช่วงราคา 2 ถึง 10 บาท โดยใช้คำสั่ง buyCon3 = C >2 AND C < 10;
[4] การแก้ไขในส่วนของ คำสั่ง Buy โดยเพิ่มการคำสวณ Volume เข้ามา โดยใช้คำสั่ง buyCon4 = V*C > 10 000 000 ;

หลังจากการแก้ Code แล้ว ทำการทดสอบ ก็จะได้ผลลัพธ์ที่ดีขึ้น โดยหลักการแก้ไข Code นี้ไม่ตายตัว ขึ้นอยู่กับ ผู้พัฒนาว่ามีประสบการณ์มากน้อยแค่ไหน ส่วนนี้ยังคงไม่รวมในส่วนของการทำ Optimization ซึ่งจะกล่าวหลังจากนี้

วีดีโอ: ตัวอย่างลอง Improving Result from Backtesting

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

ใน VDO ชุดนี้นะครับจะพูดถึง improving result นะครับจากที่เราใส่ apply stop ไปใน VDO ชุดที่แล้วก็จะเห็นว่าค่ามันแย่ลงนะครับซึ่งคราวนี้เราก็ต้องมาดูที่ตัว formula ของเราว่า เพราะว่า applystop set ไม่ถูกต้องหรือเปล่าซึ่งในส่วนนี้เนี่ยก็ขึ้นอยู่กับประสบการณ์ แล้วก็อยู่ที่ตัว stategy ด้วยที่เราตั้งขึ้นมานะครับว่าทำไม applystop ถึงมามีผลลบในทางที่แย่ลงนะครับแล้วก็ตัวเลขนี่ set ถูกต้องหรือเปล่าเราก็จะลองมาดู ปรับค่าดูนิดหน่อย คราวนี้เนี่ยเรารู้ได้งัยว่าเราจะปรับอะไร อันนี้อยู่ที่ประสบการณ์ กับอ่านหนังสือมาเยอะขนาดไหนดูว่าเข้าใจตัว stategy ที่เราตั้งเนี่ยขนาดไหนนะครับ ผมก็จะมาลองปรับค่าให้ดูเนี่ยนะครับว่าอะไรเป็นอะไรซึ่งอันแรกเลยเนี่ย อันนี้เป็นข้อเท็จจริงนะครับ อันนี้คือเหมือนเป็น trend following ใช่มั้ยครับ เพราะฉะนั้นเนี่ย สำหรับ trend following แล้วเนี่ยเราต้อง letprofitrun นะครับเพราะเรา run ที่ 15 แล้วเลิก run เนี่ยก็เจ๊งแน่นอนอยู่แล้วนะครับ อ่ะเดี๋ยวเราลอง backtest ดูอ่ะเปิดขึ้นมาเห็นมั้ยครับนี่อยู่ที่ประมาณนี้เห็นมั้ยครับกำไรแทบไม่มีเลยนะครับ อ่ะ let profit run ดู backtest เปิดขึ้นมาดู อ่ะอันนี้ก็ยังไปไม่รอดนะครับ ซึ่งก็น่าจะเป็นผลกระทบมาจากตัวอื่นว่าอะไรต่อมิอะไรก็ตามตอนนี้ผมขอปิดทิ้งก่อนแล้วกัน หมดเรื่องหมดราว ลอง backtest ใหม่ดูคร่าวๆว่าเป็นยังงัยอ่ะ ยิ่งแย่กว่าเดิมนะครับก็สงสัยว่าจะไปไม่รอดนะครับเราก็ลองไปดูที่ตัว stategy เรามี buycon เป็น cross นะครับเรามี sell cross over นะครับ 40 cross 200 ซื้อ 200 cross 40 ขาย มาผมเปลี่ยนดีกว่า SellCon1 = ตัวนี้เลยครับใส่เข้าไปเสร็จปุ๊บผมขอใส่ อันนี้นะครับในทางกลับกันด้วย SellCon2 = จะขายเมื่อ MACD เนี่ยกลับมาน้อยกว่า 0 หรือเป็นตรงกันข้ามกับตัวนี้นะครับ แล้วก็อันนี้ก็ SellCon1 ของเราเนี่ยตอนเราซื้อเนี่ย 2 กรณีนี้ต้องเป็นจริงทั้งคู่ถูกมั้ยครับอ่ะอันนี้เป็นจริง อันนี้เป็นจริง ดูครับ true กับ true เป็น true ใช่มั้ยครับแต่กรณีขายเนี่ยถ้าอันใดอันนึงไม่เป็นจริงเนี่ยให้ขายทิ้งเลย เพราะฉะนั้นอันนี้เราเลยใช้กรณี OR แทน หมายความว่าถ้าตัวนี้เป็นจริงขายแน่นอน หรือตัวนี้เป็นเท็จแต่ตัวนี้เป็นจริง ขายแน่นอน OK มั้ยครับ เข้ามา อ่ะคราวนี้ลอง backtest ดู ข้างล่างทิ้งอย่างงี้ไว้ก่อนก็ได้ backtest ดูเปิด result อ่ะนี่นะครับ เอา result เข้ามาดูก็ยังแย่อยู่เหมือนเดิมนะครับ 1.3 ล้าน อ่ะไม่เป็นไรดูอย่างอื่นคราวนี้เนี่ย drawdown อยู่ที่ประมาณ26ไม่ได้บอกว่าดีนะครับแต่จะบอกว่าดีกว่าตอนที่เป็น 40 อ่ะกลับมาใหม่ ตัว trailing stop เนี่ย นี่นะครับอันนี้เรายังไม่ได้ทำ backtest อันนี้จากคร่าวๆประสบการณ์ว่ากันไป เป็น 25 คราวนี้เนี่ย เราอยากให้หุ้นวิ่งเร็วเนี่ยเรากำหนด range ของราคาหุ้นดีกว่าจะได้ show condition อีกประเภทนึงให้ดูนะครับเป็น buyCon3 = close เนี่ยราคาหุ้น อยู่ระหว่าง 2 บาท AND ราคาหุ้นต้องอยู่ระหว่าง 10 บาทเห็นมั้ยครับอันนี้เนี่ยเป็นการ combine 2 condition condition ที่ 1 condition ที่2 เข้าด้วยกันด้วย AND ให้ออกมาเป็น Buyconditionตัวเดียว ถามว่ากรณีอย่างนี้ ทำไมถึงทำอย่างนี้ได้เพราะว่า C ตัวนี้เป็นตัวเดียวกันเห็นมั้ยครับอันนี้พูดถึงเรื่อง price เหมือนกัน อ่ะ C ตัวเดียวกันไว้ด้วยกันได้ แล้วก็มา AND นี่นะครับ buyCon3 ความจริงตรงนี้เราควรจะมีอีก condition นึงนะครับเพราะตอนนี้เรามีเรื่องของ range ของราคานี่ครับ range ของราคามีเรื่อง condition อันนี้เราเรียกว่าเป็น main stategy cross over เนี่ยกรณีอันนี้นะครับอันนี้คือ main stategy หลัก ตัวอื่นเข้ามาเสริม MACD นี่เข้ามาเสริม cross นี่เข้ามาเสริม close นี่เข้ามาเสริมนะครับต่อไปความจริงควรจะมี volume มี price มี volume มี indicator อันนี้จำไว้นะครับ ตอน buy ควรจะมี price condition มี volume condition แล้วก็มี Indicator condition เข้ามาเดี๋ยวลอง run แค่นี้ก่อนอันนี้ 15% นี่น่าจะพอสำหรับ trend following backtest ดู เรียบร้อยเปิดมาอ่ะเห็นมั้ยครับอันนี้ดีขึ้นเยอะดีกว่าตัวเก่าด้วยซ้ำที่เคยได้ 1 .9 นี่เป็น 2.6 ขอย้ำนะครับนี่เราไม่ได้ทำการ optimization นะครับอันนี้เราพยายามเข้าใจว่า stategy ที่เราเขียนเนี่ยเป็น trend following OK มั้ยครับแล้วเราก็มาปรับค่าตรงที่เราจะขายเนี่ย อ่ะเอาจริงๆเค้าเรียกว่าตกไป condition นึงว่าเราอยากได้ condition ของขายเนี่ยซึ่งอาจจะ opposite กับของซื้อแต่มาใช้ OR เพราะว่าอะไรตอนเราซื้อเนี่ย 2 ตัวนี้ต้องเป็นจริงเห็นมั้ยครับ 2 ตัวนี้ต้องเป็นจริงพอขายปุ๊บตัวใดตัวนึงเป็นจริง เราก็ขายเลยเอ้ยนี่นะครับเนี่ย sellCondition นะครับเป็นจริง อันนี้เป็นจริงอันใดอันนึงเป็นจริง ขายทิ้งเลยถือว่าต้องขายแล้วแล้วก็เราเพิ่ม buyCon มาให้ซื้อเฉพาะหุ้นตัวเล็กหุ้นเล็กวิ่งเร็ว OK มั้ยครับ ยังตกเรื่อง volume อยู่นะ ไม่เป็นไรมาดูนี่ดีกว่าตอนนี้นี้ตัว return นี่ OK แล้ว26% ต่อปีต้น 2011 ถึงปลาย 2014 ต่อไปก็ไปลุ้นเอาที่อะไรครับ Maximum system drawdown เห็นมั้ยครับต่ำกว่า 20 นี่ถือว่าดีนะครับอ่ะ ต่ำกว่า 20 นี่ถือว่าดีแล้วก็ เดี๋ยว report มาพูดที่หลังดีกว่าผมขอบอก บวกอีกตัวแล้วกันว่า buyCon นะครับ buyCon 4 อย่างที่บอกนะครับในเรื่องของ Volume … Volume คูณ close นี่นะครับอันนี้คืออะไร อันนี้คือหมายความว่ายอดมูลค่าการซื้อขาย ณ วันนั้นเนี่ย อย่างต่ำผมขอ 10 ล้านเห็นมั้ยครับ ขอ 10 ล้านถึงจะเข้านี่นะครับ ขอ 10 ล้านถึงจะเข้า แล้วก็มา AND ตรงนี้ด้วย AND buyCon3 AND buyCon 4 แล้วก็ backtest ไป เปิด result เข้ามาอ่ะอันนี้แย่ลงหน่อยเหลือ 1.9 นะครับอันนี้แย่ลง อันนี้ก็ช่วยไม่ได้นะครับ อันนี้เป็นเราก็ test ไปตามความเหมาะสมนะครับดูว่าเป็นยังงัยนี่เข้ามานะครับ ลองเปลี่ยนดูสัก 5 ล้านพออ่ะกลับมาก็ดีขึ้นหน่อยแต่ไม่ดีเหมือนตัวแรกที่ได้ 2.5 ล้านตอนนั้นนะครับอ่ะ อันนี้แย่นะครับควรจะต่ำกว่า 20 ประมาณนั้นซึ่งในนี้เนี่ยต้องเข้าใจว่านอกจากตัวเลขแล้วเนี่ยต้องมาดูตัวตารางนี้ด้วยนะครับว่ามีกรณีฟลุ๊คหรือเปล่ามี fix curve หรือเปล่าซึ่งถ้าตอนที่เรา test ไปหนักๆเนี่ยในส่วนของ intermediate level นะครับไม่ใช่แม้กระทั่ง basic level ด้วยซ้ำ ตอนที่เรา test ในส่วนของ Intermediate level เนี่ย ไอ้พวกนี้มันจะลงมาโดยที่เราต้องการ Annual return มา 20% ถือว่าเจ๋งแล้ว แต่คราวนี้ max drawdown อยากให้ได้อยู่ที่ประมาณต่ำกว่า 15 , 13 หรือ 15 นะครับก็คืออย่าไปอะไรดีอ่ะ อย่าฝันหวานนะครับว่าจะเป็นยังงัย อันนี้ยังไม่ได้ทำการ Optimize นะครับ อันนี้ก็จะ show ให้ดูส่วนในการทำ optimize เนี่ยเราแสดงให้ดูเพื่อเป็นตัวอย่างไม่ได้หมายความว่าอยากจะได้ค่าซึ่งแบบประเสริฐเลิศเลออะไรอ่ะอันนี้ก็ show การ Improving result คร่าวๆให้ดูว่าเป็นยังงัย เดี๋ยวเจอกันในส่วนต่อไปดีกว่านะครับ