ตัวอย่าง Code function ที่ใช้ Price Action Strategy
Price Action Strategy เป็นวิธีการเทรดที่อาศัยการวิเคราะห์การเคลื่อนไหวของราคาโดยตรง โดยไม่พึ่งพา Indicator ทางเทคนิคมากนัก ในที่นี้เราจะแสดงตัวอย่าง Code function ที่ใช้ในการวิเคราะห์ Price Action และสร้างสัญญาณเทรด
1. ฟังก์ชันระบุแนวโน้มของตลาด
ฟังก์ชันนี้ใช้ Moving Average (MA) เพื่อระบุแนวโน้มของตลาด โดยพิจารณาจากความสัมพันธ์ระหว่างราคาปัจจุบัน, ค่า MA ปัจจุบัน และค่า MA ก่อนหน้า
int IdentifyTrend(int period = 20)
{
double ma = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, 0);
double prevMa = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, 1);
if (Close[0] > ma && ma > prevMa)
return 1; // แนวโน้มขาขึ้น
else if (Close[0] < ma && ma < prevMa)
return -1; // แนวโน้มขาลง
else
return 0; // แนวโน้มไม่ชัดเจน
}
2. ฟังก์ชันหา Swing High และ Swing Low
ฟังก์ชันนี้หาจุด Swing High และ Swing Low ในช่วงเวลาที่กำหนด ซึ่งเป็นจุดสำคัญในการวิเคราะห์ Price Action
void FindSwingPoints(int period, double &swingHigh, double &swingLow)
{
swingHigh = High[iHighest(NULL, 0, MODE_HIGH, period, 1)];
swingLow = Low[iLowest(NULL, 0, MODE_LOW, period, 1)];
}
3. ฟังก์ชันระบุรูปแบบแท่งเทียน
ฟังก์ชันนี้วิเคราะห์รูปแบบของแท่งเทียนล่าสุด เพื่อระบุรูปแบบที่สำคัญ เช่น Marubozu, Shooting Star, Hammer และ Doji
int IdentifyCandlePattern()
{
double body = MathAbs(Close[1] - Open[1]);
double upperWick = High[1] - MathMax(Open[1], Close[1]);
double lowerWick = MathMin(Open[1], Close[1]) - Low[1];
if (body > upperWick * 3 && body > lowerWick * 3)
{
if (Close[1] > Open[1])
return 1; // Bullish Marubozu
else
return 2; // Bearish Marubozu
}
else if (upperWick > body * 2 && lowerWick < body) return 3; // Shooting Star else if (lowerWick > body * 2 && upperWick < body)
return 4; // Hammer
else if (MathAbs(Open[1] - Close[1]) < (High[1] - Low[1]) * 0.1)
return 5; // Doji
return 0; // ไม่พบรูปแบบที่สนใจ
}
4. ฟังก์ชันตรวจสอบ Support และ Resistance
ฟังก์ชันนี้ตรวจสอบว่าราคาที่กำหนดเป็นระดับ Support หรือ Resistance หรือไม่ โดยนับจำนวนครั้งที่ราคาสัมผัสหรือใกล้เคียงกับระดับนั้น
bool IsSupportResistance(double price, int period = 20, double tolerance = 0.0001)
{
int touchCount = 0;
for (int i = 1; i <= period; i++)
{
if (MathAbs(Low[i] - price) <= tolerance || MathAbs(High[i] - price) <= tolerance) touchCount++; } return (touchCount >= 2);
}
5. ฟังก์ชันตรวจสอบการ Break Out
ฟังก์ชันนี้ตรวจสอบว่าเกิดการ Break Out ของราคาผ่านระดับที่กำหนดหรือไม่
int CheckBreakout(double level, int period = 20)
{
if (Close[1] <= level && Close[0] > level)
return 1; // Bullish Breakout
else if (Close[1] >= level && Close[0] < level)
return -1; // Bearish Breakout
return 0; // No Breakout
}
6. ฟังก์ชันสร้างสัญญาณเทรดตาม Price Action
ฟังก์ชันนี้รวมผลการวิเคราะห์จากฟังก์ชันอื่นๆ เพื่อสร้างสัญญาณเทรดตาม Price Action Strategy โดยพิจารณาจากแนวโน้ม, รูปแบบแท่งเทียน, และการ Break Out ของระดับ Support/Resistance ที่สำคัญ
int GeneratePriceActionSignal()
{
int trend = IdentifyTrend();
int pattern = IdentifyCandlePattern();
double swingHigh, swingLow;
FindSwingPoints(20, swingHigh, swingLow);
if (trend == 1) // แนวโน้มขาขึ้น
{
if (pattern == 1 || pattern == 4) // Bullish Marubozu หรือ Hammer
{
if (IsSupportResistance(swingLow) && CheckBreakout(swingLow) == 1)
return 1; // สัญญาณซื้อ
}
}
else if (trend == -1) // แนวโน้มขาลง
{
if (pattern == 2 || pattern == 3) // Bearish Marubozu หรือ Shooting Star
{
if (IsSupportResistance(swingHigh) && CheckBreakout(swingHigh) == -1)
return -1; // สัญญาณขาย
}
}
return 0; // ไม่มีสัญญาณ
}
FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง