Я пользуюсь классом, который написал около года назад. Добавил несколько перегрузок для него. Класс статический т.е. у него нет состояния. Вот функция, которая меня интересует:
По сути, я начал писать для неё функцию только что вот эту:
Функция relativeDistance() нужна для того, чтобы без каких-либо параметров в зависимости от таймрейма на котором работает индикатор задавать расстояние от бара с заданым индексом до wingdings-символа. А нужно это лишь потому, что если задавать процент это экрана фиксированный то, сменяя таймфреймы графиков wingdings-символ скачет выше и ниже. Т.е. хочу добиться удобства отслеживания некоторых ситуаций, которые я ищу.
Так вот.
Если индикатор работает на графике с периодом PERIOD_Н1 и я вызываю метод wingdings() вот так:
Т.е. передаю в её параметры PERIOD_CURRENT, то функция wingdings() отрабатывает не так как нужно. Такое ощущение, что косяк в операторе switch, который находится в новой функции relativeDistance(), которую я начал писать. Какое бы я не задавал значение в case PERIOD_H1 (вместо 19), расстояние не изменяется.
Но, если я передаю в функцию wingdings() не PERIOD_CURRENT, а PERIOD_Н1, то всё работает.
Я вот хочупонять как так получается. Ведь, если открытый график, на котором работает индикатор PERIOD_Н1, то PERIOD_CURRENT = PERIOD_Н1. В чём здесь ошибка может быть?
НЕТ. Это равенство не соответствует действительности.
НЕТ. Это равенство не соответствует действительности.
Всмысле нет? Я прикрепил скрин.
Видно же, что на скрине таймфрейм H1 т.е. PERIOD_Н1. А PERIOD_CURRENT период открытого графика. В моём случае период открытого графика т.е. согласно справке текущий период и есть H1.
Что не так?
PERIOD_CURRENT это всегда 0 , для него в switch варианта не нашлось.
для некоторых (не для всех)случаев можно пролечить:
switch(PeriodSeconds(tf)) {
}
Судя по всему, этот косяк тянется ещё с mql4. Ведь нет резона в фиксированном значении.
для некоторых (не для всех)случаев можно пролечить:
switch(PeriodSeconds(tf)) {
}
Я тоже об этом изначально подумал. Но хотелось более читабельного варианта что-ли.. А так все эти enum's получается словон балласт. Вроде как они придуманы, но не выполняются свою функцию полностью.
Всмысле нет? Я прикрепил скрин.
Видно же, что на скрине таймфрейм H1 т.е. PERIOD_Н1. А PERIOD_CURRENT период открытого графика. В моём случае период открытого графика т.е. согласно справке текущий период и есть H1.
Что не так?
Вместо PERIOD_CURRENT используйте _Period или Period()
Я тоже об этом изначально подумал. Но хотелось более читабельного варианта что-ли.. А так все эти enum's получается словон балласт. Вроде как они придуманы, но не выполняются свою функцию полностью.
может не выполняют полностью функцию руки или голова?..
AnyFunc (ENUM_TIMEFRAMES tf) { if(tf==PERIOD_CURRENT) tf=Period(); ...
Судя по всему, этот косяк тянется ещё с mql4. Ведь нет резона в фиксированном значении.
"Косяк" у вас в понимании. А с PERIOD_CURRENT всё верно. Это КОНСТАНТА. И она сообщает функции, в которую её передают в качестве входного параметра периода графика, чтобы функция использовала текущий период (а уж какой он там - зависит от того, на каком таймфрейме графика запущена программа). Но это ни как не обязывает эту КОНСТАНТУ подстраивать своё значение под значение текущего графика.
может не выполняют полностью функцию руки или голова?..
AnyFunc (ENUM_TIMEFRAMES tf) { if(tf==PERIOD_CURRENT) tf=Period(); ...
это правильно, PERIOD_CURRENT это константа и если надо в switch ее обработать, то нужно добавить определение текущего ТФ.
Я пользуюсь классом, который написал около года назад. Добавил несколько перегрузок для него. Класс статический т.е. у него нет состояния. Вот функция, которая меня интересует:
По сути, я начал писать для неё функцию только что вот эту:
Функция relativeDistance() нужна для того, чтобы без каких-либо параметров в зависимости от таймрейма на котором работает индикатор задавать расстояние от бара с заданым индексом до wingdings-символа. А нужно это лишь потому, что если задавать процент это экрана фиксированный то, сменяя таймфреймы графиков wingdings-символ скачет выше и ниже. Т.е. хочу добиться удобства отслеживания некоторых ситуаций, которые я ищу.
Так вот.
Если индикатор работает на графике с периодом PERIOD_Н1 и я вызываю метод wingdings() вот так:
Т.е. передаю в её параметры PERIOD_CURRENT, то функция wingdings() отрабатывает не так как нужно. Такое ощущение, что косяк в операторе switch, который находится в новой функции relativeDistance(), которую я начал писать. Какое бы я не задавал значение в case PERIOD_H1 (вместо 19), расстояние не изменяется.
Но, если я передаю в функцию wingdings() не PERIOD_CURRENT, а PERIOD_Н1, то всё работает.
Я вот хочупонять как так получается. Ведь, если открытый график, на котором работает индикатор PERIOD_Н1, то PERIOD_CURRENT = PERIOD_Н1. В чём здесь ошибка может быть?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я пользуюсь классом, который написал около года назад. Добавил несколько перегрузок для него. Класс статический т.е. у него нет состояния. Вот функция, которая меня интересует:
По сути, я начал писать для неё функцию только что вот эту:
Функция relativeDistance() нужна для того, чтобы без каких-либо параметров в зависимости от таймрейма на котором работает индикатор задавать расстояние от бара с заданым индексом до wingdings-символа. А нужно это лишь потому, что если задавать процент это экрана фиксированный то, сменяя таймфреймы графиков wingdings-символ скачет выше и ниже. Т.е. хочу добиться удобства отслеживания некоторых ситуаций, которые я ищу.
Так вот.
Если индикатор работает на графике с периодом PERIOD_Н1 и я вызываю метод wingdings() вот так:
Т.е. передаю в её параметры PERIOD_CURRENT, то функция wingdings() отрабатывает не так как нужно. Такое ощущение, что косяк в операторе switch, который находится в новой функции relativeDistance(), которую я начал писать. Какое бы я не задавал значение в case PERIOD_H1 (вместо 19), расстояние не изменяется.
Но, если я передаю в функцию wingdings() не PERIOD_CURRENT, а PERIOD_Н1, то всё работает.
Я вот хочупонять как так получается. Ведь, если открытый график, на котором работает индикатор PERIOD_Н1, то PERIOD_CURRENT = PERIOD_Н1. В чём здесь ошибка может быть?