Полезные функции от KimIV - страница 34

 
KimIV писал (а) >>

С указателями в MQL4 сложно. Прямой поддержки нету. Кто-то, вроде бы здесь на форуме, пытался это сделать с помощью массивов. Точнее сказать не могу. Поищите сами...

MathRand()

Программно изменять можно только первую размерность массива. Функция ArrayResize(). Вторую, третью и четвёртую размерности придётся задавать жёстко.

Мда, с указателями проехали, с динамическими массивами тоже...

С нетерпением ждем 5 версии языка...

Спасибо за помощь



Работа с одной сетью реализуется несложно.

Прикол в том, что для моей задумки одной сети не хватало, и я хотел сделать алгоритм переключения между сетями, с указателями это несложно.

Ан нет... придется хардкорить.

 

Функция SetTLineByAngle().

Эта функция выполняет установку объекта OBJ_TRENDBYANGLE трендовая линия по углу наклона на текущем графике.

  • cl - Цвет объекта ТРЕНДОВАЯ ЛИНИЯ. Обязательный параметр.
  • nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
  • t1 - Первая координата времени установки объекта. Значение по умолчанию - 0 - время открытия десятого бара.
  • p1 - Первая координата цены установки объекта. Значение по умолчанию - 0 - минимум десятого бара.
  • t2 - Вторая координата времени установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
  • p2 - Вторая координата цены установки объекта. Этот параметр является своего рода переключателем. Его ненулевое значение приравняет данную функции к функции SetTLine(), то есть трендовая линия будет построена по паре координат время/цена, а значение угла наклона трендовой будет проигнорировано. Значение по умолчанию - 0 - построение трендовой линии по углу наклона.
  • an - Угол наклона в градусах. Значение по умолчанию - 0 - горизонтальная линия.
  • ry - Флаг свойства ЛУЧ. Значение по умолчанию False.
  • st - Стиль линии. Допустимые значения STYLE_SOLID (по умолчанию), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT.
  • wd - Толщина линии. Значение по умолчанию - 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Примеры использования функции SetTLineByAngle().

  1. Оранжевый сплошной луч под углом 45° от минимума 5-го бара.
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. Веер красных пунктирных лучей от минимума 13-го бара.
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

ЗЫ. Во вложении скрипт для тестирования функции SetTLineByAngle().

Файлы:
 

Функция SetArrow().

Эта функция выполняет установку объекта OBJ_ARROW значок текущем графике.

  • cd - Код значка. Обязательный параметр.
  • cl - Цвет значка. Обязательный параметр.
  • nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
  • t1 - Первая координата времени установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
  • p1 - Первая координата цены установки объекта. Значение по умолчанию - 0 - текущая цена Bid.
  • sz - Размер значка. Значение по умолчанию - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

Примеры использования функции SetArrow().

  • Золотая левая ценовая метка на максимуме 9-го бара.
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • Красная правая ценовая метка на максимуме 2-го бара.
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3. Синяя стрелка над максимумом 2-го бара.
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

ЗЫ. Во вложении скрипт для тестирования функции SetArrow().

Файлы:
 
Огромное Вам спасибо за то что вы делаете, не будете ли вы против, если я соберу функции из этой ветки, и выложу у себя на сайте,в отдельном разделе с указанием на форум, и на Ваш сайт
 

А вообще классно было бы на первой странице этого поста сделать "Содержание" ветки. Таблицу списка функций, описаний и со ссылками на страницы. Или вести один обновляемый архив на первой странице, а описание уже на остальных страницах можно найти.

Поэтому если xrust осилит свое предложение, то хорошо бы повторить это здесь. Ради систематизации нажитого непосильным трудом :))

 
xrust писал (а) >>
...не будете ли вы против, если я соберу функции из этой ветки, и выложу у себя на сайте,в отдельном разделе с указанием на форум, и на Ваш сайт

Нет, не буду...

 
xrust писал (а) >>
Огромное Вам спасибо за то что вы делаете, не будете ли вы против, если я соберу функции из этой ветки, и выложу у себя на сайте,в отдельном разделе с указанием на форум, и на Ваш сайт

Создать файл-"инклудник" (mqh) (наверное 2 - "торговые" и "прочие"), договориться о его названии и заставить "разработчиков" включать его в дистрибутив. Чтобы каждый в кажом советнике не изобретал велосипед.

:)

 
Еще раз спасибо, просто обленился маленько, хочу собрать все до кучки чтоб под рукой было. Еще вопрос, не будете ли вы против если я в своих функциях буду применять, синтаксис, и названия переменных как у Вас, что бы так сказать стандартизировать.
Причина обращения: