Привет. Тут такое дело, я написал индикатор для поиска гармонических паттернов.
Ограничился 1 значением зигзага и одним таймфреймом, но даже с учетом этого 2-3 графика с этим индюком грузят процессор на 99.9%. В чем причина, может у меня слишком много условий? или проблемы из за графических функций?
Я пробовал сделать так, чтобы все в функции OnTick() выполнялось раз за свечу, но все бесполезно
Как оптимизировать мой код? Каким образом люди пишут что то типа индюка ZUP который выполняет чудовищное количество вычислений и при этом даже на 20 парах у меня ничуть не тормозит?
Поделитесь опытом, как снизить нагрузку
Используйте отладчик для поиска ошибок пожалуйста. В Метаедиторе клавиша F5. Почитайте "Отладка" в справочнике Метаедитора.
Как минимум у Вас в коде бесконечный цикл:
amount=0; while(amount<5) { CopyBuffer(zz_handle,0,candle,1,ZigZag); CopyClose(_Symbol,PERIOD_M15,candle,1,Close); CopyTime(_Symbol,PERIOD_M15,candle,1,Time); if(ZigZag[0]!=0.0) // found zigzag { zz[amount].Price_=ZigZag[0]; zz[amount].Close_=Close[0]; zz[amount].Time_=Time[0]; amount++; } candle++; }
если ZigZag[0] равен нулю (а он равен нулю) , то amount не меняется.
Когда Ваш код станет рабочим, используйте инструмент "профилирования кода" для выяснения причин, где происходят основные утечки ресурсов процессора. Тоже почитайте в справке метаедитора. Справка -> MetaEditor -> Разработка программ -> Профилирование кода.
Успехов Вам в Ваших начинаниях! :)Уважаемые гармонизаторы, пжалуйста покажите на скринахъ, что за чудо у вас.
Просим.
Уважаемые гармонизаторы, пжалуйста покажите на скринахъ, что за чудо у вас.
Просим.
Используйте отладчик для поиска ошибок пожалуйста. В Метаедиторе клавиша F5. Почитайте "Отладка" в справочнике Метаедитора.
Как минимум у Вас в коде бесконечный цикл:
если ZigZag[0] равен нулю (а он равен нулю) , то amount не меняется.
так и должно быть! меняется параметр candle и соответственно идет поиск вершин зигзага!
Уважаемые гармонизаторы, пжалуйста покажите на скринахъ, что за чудо у вас.
Просим.
Вот результаты. Система очень сырая, я очень хочу ее дорабатывать, но нет мотивации поскольку на реале ничего невозможно тестить.
Я два раза передумывал логику под MQL4 но все равно тормоза и "не отвечает", потом изучил MQL5 и снова на него переписал, думал тут получше будет, но нет
так и должно быть! меняется параметр candle и соответственно идет поиск вершин зигзага!
если amount=0 и этот параметр не меняется в цикле, тогда это бесконечный цикл while:
amount=0; while(amount<5){
...
Это и грузит Ваш процессор.
А дальше у вас идет деление на ноль в Pattern_Conditions()
если amount=0 и этот параметр не меняется в цикле, тогда это бесконечный цикл while:
Это и грузит Ваш процессор.
А дальше у вас идет деление на ноль в Pattern_Conditions()
Тогда как реализовать поиск 5 последних вершин зигзага? если на свече candle имеется ненулевой зигзаг, мы записываем его и увеличиваем amount на 1. И так пока не будут найдены 5 ненулевых зигзагов
Тогда как реализовать поиск 5 последних вершин зигзага? если на свече candle имеется ненулевой зигзаг, мы записываем его и увеличиваем amount на 1. И так пока не будут найдены 5 ненулевых зигзагов
Я лишь указал вам на первые попавшиеся ошибки. Еще раз повторяю - используйте отладчик с точками прерывания.
Ну например, хотя бы вывести amount++ из условия
amount=0; while(amount<5) { CopyBuffer(zz_handle,0,candle,1,ZigZag); CopyClose(_Symbol,PERIOD_M15,candle,1,Close); CopyTime(_Symbol,PERIOD_M15,candle,1,Time); if(ZigZag[0]!=0.0) // found zigzag { zz[amount].Price_=ZigZag[0]; zz[amount].Close_=Close[0]; zz[amount].Time_=Time[0]; } amount++; candle++; }
или вывести проверку из цикла
amount=0; if(ZigZag[0]!=0.0) while(amount<5) { CopyBuffer(zz_handle,0,candle,1,ZigZag); CopyClose(_Symbol,PERIOD_M15,candle,1,Close); CopyTime(_Symbol,PERIOD_M15,candle,1,Time); zz[amount].Price_=ZigZag[0]; zz[amount].Close_=Close[0]; zz[amount].Time_=Time[0]; amount++; candle++; }
Но разбираться в Вашем коде нет ни времени, ни желания.
Тогда как реализовать поиск 5 последних вершин зигзага? если на свече candle имеется ненулевой зигзаг, мы записываем его и увеличиваем amount на 1. И так пока не будут найдены 5 ненулевых зигзагов
int cnt=0; for(int i=1;i<N;i++) { if(zig) { cnt++; } if(cnt==5) { break; } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет. Тут такое дело, я написал индикатор для поиска гармонических паттернов.
Ограничился 1 значением зигзага и одним таймфреймом, но даже с учетом этого 2-3 графика с этим индюком грузят процессор на 99.9%. В чем причина, может у меня слишком много условий? или проблемы из за графических функций?
Я пробовал сделать так, чтобы все в функции OnTick() выполнялось раз за свечу, но все бесполезно
Как оптимизировать мой код? Каким образом люди пишут что то типа индюка ZUP который выполняет чудовищное количество вычислений и при этом даже на 20 парах у меня ничуть не тормозит?
Поделитесь опытом, как снизить нагрузку