Уважаемый, Scriptong. Первые два индикатора являются составными частями третьего(он без них не будет работать) - составлял сам, но получается томознуто для использования в эксперте.. Не могли бы вы написать эксперта по третьему индикатору (даже с настройками по-умолчанию - почти грааль). Если заинтересует, то составим ТЗ. Спасибо. Рисунок с реального счета.
Отправлено: 06.03.13 12:32. Заголовок: Добрый день. Скачал..
Добрый день.
Скачал, запустил. В итоге ничего не работает. Проблема, как минимум, была с неправильным названием индикаторов, используемых в коде. Но и после изменения названий проблемы остались. Наиболее важная - в коде BandsATR:
Здесь при вызове функции iCustom индикатору _MaOnDay передается параметров больше, чем у него есть. Поэтому пока оставим индикаторы Bands_ATR и BBands_Stop_v3. Их Вы потихоньку начнете исправлять.
Сейчас предлагаю довести до ума начальный индикатор - _MAOnDay. В нем тоже хватает проблем: 1. Если переменные в коде не меняют своего значения, то лучше объявить их константами. Это касается переменных MethodMA, PriceMA, X1 и X2. Так я и сделал:
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. В индикаторе по несколько раз за одну итерацию цикла вычислялась одна и та же информация (значения средних). В новой версии эти расчеты оптимизированы.
Да-а, спасибо за науку. Вот все переделал, но кстати результат(графики) не очень отличается от былого. Комп грузится меньше, а это плюс.
http://zalil.ru/34323626 торговля вчера и сегодня. Обратите внимание на построенные фибо: уровни 261 почти всегда определяют движение пары. вот на этом и хотелось бы сделать советник
Не увидел каких-либо серьезных изменений в кодах BandsATR и BBandsStop.
anatolyp пишет:
цитата:
но кстати результат(графики) не очень отличается от былого.
Это свидетельствует о том, что код _MAOnDay был переделан мною правильно. Основная логика осталась прежней, но теперь индикатор работает в онлайн более устойчиво.
anatolyp пишет:
цитата:
Комп грузится меньше, а это плюс.
Комплекс будет работать еще быстрее, когда логика обоих индикаторов изменится по тому принципу, который я выше описал.
anatolyp пишет:
цитата:
Обратите внимание на построенные фибо: уровни 261 почти всегда определяют движение пары.
Вот это "почти" и напрягает. Чтобы понять, насколько устойчива система в целом, нужно проанализировать все сигналы в истории и посмотреть соотношение полученной прибыли и убытков. К примеру, сразу несколько убытков:
Кстати, похожая стратегия уже была рассмотрена в проекте MQLabs - Летучая мышь.
Можно сделать первой целью 161, далее 200 и 261(передвигая стоп), далее
почему-то ваш переделанный индикатор не корректно отображается, т.е. пока не сделаешь"обновить" он уходит в никуда(вверх или вниз). Посмотрите, пжста, что не так.
Можно сделать первой целью 161, далее 200 и 261(передвигая стоп), далее
Я как раз и говорю о первой цели. Нужно смотреть соотношение ложных и правильных входов, подбирая величину цели под это соотношение. Если же отталкиваться от 100%-ых сигналов, то в этом случае мы дойдем до отрицательного показателя - спреда.
anatolyp пишет:
цитата:
почему-то ваш переделанный индикатор не корректно отображается, т.е. пока не сделаешь"обновить" он уходит в никуда(вверх или вниз).
Видимо, Вы не загрузили данные для таймфрейма LargeTF. Посмотрите для сравнения первую версию индикатора. С ней такая же проблема. Чтобы индикатор закачивал данные таймфрейма LargeTF автоматически, нужно добавить соответствующий кусок кода.
Пишет: не хватает памяти.Индикатор отключен.Ошибка расчета МА
Посмотрите, нет ли в журнале (окно Терминал - закладка Журнал) вот такой надписи:
цитата:
Memory handler: cannot allocate 11758024 bytes of memory
Если есть, то вопрос не ко мне, а к размеру свободной оперативной памяти Вашего компьютера. Чтобы уменьшить расход памяти, закройте все лишние приложения, открывайте в терминале как можно меньше графиков и индикаторов. Для чистоты эксперимента запустите только один терминал с одним графиком. К нему присоедините индикатор. Если и в этом случае возникнет ошибка, уменьшайте количество видимых баров (Сервис - Настройки - Графики), после чего перезагрузите терминал. Также индикатор будет расходовать меньше памяти, если периоды текущего и старшего таймфреймов будут отличаться незначительно. К примеру, наибольший расход памяти будет при текущем ТФ М1 и LargeTF MN_1.
Отправлено: 11.03.13 14:07. Заголовок: все перепроверил. ум..
все перепроверил. уменьшал кол-во баров до 500 - все тоже самое. Надписи: Memory handler: cannot allocate 11758024 bytes of memory - нет. Даже у другого брокера запускал-ошибка та же
Отправлено: 11.03.13 21:22. Заголовок: Тогда просто закомме..
Тогда просто закомментируйте строки в функции GetMA:
цитата:
if (maAdaptive == 0) { Alert("Ошибка расчета MA. Возможно, не хватает памяти. Индикатор отключен."); activate = false; return (0); }
Ошибка гарантировано исчезнет, но показания индикатора могут быть неправильными. Возникновение этой ошибки говорит о том, что на каком-то этапе расчета значение средней скользящей стало равным нулю. Это явная ошибка расчета, которая у меня проявлялась в результате нехватки памяти для индикатора. В итоге индикатор выводил показания так:
Я долго ломал голову, почему так происходит. Оказалось, что индикатору просто не хватает памяти. Вот он и выводит белиберду. Единственный способ определения ошибки оказался косвенным - по значению МА. Ее значение не должно быть равно 0.
Отправлено: 12.03.13 07:55. Заголовок: ну вот, другое дело...
ну вот, другое дело. Все получилось. А в последующих индикаторах - до меня так и не дошло , как их можно еще упростить. Их исходные коды были на http://codebase.mql4.com
Все даты в формате GMT
2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет