Ошибки, баги, вопросы - страница 1782
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вычисления - любая операция (в данном случае преобразование). StringToDouble возвращает double - происходит потеря точности
StringToInteger вернет long, но далее в вычислениях без потери точности нельзя использовать функции оперирующие с double, такие как: NormalizeDouble, MathPow,
Со StringToInteger получилось выразить число, но дальше уже труха, нужно как-то разбивать число видимо на составляющие для математических операций...
Print ("CalcZ=",CalcZ);
double Test=CalcZ;
Print ("Test=",Test);
Test=1.111111111111111e+17
Опять же в хелпе написано
INT_MAX
Максимальное значение, которое может быть представлено типом int
2147483647
Тогда как через StringToInteger произошло преобразование и сохранилось в long , если число больше допустимого?
Тогда как через StringToInteger произошло преобразование и сохранилось в long , если число больше допустимого?
StringToInteger первоначально возвращает long в пределах LONG_MIN LONG_MAX (она могла называться и StringToКолобок)
StringToInteger первоначально возвращает long (она могла называться и StringToКолобок)
Это конечно видимо так, но в хэлпе то так замудрили
"
Преобразование строки, содержащей символьное представление числа, в число типа int (целое).
"
это и ввело в заблуждение.
Спасибо за информацию.
Я так понимаю, что выше представленное число в графический буфер не пролезет?
Я так понимаю, что выше представленное число в графический буфер не пролезет?
Они записываются в таком виде B'11111111111111111111111111111111'
Я утверждаю (и предлагаю это проверить) что при смене таймфрейма с M5 на M15 первому индикатору (и только ему - в данном случае M5) никакой команды M5 Deinit не посылается и он не выгрузится с графика до тех пор пока пользователь не удалит эксперта
Обратите внимание, что в МТ5 расчетное ядро индикатора - это разделяемый ресурс со счетчиком использования в своем собственном менеджере. Если в разных программах или окнах используется индикатор с одинаковыми параметрами, то на самом деле работает одна расчетная копия со счетчиком использования. Это позволяет здорово экономить, когда трейдер использует одни и те же индикаторы на чартах и в эксперте.
Менеджер индикаторов устроен так, что он физически удаляет индикаторы асинхронно и с задержкой. А в это время создается новая рабочая копия с новыми параметрами, которая часто инициализируется раньше, чем физически удалится старая копия.
Менеджер индикаторов устроен так, что он физически удаляет индикаторы асинхронно и с задержкой. А в это время создается новая рабочая копия с новыми параметрами, которая часто инициализируется раньше, чем физически удалится старая копия.
Упростим индикатор
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 ?
Мой ответ: Никогда!
Ваш ответ выше: асинхронно и с задержкой
Вопрос: Когда будет вызван 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
Прошло более 30 минут, а вызова OnDeinit->M5 до сих пор нет
А теперь изменим код Эксперта (слегка поменяем порядок) ...
Приложите код, пожалуйста.