Отрисовка времени на графике

 

Друзья, добрый день.

Подскажите, пожалуйста, как модернизировать индикатор.

Есть индикатор, который проводит через максимумы и минимумы ЗигЗага вертикальные линии:

Но, хотелось бы сделать так, чтобы эти вертикальные линии "отражались на шкале времени" таким образом:

(т.е. чтобы показывалось время образования максимумов и минимумов ЗигЗага)

Посоветуйте, пожалуйста, как это сделать.

(Буду рад любым рекомендациям)

Заранее большое спасибо.

(к посту прикреплен код исходного индикатора)

Файлы:
 

рисуйте линии граф объектами, список и ссылки на функции найдете в файле.

Файлы:
 
xrust:

рисуйте линии граф объектами, список и ссылки на функции найдете в файле.


Огромное вам спасибо, xrust!!!

Библиотека функций шикарная!!!

Разобрался с графобъектами, всё добавил. Теперь работает корректно

Возник, правда, такой вопрос:

можно ли время образования максимумов/минимумов на ЗигЗаге записать в файл?

примерно в таком виде:

2010.07.16 21:00, 1 - если образовался максимум

2010.07.17 12:00, 2 - если образовался минимум?

Посоветуйте, пожалуйста, если будет возможность.

 
Morzh09:


можно ли время образования максимумов/минимумов на ЗигЗаге записать в файл?

примерно в таком виде:

2010.07.16 21:00, 1 - если образовался максимум

2010.07.17 12:00, 2 - если образовался минимум?

Посоветуйте, пожалуйста, если будет возможность.

Двигайтесь в этом направлении… https://www.mql5.com/ru/code/9781 

 

читайте здесь http://xrust.ucoz.net/forum/8-14-1

//+------------------------------------------------------------------+
//|                                                _ZZ_reseacher.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <stdlib.mqh>
#include <stderror.mqh>
#include <WinUser32.mqh>
//----------------------------
extern int   ExtDepth=12;//
extern int   ExtDeviation=5;//
extern int   ExtBackstep=3;//

extern int   Round=2;//
//-----------------------------
string Filename;
static int pop=0,ind=0;
double Procent[100000];
double ZZ_znach[100000];
double StartTime[100000];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
Filename="Zz_research.csv";
ArrayInitialize(Procent,0);
ArrayInitialize(ZZ_znach,0);
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
ArrayResize(Procent,ind-1);
int handle=FileOpen(Filename,FILE_CSV|FILE_READ|FILE_WRITE,',');
for(int i=0;i<ind-1;i++){
  string zap=DoubleToStr(Procent[i],0);  
   FileWrite(handle,ZZ_znach[i],Procent[i],StartTime[i]);}
FileClose(handle); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
int ZZ0=GetExtremumZZBar("",0,0,ExtDepth,ExtDeviation,ExtBackstep);
int ZZ1=GetExtremumZZBar("",0,1,ExtDepth,ExtDeviation,ExtBackstep);
int ZZ2=GetExtremumZZBar("",0,2,ExtDepth,ExtDeviation,ExtBackstep);
int ZZ3=GetExtremumZZBar("",0,3,ExtDepth,ExtDeviation,ExtBackstep);
//----
double res0=GetZnachZZBar("",0,ZZ0,ExtDepth,ExtDeviation,ExtBackstep);
double res1=GetZnachZZBar("",0,ZZ1,ExtDepth,ExtDeviation,ExtBackstep);
double res2=GetZnachZZBar("",0,ZZ2,ExtDepth,ExtDeviation,ExtBackstep);
double res3=GetZnachZZBar("",0,ZZ3,ExtDepth,ExtDeviation,ExtBackstep);
bool Ap0,Ap1,Ap2,Ap3;
double PercDec,RazmDec;
//---------------
double Pesent=MathAbs((res2-res3)/100);
if(Pesent==0){Pesent=1;}
int pop1=MathAbs((res2-res1)/Pesent);
if(pop1==0){pop1=1;}
double zz_znach=MathAbs((res2-res3)/Point);
if(zz_znach==0){zz_znach=1;}
//------------------------------------------
if(pop==pop1){return;}
pop=pop1;
int StartHour=TimeHour(TimeCurrent());
//-----
PercDec=MathRound(pop/Round)*Round; 
if(PercDec==0){PercDec=Round;}       
Procent[ind]=PercDec;
RazmDec=MathRound(zz_znach/Round)*Round;
if(RazmDec==0){RazmDec=Round;}
ZZ_znach[ind]=RazmDec;
StartTime[ind]=StartHour;
ind++;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double ap,dn;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    ap=iCustom(sy, tf,"Zigzag2_R_", dp, dv, bc, 0, i);
    dn=iCustom(sy, tf,"Zigzag2_R_", dp, dv, bc, 1, i);
    if (ap!=0||dn!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
double GetZnachZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double ap,dn;
    ap=iCustom(sy, tf,"Zigzag2_R_", dp, dv, bc, 0, ne);
    dn=iCustom(sy, tf,"Zigzag2_R_", dp, dv, bc, 1, ne);
    if (ap!=0) {return(ap);}
    if (dn!=0) {return(dn);}
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
Причина обращения: