ในบรรดาไฟล์ที่แจกบนเว็บนี้ EA คือประเภทเดียวที่ลงมือเองได้ — อินดิเคเตอร์บรรยายตลาด แต่ Expert Advisor เทรดตลาดจริง ๆ EA ฟรีตัวนี้เทรดด้วยกลยุทธ์แบบ mean-reversion เดียวที่โปร่งใส สร้างขึ้นจาก Money Flow Index โดยรอให้ MFI กลับตัวออกจาก zone oversold หรือ overbought แล้วเปิดเทรดพร้อม Stop Loss ที่คำนวณจาก ATR, Take Profit ที่เป็นสัดส่วนคูณของ RR และขนาดโพซิชันที่คำนวณตามความเสี่ยง — ทั้งหมดคำนวณให้อัตโนมัติ ไม่ต้องเฝ้ากราฟด้วยตัวเอง
กลยุทธ์ทำงานอย่างไร
MFI มักถูกอธิบายว่าเป็น "RSI ที่ถ่วงน้ำหนักด้วย volume" และคำอธิบายนี้สำคัญต่อพฤติกรรมของ EA ตัวนี้ เหมือนกับ RSI คือมันให้ค่าอยู่ในช่วง 0-100 ที่มีขอบเขต โดยเปรียบเทียบการขึ้นกับการลงของราคาในช่วงที่ผ่านมา แต่ต่างจาก RSI ตรงที่ RSI คำนวณจากราคาล้วนๆ ส่วน MFI นำ volume ของแต่ละแท่งเทียนเข้ามาร่วมคำนวณด้วย โดยให้น้ำหนักกับแท่งเทียนที่มีการซื้อขายหนาแน่นมากกว่าแท่งที่เงียบ ผลในทางปฏิบัติคือ MFI สามารถเคลื่อนไหวต่างไปจากสิ่งที่ราคาเพียงอย่างเดียวจะบ่งชี้ได้ — การเคลื่อนไหวของราคาบน volume บางๆ จะทำให้ MFI แกว่งตัวอ่อนกว่าการเคลื่อนไหวแบบเดียวกันบน volume หนาแน่น แม้ทั้งสองกรณีจะดูเหมือนกันทุกประการบนกราฟราคาเปล่าๆ ก็ตาม
สัญญาณที่ EA ตัวนี้ใช้เทรดไม่ใช่ตอนที่ MFI ไปถึง จุดสุดขั้ว แต่เป็นตอนที่ MFI กลับตัวทะลุผ่าน จุดนั้นออกมา สัญญาณ BUY จะเกิดขึ้นเมื่อ MFI (ค่าเริ่มต้น 14-period, MFIPeriod) กลับตัวขึ้นทะลุระดับ Oversold (ค่าเริ่มต้น 20.0) หลังจากที่เคยอยู่ที่หรือต่ำกว่าระดับนั้นในแท่งเทียนก่อนหน้าที่ปิดสมบูรณ์ — ไม่ใช่จังหวะที่ MFI เพิ่งลงถึง 20 เป็นครั้งแรก แต่เป็นแท่งเทียนที่มันไต่กลับขึ้นเหนือเส้นนั้น ส่วนสัญญาณ SELL ก็สะท้อนกลับกัน คือ MFI กลับตัวลงทะลุระดับ Overbought (ค่าเริ่มต้น 80.0) หลังจากเคยอยู่ที่หรือสูงกว่าระดับนั้น การเทรดตรงจุดที่แตะจุดสุดขั้วเลย แทนที่จะรอการกลับตัวออกมา เป็นความผิดพลาด classic ของผู้เริ่มต้นที่ใช้ oscillator แบบวัดจุดสุดขั้วทุกตัว — EA ตัวนี้ถูกออกแบบให้หลีกเลี่ยงความผิดพลาดนี้ในเชิงกลไก เพราะมันสั่งเทรดเฉพาะแท่งเทียนที่กลับตัวออกมาเท่านั้น ไม่ใช่แท่งเทียนที่เพิ่งเข้า zone สุดขั้วเป็นครั้งแรก
Stop Loss, Take Profit และขนาดโพซิชัน
Stop Loss ของทุกเทรดคำนวณจาก ATR แทนที่จะเป็นระยะ pip คงที่ คือ ระยะ SL = ATR (14-period, ATRPeriod) × ATRMultiplier (ค่าเริ่มต้น 2.0) คู่เงินหรือ session ที่ผันผวนมากจะได้ stop ที่กว้างขึ้นอัตโนมัติ ส่วนช่วงที่นิ่งจะได้ stop ที่แคบลง — stop จะสะท้อนสิ่งที่ตลาดกำลังทำอยู่จริงๆ เสมอ แทนที่จะเป็นตัวเลขคงที่ตายตัวที่แคบเกินไปสำหรับบางคู่เงินและกว้างเกินไปสำหรับคู่เงินอื่น Take Profit จะถูกตั้งเป็น RiskRewardRatio (ค่าเริ่มต้น 2.0) เท่าของระยะ SL เดียวกันนั้น ทำให้ทุกเทรดที่ EA ตัวนี้เปิดมีสัดส่วนความเสี่ยงต่อผลตอบแทนคงที่และรู้ล่วงหน้าได้ ไม่ว่าจะรันบนคู่เงินหรือ timeframe ใดก็ตาม
ขนาดโพซิชันคำนวณด้วยวิธีเดียวกับที่สอนไว้ในพื้นฐานการบริหารความเสี่ยง คือ RiskPercent (ค่าเริ่มต้น 1.0%) ของยอดเงินในบัญชี หารด้วยระยะ Stop Loss และแปลงผ่านมูลค่า tick ของสัญลักษณ์นั้น จะได้ขนาด lot ที่ทำให้เทรดที่ขาดทุนสูญเสียเงินในสัดส่วนใกล้เคียงกันของบัญชี ไม่ว่าระยะ stop ที่คำนวณจาก ATR ในเทรดนั้นๆ จะกว้างหรือแคบแค่ไหนก็ตาม ผลลัพธ์จะถูกปรับให้เข้ากับ lot ขั้นต่ำ lot สูงสุด และ lot step ของ broker ก่อนส่งคำสั่งเทรด เทรดเดอร์ที่ต้องการเทรดด้วยขนาด lot คงที่โดยไม่สนใจยอดเงินในบัญชีหรือความกว้างของ stop สามารถเปิดใช้งาน UseFixedLot เพื่อใช้ค่า FixedLotSize แทนการคำนวณตามความเสี่ยงได้
เงื่อนไขการเข้าเทรด
- BUY — MFI กลับตัวจากที่อยู่ที่หรือต่ำกว่าระดับ Oversold ขึ้นมาเหนือระดับนั้น (MFI ≤ 20.0 ในแท่งเทียนก่อนหน้าที่ปิดสมบูรณ์ และ > 20.0 ในแท่งเทียนปัจจุบัน)
- SELL — MFI กลับตัวจากที่อยู่ที่หรือสูงกว่าระดับ Overbought ลงมาต่ำกว่าระดับนั้น (MFI ≥ 80.0 ในแท่งเทียนก่อนหน้าที่ปิดสมบูรณ์ และ < 80.0 ในแท่งเทียนปัจจุบัน)
นอกเหนือจากตัวสัญญาณเอง ยังมีกลไกความปลอดภัยหลายอย่างที่ทำให้ EA ทำงานได้อย่างเหมาะสมบนบัญชีจริง EA เปิดได้ ครั้งละ 1 โพซิชันเท่านั้น — ก่อนพิจารณาเปิดเทรดใหม่ มันจะนับโพซิชันที่เปิดอยู่ กรองด้วย symbol และ magic number แล้วข้ามสัญญาณไปเลยหากมีโพซิชันเปิดอยู่แล้ว ทุกคำสั่งที่มันเปิดจะถูกแท็กด้วย magic number ของตัวเอง (20260729) จึงไม่มีทางไปยุ่งกับเทรดที่เปิดเองด้วยมือหรือของ EA ตัวอื่นที่ใช้กราฟหรือบัญชีเดียวกัน มันประเมินเงื่อนไขการเข้าเทรด เพียงครั้งเดียวต่อแท่งเทียนใหม่เท่านั้น โดยติดตามเวลาของแท่งเทียนล่าสุดที่ประมวลผลไปแล้ว แทนที่จะตรวจสอบทุก tick ที่เข้ามา ทำให้การกลับตัวครั้งเดียวไม่สามารถสั่งเทรดซ้ำได้หลายครั้งก่อนแท่งเทียนจะปิด และก่อนส่งคำสั่งใดๆ มันจะตรวจสอบ spread ปัจจุบันเทียบกับ MaxSpreadPoints และข้ามการเข้าเทรดไปเลยหากตลาดมีสภาพคล่องต่ำเกินไปในขณะนั้น ประเด็นเดียวกับที่กล่าวถึงในSpread และ Slippage
Parameters
- MFIPeriod (ค่าเริ่มต้น 14) — period ที่ใช้คำนวณ Money Flow Index ค่าน้อยจะตอบสนองเร็วขึ้นและกลับตัวผ่านเส้น 80/20 บ่อยขึ้น ค่ามากจะเรียบขึ้นและคัดกรองสัญญาณมากขึ้น
- Overbought (ค่าเริ่มต้น 80.0) — ระดับ MFI ด้านบน สัญญาณ SELL จะเกิดเมื่อ MFI กลับตัวลงทะลุระดับนี้ หลังจากเคยอยู่ที่หรือสูงกว่า
- Oversold (ค่าเริ่มต้น 20.0) — ระดับ MFI ด้านล่าง สัญญาณ BUY จะเกิดเมื่อ MFI กลับตัวขึ้นทะลุระดับนี้ หลังจากเคยอยู่ที่หรือต่ำกว่า
อินพุตอื่น ๆ ทั้งหมดเป็นของ risk engine กลางที่อธิบายไว้ในหน้า EA ทั้งวิธีคำนวณ stop และเป้ากำไร ขนาดโพซิชันจาก RiskPercent และตัวตรวจความปลอดภัยที่คุมทุกคำสั่ง ออร์เดอร์ของ EA ตัวนี้ใช้ magic number 20260729
ทำไมใช้ 80/20 แทนที่จะเป็น 70/30 แบบ RSI
เทรดเดอร์ที่คุ้นเคยกับ RSI มักเข้าใจไปเองว่า MFI ควรใช้เส้น zone 70/30 แบบเดียวกัน เพราะทั้งสองตัวมีขอบเขตอยู่ที่ 0-100 และอ่านค่าด้วยวิธีเดียวกัน คือเหนือเส้นบนคือ "overbought" ต่ำกว่าเส้นล่างคือ "oversold" แต่ในทางปฏิบัติ การกระจายตัวของค่า MFI มีพฤติกรรมต่างออกไปพอสมควร ซึ่งเป็นเหตุผลว่าทำไม 80/20 จึงเป็นธรรมเนียมที่ใช้กันทั่วไปมากกว่าสำหรับ MFI และทำไม EA ตัวนี้จึงใช้ระดับดังกล่าวเป็นค่าเริ่มต้นแทนที่จะใช้ 70/30 ของ RSI
เหตุผลย้อนกลับไปที่การถ่วงน้ำหนักด้วย volume นั่นเอง RSI เป็นฟังก์ชันล้วนๆ ของลำดับการเปลี่ยนแปลงราคาปิด ดังนั้นค่าของมันจึงกระจายตัวค่อนข้างสม่ำเสมอทั่วช่วง 0-100 เมื่อ momentum ของราคาเปลี่ยนไป ส่วน MFI นำการเคลื่อนไหวของราคาในแต่ละแท่งเทียนคูณกับ volume ของแท่งนั้นก่อนจะเปรียบเทียบ flow ขาขึ้นกับขาลง ซึ่งหมายความว่าแท่งเทียนไม่กี่แท่งที่มี volume สูงมากสามารถครอบงำการคำนวณได้ ไม่ว่าจะมีแท่งเทียนเคลื่อนไหวไปในแต่ละทิศทางกี่แท่งก็ตาม การถ่วงน้ำหนักแบบนี้มักดึง MFI เข้าหาช่วงกลางของสเกลบ่อยกว่า และให้ค่าสุดขั้วน้อยกว่าที่ RSI จะให้ภายใต้การเคลื่อนไหวของราคาแบบเดียวกัน ดังนั้นเส้น zone 70/30 ที่ปรับมาให้เหมาะกับการกระจายตัวของ RSI จึงจับ MFI เข้า zone ได้น้อยเกินไป หรือกระตุ้นตรรกะการกลับตัวของ EA ตัวนี้ก่อนที่จุดสุดขั้วจะหมดแรงลงจริงๆ การขยายเส้นออกไปเป็น 80/20 ทำให้ MFI มีพื้นที่สะท้อนพฤติกรรมทางสถิติที่ต่างออกไปของตัวมันเองได้ ก่อนที่ EA ตัวนี้จะถือว่าค่านั้นสุดขั้วพอที่จะเทรดสวนกลับ
นี่ก็เป็นเหตุผลว่าทำไมการเปรียบเทียบ MFI กับ oscillator ทั่วไปจึงสำคัญตอนตัดสินใจว่าจะรัน EA แบบกลับตัวตัวไหนดี RSI Reversal และ CCI Reversal ต่างก็ใช้ตรรกะ "กลับตัวออกจาก zone" แบบเดียวกับที่อธิบายไปข้างต้น แต่ส่วนที่เป็น volume ของ MFI หมายความว่าบางครั้งมันจะสอดคล้องกับ oscillator ที่คำนวณจากราคาล้วนๆ และบางครั้งก็แยกออกจากกันอย่างชัดเจน — เป็นสัญญาณกลับตัวที่ราคาเพียงอย่างเดียวยังไม่แสดงให้เห็น หรือไม่มีสัญญาณในจุดที่ราคาเพียงอย่างเดียวน่าจะบ่งชี้ว่ามี เพราะ volume ที่อยู่เบื้องหลังการเคลื่อนไหวนั้นบอกเรื่องราวที่ต่างจากแท่งเทียนราคา
ข้อควรระวัง
เริ่มจากบัญชีเดโมเสมอ และปล่อยให้มันเจอตลาดหลากรูปแบบก่อนใช้เงินจริง เพราะผลตอบแทนที่ผ่านมาไม่ว่าจะจากที่ไหนไม่ใช่หลักประกันของอนาคต ระบบเทรดทุกระบบมีไม้ขาดทุน และตัวนี้ไม่ใช่ข้อยกเว้น กลยุทธ์ mean-reversion โดยทั่วไปมักเสียหายหนักในตลาดที่เป็นเทรนด์แรง และ EA ตัวนี้ก็ไม่ใช่ข้อยกเว้น — ถ้าราคายังคงเป็นเทรนด์ขาลงทะลุระดับ 20 ไปเรื่อยๆ ทีละแท่งเทียนแทนที่จะเด้งกลับ EA จะยังคงเปิดเทรด BUY สวนกับตลาดที่ไม่มีทีท่าจะกลับตัวเลย ซึ่งเป็นสถานการณ์ classic ที่เรียกว่า "รับมีดที่กำลังร่วง" (catch a falling knife) และความเสี่ยงแบบเดียวกันก็เกิดกับเทรด SELL ได้ในตลาดขาขึ้นที่แรงทะลุระดับ 80 เช่นกัน Stop Loss ที่คำนวณจาก ATR ช่วยจำกัดความเสียหายของเทรดแต่ละครั้งได้ก็จริง แต่มันไม่สามารถป้องกันการขาดทุนต่อเนื่องหลายครั้งได้ เมื่อเทรนด์ใหญ่เอาชนะสัญญาณกลับตัวซ้ำแล้วซ้ำเล่า ควรพิจารณาจับคู่ EA ตัวนี้กับตัวกรองเทรนด์ของคุณเอง — เช่นอ่านค่า ADX หรือตรวจสอบสภาวะเทรนด์กับตลาดไซด์เวย์ก่อนเปิดใช้งาน — แทนที่จะรันมันโดยไม่ปรับแต่งอะไรเลยผ่านตลาดที่เป็นเทรนด์แรง ไฟล์ที่ได้เป็นโค้ดที่อ่านได้ใน MetaEditor — ไล่อ่านให้จบ และทำความเข้าใจหน้าที่ของทุกพารามิเตอร์ก่อนใช้จริง ย้ำอีกครั้งว่านี่คือสื่อการสอน ไม่ใช่คำแนะนำการลงทุนที่เจาะจงถึงสถานการณ์ของใคร