เปรียบเทียบ EA FVG MQL4 กับกลยุทธ์การเทรด FVG แบบ Manual
Fair Value Gap (FVG) คืออะไร?
FVG คือรูปแบบบนกราฟที่ราคามีการเคลื่อนไหวอย่างรวดเร็วไปในทิศทางเดียว ทำให้เกิดช่องว่างบนแท่งเทียน ราคามักจะถูกดึงกลับไปที่ช่องว่างเหมือนแม่เหล็กขณะที่พยายามทดสอบหรือเติมช่องว่าง เทรดเดอร์ใช้ FVG เพื่อระบุโอกาสในการเข้าซื้อขายเมื่อราคาอาจกลับมายังช่องว่างนั้น
หลักการทำงานของ EA FVG MQL4:
EA FVG MQL4 จะทำงานโดยอัตโนมัติตามหลักการดังนี้:
-
การระบุ FVG:
- EA จะตรวจสอบลำดับแท่งเทียน 3 แท่งบนกราฟเพื่อระบุ FVG ตามเงื่อนไขที่กำหนด (แท่งเทียนกลางขนาดใหญ่ และแท่งเทียนแรกและสามไม่มีการทับซ้อนกัน)
- EA จะคำนวณช่วงราคาของ FVG (ราคาสูงสุดของแท่งเทียนแรก และราคาต่ำสุดของแท่งเทียนที่สาม)
-
เงื่อนไขการเข้าซื้อขาย:
- EA จะตรวจสอบว่าราคาเข้าใกล้หรือสัมผัส FVG ที่ยังไม่ได้รับการแก้ไข (Unmitigated FVG)
- อาจเพิ่มเงื่อนไขเพิ่มเติม เช่น ขนาดของ FVG, ตำแหน่งของ FVG, หรือการยืนยันจากตัวชี้วัดอื่น ๆ (เช่น Fibonacci, MACD)
-
การวางคำสั่งซื้อขาย:
- เมื่อเงื่อนไขการเข้าซื้อขายตรงตามที่กำหนด EA จะวางคำสั่งซื้อขาย (Buy หรือ Sell) ที่กึ่งกลางของ FVG
- EA จะตั้งค่า Stop Loss ที่จุด Break ของ FVG
-
การจัดการคำสั่งซื้อขาย:
- EA อาจมีฟังก์ชันการจัดการคำสั่งซื้อขายเพิ่มเติม เช่น การตั้งค่า Take Profit, Trailing Stop, หรือการปิดคำสั่งซื้อขายเมื่อมีสัญญาณกลับตัว
ตัวอย่างการใช้งาน:
สมมติว่า EA ระบุ FVG ขาขึ้นบนกราฟ EUR/USD ในกรอบเวลา H1:
- EA ตรวจสอบว่า FVG นี้ยังไม่ได้รับการแก้ไข
- ราคาเข้าใกล้กึ่งกลางของ FVG
- EA วางคำสั่ง Buy ที่กึ่งกลางของ FVG
- EA ตั้งค่า Stop Loss ที่จุด Break ของ FVG
- EA อาจตั้งค่า Take Profit ที่ระดับ Fibonacci Retracement 61.8% ของ FVG
Source Code EA FVG MQL4 (โครงร่าง):
//+------------------------------------------------------------------+
//| EA_FVG.mq4
//| Copyright 2025, James Alber
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, James Albert"
#property link ""
#property version "1.00"
#property strict
//--- input parameters
extern int FVG_Lookback = 20; // จำนวนแท่งเทียนที่ใช้ในการค้นหา FVG
extern double RiskPercent = 1.0; // เปอร์เซ็นต์ความเสี่ยงต่อการเทรด
extern double FVG_FibonacciLevel = 61.8; // ระดับ Fibonacci ที่ใช้ในการยืนยัน FVG
extern int MagicNumber = 12345; // Magic Number สำหรับ EA
//+------------------------------------------------------------------+
//| Expert initialization function
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function
//+------------------------------------------------------------------+
void OnTick()
{
//---
CheckForFVG();
}
//+------------------------------------------------------------------+
//| Function to check for Fair Value Gaps
//+------------------------------------------------------------------+
void CheckForFVG()
{
for(int i = FVG_Lookback; i >= 2; i--)
{
//--- Check for bullish FVG
if(High[i-2] < Low[i] && High[i-1] > High[i-2] && Low[i-1] < Low[i])
{
double fvgHigh = High[i-2];
double fvgLow = Low[i];
double fvgMid = (fvgHigh + fvgLow) / 2;
double fvgSize = fvgHigh - fvgLow;
//--- Check if FVG is unmitigated
if(!IsFVGMitigated(fvgHigh, fvgLow))
{
//--- Check for Fibonacci confluence
if(CheckFibonacciConfluence(fvgHigh, fvgLow, fvgMid))
{
//--- Place buy order
PlaceBuyOrder(fvgMid, fvgLow);
}
}
}
//--- Check for bearish FVG
if(Low[i-2] > High[i] && Low[i-1] < Low[i-2] && High[i-1] > High[i])
{
double fvgHigh = High[i];
double fvgLow = Low[i-2];
double fvgMid = (fvgHigh + fvgLow) / 2;
double fvgSize = fvgLow - fvgHigh;
//--- Check if FVG is unmitigated
if(!IsFVGMitigated(fvgHigh, fvgLow))
{
//--- Check for Fibonacci confluence
if(CheckFibonacciConfluence(fvgHigh, fvgLow, fvgMid))
{
//--- Place sell order
PlaceSellOrder(fvgMid, fvgHigh);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Function to check if FVG is mitigated
//+------------------------------------------------------------------+
bool IsFVGMitigated(double fvgHigh, double fvgLow)
{
for(int i = 0; i < Bars; i++)
{
if(High[i] >= fvgLow && Low[i] <= fvgHigh)
{
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
//| Function to check for Fibonacci confluence
//+------------------------------------------------------------------+
bool CheckFibonacciConfluence(double fvgHigh, double fvgLow, double fvgMid)
{
double fibo = fvgHigh - ((fvgHigh - fvgLow) * (FVG_FibonacciLevel / 100));
if(MathAbs(fvgMid - fibo) < Point * 5) // 5 pips tolerance
{
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Function to place buy order
//+------------------------------------------------------------------+
void PlaceBuyOrder(double price, double sl)
{
double lots = CalculateLots();
int ticket = OrderSend(Symbol(), OP_BUY, lots, price, 3, sl, 0, "Buy FVG", MagicNumber, 0, Green);
if(ticket > 0)
{
Print("Buy order placed successfully!");
}
else
{
Print("Error placing buy order: ", GetLastError());
}
}
//+------------------------------------------------------------------+
//| Function to place sell order
//+------------------------------------------------------------------+
void PlaceSellOrder(double price, double sl)
{
double lots = CalculateLots();
int ticket = OrderSend(Symbol(), OP_SELL, lots, price, 3, sl, 0, "Sell FVG", MagicNumber, 0, Red);
if(ticket > 0)
{
Print("Sell order placed successfully!");
}
else
{
Print("Error placing sell order: ", GetLastError());
}
}
//+------------------------------------------------------------------+
//| Function to calculate lot size
//+------------------------------------------------------------------+
double CalculateLots()
{
double accountBalance = AccountBalance();
double riskAmount = accountBalance * (RiskPercent / 100);
double stopLossPips = MathAbs(OrderStopLoss() - OrderOpenPrice()) / Point;
double lotSize = riskAmount / (stopLossPips * Point * MarketInfo(Symbol(), MODE_TICKVALUE));
return(NormalizeDouble(lotSize, 2));
}
//+------------------------------------------------------------------+
คำอธิบาย:
- OnInit(): ฟังก์ชันเริ่มต้นการทำงานของ EA
- OnDeinit(): ฟังก์ชันสิ้นสุดการทำงานของ EA
- OnTick(): ฟังก์ชันที่ทำงานทุกครั้งที่มีการอัปเดตราคาใหม่
- CheckForFVG(): ฟังก์ชันหลักในการตรวจสอบ FVG บนกราฟ
- IsFVGMitigated(): ฟังก์ชันตรวจสอบว่า FVG ได้รับการแก้ไขแล้วหรือไม่
- CheckFibonacciConfluence(): ฟังก์ชันตรวจสอบการบรรจบกันของ FVG กับระดับ Fibonacci
- PlaceBuyOrder(): ฟังก์ชันวางคำสั่งซื้อ
- PlaceSellOrder(): ฟังก์ชันวางคำสั่งขาย
- CalculateLots(): ฟังก์ชันคำนวณขนาดล็อตตามเปอร์เซ็นต์ความเสี่ยง
ข้อควรจำ:
- โค้ดนี้เป็นเพียงโครงร่างและอาจต้องมีการปรับแต่งเพิ่มเติมเพื่อให้เหมาะสมกับความต้องการของคุณ
- คุณต้องทดสอบ EA อย่างละเอียดในบัญชีทดลองก่อนใช้งานในบัญชีจริง
- การซื้อขายด้วย EA มีความเสี่ยง และไม่มีกลยุทธ์ใดที่รับประกันผลกำไรได้
ทิ้งคำตอบไว้
- 45 ฟอรัม
- 1,665 หัวข้อ
- 4,678 กระทู้
- 16 ออนไลน์
- 1,530 สมาชิก