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

 
A100:

Вычисления - любая операция (в данном случае преобразование). StringToDouble возвращает double - происходит потеря точности

StringToInteger вернет long, но далее в вычислениях без потери точности нельзя использовать функции оперирующие с double, такие как: NormalizeDouble, MathPow,

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

long CalcZ=StringToInteger("111111111111111111");
Print ("CalcZ=",CalcZ);

double Test=CalcZ;
Print ("Test=",Test);

 Test=1.111111111111111e+17

 

Опять же в хелпе написано

INT_MAX

Максимальное значение, которое может быть представлено типом int

2147483647

 

Тогда как через StringToInteger произошло преобразование и сохранилось в long , если число больше допустимого? 

 
-Aleks-:

Тогда как через StringToInteger произошло преобразование и сохранилось в long , если число больше допустимого? 

StringToInteger первоначально возвращает long в пределах LONG_MIN  LONG_MAX (она могла называться и StringToКолобок) 

 
A100:
StringToInteger первоначально возвращает long (она могла называться и StringToКолобок)

Это конечно видимо так, но в хэлпе то так замудрили

"

Преобразование строки, содержащей символьное представление числа, в число типа int (целое). 

"

это и ввело в заблуждение.

Спасибо за информацию.

Я так понимаю, что выше представленное число в графический буфер не пролезет? 

 
-Aleks-:

Я так понимаю, что выше представленное число в графический буфер не пролезет? 

Они записываются в таком виде    B'11111111111111111111111111111111'

 
A100:

Я утверждаю (и предлагаю это проверить) что при смене таймфрейма с M5 на M15 первому индикатору (и только ему - в данном случае M5) никакой команды M5 Deinit не посылается и он не выгрузится с графика до тех пор пока пользователь не удалит эксперта

Слава прав и выгрузка работает правильно.

Обратите внимание, что в МТ5 расчетное ядро индикатора - это разделяемый ресурс со счетчиком использования в своем собственном менеджере. Если в разных программах или окнах используется индикатор с одинаковыми параметрами, то на самом деле работает одна расчетная копия со счетчиком использования. Это позволяет здорово экономить, когда трейдер использует одни и те же индикаторы на чартах и в эксперте.

Менеджер индикаторов устроен так, что он физически удаляет индикаторы асинхронно и с задержкой. А в это время создается новая рабочая копия с новыми параметрами, которая часто инициализируется раньше, чем физически удалится старая копия.
 
Renat Fatkhullin:
Менеджер индикаторов устроен так, что он физически удаляет индикаторы асинхронно и с задержкой. А в это время создается новая рабочая копия с новыми параметрами, которая часто инициализируется раньше, чем физически удалится старая копия.

Упростим индикатор

//Test_i.mq5 //Индикатор
void Prn( string f, int i = -1 ) { Print( f, "->", StringSubstr( EnumToString( Period()), 7 ), (i == -1 ? "" : ":" + i )); }
void OnInit()                    { Prn( __FUNCTION__ );         }
void OnDeinit( const int reason ) { Prn( __FUNCTION__, reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }

Прикрепим Эксперта Test.mq5 к графику M5 и далее сменим период графика M5->M15

Результат:

2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15

Вопрос: Когда будет вызван OnDeinit->M5 ?

Мой ответ: Никогда!

Ваш ответ выше: асинхронно и с задержкой 

Файлы:
Test.mq5  1 kb
 
A100:

Вопрос: Когда будет вызван OnDeinit->M5 ?

Мой ответ: Никогда!

Ваш ответ выше: асинхронно и с задержкой 

Прошло более 30 минут, а вызова OnDeinit->M5 до сих пор нет

А теперь изменим код Эксперта (слегка поменяем порядок) ...

Результат:

2017.02.06 01:31:45.002 OnInit->M5
2017.02.06 01:31:48.340 OnDeinit->M5:1                 Вызов сразу и без задержки!
2017.02.06 01:31:48.409 OnInit->M15
 

Файлы:
Test.mq5  2 kb
 
A100:

Прошло более 30 минут, а вызова OnDeinit->M5 до сих пор нет

А теперь изменим код Эксперта (слегка поменяем порядок) ...

Приложите код, пожалуйста.
 
Renat Fatkhullin:
Приложите код, пожалуйста.
Прикрепил к последнему сообщению с тем же именем. Фактически статический вызов заменен на динамический, а результат - принципиально другой