Spread Widening
Bid/Ask กว้างขึ้นจนระยะเข้าและ Stop ที่เคยพอดีอาจไม่เหมาะสม หรือคำสั่งถูกเปิดด้วยต้นทุนสูงกว่าปกติ
เรียนรู้แนวคิด “ไม่ทายข่าว แต่รอให้ราคาแสดงแรงจริง” แล้วให้ EA จัดการจังหวะ Breakout ตามกติกา พร้อมระบบจำกัดความเสียหายที่กำหนดไว้ก่อนข่าวออก
โฟกัสที่ระบบเข้า–ออกและความเสี่ยง ไม่ใช่การเดาว่าข่าวจะออกดีหรือแย่
ช่วงก่อนข่าวสำคัญ ตลาดมักบีบตัวหรือเคลื่อนไหวในกรอบ ก่อนจะเกิดการขยายตัวของความผันผวนเมื่อข้อมูลใหม่เข้าสู่ตลาด แนวคิด Volatility Breakout คือให้ระบบรอจนราคาทะลุกรอบที่กำหนด แล้วค่อยตัดสินใจตามกติกา
ปัญหาหลักไม่ได้มีแค่ทิศทางผิด แต่คือสภาพการ Execute เปลี่ยนรวดเร็วในวินาทีข่าวออก ทำให้ระบบที่ออกแบบสำหรับตลาดปกติอาจรับความเสี่ยงมากกว่าที่คิด
Bid/Ask กว้างขึ้นจนระยะเข้าและ Stop ที่เคยพอดีอาจไม่เหมาะสม หรือคำสั่งถูกเปิดด้วยต้นทุนสูงกว่าปกติ
คำสั่ง Stop หรือ Market อาจ Fill ต่างจากราคาที่เห็น โดยเฉพาะช่วงที่ Liquidity หายหรือราคาเคลื่อนหลายจุดใน Tick เดียว
ราคา Breakout ด้านหนึ่งก่อนกลับแรงอีกด้าน ทำให้ระบบที่ไม่มี Cancel-Opposite และ Stop ชัดเจนเสียหายซ้ำได้
ถ้าคำสั่งสองฝั่งไม่ได้จัดการแบบ Atomic อาจเปิดทั้ง Buy และ Sell ในช่วงความผันผวนสูงจนกลายเป็น Exposure ที่ไม่ได้ตั้งใจ
การคิด Lot จาก “อยากได้กำไร” แทนการคิดจาก “เงินที่ยอมเสียได้” ทำให้เหตุการณ์เดียวสร้าง Drawdown รุนแรง
ช่วงข่าวไม่ใช่เวลาที่เหมาะกับการไล่ Lot เพื่อเอาคืน เพราะความผันผวนและต้นทุน Execute ยังอาจสูงต่อเนื่อง
EA ที่ดีควรมี State ชัดเจน ไม่ใช่เปิดทิ้งไว้ด้วยกติกาเดียวตลอดเวลา เพราะความเสี่ยงของตลาดเปลี่ยนก่อนและหลัง Event
ตรวจ Symbol, เวลา Server, ข่าว, Spread ปกติ และ Risk Budget
กำหนดกรอบราคา, Breakout Buffer และเงื่อนไขอนุญาตให้ตั้งคำสั่ง
ราคา Breakout → เปิด 1 ฝั่ง และ Cancel ฝั่งตรงข้ามทันที
ใช้ Hard Stop, TP/Trailing ตาม Policy และตรวจ Max Slippage / Exposure
ยกเลิกคำสั่งค้าง หยุดรับ Signal ใหม่ และรอ Spread/Volatility กลับปกติ
ตัวอย่างนี้เป็น Framework เพื่อการเรียน ไม่ใช่ค่าตายตัวสำหรับทุก Symbol หรือ Broker ผู้ใช้ต้องทดสอบค่าที่เหมาะกับข้อมูลจริงของตนเอง
| องค์ประกอบ | หน้าที่ | สิ่งที่ผู้เรียนต้องสังเกต |
|---|---|---|
| Pre-News Range | กำหนด High / Low ก่อนข่าว | กรอบแคบเกินไปอาจ Trigger จาก Noise; กว้างเกินไปอาจเข้าไกลหลังราคาไปแล้ว |
| Breakout Buffer | เพิ่มระยะเหนือ High / ใต้ Low | ช่วยลด False Trigger แต่ทำให้ราคา Entry ไกลขึ้น จึงต้องทดสอบสมดุล |
| Max Spread | บล็อก Entry หากต้นทุน Execute สูงผิดปกติ | ต้องวัดเป็น Points ตาม Digits ของ Symbol และโบรกเกอร์จริง |
| One-Cancels-Other | Trigger ฝั่งหนึ่งแล้ว Cancel อีกฝั่ง | ลดโอกาส Double Trigger แต่ต้องทดสอบความเร็วและ Fail-safe |
| Hard Stop Loss | จำกัด Risk ของ Trade | Stop คือคำสั่งออก ไม่ใช่การรับประกันราคา Fill ในช่วง Gap/Slippage |
| Time Stop | ปิดเมื่อ Breakout ไม่เดินภายในเวลาที่กำหนด | ช่วยลดการติดอยู่ในตลาดหลังแรงข่าวหมดและกลับเข้าสู่ Noise |
ระบบ News Trading ที่ดีต้องเริ่มจากจำนวนเงินสูงสุดที่ยอมเสียได้ก่อนคำนวณ Lot ไม่ใช่เริ่มจากกำไรที่ต้องการ
กำหนด % สูงสุดต่อข่าวหนึ่งครั้ง ตัวอย่างเพื่อการศึกษาอาจเริ่มจากระดับต่ำและเพิ่มหลังมีข้อมูลทดสอบเพียงพอ
เมื่อขาดทุนรวมถึง Limit ให้ EA Lock ตัวเอง ไม่เปิดข่าวถัดไปเพื่อไล่คืน
หนึ่งข่าว = หนึ่ง Setup ที่ชัดเจน ไม่เปิดซ้ำไม่จำกัดเพราะราคาสวิงไปมา
ไม้แพ้ไม่ใช่เหตุผลให้เพิ่ม Lot ไม้ถัดไป ทุก Entry ใช้ Risk Policy เดิมหรือเล็กลง
ใช้ตัวอย่างเชิงกระบวนการเพื่อให้ผู้เรียนเห็นว่า “ระบบรอด” มาจากการจำกัดทางเลือกที่ผิด ไม่ใช่จากการทายข่าวถูกทุกครั้ง
เครื่องมือนี้ใช้สอนแนวคิดการกำหนด Lot จากจำนวนเงินที่ยอมเสียได้ ผู้ใช้ต้องใส่ “มูลค่า 1 Point ต่อ 1 Lot” ให้ตรงกับ Symbol และบัญชีของตนเอง
สูตรตัวอย่าง: Risk Budget = Equity × Risk% และ Lot ≈ Risk Budget ÷ (Stop Points × Point Value ต่อ 1 Lot)
Dashboard คือหน้าสรุปสถานะของ EA แบบ Real-time ผู้เรียนควรอ่านจากบนลงล่างเพื่อดูว่า EA อยู่ขั้นไหนของกระบวนการข่าว, กำลังวาง Pending หรือยัง, มี Position เปิดหรือไม่ และ Risk Guard ยังอนุญาตให้ระบบทำงานต่อหรือไม่
| ช่องบน Dashboard | ตัวอย่าง | ความหมาย | ผู้เรียนควรดูอะไร |
|---|---|---|---|
| STATE | WAITING | State Machine ปัจจุบันของ EA เช่น WAITING, PREPARE, ARMED, MANAGE, COOLDOWN, DONE หรือ LOCKED | ใช้ดูว่า EA อยู่ขั้นไหนของกระบวนการข่าว ถ้ายัง WAITING จะยังไม่วาง Pending |
| NEWS | NFP | 2026.10.02 19:30 | ชื่อข่าวและเวลาข่าวที่กำหนดใน InpNewsTimeServer |
ต้องตรวจให้ตรงกับ Broker Server Time ไม่ใช่เวลาไทยโดยอัตโนมัติ |
| COUNTDOWN | 620593 sec | จำนวนวินาทีที่เหลือก่อนถึงข่าว ถ้าข่าวผ่านไปแล้วจะแสดงเวลาหลังข่าวในรูปแบบ +วินาที | ช่วยตรวจว่าตั้งเวลาข่าวผิดวัน/ผิด Timezone หรือไม่ |
| SYMBOL | XAUUSD | Symbol ของกราฟที่ EA ถูกติดตั้ง | Input เรื่อง Points, Spread, Buffer, Stop และ Spacing ต้องเหมาะกับ Symbol นี้ |
| ACCOUNT | HEDGING | ประเภทบัญชี MT5 ปัจจุบัน | ถ้าใช้ Multi-Level และต้องการ Trailing แยกแต่ละไม้ ควรเป็น HEDGING |
| RANGE H / L | WAIT RANGE | High / Low ของกรอบก่อนข่าวจากข้อมูล M1 ตามช่วง InpRangeMinutesBefore |
เมื่อเข้าสู่ ARM จะเห็นระดับราคาจริงแทน WAIT RANGE |
| SPREAD | 27.0 pts | Spread ปัจจุบันเป็น Points | ถ้าเกิน InpMaxSpreadPoints EA จะไม่ ARM ชุด Pending ใหม่ |
| BUY L1 | - | ราคา Buy Stop ระดับแรก = Range High + Breakout Buffer | เครื่องหมาย “-” หมายถึงยังไม่ได้สร้าง Trade Plan |
| SELL L1 | - | ราคา Sell Stop ระดับแรก = Range Low - Breakout Buffer | เมื่อ ARM แล้ว ควรตรวจว่าระยะจากราคาปัจจุบันสมเหตุสมผลและไม่ใกล้ตลาดเกินไป |
| LADDER | 3 levels x 100 pts | จำนวนระดับ Pending ต่อฝั่ง × ระยะห่างระหว่างแต่ละ Level | ยิ่งจำนวน Level มาก Exposure อาจเพิ่มเร็ว จึงต้องใช้ Risk Budget รวมเป็นตัวควบคุม |
| PENDING B / S | 0 / 0 | จำนวน Buy Pending / Sell Pending ที่ยังค้างอยู่ | ก่อน Trigger อาจเห็น 3 / 3; เมื่อ BUY Trigger ควรเห็น Sell Pending ถูก OCO ยกเลิก |
| LOT / ORDER | - | Lot ของ Pending แต่ละไม้ที่ EA คำนวณ | โหมด Risk Percent จะคำนวณ Lot จาก Risk รวมของ Ladder ทั้งชุด ไม่ใช่ Risk % ต่อไม้ |
| POSITIONS | 0 | จำนวน Position ของ EA ที่เปิดอยู่บน Symbol นี้ | บัญชี HEDGING อาจมี 1–3 Position หาก Ladder ฝั่งเดียว Trigger หลายระดับ |
| TRAILING | START 180 | DIST 100 | เริ่ม Trailing เมื่อกำไรของไม้ถึง 180 points และวาง SL ตามหลังราคาประมาณ 100 points | แต่ละ Position ในบัญชี HEDGING จะคำนวณ Trailing จากราคาเปิดของตัวเอง |
| FLOAT P/L | 0.00 USD | กำไร/ขาดทุนลอยตัวของ Position ที่ EA เปิดอยู่ | ใช้ดูสถานะ Event ปัจจุบันร่วมกับ Emergency Event Loss Guard |
| DAILY P/L | 0.00 USD | ผลรวมกำไร/ขาดทุนของ EA วันนี้ ทั้ง Realized + Floating ตาม Magic/Symbol ที่ระบบติดตาม | ถ้าลดถึง InpMaxDailyLossPercent ระบบจะเข้า DAILY LOCK |
| RISK / EVENT | 0.50% TOTAL LADDER | Risk Budget ของ Event นี้ เมื่อใช้ Risk Percent Mode จะเฉลี่ย Lot ต่อ Order เพื่อควบคุม Risk รวมของ Ladder | อย่าอ่านว่า 0.50% ต่อไม้ — ในโหมดนี้คือ 0.50% ของชุดทั้งหมดตามโมเดลการคำนวณของ EA |
| GUARD | READY | สถานะ Safety Guard เช่น READY, EVENT ACTIVE/USED หรือ DAILY LOCK | ถ้าเป็น LOCK ต้องหาสาเหตุก่อนเปิดรอบใหม่ ไม่ควรแก้ด้วยการเพิ่ม Lot หรือปิดระบบป้องกันทันที |
ยังไม่ถึงช่วงเตรียมก่อนข่าว EA แสดงข้อมูลแต่ยังไม่วาง Pending
เข้าสู่ช่วงเตรียมระบบ ตรวจ Spread, Range, Risk และความพร้อมก่อน ARM
วาง Buy Stop / Sell Stop Ladder แล้ว กำลังรอราคา Trigger
มี Position เปิดแล้ว EA จัดการ OCO, SL, Break-even, Trailing, Time Stop และ Emergency Guard
หมด Entry Window หรือจบ Trade แล้ว กำลังพักระบบ ไม่รับ Setup ใหม่ในข่าวเดียวกัน
จบกระบวนการ Event นี้แล้ว
Safety Guard สั่งล็อก เช่น Daily Loss หรือเหตุผิดปกติที่กำหนดไว้
ยืนยันชื่อข่าว วัน เวลา และ Server Time ก่อนทุกครั้ง
ตรวจว่าใช้ HEDGING เมื่อต้องการหลาย Position และ Input Points เหมาะกับ Symbol
หาก Spread กว้างเกิน Filter ไม่ควรพยายามฝืนให้ EA ARM
เมื่อถึงช่วง ARM ต้องเห็น Trade Plan และระดับ Pending ชัดเจน
ยืนยันจำนวนไม้และ OCO ว่าฝั่งตรงข้ามหายหลัง Trigger
ตรวจ Exposure ก่อนข่าว โดยเน้น Risk รวมของ Event มากกว่าจำนวน Lot อย่างเดียว
หลัง Trigger ใช้ติดตามจำนวนไม้, Trailing และ Drawdown ของรอบข่าว
READY = Safety Guard ยังไม่ Block; LOCK = ต้องหยุดและหาสาเหตุ
EA เวอร์ชัน Multi-Level Ladder ใช้ State Machine คุมกระบวนการทั้งหมด ตั้งแต่รอข่าว สร้างกรอบ วาง Pending หลายระดับ จัดการ OCO ไปจนถึง Trailing และ Safety Guard โดยหลักสำคัญคือ “หนึ่ง Event = หนึ่ง Risk Budget” และไม่มี Martingale
ยังไม่ถึงช่วงเตรียมก่อนข่าว แสดง Dashboard และ Countdown แต่ยังไม่วางคำสั่ง
เข้าสู่ช่วงก่อนข่าวตาม InpPrepareMinutesBefore และรอ Finalize Range ตอนถึง ARM
สร้าง Pre-News Range, คำนวณ Buy/Sell Ladder, Lot, SL/TP แล้ววาง Pending
มี Position เปิดแล้ว จัดการ OCO, Break-even, Trailing, Time Stop และ Emergency Guard
หมด Entry Window หรือจบ Trade แล้ว ลบ Pending ที่เหลือและพักระบบ
Event นี้จบแล้ว ไม่สร้าง Ladder ใหม่ใน Event เดิมเมื่อใช้ One Trade per Event
Safety Guard สั่งหยุด เช่น Daily Loss Limit หรือ Opposite-Side Double Trigger
InpNewsTimeServer ซึ่งต้องเป็นเวลา Server ของโบรกเกอร์InpRangeMinutesBefore เพื่อหา Range High / LowInpPendingSpacingPointsInpPendingLevelsPerSide = 3 หมายถึง Buy Stop 3 ระดับ + Sell Stop 3 ระดับInpRequireBothPending = true และวาง Ladder ไม่ครบทั้งสองฝั่ง EA จะลบทั้งหมดแทนการปล่อย Setup ที่ไม่สมบูรณ์InpKeepSameSideLadderAfterTrigger = true Pending ฝั่งเดียวกันที่เหลือยังทำงานต่อได้จนหมด Entry Windowfalse ไม้แรก Trigger แล้วลบ Pending ที่เหลือทั้งหมดNVB_RISK_PERCENT จะรวม Risk ของทุก Level ในฝั่ง BUY และ SELLInpFixedLot คือ Lot “ต่อ Order”Range High │ ├─ +Buffer → BUY L1 ├─ +Spacing → BUY L2 └─ +Spacing → BUY L3 Range Low │ ├─ -Buffer → SELL L1 ├─ -Spacing → SELL L2 └─ -Spacing → SELL L3 ถ้า BUY L1 Trigger: SELL L1/L2/L3 → OCO CANCEL BUY L2/L3 → ยังรอได้จน Entry Window หมด (ถ้า KeepSameSide = true)
HEDGING เพราะบัญชี NETTING จะรวมการเปิดหลายไม้ใน Symbol เดียวเป็น Position เดียว โค้ดจึงมี InpRequireHedgingForMultiOrder เพื่อป้องกันการใช้งานผิดรูปแบบ
ตารางด้านล่างอ้างอิง Input จากโค้ด News_Volatility Breakout_EA v1.10 Ladder โดยตรง ค่า Default เป็นค่าเริ่มต้นของโค้ด ไม่ใช่ค่าที่เหมาะกับทุก Symbol หรือทุก Broker
Points ใน EA ใช้หน่วย _Point ของ Symbol ใน MT5 เช่น XAUUSD แต่ละ Broker อาจมี Digits ต่างกัน จึงต้องตรวจ Symbol Specification ก่อนใช้ Buffer, Spacing, SL, Break-even หรือ Trailing เดียวกันข้าม Broker
กำหนดว่า Event คืออะไร เริ่มเตรียมเมื่อไร วาง Pending เมื่อไร และหยุดรับ Entry เมื่อไร
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpNewsName | NFP | ชื่อข่าวสำหรับ Dashboard, Log และข้อความ Alert | เป็นข้อความแสดงผลเท่านั้น ไม่ได้ดึง Economic Calendar อัตโนมัติ |
| InpNewsTimeServer | 2026.09.25 19:30 | วันและเวลาข่าวตาม Broker Server Time | ใช้คำนวณ PREPARE, ARM, Entry Deadline และ Cooldown ทั้งหมด ต้องตั้ง Timezone ให้ถูก |
| InpPrepareMinutesBefore | 15 | เริ่มสถานะ PREPARE ก่อนข่าวกี่นาที | ช่วงนี้ EA ยังไม่วาง Pending แต่เข้าสู่ช่วงเตรียมระบบ |
| InpArmSecondsBefore | 5 | เริ่มวาง Pending ก่อนข่าวกี่วินาที | เมื่อถึง ARM จะสร้าง Range/Trade Plan และพยายามวาง Ladder |
| InpMaxEntrySecondsAfter | 10 | อนุญาต Pending ทำงานต่ออีกกี่วินาทีหลังข่าว | เลยเวลานี้ EA จะลบ Pending ที่ยังไม่ Trigger |
| InpCooldownMinutes | 15 | ช่วงพักหลังข่าว | ไม่สร้าง Setup ใหม่ของ Event เดิมในช่วง Cooldown |
กำหนดกรอบก่อนข่าว ตำแหน่ง Pending จำนวนไม้ ระยะห่าง และเงื่อนไข Execution
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpRangeMinutesBefore | 15 | จำนวน M1 ก่อนข่าวที่ใช้หา Range High / Low | Range นี้เป็นฐานของ BUY L1 และ SELL L1 |
| InpBreakoutBufferPoints | 50 | ระยะเพิ่มจาก Range High / ลดจาก Range Low สำหรับ Level แรก | ช่วยไม่ให้ Trigger ใกล้ขอบกรอบเกินไป แต่ Buffer มากเกินไปทำให้ Entry ไกลขึ้น |
| InpPendingLevelsPerSide | 3 | จำนวน Buy Stop และ Sell Stop ต่อฝั่ง | 3 = Buy 3 ไม้ + Sell 3 ไม้; โค้ดจำกัด Input สูงสุด 10 Levels |
| InpPendingSpacingPoints | 100 | ระยะระหว่าง Level | BUY ระดับถัดไปสูงขึ้นทีละ Spacing; SELL ระดับถัดไปต่ำลงทีละ Spacing |
| InpKeepSameSideLadderAfterTrigger | true | หลังไม้แรก Trigger จะคง Pending ฝั่งเดียวกันไว้หรือไม่ | true = ยกเลิกเฉพาะฝั่งตรงข้าม; false = ลบ Pending ที่เหลือทั้งหมด |
| InpRequireHedgingForMultiOrder | true | บังคับบัญชี HEDGING เมื่อใช้หลาย Level | ถ้า Levels > 1 และบัญชีไม่ใช่ Hedging EA จะ Init ไม่ผ่านเมื่อค่านี้เป็น true |
| InpMaxSpreadPoints | 40 | Spread สูงสุดที่ยอมรับก่อน ARM | ถ้า Spread สูงกว่าค่านี้ EA จะไม่วาง Ladder; 0 = ปิด Filter |
| InpMaxDeviationPoints | 30 | Deviation ที่ส่งให้ระบบ Trade ของ MT5 | ใช้กับคำสั่งจัดการ Position/Order เช่น Close/Modify ตามกลไก CTrade |
| InpRequireBothPending | true | ต้องวาง Ladder ได้ครบทั้ง BUY และ SELL หรือไม่ | true = ถ้าวางไม่ครบตามจำนวน Levels ทั้งสองฝั่ง จะลบทั้งหมดเพื่อไม่ใช้ Setup ครึ่งชุด |
กำหนด Lot และ Risk Guard ของ Event/วัน
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpLotMode | NVB_RISK_PERCENT | เลือก NVB_FIXED_LOT หรือ NVB_RISK_PERCENT | Fixed = Lot ต่อ Order; Risk Percent = คำนวณ Lot เพื่อควบคุม Risk รวม Ladder ฝั่งที่เลวร้ายกว่า |
| InpFixedLot | 0.10 | Lot ต่อ Order เมื่อใช้ Fixed Lot | ถ้า 3 Levels เปิดครบ = 0.10 × 3 = 0.30 lot ฝั่งนั้น |
| InpRiskPercent | 0.50% | Risk Budget ต่อ Event จาก Account Equity | ในโหมด Risk Percent EA รวม Risk ของทุก Level และใช้ Risk ฝั่งที่สูงกว่าเป็นฐานหา Lot ต่อ Order |
| InpMaxLot | 5.00 | เพดาน Lot ต่อ Order | ไม่ใช่เพดาน Exposure รวมของทุก Position |
| InpMaxDailyLossPercent | 2.00% | Daily Loss Limit | EA รวม Realized + Floating ของ Magic/Symbol นี้ ถ้าถึง Limit จะลบ Pending, ปิด Position และเข้าสู่ DAILY LOCK; 0 = ปิด |
| InpEmergencyEventLossPercent | 1.50% | Emergency Equity Stop ของ Event | ใช้ Account Equity ตอน ARM เป็นฐาน หาก Equity ทั้งบัญชีลดถึง % นี้จะปิด Position ของ EA; Position/EA อื่นในบัญชีจึงมีผลต่อ Guard นี้ด้วย |
Equity = $10,000 InpRiskPercent = 0.50% Risk Budget ≈ $50 Levels = 3 EA จะคำนวณ Lot/Order โดยสมมติฝั่งที่มี Risk รวมสูงกว่า และทุก Level ของฝั่งนั้นอาจถูกเปิดแล้วไปชน SL ดังนั้น 0.50% = TOTAL LADDER โดยประมาณ ไม่ใช่ 0.50% × 3 ไม้
กำหนดระยะ Hard Stop ของแต่ละ Pending/Position
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpStopMode | NVB_STOP_FIXED_POINTS | เลือก Fixed Points หรือ ATR | NVB_STOP_FIXED_POINTS ใช้ StopLossPoints; NVB_STOP_ATR ใช้ ATR × Multiplier |
| InpStopLossPoints | 150 | ระยะ SL จาก Entry เมื่อใช้ Fixed | แต่ละ Level มี SL จาก Entry ของตัวเอง |
| InpATRPeriod | 14 | Period ของ ATR | โค้ดคำนวณ ATR บน M1 |
| InpATRMultiplier | 1.50 | ตัวคูณ ATR | Stop Distance = ATR(M1) × Multiplier และต้องไม่น้อยกว่าระยะขั้นต่ำของ Broker |
กำหนด TP ของแต่ละ Level
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpTakeProfitMode | NVB_TP_RR | NVB_TP_NONE, NVB_TP_RR หรือ NVB_TP_FIXED_POINTS | None = ไม่มี TP ตายตัว; RR = TP ตาม Risk Distance; Fixed = TP ตาม Points |
| InpRiskReward | 1.50 | R:R Target เมื่อใช้ TP แบบ RR | ถ้า SL ห่าง 200 points และ RR 1.50 → TP ประมาณ 300 points |
| InpTakeProfitPoints | 300 | ระยะ TP เมื่อใช้ Fixed Points | ใช้จาก Entry ของแต่ละ Level |
กำหนด Time Stop, Break-even และ Trailing ราย Position
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpTimeStopMinutes | 10 | เวลาถือ Position สูงสุด | EA ใช้เวลา Position ที่เก่าสุด ถ้าครบกำหนดจะปิด Position ของ EA ทั้งหมด; 0 = ปิด |
| InpUseBreakEven | true | เปิด/ปิด Break-even | ทำงานแยกแต่ละ Position บนบัญชี Hedging |
| InpBreakEvenTriggerPoints | 120 | กำไรเป็น Points ที่เริ่ม Break-even | แต่ละไม้ต้องมีกำไรถึงค่านี้จากราคาเปิดของตัวเอง |
| InpBreakEvenLockPoints | 10 | เลื่อน SL ข้าม Entry ไปล็อกกำไรกี่ Points | BUY → Entry + Lock; SELL → Entry - Lock โดยยังต้องเคารพระยะ Stop ขั้นต่ำของ Broker |
| InpUseTrailingStop | true | เปิด/ปิด Trailing | เมื่อเปิด จะติดตามทุก Position ของ EA แยกกัน |
| InpTrailingStartPoints | 180 | กำไรที่ต้องถึงก่อนเริ่ม Trailing | แต่ละไม้เริ่ม Trailing ไม่พร้อมกันได้ เพราะ Entry ต่างกัน |
| InpTrailingDistancePoints | 100 | ระยะ SL ตามหลังราคาปัจจุบัน | BUY → SL ใต้ Bid; SELL → SL เหนือ Ask ตามระยะนี้ |
| InpTrailingStepPoints | 20 | ระยะ SL ต้องดีขึ้นขั้นต่ำก่อน Modify รอบใหม่ | ช่วยลดการส่ง PositionModify ทุก Tick |
กำหนดสิทธิ์เปิด Trade, Magic Number และ Fail-safe ของ Event
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpMagicNumber | 26092501 | ID ของ EA | ใช้แยก Order/Position/History ของ EA นี้จากระบบอื่น |
| InpEnableTrading | true | เปิดสิทธิ์วาง Pending ใหม่ | false = EA ยังแสดง Dashboard/คำนวณสถานะ แต่ไม่ ARM คำสั่งใหม่ |
| InpOneTradePerEvent | true | Event เดียวใช้ Setup Ladder ชุดเดียว | หลังมี Trigger แล้ว Event จะถูก Mark Used และไม่สร้าง Ladder ชุดใหม่ แต่ same-side Levels เดิมยัง Trigger ต่อได้ภายใน Entry Window |
| InpCloseOnDoubleTrigger | true | ป้องกันเกิด BUY และ SELL Position พร้อมกัน | ถ้าพบ Opposite-Side Position/Race Condition จะปิดทั้งหมดและ LOCK |
| InpDeletePendingsOnDeinit | false | ลบ Pending เมื่อ EA ถูก Deinit หรือไม่ | true = ถอด EA/บางการเปลี่ยนค่าที่ทำให้ Deinit อาจลบ Pending; false = ไม่ลบเพราะ Deinit โดยอัตโนมัติ |
กำหนดการแสดงผลและการแจ้งเตือน
| Input | Default | ความหมาย | ผลต่อการทำงาน |
|---|---|---|---|
| InpShowDashboard | true | แสดง/ซ่อน Dashboard | false = ลบ Object Dashboard ของ EA ออกจากกราฟ |
| InpDashboardCorner | NVB_TOP_RIGHT | มุมของ Dashboard | เลือก TOP_RIGHT, TOP_LEFT, BOTTOM_RIGHT หรือ BOTTOM_LEFT |
| InpDashboardX | 14 | Offset แนวนอนเป็น Pixel | ใช้ขยับ Dashboard ไม่ให้ทับราคา/วัตถุอื่น |
| InpDashboardY | 18 | Offset แนวตั้งเป็น Pixel | ใช้ขยับ Dashboard ขึ้น/ลง |
| InpPopupAlert | false | Popup Alert ใน MT5 | แจ้งเหตุสำคัญ เช่น ARM, Trigger, Close, Daily Lock |
| InpPushNotification | false | Push ไป MT5 Mobile | ต้องตั้ง MetaQuotes ID ใน MT5 ก่อนจึงส่งได้ |
NVB_RISK_PERCENT, Risk ต่อ Event ต่ำ, 2–3 Levels, HEDGING Account, เปิด Double Trigger Protection, Break-even และ Trailing จากนั้นแยก Preset ตาม Symbol/Broker โดยเฉพาะ XAUUSD เพราะ Point Size, Spread และ Volatility แตกต่างจาก Forex majors
Backtest ที่ดีไม่ควรมองแค่กำไรรวม แต่ต้องดูว่าระบบยังทำงานได้หรือไม่เมื่อ Spread, Slippage และการ Fill ไม่สมบูรณ์
ทดสอบหลายข่าว หลายปี และหลายสภาวะ ไม่เลือกเฉพาะวันที่ Breakout สวย
จำลองหรือทดสอบภายใต้ Spread ที่เปลี่ยน ไม่ใช้ค่าคงที่ต่ำกว่าความจริงตลอดช่วงข่าว
ดูว่าถ้า Entry/Stop ถูก Fill แย่กว่าที่คาด ระบบยังไม่เกิน Max Risk ที่กำหนดไว้หรือไม่
แยกช่วง Optimize กับช่วงตรวจสอบ เพื่อดูว่าค่าที่เลือกไม่ได้เหมาะเฉพาะข้อมูลชุดเดียว
รันกับ Feed และ Broker จริงแบบ Demo ก่อน เพื่อดู Timing, Spread และการ Cancel Order
จำลองกรณีผิดปกติ เช่น Pair/Feed หาย, Order ข้างเดียว, VPS หลุด และ Max Daily Loss ถูกแตะ
ก่อนเปิดระบบ ให้ผู้เรียนเช็กทีละข้อ ถ้ายังมีข้อใดไม่รู้คำตอบ ให้ถือว่ายังไม่พร้อม
คำตอบสั้น ๆ สำหรับประเด็นที่ผู้เรียนมักสงสัยก่อนนำระบบไปทดลอง
ไม่จำเป็นสำหรับ Framework นี้ จุดสำคัญคือให้ราคายืนยันการ Breakout และให้ระบบทำงานตามกติกา Entry / Exit / Risk ที่กำหนดไว้ก่อนข่าว
ไม่ควรสรุปเช่นนั้น แต่ละ Symbol มี Spread, Tick Value, Liquidity และพฤติกรรมข่าวต่างกัน จึงต้องทดสอบเป็นราย Symbol และราย Broker
ไม่ใช่ Stop Loss เป็นคำสั่งออก ไม่ได้การันตีราคา Fill โดยเฉพาะเมื่อเกิด Gap หรือ Slippage สูง
เพราะ Breakout ที่ไม่เดินต่อภายใน News Window อาจเปลี่ยนเป็นตลาดสวิงหรือกลับตัว Time Stop ช่วยไม่ให้ระบบติดอยู่ในสถานการณ์ที่ไม่ตรงกับสมมติฐานเดิม
Framework นี้ไม่ใช้แนวคิดเพิ่ม Lot เพื่อเอาคืน เพราะทำให้ Risk ของ Event ถัดไปขึ้นอยู่กับผลลัพธ์ที่ผ่านมาแทนที่จะขึ้นอยู่กับ Risk Policy ที่กำหนดไว้
ระบบที่ดีไม่ได้วัดจากการจับ Breakout ได้ทุกครั้ง แต่จากการรู้ว่าเมื่อไรควรเข้า เมื่อไรไม่ควรเข้า และเมื่อผิดต้องหยุดความเสียหายตรงไหน