Для получения Point() SymbolInfoInteger никак не подойдёт.)))
А вообще, это необходимо для того, чтобы не забывать, что Point() или _Point только для текущего символа. Для символов отличных от того на котором работает советник нужно использовать именно эту функцию.
А дальше, конечно имел ввиду Digits() или _Digits а написал то, что написал. И последняя строка ответа касалась второй части вопроса. Не забывайте русскую пословицу "Умный не скажет, дурак не догадается." догадался и сказал, значит ни то, ни другое, а так...
Может вам очень не повезло, но я не люблю колупаться в чужом коде. Тем более править его...
Alexey Viktorov:
Следующий вопрос: Как вы думаете как часто значение индикатора будет равно ровно 50?
Как я понял задачу, то должно быть одного цвета >50 и другого цвета <50 а вот ==50 нигде не видел. Конечно чтобы исключить потерю в случае если == 50, надо к одному из сравнений добавить >=50 или другому <=50 Это уже как религия позволяет. Как будет красивей выглядеть.
И второй вопрос: на сколько была необходимость менять всю индексацию буферов? После переиндексации вы точно всё в коде исправили? Может проще было-бы буфер цвета назначить индексом 4, а вспомогательные буферы 5 и 6 соответственно. Меньше пришлось-бы править и меньше вероятность допустить ещё несколько ошибок.
Спасибо за ответ. Если бы Любили колупаться в чужом коде, скорее всего мы бы потеряли Вас как эксперта, так что в этом плане как раз таки ПОВЕЗЛО.
про <= или >= согласен, упущение, конечно один из них должен присутствовать, как только буду пробегать мимо, а пока не принципиально.
Пробовал, переназначал один буфер цвета, переназначал целыми группами, менял группы местами (выше/ниже) - ничего не помогает. Вот сейчас закончу пост и попробую сделать отдельно гистограммный индикатор, без линий. Если заработает, снова буду пытаться их объединить. Тут уже дело принципа. Не хочу оставлять за спиной белые пятна непонятного.
Спасибо за ответ. Если бы Любили колупаться в чужом коде, скорее всего мы бы потеряли Вас как эксперта, так что в этом плане как раз таки ПОВЕЗЛО.
про <= или >= согласен, упущение, конечно один из них должен присутствовать, как только буду пробегать мимо, а пока не принципиально.
Пробовал, переназначал один буфер цвета, переназначал целыми группами, менял группы местами (выше/ниже) - ничего не помогает. Вот сейчас закончу пост и попробую сделать отдельно гистограммный индикатор, без линий. Если заработает, снова буду пытаться их объединить. Тут уже дело принципа. Не хочу оставлять за спиной белые пятна непонятного.
Наверное плохо мозг напрягали когда меняли индексацию буферов.
Вернитесь взад, возьмите старый код из сообщения 8806 и поменяйте там только последовательность буферов.
Я так делал, не помогало, допустил что делал с ошибками, после Вашего поста сделал снова. Вот места кода, которые изменил. Старое закоментировано.
Вот так было до внесения изменений. Гистограмма есть, цвета нужного нету.
Вот так стало. Гистограмма исчезла, не отображается.
Видимо опять слабо голову ломаю.
Здесь нарушена логика вообще. Последовательность должна быть такая: Определили значение гистограммы, заполнили i-тый индекс индикаторного буфера. Затем отдельная проверка, если это значение >=50 буфер цвета заполнить 0, иначе 1. Это определяется последовательностью цветов в директиве
#property indicator_color3clrGreen,clrRed
Если 0, то берётся цвет clrGreen и если 1 то clrRed
А эта строка абсолютно лишняя, да и последовательность противоположна первой.
color colors[]={clrRed,clrGreen};
И это
int cl;
с какой целью добавлено? Проще напрямую заполнить
ColorHistogram_2Colors[i]=0;
// или
ColorHistogram_2Colors[i]=1;
Для заполнения буфера цвета я-бы использовал такую конструкцию
Здесь нарушена логика вообще. Последовательность должна быть такая: Определили значение гистограммы, заполнили i-тый индекс индикаторного буфера. Затем отдельная проверка, если это значение >=50 буфер цвета заполнить 0, иначе 1. Это определяется последовательностью цветов в директиве
Если 0, то берётся цвет clrGreen и если 1 то clrRed
А эта строка абсолютно лишняя, да и последовательность противоположна первой.
И это
с какой целью добавлено? Проще напрямую заполнить
Для заполнения буфера цвета я-бы использовал такую конструкцию
Оператор ?: равнозначен if else но применяется проще
УУРРАА, и душа запела. Алексей, огромное спасибо !!!!!
Все заработало, не совсем понял, как получается обойтись без массива
color colors[]={clrRed,clrGreen};
ведь его описание удалено. Значит здесь вообще можно обойтись без лишнего массива?
Спасибо за ответ. Если бы Любили колупаться в чужом коде, скорее всего мы бы потеряли Вас как эксперта, так что в этом плане как раз таки ПОВЕЗЛО.
про <= или >= согласен, упущение, конечно один из них должен присутствовать, как только буду пробегать мимо, а пока не принципиально.
Пробовал, переназначал один буфер цвета, переназначал целыми группами, менял группы местами (выше/ниже) - ничего не помогает. Вот сейчас закончу пост и попробую сделать отдельно гистограммный индикатор, без линий. Если заработает, снова буду пытаться их объединить. Тут уже дело принципа. Не хочу оставлять за спиной белые пятна непонятного.
Сергей огромная благодарность за кнопку on_off для моего советника.Работа длилась один год,и вот он готов,вы первый кто увидит результаты тестов,взял на вскидку,тестировал на разных валютах,с разным спредом,и вообщем результат везде одинаков.Даже извините стишок придумал...Мой Пискун он просто чудо,всё берёт везде и всюду.
p.s Я так и не научился правильно прикреплять изображение,прошу извинить,выложу скины с экрана.
Да о том-же. Ладно проскочили. Главное чтоб он понял что к чему...
Он - это кто? Я именно с этого и начал.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Alexey Viktorov, 2019.06.11 09:06
Для получения Point() SymbolInfoInteger никак не подойдёт.)))
А вообще, это необходимо для того, чтобы не забывать, что Point() или _Point только для текущего символа. Для символов отличных от того на котором работает советник нужно использовать именно эту функцию.
Функция SymbolInfoInteger возвращмет не только int значения, но и long, и bool, и перечисления.
Может вам очень не повезло, но я не люблю колупаться в чужом коде. Тем более править его...
Alexey Viktorov:
Следующий вопрос: Как вы думаете как часто значение индикатора будет равно ровно 50?
Как я понял задачу, то должно быть одного цвета >50 и другого цвета <50 а вот ==50 нигде не видел. Конечно чтобы исключить потерю в случае если == 50, надо к одному из сравнений добавить >=50 или другому <=50 Это уже как религия позволяет. Как будет красивей выглядеть.
И второй вопрос: на сколько была необходимость менять всю индексацию буферов? После переиндексации вы точно всё в коде исправили? Может проще было-бы буфер цвета назначить индексом 4, а вспомогательные буферы 5 и 6 соответственно. Меньше пришлось-бы править и меньше вероятность допустить ещё несколько ошибок.
Наверное плохо мозг напрягали когда меняли индексацию буферов.
Вернитесь взад, возьмите старый код из сообщения 8806 и поменяйте там только последовательность буферов.
Потом проследите условия когда в буфер цвета надо ставить 0 и когда 1Наверное плохо мозг напрягали когда меняли индексацию буферов.
Вернитесь взад, возьмите старый код из сообщения 8806 и поменяйте там только последовательность буферов.
Потом проследите условия когда в буфер цвета надо ставить 0 и когда 1Я так делал, не помогало, допустил что делал с ошибками, после Вашего поста сделал снова. Вот места кода, которые изменил. Старое закоментировано.
Вот так было до внесения изменений. Гистограмма есть, цвета нужного нету.
Вот так стало. Гистограмма исчезла, не отображается.
Видимо опять слабо голову ломаю.
Я так делал, не помогало, допустил что делал с ошибками, после Вашего поста сделал снова. Вот места кода, которые изменил. Старое закоментировано.
Вот так было до внесения изменений. Гистограмма есть, цвета нужного нету.
Вот так стало. Гистограмма исчезла, не отображается.
Видимо опять слабо голову ломаю.
Здесь нарушена логика вообще. Последовательность должна быть такая: Определили значение гистограммы, заполнили i-тый индекс индикаторного буфера. Затем отдельная проверка, если это значение >=50 буфер цвета заполнить 0, иначе 1. Это определяется последовательностью цветов в директиве
Если 0, то берётся цвет clrGreen и если 1 то clrRed
А эта строка абсолютно лишняя, да и последовательность противоположна первой.
И это
int cl;с какой целью добавлено? Проще напрямую заполнить
Для заполнения буфера цвета я-бы использовал такую конструкцию
Оператор ?: равнозначен if else но применяется прощеЗдесь нарушена логика вообще. Последовательность должна быть такая: Определили значение гистограммы, заполнили i-тый индекс индикаторного буфера. Затем отдельная проверка, если это значение >=50 буфер цвета заполнить 0, иначе 1. Это определяется последовательностью цветов в директиве
Если 0, то берётся цвет clrGreen и если 1 то clrRed
А эта строка абсолютно лишняя, да и последовательность противоположна первой.
И это
с какой целью добавлено? Проще напрямую заполнить
Для заполнения буфера цвета я-бы использовал такую конструкцию
Оператор ?: равнозначен if else но применяется прощеУУРРАА, и душа запела. Алексей, огромное спасибо !!!!!
Все заработало, не совсем понял, как получается обойтись без массива
ведь его описание удалено. Значит здесь вообще можно обойтись без лишнего массива?
Сергей огромная благодарность за кнопку on_off для моего советника.Работа длилась один год,и вот он готов,вы первый кто увидит результаты тестов,взял на вскидку,тестировал на разных валютах,с разным спредом,и вообщем результат везде одинаков.Даже извините стишок придумал...Мой Пискун он просто чудо,всё берёт везде и всюду.
p.s Я так и не научился правильно прикреплять изображение,прошу извинить,выложу скины с экрана.
Для заполнения буфера цвета я-бы использовал такую конструкцию
Оператор ?: равнозначен if else но применяется прощеОтличный совет и прекрасная наука на будующее!!! Пошел даже немного дальше. Ниже результат.
Так было:
Так стало, эффективность подхода очевидна!!! Спасибо.
Отличный совет и прекрасная наука на будующее!!! Пошел даже немного дальше. Ниже результат.
Так было:
Так стало, эффективность подхода очевидна!!! Спасибо.
Здесь нет эффективности - три раза условие if-else вместо одного. Здесь - хуже как раз...
Здесь нет эффективности - три раза условие if-else вместо одного. Здесь - хуже как раз...
Да, действительно. не обратил на это внимание. А смотрится лучше, буковок опять же меньше.
А засунуть под одного оператора ?: сразу три исполнения (не знаю как правильно сказать) никак нельзя?