Price Data Components
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---