Ошибки, баги, вопросы - страница 1812

 
Sergei Vladimirov:

"Доктор, у меня что-то болит!" © )

Пример-то покажите такого выражения. Воспроизводимый. Тогда и ответить что-то можно будет.

ulong PackMagic(int bs, int type, int frac, int ll)//bs=0 - sell, bs=1 - buy (в смысле ll), type - это тип FPST
     {
        int d1;
        ulong i, frac1=frac, ll1=ll, type1=type;
        
        i=1; d1=10;
        while (ll>=d1) {d1=d1*10; i=i+1;}
              
        if (type==0 || type==2) return (frac1+ll1*Pow10frac_length+i*Pow10(frac_length+i)+
         type1*Pow10(frac_length+i+1)+bs*Pow10(frac_length+i+2)+Id1_class*Pow10(frac_length+i+3));
        else return(ll1+i*Pow10(i)+type1*Pow10(i+1)+bs*Pow10(i+2)+Id1_class*Pow10(i+3));
     }    
    
     ulong Pow10(ulong power) // power>0
     {
        ulong r=10;
        if (power==0) return 1;
        for (ulong i=2; i<=power; i++) r=r*10;
        return r;
     }

Проблема в функции PackMagic. Внешние переменные int frac_length=2; int Pow10frac_length=100; int Id1_class=1;.

 
Sergey Kudryavtsev:
Проблема в функции PackMagic. Внешние переменные int frac_length=2; int Pow10frac_length=100;.
Вы пример ошибки-то не привели. При каких значениях аргументов эта функция возвращает неправильное значение (какое?) и каким должен быть правильный результат?
 
Sergei Vladimirov:
Вы пример ошибки-то не привели. При каких значениях аргументов эта функция возвращает неправильное значение (какое?) и каким должен быть правильный результат?

Например:

Id1_class=1, bs=0, type=0, frac=99, ll=1, frac_length=2, Pow10frac_length=100, return возвращало 11299.

Должно быть  1001199. В эксперте, функции в классе, демо-счёт в Открытии.

Не факт, что всегда в случае ошибки будет возвращаться 11299. 

 
Не воспроизводится. С этими параметрами функция стабильно возвращает 1001199. В самой функции тоже никаких ошибок нет. Так что сказать нечего. Скорее всего, в вашем советнике проблема не в этой функции, а где-то в другом месте, и в функцию передаются значения параметров, отличные от тех, которые вы ожидаете. Соответственно, и результат отличается от ожидаемого.
 

Воспроизвелось. Записал ваш код в скрипт, он при запуске в режиме отладки выдаёт правильное значение (1001199), а если скомпилировать релиз и запускать его из дерева в МТ5, то стабильно выдавал 11199. Смог локализовать проблему, вот воспроизводящий её код:

int frac_length = 2;

void OnStart()
{
        
        ulong i = 1;

        ulong a1 = Pow10(frac_length + i);
        ulong a2 = Pow10(frac_length + i + 1);
        ulong a3 = Pow10(frac_length + i + 2);
        ulong a4 = Pow10(frac_length + i + 3);
        
        Print(IntegerToString(a1), " ", IntegerToString(a2), " ", IntegerToString(a3), " ", IntegerToString(a4));

}  

ulong Pow10(const ulong power)
{
        ulong r = 10;
        
        if (power == 0)
                return 1;
                
        for (ulong i = 2; i <= power; i++)
                r = r*10;
                
        return r;
}

 В режиме отладки он отрабатывает правильно. А вот при запуске релиза из навигатора в МТ5 либо выдаёт ерунду ("1000 10000 100 100" вместо "1000 10000 100000 1000000"), либо МТ5 вообще зависает с полной загрузкой одного из ядер процессора.

Лечится двумя способами. Либо так:

        ulong a1 = Pow10(frac_length + i);
        ulong a2 = Pow10(frac_length + i + (ulong)1);
        ulong a3 = Pow10(frac_length + i + (ulong)2);
        ulong a4 = Pow10(frac_length + i + (ulong)3);

Либо переносом глобальной переменной frac_length внутрь функции Start().

Это действительно баг компилятора, пишите в сервисдеск.

 
МТ4 начал весить 1,8 Гигабайт (оперативки). Весь ВПС сожрал, второй терминал не могу толком включить. Не подскажите, как "почистить" оперативную память от МТ?
 

При наведении на только что опубликованный собственный отзыв к Маркет-продукту появляется несколько предложений/действий. Если выбрать "правка" и изменить отзыв, то после нажатия на "Обновить" выскочит ошибка "Нет прав".

 

Заявку в СД не создать - Произошла ошибка.

 
fxsaber:
При наведении на только что опубликованный собственный отзыв к Маркет-продукту появляется несколько предложений/действий. Если выбрать "правка" и изменить отзыв, то после нажатия на "Обновить" выскочит ошибка "Нет прав".

Уточните, пожалуйста, название и версию своего браузера.
На хроме 56.0.2924.87 полет нормальный, как с, так и без ручного обновления страницы отзыва.

 
fxsaber:

Заявку в СД не создать - Произошла ошибка.

Ясно, Вам нужно почистить cookie для www.mql5.com.
Видимо, было проведено обновление принципов проверки анти-CSRF токенов.

В хроме это можно сделать так:
Нажать F12 находясь на сайте www.mql5.com => на панели разработчика перейти во вкладку Application => раздел Cookies => ПКМ на записях cookies => Clear all from ...
 
Sergey Dzyublik:

Уточните, пожалуйста, название и версию своего браузера.
На хроме 56.0.2924.87 полет нормальный, как с, так и без ручного обновления страницы отзыва.

Portable Chrome Версия 45.0.2454.85 + Frigate.