💸 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¶
💬 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¶
🔗 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!")
}
🔗 Related Methods¶
GetMargin()- Used marginGetMarginLevel()- Margin level percentageGetMaxLotSize()- Max lots you can tradeCanOpenPosition()- Validate before trading ⭐
See also: GetMargin.md, CanOpenPosition.md