Скачать MetaTrader 5

Альтернативные реализации стандартных функций/подходов - страница 4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
fxsaber
12151
fxsaber  
fxsaber:

Вариант CopyTicks, который быстрее оригинала иногда на несколько порядков (from > 0)

Билд 1432 - альтернатива CopyTicks не актуальна больше.
Alexey Volchanskiy
25839
Alexey Volchanskiy  
fxsaber:
Билд 1432 - альтернатива CopyTicks не актуальна больше.

Откуда взялся 1432? У меня на MetaQuotes-Demo последний 1430

prostotrader
4734
prostotrader  
Alexey Volchanskiy:

Откуда взялся 1432? У меня на MetaQuotes-Demo последний 1430

Ему по блату дали...
Alexey Viktorov
23865
Alexey Viktorov  
prostotrader:
Ему по блату дали...

Зря смеёшься. Мне однажды давали.

prostotrader
4734
prostotrader  
Alexey Viktorov:

Зря смеёшься. Мне однажды давали.

С чего взяли, что смеюсь?
Alexey Viktorov
23865
Alexey Viktorov  
prostotrader:
С чего взяли, что смеюсь?
Так показалось.
fxsaber
12151
fxsaber  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2018.04.16 13:23

Гораздо быстрее этот вариант (Release, не Debug)

double StringToDouble2( const string Str, const uint StartPos = 0 )
{
  const uint Size = StringLen(Str);
  
  bool Sign = false;  
  uint i = StartPos;
  
  while (i < Size)
  {
    const int Digit = Str[i];

    if ((Digit != ' ') && (Digit != '\t') && (Digit != '\n') && (Digit != '\r'))
    {
      if ((Sign = (Digit == '-')) || (Digit == '+'))
        i++;
      
      break;
    }
      
    i++;
  }

  long Res = 0;
  int point = 0;
  
  while (i < Size)
  {
    const int Digit = Str[i];
    
    if (!point && (Digit == '.'))
      point = 1;
    else if (((Digit >= '0') && (Digit <= '9')))
    {
      Res = Res * 10 + Digit - '0';
      
      if (point)
        point *= 10;
    }
    else
      break;
      
    i++;
  }
  
  if (Sign)
    Res = -Res;
  
  return((point > 1) ? Res / (double)point : Res); // Возможна потеря точности при делении
}

При парсинге объемных данных получается значительное ускорение.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий