azzx_levels_m1

Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
azzx_levels_m1
// ---------------------------------------------------------------------------
//  Îòìåòêà óðîâíåé ïî ýêñòðåìóìàì öåíû.
// ---------------------------------------------------------------------------

// Ïðåôèêñ èì¸í îáúåêòîâ.
#define PREFIX       "MODE1_LEVEL_"
#define CONTROL_NAME "MODE1_BAR_SELECTOR"

// Öâåòîâàÿ ñõåìà.
extern color COLOR_MN1 = DarkViolet;
extern color COLOR_W1  = Violet;
extern color COLOR_D1  = DarkOrange;
extern color COLOR_H4  = DarkSeaGreen;
extern color COLOR_H1  = LightSeaGreen;

// Òåêóùèé ïåðèîä.  
int      current_period;
// Òåêóùèé öâåò.
color    current_color;
// Êîíå÷íàÿ äàòà.
datetime date_end;

// Èíèöèàëèçàöèÿ. 
int init() {
  // Ïðîâåðêà ïîäãðóæåííîñòè äàííûõ.
  int  i;
  bool f = false;
  
  for(i = PERIOD_MN1; i >= Period(); i = next_period(i)) {
    if((iHigh(NULL, i, 0) == 0) || 
       (iLow (NULL, i, 0) == 0) ||
       (iTime(NULL, i, 0) == 0)) {
     
      f = true;
    }
  }
  
  if(f == true) {
    abort("Íå âñå äàííûå òàéìôðåéìîâ ïîäãðóæåíû.");
  }
  
  return(0);
}

// Òî÷êà âõîäà.
int start() {
  int    i;
  double pr_h_border, pr_l_border, nx_h_border, nx_l_border;
  double i_high_i, i_low_i;

  // Èçâåñòíûå ãðàíèöû äâèæåíèÿ öåíû.
  double known_high, known_low;

  // Óäàëåíèå ñòàðûõ ëèíèé óðîâíåé.
  for(i = ObjectsTotal() - 1; i >= 0; i--) {
    if(StringSubstr(ObjectName(i), 0, StringLen(PREFIX)) == PREFIX) {
      ObjectDelete(ObjectName(i));
    }
  }
  
  // Ïðîâåðêà ñóùåñòâîâàíèÿ îáúåêòà äëÿ âûáîðà äàòû.
  if(ObjectFind(CONTROL_NAME) == -1) {
    ObjectCreate(CONTROL_NAME, OBJ_VLINE, 0, Time[0], Bid);
    ObjectSet(CONTROL_NAME, OBJPROP_COLOR, DarkViolet);
    
    return(0);
  } 
  
  // Âðåìÿ ïåðâîãî áàðà.
  date_end = ObjectGet(CONTROL_NAME, OBJPROP_TIME1);
    
  // Ïåðâîíà÷àëüíûå ãðàíèöû.
  pr_h_border = iHigh(NULL, PERIOD_MN1, iHighest(NULL, PERIOD_MN1, MODE_HIGH)) + 1;
  pr_l_border = iLow (NULL, PERIOD_MN1, iLowest (NULL, PERIOD_MN1, MODE_LOW )) - 1;
  nx_h_border = pr_h_border;
  nx_l_border = pr_l_border;
  
  // Ïðàâàÿ ãðàíèöà ïåðâîãî áàðà âñåõ òàéìôðåéìîâ.
  int bar_end = iBarShift(NULL, 0, date_end);
  
  // Ïðîõîä ïî òàéìôðåéìàì.
  for(current_period = PERIOD_MN1; current_period >= Period(); 
    current_period = next_period(current_period)) {

    // Âû÷èñëåíèå ïåðâîíà÷àëüíî èçâåñòíûõ ãðàíèö äâèæåíèÿ.
    known_high = High[bar_end];
    known_low  = Low [bar_end];
    
    int bar_start = iBarShift(NULL, 0, iTime(NULL, current_period, 
      iBarShift(NULL, current_period, date_end)));
      
    for(i = bar_end + 1; i <= bar_start; i++) {
      if(High[i] > known_high) known_high = High[i];
      if(Low [i] < known_low ) known_low  = Low [i];
    }

    // Òåêóùèé öâåò.
    current_color = calc_color(current_period);
    
    // Ïðîõîä ïî áàðàì çàäàííîãî òàéìôðåéìà.
    for(i = iBarShift(NULL, current_period, date_end) + 1; 
      i < iBars(NULL, current_period) - 1; i++) {
      
      i_high_i = i_high(i);
      i_low_i  = i_low (i);
      
      // Ðàññìàòðèâàåì òîëüêî íîâûå ìàêñèìóìû.
      if(i_high_i > known_high) {
        // Òåïåðü ýòî - íîâûé ìàêñèìóì.
        known_high = i_high_i;
        
        // Ñëåâà ìåíüøåå çíà÷åíèå è ìû âíóòðè çàäàííûõ ãðàíèö.
        if((i_high_i > i_high(i + 1)) && (i_high_i < pr_h_border)) {
          // Ïåðâûé ìàêñèìóì áóäåò ãðàíèöåé ñëåäóþùåãî òàéìôðåéìà.
          if(i_high_i < nx_h_border) {
            nx_h_border = i_high_i;
          }
      
          // Îòðèñîâûâàåì óðîâåíü.
          create_line(i_high_i, i);
        }
      }

      // Ðàññìàòðèâàåì òîëüêî íîâûå ìèíèìóìû.
      if(i_low_i < known_low) {
        // Òåïåðü ýòî - íîâûé ìèíèìóì.
        known_low = i_low_i;
        
        // Ñëåâà áîëüøåå çíà÷åíèå è ìû âíóòðè çàäàííûõ ãðàíèö.
        if((i_low_i < i_low(i + 1)) && (i_low_i > pr_l_border)) {
          // Ïåðâûé ìèíèìóì áóäåò ãðàíèöåé ñëåäóþùåãî òàéìôðåéìà.
          if(i_low_i > nx_l_border) {
            nx_l_border = i_low_i;
          }
      
          // Îòðèñîâûâàåì óðîâåíü.
          create_line(i_low_i, i);
        }
      }
    }
    
    // Íîâûå ãðàíèöû äëÿ ñëåäóþùåãî òàéìôðåéìà.
    pr_h_border = nx_h_border;
    pr_l_border = nx_l_border;
  }
  
  return(0);
}

// Ñëåäóþùèé îáðàáàòûâàåìûé ïåðèîä.
int next_period(int current_period) {
  switch(current_period) {
    case PERIOD_MN1 : return(PERIOD_W1);
    case PERIOD_W1  : return(PERIOD_D1);
    case PERIOD_D1  : return(PERIOD_H4);
    case PERIOD_H4  : return(PERIOD_H1);
    case PERIOD_H1  : return(PERIOD_M30);
    case PERIOD_M30 : return(PERIOD_M15);
    case PERIOD_M15 : return(PERIOD_M5);
    case PERIOD_M5  : return(PERIOD_M1);
  }
  
  return(PERIOD_MN1);
}

// Âû÷èñëåíèå òåêóùåãî öâåòà.
color calc_color(int current_period) {
  switch(current_period) {
    case PERIOD_MN1 : return(COLOR_MN1);
    case PERIOD_W1  : return(COLOR_W1);
    case PERIOD_D1  : return(COLOR_D1);
    case PERIOD_H4  : return(COLOR_H4);
    case PERIOD_H1  : return(COLOR_H1);
  }
  
  return(Black);
}

// Îá¸ðòêà iHigh().
double i_high(int bar) {
  return(iHigh(NULL, current_period, bar));
}

// Îá¸ðòêà iLow().
double i_low(int bar) {
  return(iLow(NULL, current_period, bar));
}

// Îá¸ðòêà iTime().
datetime i_time(int bar) {
  return(iTime(NULL, current_period, bar));
}

// Ñîçäàíèå ëèíèè óðîâíÿ.
void create_line(double price, int bar) {
  string name = PREFIX + period_to_str(current_period) + 
    "_" + DoubleToStr(price, Digits);

  if(is_object_exists(price) == false) {
    ObjectCreate(name, OBJ_TREND, 0, 
      i_time(bar), price, date_end, price);
    ObjectSet(name, OBJPROP_RAY,   0);
    ObjectSet(name, OBJPROP_COLOR, current_color);
    
    int p, f = 0;
    
    for(p = current_period; p >= Period(); p = next_period(p)) {
      f |= period_to_object_period(p);
    }

    ObjectSet(name, OBJPROP_TIMEFRAMES, f);
  }
}

// Ïðîâåðêà ñóùåñòâîâàíèÿ çàäàííîãî îáúåêòà.
bool is_object_exists(double price) {
  int    i;
  string n;
  
  for(i = ObjectsTotal() - 1; i >= 0; i--) {
    n = ObjectName(i);
    
    if((StringSubstr(n, 0, StringLen(PREFIX)) == PREFIX   ) && 
       (ObjectType(n)                         == OBJ_TREND) &&  
       (ObjectGet(n, OBJPROP_PRICE1)          == price    )) {
       
      return(true);
    }
  }
  
  return(false);
}

// Ïðåîáðàçîâàíèå êîíñòàíòû ïåðèîäà â êîíñòàíòû äëÿ ñîêðûòèÿ îáúåêòà.
int period_to_object_period(int period) {
  switch(period) {
    case PERIOD_MN1 : return(OBJ_PERIOD_MN1);
    case PERIOD_W1  : return(OBJ_PERIOD_W1);
    case PERIOD_D1  : return(OBJ_PERIOD_D1);
    case PERIOD_H4  : return(OBJ_PERIOD_H4);
    case PERIOD_H1  : return(OBJ_PERIOD_H1);
    case PERIOD_M30 : return(OBJ_PERIOD_M30);
    case PERIOD_M15 : return(OBJ_PERIOD_M15);
    case PERIOD_M5  : return(OBJ_PERIOD_M5);
    case PERIOD_M1  : return(OBJ_PERIOD_M1);
  }
  
  return(-1);
}

// Àâàðèéíîå çàâåðøåíèå ïðîãðàììû.
void abort(string message = "") {
  string msg = "*** Abnormal program termination ***";
  
  if(message != "") {
    msg = msg + "\n" + message;
  }
  
  Alert(msg);
  
  int x = 0;
  msg = "" + 10 / x;
}

// Ôîðìèðîâàíèå èç öèôðû ïåðèîäà â ìèíóòàõ ñòðîêè òèïà "H1".
string period_to_str(int period = 0) {
  if(period == 0) period = Period();
  
  if(period % PERIOD_MN1 == 0) {
    return("MN" + (period / PERIOD_MN1));
  }

  if(period % PERIOD_W1 == 0) {
    return("W" + (period / PERIOD_W1));
  }

  if(period % PERIOD_D1 == 0) {
    return("D" + (period / PERIOD_D1));
  }
  
  if(period % PERIOD_H1 == 0) {
    return("H" + (period / PERIOD_H1));
  }

  return("M" + period);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---