AmiBroker Code Template

เพื่อสนับสนุนวงการลงทุนด้วยระบบเทรดในเมืองไทยให้ก้าวไปข้างหน้าในระดับสากล ด้วยการให้ความรู้แก่ นลท สายควอนทฺ (Quants) ในการเขียน AmiBroker AFL CODE ให้โค้ดถูกต้อง โค้ดครบถ้วน และโค้ดเป็นระเบียบ (ลำดับโค้ดสำคัญมาก) ซึ่งจะช่วยให้สามารถพัฒนากลยุทธ์/ระบบเทรด (Strategies และ Trading System) อย่างมีประสิทธิภาพและต่อยอดได้ง่ายขึ้น อีกทั้งยังทำให้ เรา นลท สายควอนทฺ พูดจาภาษาเดียวกัน ใช้โครงสร้างโค้ดคล้ายๆกัน ด้วยเทมเพลต (template) ที่ได้ถูกออกแบบสำหรับการสร้าง Trading Platform โดยเฉพาะ

หมายเหตุ: No Copyright or Any Rights Reserved ThaiQuants ไม่สงวนลิขสิทธิ์ใดๆทั้งสิ้น ผู้ที่สนใจสามารถนำไปใช้ได้เลย ไม่ต้องขออนุญาติ ไม่ต้องอ้างอิงถึงก็ได้ ถ้าไม่สะดวก

ความเป็นมาของ Template (2011-2020)

นปี 2011 ผมได้รับการติดต่อจาก นลท ท่านหนึ่ง (มีพระคุณกับผมมานาน) ให้พัฒนา Trading Platform ที่มีความสามารถในการทดสอบ/เทรดระบบเทรดหุ้น และมีความยืดหยุ่นในการเพิ่มเติม/ปรับปรุงกลยุทธ์ด้วยตัวท่านเอง และ/หรือทีมทางของท่าน ซึ่งท่านแนะนำให้ผมพิจารณา MetaStock, AmiBroker, และโปรแกรมอื่นๆ (ในตอนนั้นคนไทยส่วนใหญ่ใช้ MetaStock) ผมใช้เวลาประมาณ 2 เดือนในการเลือกโปรแกรม โดยพิจารณาจาก Capability, Effectiveness, Flexibility, และ Extensibility ซึ่ง AmiBroker เป็นโปรแกรมเดียวในตอนนั้นที่ตอบโจทย์ทั้งหมด ด้วยความสามารถในการทดสอบหุ้นทั้งพอร์ต (ไม่ใช่แค่หุ้นทีล่ะตัว) และความสามารถในการทดสอบแบบ Walk Forward Analysis กับ Monte Carlo Simulation (เบื้องต้น) ความมีประสิทธิภาพในการใช้ CPU ถึง 32 threads พร้อมๆกัน ความยืดหยุ่นในโค้ดสำหรับการสร้างกลยุทธ์แบบต่างๆ ความยืดหยุ่นในการทำ Simulation จริงๆ และความสามารถในการต่อยอดจาก Strategy ไปยัง Platform ด้วย AmiBroker OLE

หลังจากที่ได้ข้อสรุปว่าจะใช้ AmiBroker ก็ถึงเวลาที่ต้องพัฒนา Trading Platform ซึ่งประกอบด้วย Portfolio Manager ที่เขียนด้วย VB.NET (บริหารจัดการ 6 พอร์ตพร้อมๆกัน รวมถึง Pool of Capital and Risk) และ Strategies ที่เขียนด้วย AmiBroker AFL ซึ่งผมจะต้องออกแบบโครงสร้างโค้ดให้ถูกต้องตามลำดับและครบถ้วน เพื่อที่จะสามารถพัฒนาหลายๆกลยุทธ์จากโครงสร้างเดียวกันทั้งหมด เพียงแค่ทำการปรับเปลี่ยนเงื่อนไขและตัวแปรต่างๆ ในบางส่วน โดย นลท ท่านนี้ต้องการความสามารถในการทำ Market Classification และ Portfolio Risk Analysis จึงเป็นจุดเริ่มต้นของ Template เวอร์ชั่นแรก Version 1 ในปี 2011-2012

ในปี 2015 ผมได้รับเชิญเข้ากลุ่มๆหนึ่งที่เกี่ยวข้องกับ AmiBroker จากอาจารย์ท่านหนึ่ง ซึ่งในตอนแรกผมประหลาดใจมากที่ความรู้ของคนในกลุ่มเรื่องการใช้ AmiBroker และการทำ Quantitative Analysis ค่อนข้างห่างจากระดับมาตราฐาน ทั้งๆที่คนส่วนใหญ่ในกลุ่มนี้ถือว่ามีประสบการณ์มานานหลายปี แต่ก็มักมีคำถามหรือโค้ดที่ควรจะรู้กันอยู่แล้วให้ต้องอธิบายกันบ่อยๆ (อุดมการณ์ 2015 Who owns the Knowledge) จนกระทั่งวันหนึ่ง มีคนในกลุ่มเอา equity curve ของ robot trading จากโบลกแห่งหนึ่งมาโชว์ (เตือนน่ะครับ ว่าถ้าไม่จำเป็น อย่าเอาของตัวเองให้ใครดู) หลังจากที่ผมพิจารณาสักพัก ผมก็เขียน/แจกโค้ด AmiBroker ให้คนในกลุ่ม ซึ่งจะได้ curve หน้าตาใกล้เคียงกันประมาณ 95% ภายในเวลาประมาณ 30 นาที ทำให้คนในกลุ่มขอให้ผมเปิดคอร์สสอน AmiBroker Courses และเป็นการกลับมาพัฒนา Template เวอร์ชั่นสอง Version 2 ในปี 2015-2016

หลังจากตัดสินใจเปิดคอร์ส AmiBroker Quant Course บน ThaiQuants.com ตัว Template เองก็มีการปรับปรุงมาเรื่อยๆเล็กๆน้อยๆ โดยเฉพาะในส่วนของ Code Snippets โค้ดจิ๋วสั้นๆ ที่มีหน้าที่เฉพาะเจาะจง และแทบต้องใช้ในทุกกลยุทธ์ เช่น โค้ดจิ๋วเลี่ยงหุ้นแตกพาร์ และโค้ดจิ๋วปรับ tick size เป็นต้น อีกทั้งยังมีการปรับโครงสร้างของ Template อีกทั้งในส่วนของ Simulation และ Custom Backtest มาเรื่อยๆ รวมถึงแก้ไขชื่อตัวแปรที่ใช้ใน Template ในชัดเจนมากยิ่งขึ้น จนกระทั้งในปี 2019 ผมได้ทำการอัดวิดีโอ Market Breadth Course และ AmiBroker Xtreme Course เสร็จ ทำให้ผมได้มีโอกาสรีวิวโค้ดทั้งหมดอีกครั้งในภาพรวม และ code snippets ต่างๆ จึงทำให้เกิด Template เวอร์ชั่นสุดท้ายนี้ Version 3, FINAL VERSION, ในปี 2019-2020

โครงสร้างของ Template

Template จะแบ่งออกได้เป็น 7 ส่วน (สีเข้ม คือ ส่วนที่ต้องใช้แน่นอน)

  1. OPTIONS ตั้งค่าสำคัญต่างๆที่ต้องใช้ในการทดสอบ Backtest ซึ่งส่วนใหญ่อยู่ในรูปแบบของตัวเลข
  2. MARKET ANALYSIS ใช้สำหรับวิเคราะห์หาสภาพตลาดที่เอื้ออำนวนต่อการลงทุน
  3. SIGNALS สัญญาณซื้อขาย Buy และ Sell ซึ่งจะถูกเขียนในรูปแบบเงื่อนไข Conditions
  4. POSITIONS เป็นส่วนของการบริหารหน้าตัก รวมถึงเรียงลำดับความสำคัญของสัญญาณเข้าซื้อ
  5. STOPS เป็นส่วนของการขายหุ้นในพอร์ต ที่ไม่ได้มาจาก Sell Signals เช่น การคัทลอส และการขายล๊อคกำไร
  6. SIMULATION & RISK เป็นการผนวกความผันผวน ความเสี่ยงเข้าไปในการทดสอบ และ/หรือจำลองการเทรด
  7. CUSTOM BACKTEST เป็นการเขียนโค้ด AmiBroker ขั้นกลาง-สูง เพื่อให้ได้การวิเคราะห์ที่ละเอียดขึ้น

และใน template ยังมีโค้ดจิ๋วสั้นๆ (code snippets) ที่มีหน้าที่เฉพาะเจาะจง มักจำเป็นต้องใช้ในทุกกลยุทธ์

  • โค้ดจิ๋วเลี่ยงหุ้นแตกพาร์ Avoid stock split
  • โค้ดจิ๋วเลี่ยงหุ้นเพิกถอนและหุ้นที่ถูกเปลี่ยนชื่อ Avoid stock delisted and renamed
  • โค้ดจิ๋วปรับ tick size ตามช่วงระดับราคาหุ้น
  • โค้ดจิ๋วจำลองการพลาดการเข้าซื้อหุ้น (Missing Trades)
  • โค้ดจิ๋วจำลองการ slippage ด้วย Random ฟังก์ชั่น

CONCISE TEMPLATE แบบกระชับ

เหมาะสำหรับผู้เริ่มต้น และ/หรือผู้ที่ได้เรียนฟรีคอร์ปูพื้นฐาน AmiBroker Everyone Course (ABEC) ซึ่ง template ตัวนี้จะละเว้นในส่วนของ Market Analysis และ Simulation รวมถึงโค้ดจิ๋วปรับ tick size (ที่มีผลกระทบเพียงเล็กน้อย)

FULL TEMPLATE แบบเต็ม สำหรับคนทั่วไป

เหมาะสำหรับผู้ที่มีประสบการณ์ในระดับหนึ่ง หรือผู้ที่ได้เรียน AmiBroker Quant Course (ABQC) ซึ่งมีความรู้ในการทำ Market Analysis และการทำ Simulation ใน AmiBroker แล้ววิเคราะห์ผลลัพธ์ที่ได้ด้วย Excel เพื่อหาค่าสำคัญที่ Confidence Level ระดับต่างๆ

FINAL TEMPLATE with Simulation Runs สำหรับ นศ ThaiQuants

 

ตัวอย่าง Win 62%; CAR 24%; MDD -15% (ต้น 2010 ถึงสิ้น 2019)

เหมาะสำหรับนำไปศึกษาองค์ประกอบโค้ดต่างๆใน Template รวมถึงศึกษารูปแบบกลยุทธ์ที่ใช้ Market Analysis เป็นหลัก (มิใช่การใช้ indicators) ในการซื้อขายหุ้นทุกๆต้นเดือน ซึ่งถือว่าเป็นท่าไม้ตายของ ThaiQuants ที่ได้สอนต่อยอดขึ้นไปอีกระดับใน Beat the Market, Market Breadth Course (MKBC)

หมายเหตุ: สำหรับ นศ ABQC ในปลายปี 2020 ผมจะทำการรีวิวกลยุทธ์/โค้ดตัวนี้ ใน ABQC Bonus Content บทที่ 6 และชี้แจงมุมมองเรื่องการเขียนโค้ดเพิ่มเติมให้ครับ “Coding is about Making Codified Decisions, simultaneously”

One for All & All for One
ThaiQuants.com

2/11/2020