#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