Code Errors ที่มักเจอกันบ่อยๆใน AmiBroker โดยเฉพาะสำหรับผู้เริ่มต้นและมือใหม่ ซึ่งบทความนี้จะมาทำการชี้แจง Errors ต่างๆ ร่วมถึงวิธีสังเกตุและการแก้ไข
Code Errors ที่พบบ่อยๆในการเขียนโค้ด AmiBroker
1. ลืมใส่ ; ท้ายบรรทัด
2. ลืมใส่ “ หรือ ” ในบางฟังก์ชั่น เช่น
- SetOption(InitialEquity, 1000000); //ลืมใส่ ฟันหนู “…” ให้ค่าคงที่ภายในของ AmiBroker
- SetOption(“InitialEquity, 1000000);//ลืมใส่ ด้านหลัง ” (ข้อ 14 หาเนื้อคู่ไม่เจอ)
- SetOption(“InitialEquity”, 1000000);
3. พิมพ์ชื่อตัวแปรผิด เช่น
- SetOption(“MinShare”, 100); //ตกตัว ‘s’ หลังคำว่า MinShare
- SetOption(“MinShares”, 100);
- SetTradeDelay(1, 1, 0, 0); //ตกตัว ‘s’ หลังคำว่า SetTradeDelay
- SetTradeDelays(1, 1, 0, 0);
4. ใส่ข้อมูลในฟังก์ชั่นไม่ครบ เช่น
- _shortMA = optimize(“_shortMA”, 10, 5, 30);//ผิด ตก Step
- _shortMA = optimize(“_shortMA”, 10, 5, 30, 5);
5. เรียกใช้ตัวแปร ก่อนประกาศใช้ ทำให้ AmiBroker ไม่รู้จัก (หรือประกาศไว้แล้ว แต่ดันพิมพ์ชื่อตัวแปรผิด -กรรมแท้ๆทรู 555)
6. ประกาศชื่อตัวแปรแล้ว แต่พอนำมาใช้ดันพิมพ์ชื่อผิด เช่น Buy = C > MA(C, _shortSMA);
7. ลืมใช้ Ref อย่างถูกต้อง เช่น Buy = C > HHV(C, 100);//เป็นเท็จเสมอ!
8. ลืมใช้โค้ด ป้องกัน การแตกหุ้น Split
9. ลืมโค้ดตั้งค่าต่างๆที่สำคัญต่อการ Backtest เช่น MinShares, RoundLotSize, Commission, BuyPrice, SellPrice, Short, Cover, …
10. โค้ด Assign ค่า แทนที่จะโค้ด Condition เช่น
- Buy = Ref(HHV(C, 100), -1);//ผิด
- Buy = C > Ref(HHV(C, 100), -1);// ==, != , >=, <=
11. เงื่อนไข Buy และ Sell ขัดแย้งกัน หรือไม่ได้เป็น Exactly Opposite Condition เช่น
- Buy = MACD() > 0;
- Sell = MACD() < Signal(); //ผิดทั้งสองบรรทัด
12. เวลาเกิด Error เอาแต่ดูบรรทัดที่ AmiBroker บอก ไม่ยอมไล่โค้ดขึ้นไปว่าจริงๆแล้ว Error มาจากบรรทัดก่อนหน้านั้น
13. ไม่ตั้งค่า Filter ให้ถูกต้อง ทั้ง WatchList และ From-To Date
14. หาเนื้อคู่ไม่เจอ
- ถ้ามี เปิด ” double quote ต้องมี ปิด ” double quote
- ถ้ามีวงเล็บเปิด ต้องมีวงเล็บปิด ( ) และ { }
วิดีโอสอน AmiBroker เรื่อง Common Code Errors in AmiBroker
AmiBroker Coding Challenge จงแก้ไขให้โค้ดนี้ Backtest ได้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//Incorrect Version for Common Code Errors in AmiBroker by ThaiQuants.com {//OPTION SetOption("InitialEquity, 1000000); SetOption("MaxOpenPosition", 25); SetOption("MinShares", 100); SetTradeDelays(1, 1, 0, 0); BuyPrice = SellPrice = Open; } {//SIGNAL _hhvPeriod = Optimize("_hhvPeriod", 200, 100, 250); buyCon1 = H > Ref(HHV(H, _hhvPeriod), -1); Buy = buyCon AND buyCon2; buyCon2 = MACD() > 0; Sell = MACD() < Signal(); Short = Cover = 0; } {//POSITION SetPositionSize(5, "psPercentOfEquity"); PositionScore = C*V; } {//STOP ApplyStop(stopTypeLoss, stopModePercent, 15); ApplyStop(stopTypeTrailing, stopModePercent, 25); } |
วิดีโอเฉลยการแก้ไขโค้ดในตัวอย่างให้ถูกต้อง
เมื่อเกิด Code Errors ในการเขียนโค้ด (ทั้วๆไป)
- ให้พยายามทำความเข้าใจ ข้อความแจ้ง Error เพราะปัญหาส่วนมากมักแก้ไขได้เลย และอยู๋ในบริเวณที่ข้อความเตือนขึ้นมา หรือแถวบรรทัดก่อนหน้านั้น
- ให้มองหาความเป็นไปได้ของปัญหาที่อาจจะเกิดขึ้น เช่น
- ส่งค่าตัวแปรให้พังก์ชั่นผิด หรือไม่ครบ
- พิมพ์ชื่อตัวแปรผิด หรือพิมพ์ชื่อฟังก์ชั่นผิด
- ไม่ได้ทำการประกาศชื่อตัวแปรก่อนนำมาให้ หรือ ไม่ได้ทำการรีเซ็คค่าตัวแปร (โดยเฉพาะในลูป)
- ใช้ตัวแปรผิดประเภท เช่น Array, Number, …, รวมถึงค่าบวก หรือค่าลบ เช่น Ref(…, …)
- ใช้สัญลักษณ์ผิด ระหว่าง การใช้ค่า = Assignment กับ การเปรียบเทียบ == Comparison
- ลืมพิจารณาผลกระทบที่อาจเกิดชึ้นจากการใช้ฟังก์ชั่น
- ให้ถามตัวเองว่า “ทำไมโปรแกรมถึงทำงานแบบนี้?” แทนที่จะถามตัวเองว่า “ทำไมโปรแกรมถึงทำงานผิดๆ?”
- ให้เตือนตัวเองว่าปัญหาอาจจะไม่ได้อยู่ตรงที่กำลังดูอยู่ ถ้าได้ลองพยายามแก้ไขเบื้องต้นแล้วยังแก้ไขไม่ได้
- ให้ลองอธิบายปัญหาให้คนอื่นฟัง เพราะหลายๆครั้ง ผู้เขียนโปรแกรมอยู่ใกล้กับปัญหามากจนมองข้ามสิ่งเล็กๆน้อยๆ
- อย่าเชื่อทุกอย่างที่เห็นในโค้ด หรือข้อมูลจากแหล่งอื่นๆ ให้ลองตรวจสอบคิดเองในใจตามโค้ดทีล่ะบรรทัด
- ให้ออกจากปัญหาสักพักแล้วค่อยกลับมาดูแก้ไขใหม่ เช่น อาบน้ำ จิบกาแฟ หรือ โทรชวนผมไปเที่ยว ทองหล่อ/RCA