Ошибки, баги, вопросы - страница 1781
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Покажите логи. Чтобы было видно время.
Тут остаётся добавить, что добавление индикатора на график и удаление индикатора с графика это - несинхронные операции.
Кроме того, при смене таймфрейма, индикатор не сразу выгружается с этого таймфрейма. При том что создаётся новая копия индикатора на новом таймфрейме. Я вижу у Вас принты в конструкторе-деструкторе, Вы предполагаете, что деструктор вызывается сразу? Нет, Вы ошибаетесь. Деструктор вызывается при выгрузке индикатора, а выгрузка индикатора производится только через несколько секунд после удаления индикатора
Предполагается что между шагами (сменами периода графика) проходит достаточно времени
2017.02.05 19:49:49.984 I::I->M5 #шаг 1: присоединение
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #шаг 2: смена периода M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #шаг 3: смена периода M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #шаг 4: смена периода M30->H1
2017.02.05 19:54:03.245 I::~I->M30
2017.02.05 19:54:03.286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #шаг 5: смена периода H1 ->H4
2017.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #шаг 6: смена периода H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #шаг 7: удаление
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
Несинхронность влияет только на разный порядок вызова функций внутри шага (как это видно на примере шагов #3 и #5)
Как видно все последующие смены периода графика, кроме первого (шаг#2:две строки вывода) происходят ожидаемо (аналогично шагу#3:четыре строки вывода). А почему первая смена периода графика должна отличаться от всех остальных? Чем она лучше/хуже? Почему две недостающие строки вывода из шага#2(и только из него) перехали в шаг#7 (выделено красным)?
Не понимаю, ошибка моя или терминала
Принтует CalcX=111111111111111104 ожидаемое значение CalcX=111111111111111111
Предполагается что между шагами (сменами периода графика) проходит достаточно времени
2017.02.05 19:49:49.984 I::I->M5 #шаг 1: присоединение
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #шаг 2: смена периода M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #шаг 3: смена периода M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #шаг 4: смена периода M30->H1
2017.02.05 19:54:03.245 I::~I->M30
2017.02.05 19:54:03.286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #шаг 5: смена периода H1 ->H4
2017.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #шаг 6: смена периода H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #шаг 7: удаление
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
Несинхронность влияет только на разный порядок вызова функций внутри шага (как это видно на примере шагов #3 и #5)
Как видно все последующие смены периода графика, кроме первого (шаг#2) происходят ожидаемо (аналогично шагу#3). А почему первая смена периода графика должна отличаться от всех остальных? Чем она лучше/хуже?
На графике M5 некий индикатор. При смене таймфрейма с M5 на M15 создаётся вторая копия этого же индикатора. Обоим индикаторам посылается команда - первому на M5 Deinit, второму на M15 Init. При этом заранее неизвестно какая из этих команд будет выполнена раньше другой - здесь классические гонки между разными потоками.
После этого первому индикатору будет убавлен счётчик использования. Через несколько секунд после того, как счётчик использования станет нулевым индикатор будет выгружен с графика. При этом будут вызваны деструкторы глобальных объектов этого индикатора
Попробую ещё раз объяснить
На графике M5 некий индикатор. При смене таймфрейма с M5 на M15 создаётся вторая копия этого же индикатора. Обоим индикаторам посылается команда - первому на M5 Deinit, второму на M15 Init. При этом заранее неизвестно какая из этих команд будет выполнена раньше другой - здесь классические гонки между разными потоками.
После этого первому индикатору будет убавлен счётчик использования. Через несколько секунд после того, как счётчик использования станет нулевым индикатор будет выгружен с графика. При этом будут вызваны деструкторы глобальных объектов этого индикатора
Я утверждаю (и предлагаю это проверить) что при смене таймфрейма с M5 на M15 первому индикатору (и только ему - в данном случае M5) никакой команды M5 Deinit не посылается и он не выгрузится с графика до тех пор пока пользователь не удалит эксперта
Если struct I в 'Test_i.ex5' исключить (не влияет), то вывод упростится:
2017.02.05 20:49:06.842 OnInit->M5
2017.02.05 20:49:21.253 OnInit->M15 (*) смена периода M5 -> M15: индикатор M5 не выгружается
2017.02.05 20:56:40.001 OnDeinit->M15:3 смена периода M15 -> M30: индикатор M15 выгружается сразу
2017.02.05 20:56:40.132 OnInit->M30
С момента (*) прошло более 5 минут, а индикатор M5 не выгружается
Удаляем эксперт с графика
2017.02.05 20:57:35.176 OnDeinit->M5:1 индикатор M5 выгружается только после удаления эксперта
2017.02.05 20:57:35.177 OnDeinit->M30:1
Попробую ещё раз объяснить
На графике M5 некий индикатор. При смене таймфрейма с M5 на M15 создаётся вторая копия этого же индикатора. Обоим индикаторам посылается команда - первому на M5 Deinit, второму на M15 Init. При этом заранее неизвестно какая из этих команд будет выполнена раньше другой - здесь классические гонки между разными потоками.
После этого первому индикатору будет убавлен счётчик использования. Через несколько секунд после того, как счётчик использования станет нулевым индикатор будет выгружен с графика. При этом будут вызваны деструкторы глобальных объектов этого индикатора
Глюки при установке индикаторов Билла Вильямса
ставлю фракталы - ставится
ставлю АО - ставится ADX
билд 1031
Если в double число значимых десятичных знаков > DBL_DIG=15, то обычные правила - не работают
А какие работают?
В хэлпе написано, что для long максимальное значение 9223372036854775807 - я до него явно не добираю.
А какие работают?
Работает правило потери значащих цифр и заполнение их рандомом
Результат long, но в промежуточных вычислениях double и именно в них теряются значащие цифры
(Digits+1)*3-1=17
Работает правило потери значащих цифр и заполнение их рандомом
Результат long, но в промежуточных вычислениях double и именно в них теряются значащие цифры
(Digits+1)*3-1=17
Спасибо за информацию.
Однако, тяжело укладывается информация - т.е. число быть таким может, но нельзя делать с ним вычисления?
Вот пример кода, где пробразование происходит из строки в число
Print ("CalcY=",CalcY);
Принтует число 111111111111111104
Т.е. тут то вычислений нет, или я не прав?
Есть возможность оперировать такими числами или это ограничения языка?
Т.е. тут то вычислений нет, или я не прав?
Вычисления - любая операция (в данном случае преобразование). Для указанного числа StringToDouble возвращает double с потерей точности
StringToInteger вернет long, но далее в вычислениях без потери точности нельзя использовать функции оперирующие с double, такие как: NormalizeDouble, MathPow