Skip to Content

โค้ด EA


คำอธิบายแบบละเอียด ของโค้ด 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
แชร์โพสต์นี้
แท็ก
คลังเก็บเอกสารสำคัญ
Aroon Indicator