Как рассчитать значения цены с помощью переменной Digits?

Одна из базовых вещей в трейдинге, это понятие пункта. Пункт — это наименьшее изменение стоимости обменного курса валюты. В настоящее время мы также должны рассматривать еще меньшее изменение, которое называется пипетка и равняется 0,1 пункта. В работе с торговыми советниками необходимо знать, как можно рассчитать количество цифр после запятой с помощью MQL4, и сегодня мы разберемся, как это можно сделать.

1 пункт — это изменение значения цены на 0,0001.

1 пипетка — это изменение значения цены на 0,00001.

Если EURUSD изменяет курс с 1.0980 на 1.0995, это означает, что цена выросла на 15 пунктов (1.0995-1.0980 = 0.0015). Обычно курсы валют выражаются 4 десятичными дробями. Однако мы можем встретить и другие валютные пары только с 2 десятичными знаками. Наиболее популярными из которых является USDJPY, например USDJPY 103.83. В этом случае пункт представляет собой изменение значения на 0,01, а пипетка на 0,001. Другими словами, изменение USDJPY с 103.50 до 103.40 означает падение цены на 10 пунктов (103.40-103.50 = -0.10).

Почему мы должны учитывать эту разницу? Как это может повлиять на работу нашего советника?

Почти все брокеры сегодня используют представление цены в виде 5 знаков после запятой (или 3 для валютных пар вроде USDJPY):

цифры после запятой в котировках

Однако мы должны учитывать, что брокер может быть только с 4 десятичными знаками (что маловероятно, однако возможно), поэтому наш торговый эксперт должен быть в состоянии адаптироваться к изменениям. Кроме того для расчета цены тейк-профита и стоп-лосса мы обычно используем пункты. К примеру, мы используем стоп-лосс размером в 20 пунктов, тейк-профит размером в 30 пунктов. Например, если вы хотите купить EURUSD по цене 1.09817 и ваш стоп-лосс равен 30 пунктам, цена стоп-лосса должна быть 1.09817-0.0030 = 1.09517.

MQL4 имеет предопреленную переменную Digits, которая выводит количество десятичных знаков после запятой.

Приведенный ниже код показывает использование переменной Digits для расчета цены стоп-лосса. Также ее можно использовать для расчета многих других значений, таких как спреда, проскальзывания, тейк-профита и т. д.

//+------------------------------------------------------------------+
//|                                                       Test-1.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
 
#property copyright "Александр Паркер"
#property link      "https://traderblog.net/"
#property version   "1.00"
#property strict
 
//Размер стоп-лосса в пунктах
double StopLoss=30;
 
//Функция для вычисления десятичных цифр.
double CalculateNormalizedDigits()
{
   //Если после запятой 3 или менее цифр (например, JPY), возвращаем 0,01, что является значением пункта.
   if(Digits=4){
      return(0.0001);
   }
   //Во всех остальных случаях (их не должно быть), возвращаем 0.
   else return(0);
}
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
 
   //Определяем переменную, которой присваиваем значение функции CalculateNormalizedDigits
   double nDigits=CalculateNormalizedDigits();
 
   //Выводим значение Digits для рассчета цены стоп-лосса.
   Alert("Количество цифр после запятой: ",Digits,". Текущая цена: ",Ask,". Размер стоп-лосса: ",StopLoss,". Стоп-лосс: ",Ask-(StopLoss*nDigits));
 
}

Если мы запустим скрипт на графике EURUSD, результат будет следующим:

количество цифр для EURUSD

Для USDJPY результат будем следующим:

количество цифр для USDJPY