Call Margin คืออะไร
Call Margin หรือที่เรียกว่า Margin Call เป็นสถานการณ์ที่โบรกเกอร์แจ้งเตือนนักลงทุนว่าเงินหลักประกัน (Margin) ในบัญชีซื้อขายลดลงต่ำกว่าระดับขั้นต่ำที่กำหนด (Maintenance Margin) สาเหตุมาจากมูลค่าของ Position ที่ถืออยู่ขาดทุนจนทำให้ Equity ในบัญชีลดลง
เมื่อถูก Margin Call นักลงทุนมี 2 ทางเลือก คือ เพิ่มเงินเข้าบัญชี (Deposit) เพื่อเพิ่ม Margin Level หรือ ปิด Position บางส่วนเพื่อลด Used Margin ถ้าไม่ทำอะไรและราคายังเคลื่อนไหวในทิศทางที่ขาดทุนต่อ โบรกเกอร์จะบังคับปิด Position อัตโนมัติ (Force Close หรือ Stop Out)
การคำนวณ Margin Level
| คำศัพท์ | สูตร | ตัวอย่าง |
|---|---|---|
| Balance | เงินในบัญชี (ไม่รวม Unrealized P/L) | 100,000 บาท |
| Equity | Balance + Unrealized P/L | 100,000 + (-20,000) = 80,000 บาท |
| Used Margin | เงินหลักประกันที่ใช้อยู่ | 50,000 บาท |
| Free Margin | Equity - Used Margin | 80,000 - 50,000 = 30,000 บาท |
| Margin Level | (Equity / Used Margin) × 100% | (80,000 / 50,000) × 100% = 160% |
| Margin Call Level | แตกต่างตามโบรกเกอร์ | 100% (ได้รับแจ้งเตือน) |
| Stop Out Level | แตกต่างตามโบรกเกอร์ | 50% (บังคับปิด Position) |
Script คำนวณ Margin และความเสี่ยง
# Python Script คำนวณ Margin Level และ Risk
import json
class MarginCalculator:
"""คำนวณ Margin Level และประเมินความเสี่ยง"""
def __init__(self, balance, leverage=100, margin_call_level=100,
stop_out_level=50):
self.balance = balance
self.leverage = leverage
self.margin_call_level = margin_call_level
self.stop_out_level = stop_out_level
self.positions = []
def add_position(self, symbol, lot_size, entry_price, current_price,
direction="buy", pip_value=10):
"""เพิ่ม Position"""
if direction == "buy":
pips = (current_price - entry_price) / 0.0001
else:
pips = (entry_price - current_price) / 0.0001
unrealized_pl = pips * pip_value * lot_size
required_margin = (lot_size * 100000 * entry_price) / self.leverage
self.positions.append({
"symbol": symbol,
"lot_size": lot_size,
"entry_price": entry_price,
"current_price": current_price,
"direction": direction,
"unrealized_pl": round(unrealized_pl, 2),
"required_margin": round(required_margin, 2),
})
def calculate(self):
"""คำนวณ Margin Level"""
total_unrealized = sum(p["unrealized_pl"] for p in self.positions)
total_margin = sum(p["required_margin"] for p in self.positions)
equity = self.balance + total_unrealized
free_margin = equity - total_margin
margin_level = (equity / total_margin * 100) if total_margin > 0 else float("inf")
# ประเมินความเสี่ยง
if margin_level <= self.stop_out_level:
risk = "CRITICAL — ถูก Force Close แล้ว"
elif margin_level <= self.margin_call_level:
risk = "DANGER — ถูก Margin Call แล้ว ต้องเพิ่มเงินทันที"
elif margin_level <= 150:
risk = "HIGH — ใกล้ Margin Call มาก ควรลด Position"
elif margin_level <= 300:
risk = "MEDIUM — ระวัง ถ้าตลาดผันผวนอาจถูก Call"
else:
risk = "LOW — Margin Level ปลอดภัย"
# คำนวณว่าราคาต้องเปลี่ยนอีกเท่าไรถึง Margin Call
if self.positions and total_margin > 0:
equity_at_mc = total_margin * (self.margin_call_level / 100)
loss_to_mc = equity - equity_at_mc
total_lots = sum(p["lot_size"] for p in self.positions)
pips_to_mc = loss_to_mc / (total_lots * 10) if total_lots > 0 else 0
else:
pips_to_mc = 0
return {
"balance": self.balance,
"equity": round(equity, 2),
"used_margin": round(total_margin, 2),
"free_margin": round(free_margin, 2),
"margin_level": round(margin_level, 2),
"unrealized_pl": round(total_unrealized, 2),
"risk_level": risk,
"pips_to_margin_call": round(pips_to_mc, 1),
"positions": self.positions,
}
# ตัวอย่างการใช้งาน
calc = MarginCalculator(balance=10000, leverage=100,
margin_call_level=100, stop_out_level=50)
# เปิด 2 Positions
calc.add_position("EUR/USD", 0.5, 1.0850, 1.0820, "buy") # ขาดทุน
calc.add_position("GBP/USD", 0.3, 1.2700, 1.2680, "buy") # ขาดทุน
result = calc.calculate()
print("=== Margin Analysis ===")
print(f"Balance: ")
print(f"Equity: ")
print(f"Used Margin: ")
print(f"Free Margin: ")
print(f"Margin Level: {result['margin_level']:.1f}%")
print(f"Unrealized P/L: ")
print(f"Risk: {result['risk_level']}")
print(f"Pips to Margin Call: {result['pips_to_margin_call']}")
สาเหตุที่ถูก Call Margin
- ใช้ Leverage สูงเกินไป: Leverage 1:500 หมายความว่าราคาเปลี่ยน 0.2% ก็ขาดทุน 100% ของ Margin ที่ใช้
- ไม่ตั้ง Stop Loss: ปล่อยให้ขาดทุนวิ่งไม่จำกัด จนกิน Margin หมด
- เปิด Position ใหญ่เกินไป: ใช้ Margin เกิน 50% ของ Equity ทำให้ Free Margin เหลือน้อย
- Gap ข้ามคืน/ข้ามสัปดาห์: ราคาเปิดตลาดต่างจากราคาปิดมาก โดยเฉพาะช่วงมีข่าวสำคัญ
- Correlated Positions: เปิดหลาย Position ในทิศทางเดียวกัน เช่น Buy EUR/USD + Buy GBP/USD ซึ่ง Correlate กัน
- ข่าวเศรษฐกิจสำคัญ: NFP, Fed Meeting, CPI ทำให้ราคาเคลื่อนไหวรุนแรงและเร็วมาก
กลยุทธ์ป้องกัน Margin Call
#!/bin/bash
# margin-monitor.sh — Script แจ้งเตือน Margin Level
# รันเป็น Cron ทุก 5 นาทีระหว่างตลาดเปิด
API_URL="https://api.broker.com/v1/account"
API_KEY=""
SLACK_WEBHOOK=""
MARGIN_WARNING=200 # แจ้งเตือนเมื่อ Margin Level < 200%
MARGIN_DANGER=120 # แจ้งเตือนด่วนเมื่อ Margin Level < 120%
# ดึงข้อมูลบัญชี
account_data=$(curl -s -H "Authorization: Bearer $API_KEY" "$API_URL")
margin_level=$(echo "$account_data" | jq -r '.marginLevel')
equity=$(echo "$account_data" | jq -r '.equity')
free_margin=$(echo "$account_data" | jq -r '.freeMargin')
unrealized_pl=$(echo "$account_data" | jq -r '.unrealizedPL')
# ตรวจสอบและแจ้งเตือน
send_alert() {
local level="$1"
local message="$2"
curl -s -X POST "$SLACK_WEBHOOK" \
-H "Content-Type: application/json" \
-d "{\"text\": \"$message\"}"
}
margin_int=
if [ "$margin_int" -lt "$MARGIN_DANGER" ]; then
send_alert "DANGER" ":rotating_light: *MARGIN DANGER*
Margin Level: %
Equity: \$
Free Margin: \$
Unrealized P/L: \$
*ต้องเพิ่มเงินหรือปิด Position ทันที!*"
elif [ "$margin_int" -lt "$MARGIN_WARNING" ]; then
send_alert "WARNING" ":warning: *Margin Warning*
Margin Level: %
Equity: \$
Free Margin: \$
ควรพิจารณาลด Position"
fi
เปรียบเทียบ Margin ในตลาดต่างๆ
| ตลาด | Leverage ทั่วไป | Margin Call Level | Stop Out Level | ตัวอย่าง |
|---|---|---|---|---|
| Forex (Retail) | 1:30 - 1:500 | 100% | 20-50% | $1,000 Margin เปิด $100,000 Position |
| หุ้นไทย (SET) | 1:2 - 1:3 | 35% Margin Ratio | 25% Force Sell | มี 100,000 ซื้อหุ้นได้ 300,000 |
| Futures (TFEX) | ตาม Initial Margin | Maintenance Margin | Maintenance Margin | Gold Futures IM ~60,000 บาท |
| Crypto | 1:2 - 1:125 | 100% | 50-80% | Binance Futures max 125x |
Position Sizing — คำนวณขนาด Position ที่ปลอดภัย
# คำนวณ Position Size ที่ปลอดภัย
def safe_position_size(account_balance, risk_percent, stop_loss_pips,
pip_value=10):
"""
คำนวณ Lot Size ที่ปลอดภัย
account_balance: เงินในบัญชี (USD)
risk_percent: % ที่ยอมเสียต่อ Trade (แนะนำ 1-2%)
stop_loss_pips: ระยะ Stop Loss (pips)
pip_value: มูลค่าต่อ pip ต่อ Standard Lot (USD)
"""
risk_amount = account_balance * (risk_percent / 100)
lot_size = risk_amount / (stop_loss_pips * pip_value)
return {
"account_balance": account_balance,
"risk_percent": risk_percent,
"risk_amount": round(risk_amount, 2),
"stop_loss_pips": stop_loss_pips,
"lot_size": round(lot_size, 2),
"max_loss": round(lot_size * stop_loss_pips * pip_value, 2),
}
# ตัวอย่าง: บัญชี $10,000 เสี่ยง 2% Stop Loss 30 pips
result = safe_position_size(10000, 2, 30)
print(f"Account: ")
print(f"Risk: {result['risk_percent']}% = ")
print(f"Stop Loss: {result['stop_loss_pips']} pips")
print(f"Safe Lot Size: {result['lot_size']} lots")
print(f"Max Loss: ")
# ตัวอย่างหลาย Scenario
scenarios = [
(10000, 1, 20), # Conservative
(10000, 2, 30), # Standard
(10000, 2, 50), # Wide Stop
(5000, 1, 25), # Small Account
]
print("\n=== Position Size Scenarios ===")
for bal, risk, sl in scenarios:
r = safe_position_size(bal, risk, sl)
print(f" | Risk {risk}% | SL {sl:>2} pips | Lot: {r['lot_size']:.2f}")
การนำความรู้ไปประยุกต์ใช้งานจริง
แหล่งเรียนรู้ที่แนะนำ ได้แก่ Official Documentation ที่อัพเดทล่าสุดเสมอ Online Course จาก Coursera Udemy edX ช่อง YouTube คุณภาพทั้งไทยและอังกฤษ และ Community อย่าง Discord Reddit Stack Overflow ที่ช่วยแลกเปลี่ยนประสบการณ์กับนักพัฒนาทั่วโลก
Call Margin คืออะไร
Call Margin หรือ Margin Call เป็นการแจ้งเตือนจากโบรกเกอร์ว่าเงินหลักประกันในบัญชีลดลงต่ำกว่า Maintenance Margin นักลงทุนต้องเพิ่มเงินหรือปิด Position บางส่วน ไม่งั้นโบรกเกอร์จะบังคับปิดอัตโนมัติ (Force Close)
Margin Level คำนวณอย่างไร
Margin Level = (Equity / Used Margin) × 100% โดย Equity = Balance + Unrealized P/L ถ้า Margin Level ต่ำกว่า 100% จะได้รับ Margin Call ถ้าต่ำกว่า 50% (แล้วแต่โบรกเกอร์) จะถูก Force Close อัตโนมัติ
วิธีป้องกันไม่ให้ถูก Call Margin ทำอย่างไร
ใช้ Leverage ต่ำไม่เกิน 1:10 ตั้ง Stop Loss ทุก Position ไม่ใช้ Margin เกิน 30% ของ Equity กระจายความเสี่ยง ไม่ถือ Position ข้ามคืนเมื่อมีข่าวสำคัญ ใช้ Position Sizing คำนวณ Lot Size ที่เสี่ยงไม่เกิน 1-2% ต่อ Trade
Force Close ต่างจาก Margin Call อย่างไร
Margin Call เป็นการแจ้งเตือนที่ Margin Level ถึงระดับหนึ่ง (เช่น 100%) ยังมีเวลาเพิ่มเงินหรือปิด Position Force Close (Stop Out) เป็นการบังคับปิด Position อัตโนมัติเมื่อ Margin Level ต่ำถึง Stop Out Level (เช่น 20-50%) ไม่มีทางเลือก
สรุปและแนวทางปฏิบัติ
Margin Call เป็นสถานการณ์ที่นักลงทุนทุกู้คืนต้องหลีกเลี่ยง การป้องกันที่ดีที่สุดคือใช้ Leverage ต่ำ ตั้ง Stop Loss ทุก Position ใช้ Position Sizing คำนวณ Lot Size ให้เสี่ยงไม่เกิน 1-2% ของ Equity ต่อ Trade ไม่ใช้ Margin เกิน 30% และ Monitor Margin Level อย่างสม่ำเสมอ ตั้ง Alert แจ้งเตือนเมื่อ Margin Level ต่ำกว่า 200% เพื่อให้มีเวลาจัดการก่อนถูก Force Close
