เขียนไว้เตือนเพราะ นานๆมาทำทีนึงมักจะลืมแล้วก็เสียเวลางมอยู่นาน
สิ่งที่ควรทำ
กำหนดจุดประสงค์การ optimization
- ว่าทำไปเพื่ออะไร เพิ่ม balance หรือ ลดความเสี่ยง หรืออยากให้มี order เพิ่ม จะได้เห็นการเคลื่อนไหวบ่อย แต่สำหรับผมอยากเห็น shape ที่สวยงาม ( shape ratio , recovery ratio) เพราะเวลาที่มันได้ก็ดีครับแต่พอเวลามันเสีย ก็อยากให้มันกลับมาใน order ถัดไป หรืออีกนัยยะนึงคือ อย่าเสียติดๆกัน
Setting การ back test
- ช่วงเวลา 1–3 ปีย้อนหลัง มากไปก็ไม่ช่วยเพราะสภาพตลาดเปลี่ยนตลอด
- เลือก Modelling เป็น Every tick หรือ Every real tick based on real ticks
- ยอดเงินเท่ากับยอดที่มีใน account เรา
- Optimization : Fast generic based algorithm เพราะเร็วกว่าเห็นๆ
ทำทีละ parameter ก่อน
- เพื่อโฟกัสดูความเปลี่ยนแปลงว่ามีผลต่อจำนวนผลลัพธ์ส่วนไหน เช่นorder ที่เพิ่มขึ้น หรือ profit rate เพราะเราปรับทีละตัวเลยเห็นชัดขึ้นว่าตัวไหนมีผลต่ออะไร
- สามารถทำได้ละเอียดเพราะเมื่อมี parameter ตัวเดียวไม่ต้องรวมกับคนอื่น ก็จะใช้ step ที่เล็กๆ เช่น 1, 0.1, 0.01 แล้วแต่ว่าเป็น parameter ขออะไร การทำให้ step เล็กลงอาจจะนำมาซึ่งผลลัพธ์ที่ยิ่งไหน เพราะมันอาจจะซ่อนอยู่ใน parameter เล็กๆนี้ เพราะ code ของเราอาจจะไม่ได้เขียนดีแต่วันแรก ที่แยกประเภท order ได้แบบเจาะจง
- รอไม่นาน ทำให้เห็นผลการ backtest เร็ว มนุษย์เพราะเห็น ผลลัพธ์เร็วก็จะมีความต่อเนื่องมีสมาธิทำได้ยาวนานขึ้น สังเกตุอะไรได้มากขึ้นและอาจจะเจออะไรดีๆในการ optimize นั้นๆ
ลบ parameter ที่ไม่มีผลใดๆออก
- เพื่อลดจำนวนลงให้เหลือเท่าที่จำเป็น เพราะเมื่อกลับมา optimize อีกเราจะได้ไม่ต้องมานั่งปรับค่าเหล่านี้อีก
- ลดความซ้ำซ้อนของโปรแกรมลง ทำให้เวลา optimize ก็สั้นลง
- Group parameter ที่อยู่ในหมวดเดียวกันให้อยู่ใกล้ๆกัน
- ใช้ parameter string เป็นตัวแยกหมวดและอธิบายคร่าวๆ
อ่านผลลัพธ์ทุกมิติ
- การดูแค่ว่า balance เยอะขึ้นอย่างเดียวอาจจะนำไปสู่การล้างพอร์ตได้ เพราะส่วนใหญ่ได้เยอะก็มาจากความเสี่ยงที่เยอะขึ้นด้วย นั่นหมายถึง drawdown จะเยอะขึ้น เมื่อใดก็ตามที่ สภาพตลาดเป็นเหมือนอดีตเราก็รอด แต่ถ้ามันไม่ใช่ drawdown ตัวนี้จะเป็นตัวที่เราขาดทุนในอนาคตได้
- export optimization output ออกมาในรูปแบบที่ excel อ่านออกแล้วใช้ filter / condition color ช่วยเลือก input parameter ที่เหมาะสมได้
- run single test output ที่คิดว่าดี แล้วดูกราฟ เพื่อ เอามันออกมาเป็นภาพ จะเห็นบุคคลิคภาพ ของ EA นี้ได้ดีกว่า ผลสุดท้ายใน หน้า optimization results และให้ save output single test นี้เก็บไว้ เพราะจะเห็น graph และ ค่าผลลัพธ์ในมิติต่างๆได้ละเอียดและเข้าใจมากขึ้น save เก็บไว้ให้ชื่อสื่อความ เช่น EA-Name_version_2.0-profit_factor_3.0-drawdwon_40-expected_payoff_2000.html เป็นต้น
Save Input สม่ำเสมอ สำคัญมาก
- เมื่อได้ผลลัพธ์ที่พอใจหรือเป็น mile stone แล้วให้ save เก็บไว้
- ตั้งชื่อ input ให้ สื่อความว่าใช้แล้วได้ผลลัพธ์อะไร เช่น EA-Name_version_2.0-profit_factor_3.0-drawdwon_40-expected_payoff_2000.set เป็นต้น
- จัดเก็บให้อยู่ใน folder MQL5/preset/paired/xxx.set เพราะจะได้หาง่ายเวลา add EA ใน graph การทำมาทั้งหมดจะไม่ได้อะไรถ้าใส่ input ผิด
- เอาค่าที่คิดว่าเจ๋งที่สุดกลับไปใส่เป็นค่า default ใน code ช่วยลดความเสียหายได้ เผื่อลืม / ใส่ input ใน EA บน chart ผิด
เริ่ม optimize พร้อมๆกัน มากว่า 1 parameter
- เมื่อถึงจุดที่ปรับทีละตัวแล้วไม่มีผลมากให้เร่ิมใส่ parameter ที่พอเปลี่ยนแล้วจะเห็นผลทันที เช่นตัวที่มีผลต่อจำนวน order และตัวที่มีผลต่อ balance ในขณะเดียวกัน ก็อย่าหลงไปกับตัวเลขให้ดูที่ drawdown เสมอว่าเรารับความเสียหายต่อ order ได้เท่าไร
สุดท้ายทดสอบตัว complete algorithm คือช้าสุดนานสุดแต่ scope ให้เหลือช่วงแคบๆของ parameter เท่านั้น
ตรงนี้มาถึงจุดที่ตัดสินใจยากเพราะมันจะไม่ค่อยแต่ต่างในเรื่องของ balance ที่เห็นได้ชัด ก็ให้กลับไปที่ จุดประสงค์ (ข้อแรก) ว่าเรา optimize ไปทำไม เพื่อให้ drawdown ลดลงหรือเพิ่มจำนวน order
อีกเรื่องที่ทำให้เราเห็นภาพประสิทธิภาพของ EA คือการ ใส่มันใน myfxbook.com มันจะเห็น ประวัติการทำงานของ EA แต่ละตัว ว่ามีผลประกอบการเท่าไร performance แต่ละเดือน สัปดาห์ เป็นอย่างไร เป็นตัวกระตุ้นให้เรายังคงพัฒนามันต่อ
