Technology

Call Margin

call margin
Call Margin | SiamCafe Blog
2026-02-21· อ. บอม — SiamCafe.net· 11,035 คำ

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 บาท
EquityBalance + Unrealized P/L100,000 + (-20,000) = 80,000 บาท
Used Marginเงินหลักประกันที่ใช้อยู่50,000 บาท
Free MarginEquity - Used Margin80,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

กลยุทธ์ป้องกัน 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 LevelStop Out Levelตัวอย่าง
Forex (Retail)1:30 - 1:500100%20-50%$1,000 Margin เปิด $100,000 Position
หุ้นไทย (SET)1:2 - 1:335% Margin Ratio25% Force Sellมี 100,000 ซื้อหุ้นได้ 300,000
Futures (TFEX)ตาม Initial MarginMaintenance MarginMaintenance MarginGold Futures IM ~60,000 บาท
Crypto1:2 - 1:125100%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

📖 บทความที่เกี่ยวข้อง

thời gian Call Marginอ่านบทความ → xm margin callอ่านบทความ → cuộc chiến phố wall margin call 2011อ่านบทความ → Call Margin là gì vpsอ่านบทความ → khi nào bị Call Margin vpsอ่านบทความ →

📚 ดูบทความทั้งหมด →