Skip to content

💸 Get Free Margin (GetFreeMargin)

Sugar method: Returns margin available for opening new positions.

API Information:

  • Method: sugar.GetFreeMargin()
  • Timeout: 3 seconds
  • Returns: Free margin as float64

📋 Method Signature

func (s *MT5Sugar) GetFreeMargin() (float64, error)

💬 Just the Essentials

  • What it is: Money available for opening NEW positions (Equity - Used Margin).
  • Why you need it: Check if you can open more positions, prevent margin calls.
  • Sanity check: Free Margin = Equity - Used Margin.

🧮 Formula

Free Margin = Equity - Used Margin

Example:
  Equity: $10,000
  Margin: $500
  Free Margin: $9,500

🔗 Usage Examples

1) Basic usage

freeMargin, err := sugar.GetFreeMargin()
if err != nil {
    fmt.Printf("Error: %v\n", err)
    return
}

fmt.Printf("Free Margin: $%.2f\n", freeMargin)

2) Check before opening position

symbol := "EURUSD"
volume := 0.1

// Calculate required margin
requiredMargin, _ := sugar.CalculateRequiredMargin(symbol, volume)
freeMargin, _ := sugar.GetFreeMargin()

fmt.Printf("Required: $%.2f\n", requiredMargin)
fmt.Printf("Available: $%.2f\n", freeMargin)

if requiredMargin > freeMargin {
    fmt.Println("❌ Insufficient margin!")
    return
}

// Safe to open
ticket, _ := sugar.BuyMarket(symbol, volume)
fmt.Printf("✅ Position #%d opened\n", ticket)

3) Calculate max tradeable lots

func GetMaxTradableLots(sugar *mt5.MT5Sugar, symbol string) float64 {
    freeMargin, _ := sugar.GetFreeMargin()

    // Use 80% of free margin for safety
    safeMargin := freeMargin * 0.8

    // Calculate max lots
    maxLots, _ := sugar.GetMaxLotSize(symbol)

    requiredForMax, _ := sugar.CalculateRequiredMargin(symbol, maxLots)

    if requiredForMax <= safeMargin {
        return maxLots
    }

    // Scale down proportionally
    return maxLots * (safeMargin / requiredForMax)
}

maxLots := GetMaxTradableLots(sugar, "EURUSD")
fmt.Printf("Max tradeable: %.2f lots\n", maxLots)

4) Margin availability check

freeMargin, _ := sugar.GetFreeMargin()
equity, _ := sugar.GetEquity()

availabilityPercent := (freeMargin / equity) * 100

fmt.Printf("Free Margin:  $%.2f (%.1f%% of equity)\n",
    freeMargin, availabilityPercent)

if availabilityPercent > 80 {
    fmt.Println("✅ Plenty of margin available")
} else if availabilityPercent > 50 {
    fmt.Println("⚠️  Moderate margin usage")
} else if availabilityPercent > 20 {
    fmt.Println("🚨 High margin usage - be careful!")
} else {
    fmt.Println("🔴 CRITICAL: Very low free margin!")
}

  • GetMargin() - Used margin
  • GetMarginLevel() - Margin level percentage
  • GetMaxLotSize() - Max lots you can trade
  • CanOpenPosition() - Validate before trading ⭐

See also: GetMargin.md, CanOpenPosition.md