Введение

Золото (XAU/USD) — это не просто очередной торговый инструмент, а глобальный защитный актив, цена которого часто отражает более широкую экономическую неопределённость. В отличие от валютных пар, контракты на золото обладают уникальными моделями волатильности и требованиями к марже, которые при неверных расчётах могут легко исказить восприятие риска инвестором.

В данной статье представлена разработка калькулятора позиций по счёту, специально адаптированного для XAU/USD, обеспечивающего прозрачный и точный мониторинг маржинальных сделок.

Вычисляет размер позиции, использование маржи и плавающую прибыль/убыток с формулами, адаптированными к спецификациям контрактов на золото.

Автоматически отображает Equity, Free Margin и Margin Level, гарантируя трейдерам ясное понимание состояния счёта.

Результаты выражаются напрямую в долларах США, что соответствует глобальному стандарту ценообразования золота.

Благодаря модульной структуре кода калькулятор одинаково поддерживает сценарии BUY и SELL.

Интегрированная логика Stop Out Level выделяет критические пороговые значения, помогая инвесторам защититься от внезапных рыночных колебаний.

Используя данный калькулятор, трейдеры могут подходить к торговле золотом с большей уверенностью, сочетая возможности с дисциплинированным управлением рисками.

Открыть длинную позицию

Давайте создадим новый класс AccountPositionCalculator

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//+-------------------------------------------------------------------+
//|                                   Copyright 2026, MetaQuotes Ltd. |
//|                                             https://www.mql5.com. |
//| XAU/USD Калькулятор торговых позиций                              |
//+-------------------------------------------------------------------+
class AccountPositionCalculator
{
private:
   double balance;
   double contractSize;
   double leverage;

   string orderType;
   string symbol;
   double lot;
   double openPrice;
   double currentPrice;
   double stopLoss;
   double takeProfit;
   double commission;
   double swap;

   double pipSize;

public:
   // --- Constructor ---
   AccountPositionCalculator(
      double bal, double cs, double lev,
      string ordType, string sym, double l,
      double oPrice, double cPrice,
      double sl, double tp,
      double comm, double sw,
      double pipSz)
   {
      balance      = bal;
      contractSize = cs;
      leverage     = lev;

      orderType    = ordType;
      symbol       = sym;
      lot          = l;
      openPrice    = oPrice;
      currentPrice = cPrice;
      stopLoss     = sl;
      takeProfit   = tp;
      commission   = comm;
      swap         = sw;

      pipSize      = pipSz;
   }

   // --- Position Size ---
   double PositionSize()
   {
      return lot * contractSize;
   }

   // --- Spread ---
   double Spread()
   {
      return currentPrice - openPrice;
   }

   // --- Pips ---
   double Pips()
   {
      return Spread() / pipSize;
   }

   // --- Pip Value ---
   double PipValueUSD()
   {
      return (pipSize / currentPrice) * contractSize * lot;
   }

   // --- Profit ---
   double Profit()
   {
      double spread = Spread();
      double positionSize = PositionSize();

      if(orderType == "BUY")
         return spread * positionSize;
      else if(orderType == "SELL")
         return -(spread * positionSize);
      return 0.0;
   }

   // --- Net Profit ---
   double NetProfit()
   {
      return Profit() - commission + swap;
   }

   // --- Equity ---
   double Equity()
   {
      return balance + Profit() - commission + swap;
   }

   // --- Margin ---
   double Margin()
   {
      return (PositionSize() * openPrice) / leverage;
   }

   // --- Free Margin ---
   double FreeMargin()
   {
      return Equity() - Margin();
   }

   // --- Margin Level ---
   double MarginLevel()
   {
      double m = Margin();
      return m > 0 ? (Equity() / m) * 100 : 0;
   }

   // --- Report ---
   void Report()
   {
      Print("=== Account Position Report (XAU/USD) ===");
      Print("Symbol          : ", symbol);
      Print("Order Type      : ", orderType);
      Print("Balance         : ", DoubleToString(balance, 2));
      Print("Equity          : ", DoubleToString(Equity(), 2));
      Print("Margin          : ", DoubleToString(Margin(), 2));
      Print("Free Margin     : ", DoubleToString(FreeMargin(), 2));
      Print("Margin Level    : ", DoubleToString(MarginLevel(), 2), "%");
      Print("Profit          : ", DoubleToString(Profit(), 2));
      Print("Net Profit      : ", DoubleToString(NetProfit(), 2));
      Print("Swap            : ", DoubleToString(swap, 2));
      Print("Spread          : ", DoubleToString(Spread(), 5));
      Print("Spread (Pips)   : ", DoubleToString(Pips(), 2));
      Print("XAUUSD Pip Size : ", DoubleToString(pipSize, 2));
      Print("Pip Value       : ", DoubleToString(PipValueUSD(), 4), " USD");
   }
};

//+-------------------------------------------------------------------+
//| Script Entry Point                                                |
//+-------------------------------------------------------------------+
void OnStart()
{
   AccountPositionCalculator calc(
      100076.00,   // Balance
      100.00,      // Contract Size (1 lot = 100 ons)
      10.0,        // Leverage      
      "XAUUSD",    // Symbol
      "BUY",       // Order Type
      1.00,        // Lot
      4109.92,     // Open Price
      4111.44,     // Current Price
      0.0,         // Stop Loss
      0.0,         // Take Profit
      0.0,         // Commission
      0.0,         // Swap
      0.01         // Pip Size
   );

   calc.Report();
}

“Он показывает текущее финансовое состояние позиции BUY объёмом 1 лот, открытой по XAU/USD. Разница между Balance и Equity отражает прибыль позиции; Margin и Free Margin указывают на управление рисками; Spread и Pip Value объясняют транзакционные издержки и денежное влияние ценовых колебаний.”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
=== Отчёт о позициях на счёте (XAU/USD) ===
Symbol          : XAUUSD
Order Type      : BUY
Balance         : 100076.00
Equity          : 100228.00
Margin          : 41099.00
Free Margin     : 59128.80
Margin Level    : 243.87%
Profit          : 152.00
Net Profit      : 152.00
Swap            : 0.00
Spread          : 1.52000
Spread (Pips)   : 152.00
XAUUSD Pip Size : 0.01
Pip Value       : 0.0002 USD (для 1 лота)

Открыть позицию SELL

Account Position Calculator XAUUSD

Изменение параметров класса AccountPositionCalculator

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//+-------------------------------------------------------------------+
//| Script Entry Point                                                |
//+-------------------------------------------------------------------+
void OnStart()
{
   AccountPositionCalculator calc(
      95446.00,   // Balance
      100.00,     // Contract Size (1 lot = 100 ons)
      10.0,       // Leverage      
      "XAUUSD",   // Symbol
      "SELL",     // Order Type
      1.00,       // Lot
      4065.84,    // Open Price
      4062.35,    // Current Price
      0.0,        // Stop Loss
      0.0,        // Take Profit
      0.0,        // Commission
      0.0,        // Swap
      0.01        // Pip Size
   );

   calc.Report();
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
=== Отчёт о позициях на счёте (XAU/USD) ===
Symbol          : XAUUSD
Order Type      : SELL
Balance         : 95446.00
Equity          : 95795.00
Margin          : 40658.40
Free Margin     : 55136.60
Margin Level    : 235.61%
Profit          : 349.00
Net Profit      : 349.00
Swap            : 0.00
Spread          : -3.49000
Spread (Pips)   : -349.00
XAUUSD Pip Size : 0.01
Pip Value       : 0.0002 USD

Заключение

В случае с XAU/USD вы получите скрипт MQL5, который корректно отображает позиции по счёту при торговле золотом.

Вы узнаете, как выполняются расчёты использования маржи и управления рисками с применением формул, адаптированных к спецификациям контрактов на золото.

Вы сможете настроить вывод кода под собственные торговые сценарии, обеспечивая прозрачную и надёжную отчётность.

В результате инвесторы получат более ясное понимание своих позиций по золоту, смогут принимать более взвешенные решения и эффективнее управлять рисками в условиях волатильного рынка.