FXTAA English version

Индикатор спреда для MT4 и MT5

Спред — единственная издержка, которую вы платите в каждой сделке без исключения, и терминал прячет её в колонке «Обзор рынка», куда никто не смотрит. Вывод на график занимает десяток строк.

Обновлено: 2026-09-24

Спред — это разрыв между ценой, по которой вы можете продать, и ценой, по которой можете купить. Тихим утром на EURUSD он бывает полпункта, а в момент решения по ставке та же пара показывает двадцать. Если ваш стоп пятнадцать пунктов, это не деталь.

Два способа его прочитать, и они расходятся

MetaTrader отдаёт спред дважды, и значения совпадают не всегда.

// 1. Что заявляет брокер
double declared = MarketInfo(Symbol(), MODE_SPREAD);          // в пунктах

// 2. Что на самом деле следует из текущей котировки
double actual = (Ask - Bid) / Point;

На счёте с фиксированным спредом первое число постоянно, и второе за ним следует. На счёте с плавающим спредом MODE_SPREAD может запаздывать или отдавать номинальное значение, пока живая котировка уже ушла. Доверяйте Ask - Bid — именно по этой цене вас исполнят.

У пятизначных брокеров один пункт равен десяти пойнтам. Спред в 12 пойнтов на EURUSD — это 1.2 пункта, а не 12. Путаница между ними и есть самая частая причина, почему показания спреда выглядят абсурдно.

Минимальный вывод на график

// SpreadInfo.mq4 — текущий спред в углу графика
#property indicator_chart_window

input int  CornerX = 10;
input int  CornerY = 18;
input color NormalColor = clrGray;
input color WideColor   = clrOrangeRed;
input double WideThresholdPips = 2.0;

string tag = "spreadinfo_label";

int OnInit()
{
   ObjectCreate(0, tag, OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, tag, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, tag, OBJPROP_XDISTANCE, CornerX);
   ObjectSetInteger(0, tag, OBJPROP_YDISTANCE, CornerY);
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) { ObjectDelete(0, tag); }

int OnCalculate(const int rates_total, const int prev_calculated,
                const datetime &time[], const double &open[],
                const double &high[], const double &low[],
                const double &close[], const long &tick_volume[],
                const long &volume[], const int &spread[])
{
   double pts  = (Ask - Bid) / Point;
   double pips = (Digits == 3 || Digits == 5) ? pts / 10.0 : pts;

   ObjectSetString(0, tag, OBJPROP_TEXT, 0,
        StringFormat("спред %.1f п. (%.0f пойнтов)", pips, pts));
   ObjectSetInteger(0, tag, OBJPROP_COLOR,
        pips >= WideThresholdPips ? WideColor : NormalColor);
   return(rates_total);
}

В MQL5 та же идея делается через SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) и SymbolInfoDouble для Ask и Bid, но арифметика пунктов не меняется.

Когда спред разлетается

Логировать полезнее, чем смотреть

Ярлык показывает спред сейчас. А знать вы хотите, каким он обычно бывает в тот час, когда вы торгуете. Пишите значение в файл раз в минуту две недели, а потом посмотрите распределение по часам.

Большинство обнаруживает две вещи: типичный спред их брокера хуже рекламной цифры, и час, в который им нравится торговать, — не тот час, когда условия лучшие.

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

Что с этим числом делать

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

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