Одна из базовых вещей в трейдинге, это понятие пункта. Пункт — это наименьшее изменение стоимости обменного курса валюты. В настоящее время мы также должны рассматривать еще меньшее изменение, которое называется пипетка и равняется 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, результат будет следующим:
Для USDJPY результат будем следующим: