как получить значения индикатора разных периодов если этот индикатор не открыт?
выводиться результат только того периода на который бросаешь скрипт и в котором обязательно есть индикатор данного периода
Результат:
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=-2.60869565
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=-18.02325581
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=-14.62264151
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=11 symbol=EURUSD period=5 calc_period=14
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=10 symbol=EURUSD period=1 calc_period=14
Надо бы пометочку было в заголоке сделать, что в МТ5
После того, как создан совсем новый индикатор, надо дождаться момента, когда данные этого индикатора пересчитаются. Посмотрите обсуждение в ветке https://www.mql5.com/ru/forum/121251
После того, как создан совсем новый индикатор, надо дождаться момента, когда данные этого индикатора пересчитаются. Посмотрите обсуждение в ветке https://www.mql5.com/ru/forum/121251
прочитал ветку но не вкурил как правильно переписать код который не будет ждать лишнее время, и я так понимаю замрет до момента когда данные этого индикатора пересчитаются.
Хочу сделать как написано в той ветке "Кроме того, все действия по синхронизации вы можете скрыть в своих собственных классах, один раз написал и забыл", но как грамотно переписать свой класс не понимаю. Если не трудно покажите как переписать мой код
Чтобы не ждать лишнего времени, сначала создайте все необходимые хэндлы индикаторов, а только после этого в цикле с задержкой 5 миллисекунд спрашивайте BarsCounted у соответствующих хэндлов. Должно быть больше 0.
то есть это окончательный ответ и без связки (sleep+контроль ERR_INDICATOR_DATA_NOT_FOUND) не получится нормально контролировать окончание расчетов вызванных индикаторов?
использование sleep при решение подобных задач в так часто упоминаемом С++ является моветоном...
Кстати тот же sleep плюс цикл проверки тоже жрет системные ресурсы и чем ниже число задержки тем сильнее нагрузим камень, а при больших значениях sleep опять же ростут возможные потери времени так как данные к примеру уже посчитались, а мы еще ждем 1-2 секунды, а если есть идея анализировать по 10 индикаторов на 5 валютных парах и с 3-4 разными тайм фреймами, плюс внедрить систему логирования подстройки параметров выбранных индикаторов в реальном времени, то есть периодически к примеру раз в день (ночью во время флета) проводить прогонку всего этого добра на предмет оптимальности выбранных входящих параметров...
не айс. надо довести до ума.
то есть это окончательный ответ и без связки (sleep+контроль ERR_INDICATOR_DATA_NOT_FOUND) не получится нормально контролировать окончание расчетов вызванных индикаторов?
Нормально написанный индикатор рассчитывается один раз и 5 миллисекунд - не большая плата за это. В 4-ке тоже приходилось ждать некоторое время, просто об этом не задумывались.
В следующие моменты вызова индикатора он уже находится в кеше и никаких дополнительных расчетов делать не нужно, так что не нужно драматизировать.
Нормально написанный индикатор рассчитывается один раз и 5 миллисекунд - не большая плата за это. В 4-ке тоже приходилось ждать некоторое время, просто об этом не задумывались.
В следующие моменты вызова индикатора он уже находится в кеше и никаких дополнительных расчетов делать не нужно, так что не нужно драматизировать.
как писал marketeer по этой ссылке Сама концепция "централизации" расчетов и отвязки их от интерфейса хороша, но она не означает необходимости асинхронного вызова. Возможность асинхронного расчета в отдельном потоке прекрасно сосуществует с определением синхронного программного интерфейса к классам этого потока (если хотите, в дополнение к асинхронному). Основное назначение вызова индикатора из эксперта - получить готовые данные, а не "отвалить" (как Вы выражаетесь) побыстрее с фигой.
Присоединяюсь к его мнению на 100%. Если не поздно внесите либо нормальную многопоточность в язык, либо результат выдавать после окончательного расчета индикатора, либо посредством WaitForSingleObject решениий множество, но слип реально напрягает в коде программы.
На то оно и бетта тестирование что бы в максимально короткие сроки отловить баги, а так же показать настроение масс и соотнести это мнение со своими представлениям о Вашем продукте.
Безусловно 5-ка шаг вперед, но есть возможность сделать этот язык лучше.
Присоединяюсь к его мнению на 100%. Если не поздно внесите либо нормальную многопоточность в язык, либо результат выдавать после окончательного расчета индикатора, либо посредством WaitForSingleObject решениий множество, но слип реально напрягает в коде программы.
Пока все это чисто теоретические претензии, кто-нибудь может показать пример того, как текущая реализация работы с индикаторами как-то мешает или замедляет работу эксперта.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
как получить значения индикатора разных периодов если этот индикатор не открыт?
выводиться результат только того периода на который бросаешь скрипт и в котором обязательно есть индикатор данного периода
iWPR с периодом 14
Результат:
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=-2.60869565
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=-18.02325581
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=-14.62264151
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=11 symbol=EURUSD period=5 calc_period=14
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=10 symbol=EURUSD period=1 calc_period=14
а если открыта и минутка и 5-ти минутка(2 окна) с этим индикатором с периодом 14 то бросая скрипт в любое окно
результат
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[0]=-18.02325581
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[1]=-17.92452830
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[2]=-19.32367150
2009.10.26 09:00:54 cl (EURUSD,M5) willAnalizator handleWill=11 symbol=EURUSD period=5 calc_period=14
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[0]=-21.83908046
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[1]=-22.22222222
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[2]=-23.95209581
2009.10.26 09:00:54 cl (EURUSD,M5) willAnalizator handleWill=10 symbol=EURUSD period=1 calc_period=14