_AllFramesTrend_4





#property link              "mailto:rainal@mail.ru"
#property copyright         "rainal - Ñìèðíîâ Àëåêñàíäð Ìèõàéëîâè÷"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1  Blue
#property indicator_color2  Red
#property indicator_color3  Blue
#property indicator_color4  Red
#property indicator_width1  2
#property indicator_width2  2
#property indicator_width3  0
#property indicator_width4  0

extern string remark1 = "Ïàðàìåòðû ÌÀ";
extern int method =     3;              // ìåòîä óñðåäíåíèÿ ÌÀ äëÿ âñåõ òàéìôðåéìîâ
extern int price =      5;              // öåíà äëÿ ðàñ÷åòà ÌÀ äëÿ âñåõ òàéìôðåéìîâ
extern string remark2 = "Âûáîð òàéìôåðåéìîâ";
extern int M1_use =     0;              // èñïîëüçîâàíèå òàéìôðåìà Ì1
extern int M5_use =     0;              // 0 - íåò, ëþáàÿ äðóãàÿ öèôðà - äà
extern int M15_use =    0;              // àíàëîãè÷íî äëÿ îñòàëüíûõ òàéìðåôìîâ
extern int M30_use =    0;
extern int H1_use =     1;
extern int H4_use =     0;
extern int D1_use =     0;
extern string remark3 = "Âûáîð ïåðèîäîâ ÌÀ";
extern int M1_period =  5;              // ïåðèîä óñðåäíåíèÿ ÌÀ äëÿ òàéìôðåéìà Ì1
extern int M5_period =  5;              // àíàëîãè÷íî äëÿ îñòàëüíûõ òàéìðåôìîâ
extern int M15_period = 5;
extern int M30_period = 5;
extern int H1_period =  5;
extern int H4_period =  5;
extern int D1_period =  5;
extern string remark4 = "Ðåæèì ðàñ÷åòà äàííûõ";
extern bool on_next_bar = true;         // true - èñïîëüçîâàíèå äëÿ ðàñ÷åòà èíäèêàòîðà öåíû Close ïðåäïîñëåäíåãî ðàñ÷åòíîãî áàðà
                                        // íà ìèíèìàëüíîì âûáðàííîì òàéìðåéìå, ò.å. îæèäàíèå ïîëíîãî ôîðìèðîâàíèÿ áàðà,
                                        // îòðèñîâêà îòêðûòèÿ è çàêðûòèÿ ïîçèöèè áóäåò îñóùåñòâëÿòüñÿ ïî öåíå Open
                                        // ïîñëåäíåãî (òåêóùåãî) ðàñ÷åòíîãî áàðà íà ìèíèìàëüíîì âûáðàííîì òàéìðåéìå
                                        // false - èñïîëüçîâàíèå òåêóùåé öåíû (Close) ïîñëåäíåãî ðàñ÷åòíîãî áàðà íà ìèíèìàëüíîì 
                                        // âûáðàííîì òàéìðåéìå, ò.å. ðàñ÷åò â ðåàëüíîì âðåìåíè, íå äîæèäàÿñü ïîëíîãî ôîðìèðîâàíèÿ
                                        // áàðà, îòðèñîâêà îòêðûòèÿ è çàêðûòèÿ ïîçèöèè áóäåò îñóùåñòâëÿòüñÿ ïî òåêóùåé öåíå (Close)
                                        // ïîñëåäíåãî (òåêóùåãî) ðàñ÷åòíîãî áàðà íà ìèíèìàëüíîì âûáðàííîì òàéìðåéìå

int bars_history = 5000;                // îãðàíè÷åíèå íà êîëè÷åñòâî îáðàáàòûâàåìûõ èíäèêàòîðîì áàðîâ
string sound_up = "up.wav";             // çâóê, îáîçíà÷àþùèé íà÷àëî äâèæåíèÿ ââåðõ
string sound_down = "down.wav";         // çâóê, îáîçíà÷àþùèé íà÷àëî äâèæåíèÿ âíèç
string sound_end = "end.wav";           // çâóê, îáîçíà÷àþùèé îêîí÷àíèå äâèæåíèÿ                                        
                                        // çâóêîâûå ôàéëû äîëæíû íàõîäèòüñÿ â ïàïêå "êàòàëîã_òåðìèíàëà\sounds"

double line_up[], line_down[], arrow_up[], arrow_down[];
int mode, flag_alert, flag_sound_up, flag_sound_down, flag_end_up, flag_end_down, pos_up, pos_down;
datetime time_last, time_up, time_down;

int init()
{
  IndicatorShortName("AllFramesTrend_4");
  SetIndexStyle(0, DRAW_LINE);
  SetIndexStyle(1, DRAW_LINE);
  SetIndexStyle(2, DRAW_ARROW);
  SetIndexStyle(3, DRAW_ARROW);
  SetIndexArrow(2, 108);
  SetIndexArrow(3, 108);
  SetIndexDrawBegin(0, 1);
  SetIndexDrawBegin(1, 1);
  SetIndexDrawBegin(2, 1);
  SetIndexDrawBegin(3, 1);
  SetIndexBuffer(0, line_up);
  SetIndexBuffer(1, line_down);
  SetIndexBuffer(2, arrow_up);
  SetIndexBuffer(3, arrow_down);
  return(0);
}

int start()
{
  // ïðîâåðêà ñîîòâåòñòâèÿ òàéìôðåìà òåêóùãî ãðàôèêà âõîäíûì äàííûì
  int min_frame = 0;
  if(D1_use == 1) min_frame = 1440;
  if(H4_use == 1) min_frame = 240;
  if(H1_use == 1) min_frame = 60;
  if(M30_use == 1) min_frame = 30;
  if(M15_use == 1) min_frame = 15;
  if(M5_use == 1) min_frame = 5;
  if(M1_use == 1) min_frame = 1;
  if(min_frame == 0 && flag_alert != 1)
  {
    flag_alert = 1;
    Alert("Íè îäèí òàéìôðåéì íå âûáðàí! Âûáåðèòå õîòÿ áû îäèí!");
    return(0);
  }
  if(Period() > min_frame && flag_alert != 1)
  {
    flag_alert = 1;
    Alert("Òàéìôðåéì òåêóùåãî ãðàôèêà äîëæåí áûòü íå áîëüøå ìèíèìàëüíîãî âûáðàííîîãî òàéìôðåéìà!");
    return(0);
  }
    
  int pos = 0, shift, i;
  double d, M1_cur, M1_prev, M5_cur, M5_prev, M15_cur, M15_prev, M30_cur, M30_prev, H1_cur, H1_prev, H4_cur, H4_prev, D1_cur, D1_prev;
  int counted_bars = IndicatorCounted();
  if(counted_bars < bars_history) pos = bars_history - counted_bars;
  if(on_next_bar) mode = 1;
  else mode = 0;
  
  while(pos >= 0)
  {
    // ïðîâåðêà óñëîâèÿ ïîëíîãî ôîðìèðîâàíèÿ ïðåäïîñëåäíåãî ðàñ÷åòíîãî áàðà íà ìèíèìàëüíîì âûáðàííîì òàéìôðåéìå
    if(mode == 1 && counted_bars > bars_history)
    {
      shift = iBarShift(NULL, min_frame, Time[pos]);
      if(iTime(NULL, min_frame, shift) == time_last) return(0);
      else time_last = iTime(NULL, min_frame, shift);
    }
        
    // ñîáèðàåì èíôîðìàöèþ ïî ðàçíûì òàéìôðåìàì
    if(M1_use == 1)
    {
      M1_cur = iMA(NULL, PERIOD_M1, M1_period, 0, method, price, pos + mode);
      M1_prev = iMA(NULL, PERIOD_M1, M1_period, 0, method, price, pos + mode + 1);
    }
    if(M5_use == 1)
    {
      shift = iBarShift(NULL, PERIOD_M5, Time[pos + (5 / Period()) * mode]);
      M5_cur = iMA(NULL, PERIOD_M5, M5_period, 0, method, price, shift);
      shift = iBarShift(NULL, PERIOD_M5, Time[pos + (5 / Period()) * (mode + 1)]);
      M5_prev = iMA(NULL, PERIOD_M5, M5_period, 0, method, price, shift);
    }
    if(M15_use == 1)
    {
      shift = iBarShift(NULL, PERIOD_M15, Time[pos + (15 / Period()) * mode]);
      M15_cur = iMA(NULL, PERIOD_M15, M15_period, 0, method, price, shift);
      shift = iBarShift(NULL, PERIOD_M15, Time[pos + (15 / Period()) * (mode + 1)]);
      M15_prev = iMA(NULL, PERIOD_M15, M15_period, 0, method, price, shift);
    }
    if(M30_use == 1)
    {
      shift = iBarShift(NULL, PERIOD_M30, Time[pos + (30 / Period()) * mode]);
      M30_cur = iMA(NULL, PERIOD_M30, M30_period, 0, method, price, shift);
      shift = iBarShift(NULL, PERIOD_M30, Time[pos + (30 / Period()) * (mode + 1)]);
      M30_prev = iMA(NULL, PERIOD_M30, M30_period, 0, method, price, shift);
    }
    if(H1_use == 1)
    {
      shift = iBarShift(NULL, PERIOD_H1, Time[pos + (60 / Period()) * mode]);
      H1_cur = iMA(NULL, PERIOD_H1, H1_period, 0, method, price, shift);
      shift = iBarShift(NULL, PERIOD_H1, Time[pos + (60 / Period()) * (mode + 1)]);
      H1_prev = iMA(NULL, PERIOD_H1, H1_period, 0, method, price, shift);
    }
    if(H4_use == 1)
    {
      shift = iBarShift(NULL, PERIOD_H4, Time[pos + (240 / Period()) * mode]);
      H4_cur = iMA(NULL, PERIOD_H4, H4_period, 0, method, price, shift);
      shift = iBarShift(NULL, PERIOD_H4, Time[pos + (240 / Period()) * (mode + 1)]);
      H4_prev = iMA(NULL, PERIOD_H4, H4_period, 0, method, price, shift);
    }
    if(D1_use == 1)
    {
      shift = iBarShift(NULL, PERIOD_D1, Time[pos + (1440 / Period()) * mode]);
      D1_cur = iMA(NULL, PERIOD_D1, D1_period, 0, method, price, shift);
      shift = iBarShift(NULL, PERIOD_D1, Time[pos + (1440 / Period()) * (mode + 1)]);
      D1_prev = iMA(NULL, PERIOD_D1, D1_period, 0, method, price, shift);
    }
    
    // îïðåäåëÿåì íàïðàâëåíèå äâèæåíèÿ íà âñåõ âûáðàííûõ òàéìôðåéìàõ
    string direction = "none";
    if(((M1_cur > M1_prev) || M1_use == 0) && ((M5_cur > M5_prev) || M5_use == 0) && ((M15_cur > M15_prev) || M15_use == 0) && ((M30_cur > M30_prev) || M30_use == 0) && ((H1_cur > H1_prev) || H1_use == 0) && ((H4_cur > H4_prev) || H4_use == 0) && ((D1_cur > D1_prev) || D1_use == 0)) direction = "up";
    if(((M1_cur < M1_prev) || M1_use == 0) && ((M5_cur < M5_prev) || M5_use == 0) && ((M15_cur < M15_prev) || M15_use == 0) && ((M30_cur < M30_prev) || M30_use == 0) && ((H1_cur < H1_prev) || H1_use == 0) && ((H4_cur < H4_prev) || H4_use == 0) && ((D1_cur < D1_prev) || D1_use == 0)) direction = "down";
        

    // åñëè íàïðàâëåíèÿ äâèæåíèé ÌÀ íà âûáðàííûõ òàéìôðåéìàõ íàïðàâëåíû ââåðõ...
    if(direction == "up")
    {
      
      // èäåíòèôèöèðóåì íà÷àëî äâèæåíèÿ ââåðõ
      if(time_up == EMPTY)
      {
        flag_end_up = 0;
        flag_sound_down = 0;
        time_up = Time[pos];
        if(mode == 1)
        {
          line_up[pos] = Open[pos];
          arrow_up[pos] = Open[pos];
        }
        else
        {
          line_up[pos] = Close[pos];
          arrow_up[pos] = Close[pos];
        }
        
        // èãðàåì çâóê íà÷àëà äâèæåíèÿ ââåðõ
        if(counted_bars >= bars_history && flag_sound_up != 1)
        {
          flag_sound_up = 1;
          PlaySound(sound_up);
        }
      }
      
      // ðèñóåì ïðÿìóþ ëèíèþ îò íà÷àëà äâèæåíèÿ ââåðõ äî òåêóùåãî çíà÷åíèÿ
      if(counted_bars >= bars_history && time_up != EMPTY && time_up != Time[pos])
      {
        pos_up = iBarShift(NULL, 0, time_up);
        if(mode == 1) d = (Open[pos] - Open[pos_up]) / (pos_up - pos);
        else d = (Close[pos] - Close[pos_up]) / (pos_up - pos);
        for(i = pos_up - 1; i >= pos; i--) line_up[i] = line_up[i + 1] + d;
      }
    }
    
    // èäåíòèôèöèðóåì îêîí÷àíèå äâèæåíèÿ ââåðõ
    if(direction != "up" && flag_end_up != 1)
    {
      flag_end_up = 1;
      
      // èãðàåì çâóê îêîí÷àíèÿ äâèæåíèÿ
      if(counted_bars >= bars_history) PlaySound(sound_end);

      // ðèñóåì ïðÿìóþ ëèíèþ îò íà÷àëà äî îêîí÷àíèÿ äâèæåíèÿ âåðõ
      if(time_up != Time[pos])
      {
        pos_up = iBarShift(NULL, 0, time_up);
        if(mode == 1)
        {
          arrow_up[pos] = Open[pos];
          d = (Open[pos] - Open[pos_up]) / (pos_up - pos);
        }
        else
        {
          arrow_up[pos] = Close[pos];
          d = (Close[pos] - Close[pos_up]) / (pos_up - pos);
        }
        for(i = pos_up - 1; i >= pos; i--) line_up[i] = line_up[i + 1] + d;
      }
      time_up = EMPTY;
    }
    
    // åñëè íàïðàâëåíèÿ äâèæåíèé ÌÀ íà âûáðàííûõ òàéìôðåéìàõ íàïðàâëåíû âíèç...
    if(direction == "down")
    {
      
      // èäåíòèôèöèðóåì íà÷àëî äâèæåíèÿ âíèç
      if(time_down == EMPTY)
      {
        flag_end_down = 0;
        flag_sound_up = 0;
        time_down = Time[pos];
        if(mode == 1)
        {
          line_down[pos] = Open[pos];
          arrow_down[pos] = Open[pos];
        }
        else
        {
          line_down[pos] = Close[pos];
          arrow_down[pos] = Close[pos];
        }
        
        // èãðàåì çâóê íà÷àëà äâèæåíèÿ âíèç
        if(counted_bars >= bars_history && flag_sound_up != 1)
        {
          flag_sound_down = 1;
          PlaySound(sound_down);
        }
      }
      
      // ðèñóåì ïðÿìóþ ëèíèþ îò íà÷àëà äâèæåíèÿ âíèç äî òåêóùåãî çíà÷åíèÿ
      if(counted_bars >= bars_history && time_down != EMPTY && time_down != Time[pos])
      {
        pos_down = iBarShift(NULL, 0, time_down);
        if(mode == 1) d = (Open[pos] - Open[pos_down]) / (pos_down - pos);
        else d = (Close[pos] - Close[pos_down]) / (pos_down - pos);
        for(i = pos_down - 1; i >= pos; i--) line_down[i] = line_down[i + 1] + d;
      }
    }
    
    // èäåíòèôèöèðóåì îêîí÷àíèå äâèæåíèÿ âíèç
    if(direction != "down" && flag_end_down != 1)
    {
      flag_end_down = 1;
      
      // èãðàåì çâóê îêîí÷àíèÿ äâèæåíèÿ
      if(counted_bars >= bars_history) PlaySound(sound_end);
      
      // ðèñóåì ïðÿìóþ ëèíèþ îò íà÷àëà äî îêîí÷àíèÿ äâèæåíèÿ âíèç
      if(time_down != Time[pos])
      {
        pos_down = iBarShift(NULL, 0, time_down);
        if(mode == 1)
        {
          arrow_down[pos] = Open[pos];
          d = (Open[pos] - Open[pos_down]) / (pos_down - pos);
        }
        else
        {
          arrow_down[pos] = Close[pos];
          d = (Close[pos] - Close[pos_down]) / (pos_down - pos);
        }
        for(i = pos_down - 1; i >= pos; i--) line_down[i] = line_down[i + 1] + d;
      }
      time_down = EMPTY;
    }   
    
    pos--;
  }
  return(0);
}



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains open prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_ARROW


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen
It plays sound alerts