Всем привет!
Беру стандартный индикатор MACD из папки Example, и хочу получить хендл этого индикатора в эксперте по 3-м валютным парам и по всем таймфреймам до Н12. Все хорошо, и работает как надо, НО если я добавляю кусочек кода в сам индикатор MACD, в котором хочу получить хендлы еще 5-ти индикаторов (кусочек кода выделен красным цветом ниже в индикаторе MACD) то начинается очень огромная нагрузка на процессор и ОЗУ. ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?
зачем при инициализации индикатора создавать хендлы, если их использование отсутствует? Если уже само создание хендлов увеличивает нагрузку, то в сервисдек
Может быть дело в том, что в советнике Вы делаете 54 хэндла индикатора, а каждый из них (МАСД) делает еще 6. Итого вы создаете не 54, как раньше, а 54*6 = 324 хэндла.
Думаю, нужно переписать советник так, чтобы он вызывал эти 6 хэндлов и уже он разбирался бы с сигналами всех индикаторов.
зачем при инициализации индикатора создавать хендлы, если их использование отсутствует? Если уже само создание хендлов увеличивает нагрузку, то в сервисдек
Хендлы в индикаторе ИСПОЛЬЗУЮТСЯ! Просто я сделал пример чтобы не нагружать лишний код. Представьте что они используются)
Может быть дело в том, что в советнике Вы делаете 54 хэндла индикатора, а каждый из них (МАСД) делает еще 6. Итого вы создаете не 54, как раньше, а 54*6 = 324 хэндла.
Думаю, нужно переписать советник так, чтобы он вызывал эти 6 хэндлов и уже он разбирался бы с сигналами всех индикаторов.
Т.е. если мой индикатор создан на основании показаний к примеру 6-ти индикаторов, т.е. мой индикатор использует 6 хендлов, то этот индикатор я не смогу использовать в советнике на всех таймфреймах? Потому как у меня не хватит ОЗУ (к примеру у меня 4 гб)?
Как тогда вообще пишут мультивалютные и мультитаймфреймовые советники?
Хендлы в индикаторе ИСПОЛЬЗУЮТСЯ! Просто я сделал пример чтобы не нагружать лишний код. Представьте что они используются)
Ну раз используются, то никак вы это в том виде, что есть, не оптимизируете. Выхода два:
- Уходить от индикаторов MACD и все вычисления делать внутри кода
- Использовать OpenCL, ваш код должен отлично распараллеливаться/ Но надо иметь современную карту с поддержкой OpenCL.
- Использовать внешнюю DLL на С++, в VS C++ есть средства авто-распараллеливания кода на CPU.
Т.е. если мой индикатор создан на основании показаний к примеру 6-ти индикаторов, т.е. мой индикатор использует 6 хендлов, то этот индикатор я не смогу использовать в советнике на всех таймфреймах? Потому как у меня не хватит ОЗУ (к примеру у меня 4 гб)?
Как тогда вообще пишут мультивалютные и мультитаймфреймовые советники?
Это было предположение. Может, дело в самих кастомных индикаторах. Проверьте скорость на стандартных вариантах iRSI, iATR и т.д. Если работает быстро (пусть и не правильно, для теста скорости это не важно), значит, дело в коде какого-то из 6-ти хэндлов.
Это было предположение. Может, дело в самих кастомных индикаторах. Проверьте скорость на стандартных вариантах iRSI, iATR и т.д. Если работает быстро (пусть и не правильно, для теста скорости это не важно), значит, дело в коде какого-то из 6-ти хэндлов.
Это стандартные 6 индикаторов которые идут с платформой МТ5, там не может быть проблем с кодом
Это стандартные 6 индикаторов которые идут с платформой МТ5, там не может быть проблем с кодом
В любом случает чистый код, выделенный из индикатора будет работать быстрее обернутого в индикатор. Тут статья была про эту технологию.
В любом случает чистый код, выделенный из индикатора будет работать быстрее обернутого в индикатор. Тут статья была про эту технологию.
Ума даже не представляю как можно написать собственный индикатор без помощи других индикаторов.Тот же MACD использует 2 хэндла.
Да уж...великий и могучий MQL язык...
Только что добавил в MACD копирование хендлов стандартных индикаторов т.е. НЕ через iCustom() - ВСЕ РАБОТАЕТ МОМЕНТАЛЬНО И БЫСТРО. В чем же все таки дело??
ExtFastTickHandle=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE); ExtSlowTickHandle=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE); ExtFastSmaHandle=iMA(NULL,0,7,0,MODE_SMA,PRICE_MEDIAN); ExtSlowSmaHandle=iMA(NULL,0,7,0,MODE_SMA,PRICE_MEDIAN); ExtFastEmaHandle=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE); ExtSlowEmaHandle=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE); ExtCloseVHandle=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE); ExtMedianVHandle=iMA(NULL,0,7,0,MODE_SMA,PRICE_MEDIAN); Ext0FastHandle=iMA(NULL,0,7,0,MODE_SMA,PRICE_MEDIAN);// color AO Ext0SlowHandle=iMA(NULL,0,7,0,MODE_SMA,PRICE_MEDIAN);//color AO Ext10CloseHandle=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE); Ext10MedianHandle=iMA(NULL,0,7,0,MODE_SMA,PRICE_MEDIAN);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Беру стандартный индикатор MACD из папки Example, и хочу получить хендл этого индикатора в эксперте по 3-м валютным парам и по всем таймфреймам до Н12. Все хорошо, и работает как надо, НО если я добавляю кусочек кода в сам индикатор MACD, в котором хочу получить хендлы еще 5-ти индикаторов (кусочек кода выделен красным цветом ниже в индикаторе MACD) то начинается очень огромная нагрузка на процессор и ОЗУ. ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?