
รีวิว EA Bollinger Bands บน MT5: สัญญาณและความเสี่ยง
บทความนี้เป็นการอ่านเอกสารและ source code ของ BollingerBands.mq5 ที่แนบมากับบทความ MQL5 เรื่อง Implementing a Bollinger Bands Trading Strategy with MQL5 จุดประสงค์คือสรุปว่าโค้ดพยายามทำอะไร มี input และ risk control อะไร และมีจุดใดที่ควรตรวจต่อก่อน Compile หรือทดสอบจริง บทความนี้ไม่ใช่การรับรอง EA และไม่ใช่ผลการทดสอบของ TRADERMAN
Source นี้คืออะไร
ชื่อไฟล์คือ BollingerBands.mq5 ผู้เขียนบทความต้นทางที่หน้า MQL5 แสดงคือ Kikkih25 และวันที่คือ 7 สิงหาคม 2024 เวลา 11:38 โค้ดระบุ version 1.00 แหล่งหลักคือบทความ Implementing a Bollinger Bands Trading Strategy with MQL5 และมีไฟล์ mq5 แนบให้ดาวน์โหลด
คำว่ารีวิวในที่นี้หมายถึงการอ่านกฎและโครงสร้างตาม source ที่เผยแพร่ ไม่ได้หมายความว่า TRADERMAN เป็นผู้พัฒนา source หรือรับรองว่าผลลัพธ์จะเหมือนกันทุกโบรกเกอร์ ทุก symbol และทุก timeframe
Bollinger Bands ในโค้ดทำงานอย่างไร
Bollinger Bands ประกอบด้วยเส้นกลางที่อิงค่าเฉลี่ยเคลื่อนที่ และเส้นบนกับเส้นล่างที่ห่างจากเส้นกลางตามจำนวนส่วนเบี่ยงเบนมาตรฐาน เอกสาร MetaTrader อธิบายว่าแถบจะกว้างขึ้นเมื่อความผันผวนสูงขึ้นและแคบลงเมื่อความผันผวนลดลง
Source เรียก iBands ด้วย BandPeriod เท่ากับ 30, BandDeviation เท่ากับ 2.0, ใช้ PRICE_CLOSE และใช้ PERIOD_CURRENT ของกราฟ ค่าเหล่านี้เป็นค่าตั้งต้นของ source ไม่ใช่ค่าที่เหมาะกับทุกตลาดหรือทุกบัญชี
กฎเข้าออกตาม source
ใน OnTick source ขอค่าจาก indicator แล้วอ่าน SYMBOL_LAST, SYMBOL_ASK และ SYMBOL_BID โครงสร้างกฎที่ source ตั้งใจทำคือ ถ้าราคาอยู่ต่ำกว่าเส้นล่างและไม่มี position ของ symbol นั้น ให้ส่ง Buy; ถ้าราคาอยู่สูงกว่าเส้นบนและไม่มี position ของ symbol นั้น ให้ส่ง Sell
Source ใช้ LotSize เท่ากับ 0.2 แบบคงที่ Buy ใช้ Stop Loss 70 points และ Take Profit 140 points จากราคา Ask ส่วน Sell ใช้ Stop Loss 70 points และ Take Profit 140 points จากราคา Bid พร้อมกัน position ใหม่เมื่อพบ position ใด ๆ ของ symbol เดียวกัน
ระยะห่าง SL/TP ตามตัวเลขใน source มีสัดส่วน 70 ต่อ 140 หรือ 1 ต่อ 2 แต่เป็นเพียงระยะที่กำหนดในโค้ด ไม่ใช่ผลลัพธ์ที่เกิดขึ้นจริง และไม่ได้บอก win rate, expectancy, profit factor หรือ drawdown
จุดที่ต้องระวัง: iBands buffer mapping
นี่คือจุดสำคัญที่สุดจากการเทียบ source กับเอกสารทางการของ MQL5 เอกสาร iBands ระบุว่า buffer 0 คือ BASE_LINE, buffer 1 คือ UPPER_BAND และ buffer 2 คือ LOWER_BAND
แต่ source เรียก CopyBuffer โดยส่ง buffer 0 ไปเก็บใน upperBand, buffer 1 ไปเก็บใน middleBand และ buffer 2 ไปเก็บใน lowerBand ดังนั้น upper ที่นำไปใช้ในเงื่อนไข Sell ได้ค่าจากเส้นกลาง ไม่ใช่เส้นบนตามชื่อที่ตั้งไว้ ส่วน middle ได้ค่าจากเส้นบนแต่ไม่ได้ถูกใช้ในกฎเข้าออก
จุดแข็งของโครงสร้าง
โค้ดแยก OnInit, OnDeinit และ OnTick ทำให้อ่าน flow หลักได้ง่าย ตรวจ INVALID_HANDLE หลังสร้าง iBands และเรียก IndicatorRelease ตอน deinitialization มีการกำหนด SL/TP ตั้งแต่ตอนส่งคำสั่ง และมี IsPositionOpen เพื่อกันการเปิด position ซ้ำบน symbol เดียวกัน
จุดแข็งเหล่านี้เป็นคุณสมบัติจากโครงสร้างโค้ด ไม่ใช่หลักฐานว่ากลยุทธ์ทำกำไรหรือเหมาะกับบัญชีใด
ข้อจำกัดและความเสี่ยงที่เห็นจาก source
หนึ่ง: LotSize เท่ากับ 0.2 เป็นจำนวนคงที่ ไม่ได้คำนวณจาก equity, tick value, contract size, ระยะ Stop Loss หรือเปอร์เซ็นต์ความเสี่ยงต่อบัญชี ดังนั้นความเสี่ยงเป็นเงินอาจต่างกันมากเมื่อเปลี่ยน symbol, digits, contract specification หรือ broker
สอง: source ใช้ SYMBOL_LAST เป็นราคาสัญญาณ แต่ใช้ Ask สำหรับ Buy และ Bid สำหรับ Sell การตรวจต่อควรยืนยันว่า symbol และผู้ให้บริการมีค่า Last ที่เหมาะกับการใช้งาน และควรพิจารณา spread กับความแตกต่างของราคาสัญญาณและราคาดำเนินการ
สาม: มี input ชื่อ Slippage เท่ากับ 3 แต่ source ไม่ได้เรียก SetDeviationInPoints ก่อน Buy หรือ Sell ค่า input นี้ถูกส่งเข้า PositionClose ใน helper เท่านั้น จึงควรตรวจว่าพฤติกรรม slippage ตอนเปิด position ตรงกับความตั้งใจหรือไม่
สี่: IsPositionOpen ตรวจเพียง symbol ไม่ได้กรองด้วย magic number ดังนั้น position ที่เปิดด้วยมือหรือ EA อื่นบน symbol เดียวกันอาจทำให้ source ไม่เปิด position ใหม่
ห้า: source มี CloseAllPositions แต่จากโครงสร้าง OnTick ที่เผยแพร่ไม่พบการเรียกฟังก์ชันนี้ใน flow หลัก จึงยังไม่เห็น exit logic จากการกลับเข้าหาเส้นกลางหรือกฎปิดตาม indicator แยกต่างหาก
หก: buffer mismatch อาจเปลี่ยนความหมายของ Sell condition ตามที่อธิบายไว้ จึงเป็นจุดที่ควรแก้หรือยืนยันก่อนการทดสอบ ไม่ควรสรุปว่ากฎในบทความต้นทางกับกฎในไฟล์ที่แนบให้ผลเหมือนกันทุกจุด
สิ่งที่ยังไม่ได้ทดสอบ
รอบนี้ไม่ได้เปิด MetaEditor หรือ MT5 และไม่ได้ทำ Compile, Strategy Tester, Backtest ใหม่, Demo หรือ Live execution ไม่ได้ตรวจ broker-specific symbol properties, margin, spread, filling mode หรือ execution retcode และไม่ได้คำนวณผลกำไร win rate drawdown หรือ profit factor
บทความ MQL5 ต้นทางมีส่วนที่ระบุผลการทดสอบของผู้เขียน แต่ข้อมูลดังกล่าวไม่ใช่ผลรันของ TRADERMAN และไม่ได้ใช้เป็นหลักฐานรับรองในบทความนี้
Checklist ก่อนทดสอบใน environment ที่ได้รับอนุญาต
ตรวจ mapping ของ CopyBuffer ให้ตรงกับเอกสาร iBands; ยืนยันว่าการใช้ Last, Bid หรือ Ask เป็นฐานของ signal เหมาะกับ symbol ที่จะศึกษา; และกำหนดว่าความเสี่ยงจาก fixed lot อยู่ในขอบเขตใด
กำหนด magic number, spread limit, margin check, filling mode และ deviation ให้สอดคล้องกับ broker รวมถึงตรวจว่ากฎปิด position อยู่ที่ใด และแยกผลของ SL/TP ออกจาก exit ตาม indicator
แหล่งอ้างอิง

คำเตือนความเสี่ยง
ข้อมูลนี้จัดทำเพื่อการศึกษาและการวิเคราะห์ ไม่ใช่คำแนะนำการลงทุนเฉพาะบุคคล และไม่รับประกันผลกำไร



ความคิดเห็น