Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 1741
- Рейтинг:
- Опубликован:
- 2020.12.27 11:07
- Обновлен:
- 2020.12.28 00:49
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Простой класс CIndCopies, который позволяет при написании индикаторов контролировать общее количество запущенных в данном окне таких же индикаторов, порядковый номер текущего индикатора, а также узнать как загружен данный индикатор - через iCustom или присоединен к окну.
Требуется только подсоединить файл данного класса:
#include <Copies.mqh>
и объявить один объект класса:
CIndCopies ind;
Объект класса содержит три свойства:
- int N; The total number of the same indicators loaded in this chart (общее количество загруженных в текущем окне таких же индикаторов.)
- int I; The number of the current indicator, if I = -1, then the indicator is called via iCustom (номер текущего индикатора. Если I=-1, значит текущий индикатор вызван через iCustom)
- string str; A unique string for a current indicator (Уникальная строка для текущего индикатора)
Пример индикатора с применением данного класса, который показывает как взаимодействуют и "видят" друг друга одинаковые индикаторы в данном окне с помощью этого класса, подключенного двумя строками кода.
#include <Canvas\iCanvas.mqh> // https://www.mql5.com/ru/code/22164 #include <Copies.mqh> input string str = "Name1"; //Name CIndCopies ind("test"); // можно записать CIndCopies ind; В этом случае шаблон для уникального имени будет по умолчанию "IndName" int OnInit() { Draw(); return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { return(rates_total); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if (id==CHARTEVENT_CHART_CHANGE) { ind.ReNew(); // перепроверяем все такие же индикаторы в этом окне Draw(); } } //+------------------------------------------------------------------+ void Draw() { // рисуем один прямоугольник по всей ширине окна, но по высоте в зависимости от наличия других таких же индикаторов Canvas.Erase(0x00FFFFFF); int d=W.Height/(ind.N); Canvas.FillRectangle(0,ind.I*d,W.Width-1,(ind.I+1)*d,Canvas.Grad((double)ind.I/(ind.N+1))&0x80FFFFFF); int fontSize=W.Height/(ind.N+2); string text = str+": " + ind.str+", I="+string(ind.I)+", N="+string(ind.N); int w,h; Canvas.CurentFont("Tahoma",fontSize); Canvas.TextSize(text,w,h); Canvas.CurentFont("Tahoma",int(fontSize*W.Width*0.9/w)); _CommXY(int(0.05*W.Width),ind.I*d,str+": " + ind.str+", I="+string(ind.I)+", N="+string(ind.N)); Canvas.Update(); } //+------------------------------------------------------------------+

Гистограмма показывает экстремумы индикатора iRVI (Relative Vigor Index, RVI)

Получение сигналов от индикатора iBands (Bollinger Bands, BB), стоп лосс динамический - по индикатору iATR (Average True Range, ATR) и коэффициенту

Стратегия по индикатору iRVI (Relative Vigor Index, RVI). Закрытие противоположных позиций. Наращивание позиции только если "покупай ниже, продавай выше"

Индикатор отображает момент пересечения предыдущего бара. Использует стиль рисования DRAW_COLOR_ARROW. Развитие первой версии