Форум » Индикаторы » Модификация Bollinger Bands » Ответить

Модификация Bollinger Bands

anatolyp: http://zalil.ru/34320483 http://zalil.ru/34320495 http://zalil.ru/34320500 Уважаемый, Scriptong. Первые два индикатора являются составными частями третьего(он без них не будет работать) - составлял сам, но получается томознуто для использования в эксперте.. Не могли бы вы написать эксперта по третьему индикатору (даже с настройками по-умолчанию - почти грааль). Если заинтересует, то составим ТЗ. Спасибо. Рисунок с реального счета.

Ответов - 11

Scriptong: Добрый день. Скачал, запустил. В итоге ничего не работает. Проблема, как минимум, была с неправильным названием индикаторов, используемых в коде. Но и после изменения названий проблемы остались. Наиболее важная - в коде BandsATR: MovingBuffer=NormalizeDouble(0.5*(iCustom(NULL,0,"_MAOnDay",2,60,ATRPeriod,BandsPeriod,0.5,5,0,i)+ iCustom(NULL,0,"_MAOnDay",3,60,ATRPeriod,BandsPeriod,0.5,5,0,i)),Digits); Здесь при вызове функции iCustom индикатору _MaOnDay передается параметров больше, чем у него есть. Поэтому пока оставим индикаторы Bands_ATR и BBands_Stop_v3. Их Вы потихоньку начнете исправлять. Сейчас предлагаю довести до ума начальный индикатор - _MAOnDay. В нем тоже хватает проблем: 1. Если переменные в коде не меняют своего значения, то лучше объявить их константами. Это касается переменных MethodMA, PriceMA, X1 и X2. Так я и сделал: #define METHOD_MA 3 #define PRICE_MA 7 #define X1 0.618 #define X2 0.236 2. Расчет индекса начального бара, почему-то идет на основании данных таймфрейма LargeTF. Это неверно. Если индикатор отображает информацию, то делается это ВСЕГДА на текущем таймфрейме. Исправлено путем использования функции GetRecalcIndex. 3. Для начального расчета не стоит использовать все доступные бары. Это сильно нагружает систему и сказывается на быстродействии индикатора. Ограничивайте отображение данных хотя бы 50 000 баров (переменная i_indBarsCount). 4. Все логические блоки цикла лучше разбивать на функции. Если так сделать, то функция start примет достаточно лаконичный вид. Смысл индикатора станет понятен с первого взгляда на него: int start() { if (!activate) return(0); int total; int limit = GetRecalcIndex(total); for (int i = limit; i >= 0; i--) { DetectNewDay(i, Count, Buffer); Buffer[Count] = GetPriceByBarIndex(i); MA = GetMA(i, Count); Count++; } return(0); } 5. В индикаторе по несколько раз за одну итерацию цикла вычислялась одна и та же информация (значения средних). В новой версии эти расчеты оптимизированы. Попробуйте в том же ключе поработать над другими индикаторами. Новая версия индикатора

anatolyp: http://zalil.ru/34323562 http://zalil.ru/34323563 http://zalil.ru/34323565 Да-а, спасибо за науку. Вот все переделал, но кстати результат(графики) не очень отличается от былого. Комп грузится меньше, а это плюс. http://zalil.ru/34323626 торговля вчера и сегодня. Обратите внимание на построенные фибо: уровни 261 почти всегда определяют движение пары. вот на этом и хотелось бы сделать советник

Scriptong: anatolyp пишет: Вот все переделал Не увидел каких-либо серьезных изменений в кодах BandsATR и BBandsStop. anatolyp пишет: но кстати результат(графики) не очень отличается от былого. Это свидетельствует о том, что код _MAOnDay был переделан мною правильно. Основная логика осталась прежней, но теперь индикатор работает в онлайн более устойчиво. anatolyp пишет: Комп грузится меньше, а это плюс. Комплекс будет работать еще быстрее, когда логика обоих индикаторов изменится по тому принципу, который я выше описал. anatolyp пишет: Обратите внимание на построенные фибо: уровни 261 почти всегда определяют движение пары. Вот это "почти" и напрягает. Чтобы понять, насколько устойчива система в целом, нужно проанализировать все сигналы в истории и посмотреть соотношение полученной прибыли и убытков. К примеру, сразу несколько убытков: Кстати, похожая стратегия уже была рассмотрена в проекте MQLabs - Летучая мышь.


anatolyp: Scriptong пишет: Вот это "почти" и напрягает. Можно сделать первой целью 161, далее 200 и 261(передвигая стоп), далее почему-то ваш переделанный индикатор не корректно отображается, т.е. пока не сделаешь"обновить" он уходит в никуда(вверх или вниз). Посмотрите, пжста, что не так.

Scriptong: anatolyp пишет: Можно сделать первой целью 161, далее 200 и 261(передвигая стоп), далее Я как раз и говорю о первой цели. Нужно смотреть соотношение ложных и правильных входов, подбирая величину цели под это соотношение. Если же отталкиваться от 100%-ых сигналов, то в этом случае мы дойдем до отрицательного показателя - спреда. anatolyp пишет: почему-то ваш переделанный индикатор не корректно отображается, т.е. пока не сделаешь"обновить" он уходит в никуда(вверх или вниз). Видимо, Вы не загрузили данные для таймфрейма LargeTF. Посмотрите для сравнения первую версию индикатора. С ней такая же проблема. Чтобы индикатор закачивал данные таймфрейма LargeTF автоматически, нужно добавить соответствующий кусок кода.

anatolyp: Пишет: не хватает памяти.Индикатор отключен.Ошибка расчета МА

Scriptong: anatolyp пишет: Пишет: не хватает памяти.Индикатор отключен.Ошибка расчета МА Посмотрите, нет ли в журнале (окно Терминал - закладка Журнал) вот такой надписи: Memory handler: cannot allocate 11758024 bytes of memory Если есть, то вопрос не ко мне, а к размеру свободной оперативной памяти Вашего компьютера. Чтобы уменьшить расход памяти, закройте все лишние приложения, открывайте в терминале как можно меньше графиков и индикаторов. Для чистоты эксперимента запустите только один терминал с одним графиком. К нему присоедините индикатор. Если и в этом случае возникнет ошибка, уменьшайте количество видимых баров (Сервис - Настройки - Графики), после чего перезагрузите терминал. Также индикатор будет расходовать меньше памяти, если периоды текущего и старшего таймфреймов будут отличаться незначительно. К примеру, наибольший расход памяти будет при текущем ТФ М1 и LargeTF MN_1.

anatolyp: все перепроверил. уменьшал кол-во баров до 500 - все тоже самое. Надписи: Memory handler: cannot allocate 11758024 bytes of memory - нет. Даже у другого брокера запускал-ошибка та же

Scriptong: Тогда просто закомментируйте строки в функции GetMA: if (maAdaptive == 0) { Alert("Ошибка расчета MA. Возможно, не хватает памяти. Индикатор отключен."); activate = false; return (0); } Ошибка гарантировано исчезнет, но показания индикатора могут быть неправильными. Возникновение этой ошибки говорит о том, что на каком-то этапе расчета значение средней скользящей стало равным нулю. Это явная ошибка расчета, которая у меня проявлялась в результате нехватки памяти для индикатора. В итоге индикатор выводил показания так: Я долго ломал голову, почему так происходит. Оказалось, что индикатору просто не хватает памяти. Вот он и выводит белиберду. Единственный способ определения ошибки оказался косвенным - по значению МА. Ее значение не должно быть равно 0.

anatolyp: ну вот, другое дело. Все получилось. А в последующих индикаторах - до меня так и не дошло , как их можно еще упростить. Их исходные коды были на http://codebase.mql4.com

set: Уважаемый, Scriptong.



полная версия страницы