Как получить количество знаков после запятой для каждой цены Symbol () - PullRequest
1 голос
/ 02 октября 2019

Некоторые пары валют отображают значения с точностью до 5 десятичных знаков (EURUSD), остальные 4 и т. Д. Я написал код ниже, чтобы вернуть целочисленное значение десятичных знаков минус один. Эта функция просто учитывает несколько пар. Я хотел бы расширить его, чтобы обслуживать все пары. Как узнать количество знаков после запятой для каждой цены Symbol ()?

int decimalPlacesForPairs()  {
   if ((_Symbol == "XAUUSD") || (_Symbol == "USOIL")) {
      return 1;
   }

   else if (_Symbol == "CADJPY") {
      return 2;
   }  

   else return 3;
}

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

Поместите ваши цифры или пипсы в глобальную область.

double pips;
double ticksize = MarketInfo(NULL,MODE_DIGITS);
     if(ticksize==2||ticksize==3||ticksize==4||ticksize==5)
     pips=ticksize*10;
     else pips =ticksize;
0 голосов
/ 02 октября 2019

В MQL4 у вас есть доступ к предопределенной переменной int Digits . Эта функция возвращает количество цифр после десятичной точки.

В приведенном примере:

Print(DoubleToStr(Close[0], Digits));

Другой способ, и, возможно, лучший способ в вашем случае этоиспользовать MarketInfo . Здесь вы можете вернуть количество знаков после запятой на символ, вставив символ в виде строковой переменной.

В приведенном примере:

int vdigits = (int)MarketInfo("EURUSD",MODE_DIGITS);

В вашем случае вы могли быиметь функцию, подобную приведенной ниже:

int decimalPlacesForPairs(string sPair)  {
   return MarketInfo(sPair),MODE_DIGITS);
}

И звонить с вашего Main(){}:

void Main()
{
    decimalPlacesForPairs(Symbol());
    //or 
    //decimalPlacesForPairs("EURUSD");
}
...