Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Dynamic RSI - индикатор для MetaTrader 4

Просмотров:
8232
Рейтинг:
(10)
Опубликован:
2023.09.10 12:10
Обновлен:
2023.09.30 04:15
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Дополнение 18.09.2023

Добавлено отображение сигналов стрелками.

Стрелки являются графическими объектами с прозрачностью.

Графику можно выключать. 

Исправлены кое-какие неточности. 

Для любителей инициализировать буферы и работать со вкладкой "Цвета" опять сплошные разочарования. Все необходимые настройки вводятся во вкладку "Входные параметры". На старте инициализируются только те буферы которые, нужно инициализировать для корректной работы. Все подряд от нечего делать не инициализируются. Для желающих инициализировать все буферы подряд, нужно это или не нужно, есть большое поле деятельности по доработки кода, ну и естественно, для очередного хейта в мой адрес. :)

Выброшена отрисовка стартовых значений. Хотя в предыдущей версии это ни коем образом на результаты индикатора не влияло, но для особо искушенных ценителей кода давало повод для ужаса. :) 

Внимание! В индикаторе применена графике. Если слабый компьютер, то может быть задержка. Советую уменьшить количество баров на графике либо выключать графику.


Если кто-то дочитал до этого места, то у меня к Вам вопрос. Как вы думаете, лучше оставить так как есть, когда на каждую серию несколько стрелок, или сделать на одну серию одну стрелку?


В алгоритме рисования стрелок используется градиент цвета. Так что, как представлено на картинке, стрелка имеет более яркие и более темные цвета. Ниже приведён код рисования стрелок

   if(DrawGraphic)
     {
      UpResourceName = "::Arrow Up";
      DnResourceName = "::Arrow Down";
      XDraw = SizeArrow * 2 + 1;
      YDraw = SizeArrow * 2 + Offset;
      ArrayResize(UpDrawBuffer, XDraw * YDraw);
      ArrayResize(DnDrawBuffer, XDraw * YDraw);
      ArrayInitialize(UpDrawBuffer, ColorToARGB(clrNONE, 0));
      ArrayInitialize(DnDrawBuffer, ColorToARGB(clrNONE, 0));
      
      double dOpa = double(0.55 * Opaque) / XDraw;

      for(int i = 0; i < XDraw; i ++)
         for(int j = 0; j < XDraw; j++)
            if((j < SizeArrow && ((i > SizeArrow - j && i <= SizeArrow)||(i - SizeArrow < j && i > SizeArrow)))||
               ((j >= SizeArrow && (i >= SizeArrow / 1.5 && i < XDraw - SizeArrow / 1.5))
                && !(i - 3 * SizeArrow / 4 >= XDraw - j && i <= SizeArrow)
                && !(i -  SizeArrow < j - 7 * SizeArrow / 4 && i > SizeArrow)))
              {
               UpDrawBuffer[i + (XDraw - j) * XDraw] =
                  ColorToARGB(UpArrowColor,uchar(Opaque - dOpa * (j + 2.0 * MathAbs(SizeArrow - i))));
               DnDrawBuffer[i + (j + Offset - 1) * XDraw] =
                  ColorToARGB(DnArrowColor,uchar(Opaque - dOpa * (j + 2.0 * MathAbs(SizeArrow - i))));                  
              }
     }

Как видно из кода, градиент стрелок задаётся изменением прозрачности в зависимости от начала стрелки и от краёв стрелки (формула 1).

ColorToARGB(UpArrowColor,uchar(Opaque - dOpa * (j + 2.0 * MathAbs(SizeArrow - i))));

Например, для верхней стрелки это выглядит так. Где 

SizeArrow

Ширина Стрелки

double dOpa = double(0.55 * Opaque) / XDraw;

Дельта Градиента

И, наконец, параметры

      for(int i = 0; i < XDraw; i ++)
         for(int j = 0; j < XDraw; j++)

определяющие ширину и высоту стрелки соответственно. 

Из выше сказанного видно что в Формуле 1, в функции 

ColorToARGB

Прозрачность вычисляется разностью вводимой прозрачности с произведением Дельта Градиента на сумму вертикальной координаты и удвоенного модуля разности Ширины Стрелки с горизонтальной координатой стрелки.

Что собственно из кода и так видно. Но на всякий случай, дабы избежать лишних вопросов и неуместных недопониманий, решил более полно расписать.

Всем спасибо за внимание. Если что-то не понятно спрашивайте.

Всего хорошего. :)

..........

Предлагаю Вашему вниманию индикатор Dynamic RSI. Нашёл очень много подобных индикаторов с аналогичным названием. Именно этот мне на MQL4 не попался, поэтому пришлось писать. Кто именно является его автором так и не нашёл. На других платформах этот индикатор уже есть. Встречайте его и для MetaTrader 4.


Reversible martin-antimartin on RSI Reversible martin-antimartin on RSI

Эксперт использует два варианта на выбор управления манименеджментом: мартин и антимартин, входа по рынку с выставлением стоп-лосса и тейк - профита

Reaper_v2.8.mq4 Reaper_v2.8.mq4

Интересный советник на сигналах индикатора Alligator,ATR и индикатора Moving Averages.

FormulE FormulE

Попытка выровнять колебания цены, чтобы нагляднее отобразить направление движения цены.

Funny Sounds Funny Sounds

Индикатор следит за торговлей и оповещает о некоторых событиях пользовательскими мелодиями (использует PlaySound()).