Кое что нащупал
// При while (true) - в индикаторе выполниться while один раз // При while (false) - в индикаторе выполниться ни разу, если переписать в for? // for (true) - в индикаторе будет выполнятся бесконечно
в буферные значения (а там double, мантисса побольше 32-х бит) datetime влетает со свистом..
Не первый раз, такое впечатление что компилятор очень капризный
Следующий код всегда возвращает false
bool isEqualToZero = isMACD1EqualZero && isMACD2EqualZero; bool isMACDReady = isSmaller || isBigger || isEqualToZero; После компиляции с комментамиbool isEqualToZero = isMACD1EqualZero && isMACD2EqualZero; // Print("isSmaller = ", isSmaller,"isBigger = ", isBigger,"isEqualToZero = ", isEqualToZero); bool isMACDReady = isSmaller || isBigger || isEqualToZero; // Print("isMACDReady"); Сразу начал возвращать true, когда ожидается true И затем как хочешь компилируй, первоначальный вариант двух строк, работают согласно ожидаемым тестовым условиям
bool isEqualToZero = isMACD1EqualZero && isMACD2EqualZero; bool isMACDReady = isSmaller || isBigger || isEqualToZero;
Топикстартеру:
1 Цитата:
" ... блок кода, который находит min max значения и их номера тиков, по соответствущим полуволнам индикатора MACD, делался для советника, оттуда и взят
результаты проставляет в глобальные переменные ..."
Иначе говоря, при попытке использования передачи данных из индикаторного буфера в советник, Вы передаете их всего один раз. А замысел требует многократной передачи данных.
Еще: "... Подход 1:
данный метод в индикаторе не получает потока данных ..."
Получает он поток, или не получает, нам без кода неизвестно. Но, даже если получает, то весь этот поток приводит к передаче в советник одного единственного набора результатов обработки - последнего по счету.
Вообще, Вам просто следует понять, как взаимодействует советник (он в окне всегда один) с многочисленными (если надо) индикаторами, а уже после - самому организовывать это взаимодействие.
В ветку для новичков сходите, там помогут.
в буферные значения (а там double, мантисса побольше 32-х бит) datetime влетает со свистом..
Спасибо,
datetime buffer_Time[];
SetIndexBuffer(3,buffer_Time);
buffer_Time[i_bar] = Time[i_bar];
'SetIndexBuffer' - no one of the overloads can be applied to the function call <-- ( буфер не может принять тип dateTime)
то есть метод SetIndexBuffer(), не может принять массив типа datetime,
Может вы имеете ввиду привести сначала к double,
но если основываться на справочнике максимум к string можно привести
https://docs.mql4.com/ru/basis/types/casting
https://docs.mql4.com/ru/basis/types/integer/datetime
- docs.mql4.com
Топикстартеру:
1 Цитата:
" ... блок кода, который находит min max значения и их номера тиков, по соответствущим полуволнам индикатора MACD, делался для советника, оттуда и взят
результаты проставляет в глобальные переменные ..."
Иначе говоря, при попытке использования передачи данных из индикаторного буфера в советник, Вы передаете их всего один раз. А замысел требует многократной передачи данных.
Еще: "... Подход 1:
данный метод в индикаторе не получает потока данных ..."
Получает он поток, или не получает, нам без кода неизвестно. Но, даже если получает, то весь этот поток приводит к передаче в советник одного единственного набора результатов обработки - последнего по счету.
Вообще, Вам просто следует понять, как взаимодействует советник (он в окне всегда один) с многочисленными (если надо) индикаторами, а уже после - самому организовывать это взаимодействие.
В ветку для новичков сходите, там помогут.
Спасибо,
метод bool nonSymm() вызываю с метода int start() ( в методе nonSymm() стоит Sleep(3333), потому рассчитываю на периодическое обновление глобальных переменных, в принципе так и происходит)
вопрос с потоком, был сформулирован..., насколько хватило понимания, но спасибо, решен в посте №5
Я на С и МТ5 не программирую )
Старайтесь чаще думать.
Спасибо,
datetime buffer_Time[];
SetIndexBuffer(3,buffer_Time);
buffer_Time[i_bar] = Time[i_bar];
'SetIndexBuffer' - no one of the overloads can be applied to the function call <-- ( буфер не может принять тип dateTime)
то есть метод SetIndexBuffer(), не может принять массив типа datetime,
Может вы имеете ввиду привести сначала к double,
но если основываться на справочнике максимум к string можно привести
https://docs.mql4.com/ru/basis/types/casting
https://docs.mql4.com/ru/basis/types/integer/datetime
datetime - это UNIX epoh (надеюсь правильно написал :-)
число секунд истекших с 00.00 1 января 1970г. 8 байт под него дали сильно-сильно-сильно с запасом
в double влезает без округлений.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, следующая задача, решение не соображается, простое решение совсем не соображается
Задача:
данный метод в индикаторе не получает потока данных