คำอธิบายแบบละเอียด ของโค้ด EA ที่คุณให้มา ซึ่งใช้สำหรับ เทรด BTC/USD (หรือสินทรัพย์ที่มีความผันผวนสูง เช่น ทองคำ, คริปโต ฯลฯ) ด้วยการใช้ Indicator หลายตัวร่วมกัน ได้แก่:
- EMA (Exponential Moving Average)
- RSI (Relative Strength Index)
- MACD (Moving Average Convergence Divergence)
🔧 ส่วนที่ 1: Input Parameters (ตั้งค่าต่าง ๆ)
//== INPUT SETTINGS == input int fastEMA = 20; input int slowEMA = 100; input int rsiPeriod = 14; input int macdFast = 12; input int macdSlow = 26; input int macdSignal = 9; input double lotSize = 0.01; // ปริมาณล็อตเริ่มต้น input double stopLoss = 2000; // จุดหยุดขาดทุน (หน่วย point) input double takeProfit = 4000; // จุดทำกำไร input int magicNumber = 54321; // ใช้ระบุว่า EA ตัวไหนเปิด order datetime lastTradeTime = 0;
ความหมายโดยรวม:
- ตั้งค่าตัวแปรที่ใช้ควบคุมกลยุทธ์ เช่น EMA, RSI, MACD
- ระบุขนาดล็อต, SL, TP
- lastTradeTime ใช้ป้องกันไม่ให้เปิดออเดอร์ซ้ำในแท่งเดียวกัน
🔧 ส่วนที่ 2: Indicator Handles
int emaFastHandle; int emaSlowHandle; int rsiHandle; int macdHandle;
ความหมาย:
เก็บ handle สำหรับ indicator ที่จะใช้ในการดึงค่าแบบเรียลไทม์ผ่าน CopyBuffer()
🔧 ส่วนที่ 3: OnInit() — ฟังก์ชันเริ่มต้น EA
int OnInit() { emaFastHandle = iMA(...); // EMA เร็ว emaSlowHandle = iMA(...); // EMA ช้า rsiHandle = iRSI(...); // RSI macdHandle = iMACD(...); // MACD if (ตัวใดตัวหนึ่ง = INVALID_HANDLE) → แสดง Error return INIT_SUCCEEDED; }
หน้าที่:
- เตรียม indicator ทุกตัวสำหรับใช้งาน
- ถ้าใดๆ โหลดไม่สำเร็จ → ยกเลิกการทำงาน
🔧 ส่วนที่ 4: OnDeinit() — เมื่อ EA ถูกหยุด
void OnDeinit(const int reason) { Print("BTC EA Stopped."); }
แสดงข้อความเมื่อ EA หยุดทำงาน (เช่น เปลี่ยน timeframe, ปิด chart)
🔧 ส่วนที่ 5: ฟังก์ชันเช็คว่า "เทรดในแท่งนี้แล้วหรือยัง"
bool AlreadyTradedThisBar() { datetime currentBarTime = iTime(_Symbol, _Period, 0); if (currentBarTime == lastTradeTime) return true; lastTradeTime = currentBarTime; return false; }
หน้าที่:
- ป้องกันไม่ให้เปิดออเดอร์หลายครั้งในแท่งเทียนเดียวกัน
- จะเปิดแค่ครั้งเดียวต่อแท่ง (ไม่ overtrade)
🔧 ส่วนที่ 6: OnTick() — แกนหลักของ EA
void OnTick() { if (AlreadyTradedThisBar()) return; // เทรดแค่ 1 ครั้งต่อแท่ง double ask = SymbolInfoDouble(...); double bid = SymbolInfoDouble(...); // ดึงค่าจาก EMA / RSI CopyBuffer(...) ไปใส่ใน array แล้วอ่านค่าล่าสุด // ดึงค่า MACD (2 Buffer = main line, signal line) CopyBuffer(...) // สร้าง SL / TP จากค่า point double slPoints = stopLoss * _Point; double tpPoints = takeProfit * _Point;
📈 Buy Conditions (เข้า Buy เมื่อสัญญาณบวกครบ)
if (emaFast > emaSlow && rsi > 50 && rsi < 70 && macd_val > signal_val)
แปลว่า:
- EMA เร็ว > EMA ช้า → เทรนด์ขาขึ้น
- RSI อยู่ในโซนบวก (50–70) → ไม่ Overbought หรือ Oversold
- MACD ตัดขึ้น → แรงเทรนด์เริ่มมากขึ้น
🛒 หากเข้าเงื่อนไข Buy:
trade.SetExpertMagicNumber(magicNumber); trade.Buy(...);
ใช้ CTrade class เพื่อเปิดคำสั่ง Buy
📉 Sell Conditions:
if (emaFast < emaSlow && rsi < 50 && rsi > 30 && macd_val < signal_val)
แปลว่า:
- EMA เร็ว < EMA ช้า → เทรนด์ขาลง
- RSI ต่ำ (30–50) → ยังไม่ Oversold
- MACD ตัดลง → แรงขาลงเริ่มมา
🧠 สรุป Logic การเข้าออเดอร์:
Indicator | เงื่อนไข BUY | เงื่อนไข SELL |
EMA | Fast > Slow | Fast < Slow |
RSI | 50–70 | 30–50 |
MACD | Main > Signal | Main < Signal |
✅ จุดเด่นของ EA นี้:
- ใช้ 3 อินดิเคเตอร์ร่วมกัน → ช่วยกรองสัญญาณหลอก
- มีระบบป้องกัน เทรดซ้ำในแท่งเดียวกัน
- ใช้ CTrade (MQL5 OOP API) → เสถียรและทันสมัย
- เหมาะสำหรับสินทรัพย์ผันผวนเช่น BTC/USD, XAUUSD
❗ ถ้าจะใช้ EA นี้:
- ใช้กับ Timeframe: H1 หรือ M15 ขึ้นไป
-
ปรับ SL / TP ให้เหมาะกับ Symbol:
- BTC: SL 2000 = $200 / TP 4000 = $400 (ขึ้นกับโบรกเกอร์)
- ทอง: SL 300 = $3.00 / TP 500 = $5.00