ตัวอย่าง EA ที่ทำงานบนหลาย Timeframe

IUX Markets Bonus

EA ที่ทำงานบนหลาย Timeframe

Expert Advisor (EA) ที่ทำงานบนหลาย timeframe เป็น EA ที่วิเคราะห์ข้อมูลตลาดจากกรอบเวลา (timeframe) ที่แตกต่างกันหลายๆ กรอบ เพื่อตัดสินใจในการเทรด วิธีนี้ช่วยให้ EA มีมุมมองที่กว้างขึ้นเกี่ยวกับสภาวะตลาด ซึ่งอาจนำไปสู่การตัดสินใจที่แม่นยำมากขึ้น

ตัวอย่าง EA หลาย Timeframe
ตัวอย่าง EA หลาย Timeframe

ประโยชน์ของ EA แบบหลาย Timeframe

  1. มุมมองที่ครอบคลุม: สามารถวิเคราะห์ทั้งแนวโน้มระยะยาวและการเคลื่อนไหวระยะสั้นได้พร้อมกัน
  2. ลดสัญญาณหลอก: การยืนยันสัญญาณจากหลาย timeframe ช่วยลดโอกาสการเกิดสัญญาณหลอก
  3. ความยืดหยุ่น: สามารถปรับกลยุทธ์ให้เหมาะสมกับสภาวะตลาดที่แตกต่างกันได้

แนวคิดพื้นฐานในการพัฒนา

  1. กำหนด Timeframe ที่จะใช้: เช่น M15, H1, H4
  2. สร้างฟังก์ชันวิเคราะห์แยกสำหรับแต่ละ Timeframe
  3. รวมผลการวิเคราะห์: ใช้ข้อมูลจากทุก timeframe เพื่อตัดสินใจ
  4. กำหนดน้ำหนักให้แต่ละ Timeframe: อาจให้น้ำหนักมากกับ timeframe ที่สูงกว่า

ตัวอย่างแนวคิดการทำงาน



input ENUM_TIMEFRAMES TF1 = PERIOD_M15;
input ENUM_TIMEFRAMES TF2 = PERIOD_H1;
input ENUM_TIMEFRAMES TF3 = PERIOD_H4;

bool CheckSignal(ENUM_TIMEFRAMES tf)
{
    // วิเคราะห์สัญญาณใน timeframe ที่กำหนด
    // เช่น ตรวจสอบ Moving Average, RSI, หรือ indicator อื่นๆ
    return true; // หรือ false ตามผลการวิเคราะห์
}

void OnTick()
{
    bool signal1 = CheckSignal(TF1);
    bool signal2 = CheckSignal(TF2);
    bool signal3 = CheckSignal(TF3);
    
    // ตัดสินใจเทรดโดยใช้ข้อมูลจากทุก timeframe
    if(signal1 && signal2 && signal3)
    {
        // เปิดออเดอร์หรือดำเนินการอื่นๆ
    }
}


 

ในตัวอย่างนี้ EA จะตรวจสอบสัญญาณจาก 3 timeframe ที่แตกต่างกัน และจะดำเนินการเทรดเมื่อได้รับสัญญาณยืนยันจากทุก timeframe

ข้อควรระวัง

  1. ประสิทธิภาพการทำงาน: การวิเคราะห์หลาย timeframe อาจใช้เวลาและทรัพยากรมากขึ้น
  2. ความซับซ้อน: การจัดการโลจิกและการทดสอบอาจซับซ้อนมากขึ้น
  3. การ Optimize: ต้องหาสมดุลระหว่างการใช้ข้อมูลจากหลาย timeframe และความเร็วในการตัดสินใจ

EA ที่ทำงานบนหลาย timeframe สามารถเพิ่มความแม่นยำในการตัดสินใจเทรด แต่ก็ต้องระมัดระวังในการออกแบบและทดสอบเพื่อให้แน่ใจว่า EA ยังคงทำงานได้อย่างมีประสิทธิภาพ

ตัวอย่าง EA จริง



ได้ครับ ผมจะเขียน EA ตัวอย่างที่ใช้เงื่อนไขหลาย Time Frame ตามที่คุณต้องการ โดยจะใช้ Moving Average (MA) เป็นตัวอย่างในการสร้างสัญญาณ:
mql4Copy//+------------------------------------------------------------------+
//|                  Multi-Timeframe MA Crossover EA                 |
//+------------------------------------------------------------------+
#property copyright "forexduck.com"
#property link      "https://www.forexduck.com"
#property version   "1.00"
#property strict

// Input parameters
input ENUM_TIMEFRAMES TF1 = PERIOD_M15;  // Timeframe 1
input ENUM_TIMEFRAMES TF2 = PERIOD_H1;   // Timeframe 2
input ENUM_TIMEFRAMES TF3 = PERIOD_H4;   // Timeframe 3
input int FastMA = 10;                   // Fast MA period
input int SlowMA = 20;                   // Slow MA period
input double LotSize = 0.1;              // Trading lot size
input int StopLoss = 50;                 // Stop Loss in pips
input int TakeProfit = 100;              // Take Profit in pips

// Global variables
int g_ticket = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // Validate inputs
   if(FastMA >= SlowMA)
   {
      Print("Error: FastMA must be less than SlowMA");
      return INIT_PARAMETERS_INCORRECT;
   }
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // Clean up code here
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // Check if we already have an open position
   if(g_ticket > 0)
   {
      // Check if the position is still open
      if(!OrderSelect(g_ticket, SELECT_BY_TICKET))
      {
         g_ticket = 0;  // Reset ticket if order is closed
      }
   }
   
   // Only open a new position if we don't have an open one
   if(g_ticket == 0)
   {
      bool buySignal = CheckBuySignal(TF1) && CheckBuySignal(TF2) && CheckBuySignal(TF3);
      bool sellSignal = CheckSellSignal(TF1) && CheckSellSignal(TF2) && CheckSellSignal(TF3);
      
      if(buySignal)
      {
         OpenBuyOrder();
      }
      else if(sellSignal)
      {
         OpenSellOrder();
      }
   }
}

//+------------------------------------------------------------------+
//| Check for buy signal on given timeframe                          |
//+------------------------------------------------------------------+
bool CheckBuySignal(ENUM_TIMEFRAMES tf)
{
   double fastMA = iMA(NULL, tf, FastMA, 0, MODE_SMA, PRICE_CLOSE, 1);
   double slowMA = iMA(NULL, tf, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 1);
   
   return (fastMA > slowMA);
}

//+------------------------------------------------------------------+
//| Check for sell signal on given timeframe                         |
//+------------------------------------------------------------------+
bool CheckSellSignal(ENUM_TIMEFRAMES tf)
{
   double fastMA = iMA(NULL, tf, FastMA, 0, MODE_SMA, PRICE_CLOSE, 1);
   double slowMA = iMA(NULL, tf, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 1);
   
   return (fastMA < slowMA);
}

//+------------------------------------------------------------------+
//| Open a buy order                                                 |
//+------------------------------------------------------------------+
void OpenBuyOrder()
{
   double sl = Ask - StopLoss * Point;
   double tp = Ask + TakeProfit * Point;
   
   g_ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp, "Multi-TF MA Buy", 0, 0, clrGreen);
   
   if(g_ticket < 0)
   {
      Print("OrderSend failed with error #", GetLastError());
   }
   else
   {
      Print("Buy order opened: Ticket #", g_ticket);
   }
}

//+------------------------------------------------------------------+
//| Open a sell order                                                |
//+------------------------------------------------------------------+
void OpenSellOrder()
{
   double sl = Bid + StopLoss * Point;
   double tp = Bid - TakeProfit * Point;
   
   g_ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp, "Multi-TF MA Sell", 0, 0, clrRed);
   
   if(g_ticket < 0)
   {
      Print("OrderSend failed with error #", GetLastError());
   }
   else
   {
      Print("Sell order opened: Ticket #", g_ticket);
   }
}


อธิบายการทำงานของ EA นี้:

  1. EA ใช้ Moving Average Crossover เป็นสัญญาณในการเทรด โดยตรวจสอบบน 3 กรอบเวลาที่กำหนด (TF1, TF2, TF3)
  2. ในฟังก์ชัน OnTick():
    • ตรวจสอบว่ามีออเดอร์เปิดอยู่แล้วหรือไม่
    • ถ้าไม่มีออเดอร์เปิด จะตรวจสอบสัญญาณซื้อและขายบนทั้ง 3 กรอบเวลา
    • เปิดออเดอร์ใหม่เมื่อมีสัญญาณตรงกันทั้ง 3 กรอบเวลา
  3. ฟังก์ชัน CheckBuySignal() และ CheckSellSignal() ใช้ตรวจสอบสัญญาณบนแต่ละกรอบเวลา
  4. ฟังก์ชัน OpenBuyOrder() และ OpenSellOrder() ใช้เปิดออเดอร์ซื้อและขายตามลำดับ
  5. EA นี้จะเปิดเพียงหนึ่งออเดอร์ในแต่ละครั้ง และจะรอให้ออเดอร์ปัจจุบันปิดก่อนที่จะเปิดออเดอร์ใหม่
  6. ใช้ input parameters สำหรับการปรับแต่งค่าต่างๆ เช่น กรอบเวลา, ช่วงของ MA, ขนาด Lot, Stop Loss, และ Take Profit
FOREXDUCK Logo

FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง

HFM Promotion