//+------------------------------------------------------------------+ //| Version July 20, 2006 | //| Editing Nikolay Kositsin 15.06.2006 farria@mail.redcom.ru | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| NRTR.mq4 | //| Ramdass - Conversion only | //+------------------------------------------------------------------+ #property copyright "CRamdass - Conversion only" #property link "" //---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå #property indicator_chart_window //---- êîëè÷åñòâî èíäèêàòîðíûõ áóôôåðîâ #property indicator_buffers 2 //---- öâåòà èíäèêàòîðà #property indicator_color1 Blue #property indicator_color2 Red //---- òîëùèíà èíäèêàòîðíûõ ëèíèé #property indicator_width1 1 #property indicator_width2 1 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ extern int AveragePeriod = 10; //---- èíäèêàòîðíûå áóôôåðû double Ind_Buffer1[]; double Ind_Buffer2[]; //+------------------------------------------------------------------+ //| NRTR initialization function | //+------------------------------------------------------------------+ int init() { //---- 2 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà SetIndexBuffer(0, Ind_Buffer1); SetIndexBuffer(1, Ind_Buffer2); //---- Ñòèëü èñïîëíåíèÿ ãðàôèêà SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(0, 159); SetIndexArrow(1, 159); //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); //---- èìÿ äëÿ îêîí äàííûõ è ëýéáà äëÿ ñóáúîêîí SetIndexLabel(0, "NRTRUp(" + AveragePeriod + ")"); SetIndexLabel(1, "NRTRDown(" + AveragePeriod + ")"); //---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ èíäèêàòîð SetIndexDrawBegin(0,AveragePeriod); SetIndexDrawBegin(1,AveragePeriod); //---- Óñòàíîâêà ôîðìàòà òî÷íîñòè (êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè) // äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà IndicatorDigits(Digits); //---- çàâåðøåíèå èíèöèàëèçàöèè return(0); } //+------------------------------------------------------------------+ //| NRTR | //+------------------------------------------------------------------+ int start() { //---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà if(Bars <= AveragePeriod) return(0); //---- ââåäåíèå ïåðåìåííûõ ïàìÿòè static double PRICE,RESALT; static bool TREND; static int time2; //----+ Ââåäåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé double Resalt, close, open, dK, AvgRange, price, NewVel; //---- ââåäåíèå ëîãè÷åñêèõ ïåðåìåííûõ bool trend; //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ int bar, MaxBar, limit, counted_bars = IndicatorCounted(); //---- ïðîâåðêà íà âîçìîæíûå îøèáêè if(counted_bars < 0) return(-1); //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí if(counted_bars > 0) counted_bars--; //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò // ïðîèçâåä¸í ïîëíûé ïåðåñ÷¸ò âñåõ áàðîâ MaxBar = Bars - 1 - AveragePeriod; //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò // ïðîèçåä¸í ïåðåñ÷¸ò òîëüêî íîâûõ áàðîâ limit = Bars - 1 - counted_bars; //+--- âîññòàíîâëåíèå çíà÷åíèé ïåðåìåííûõ int Tnew = Time[limit + 1]; if(limit < MaxBar) if(Tnew == time2) { price = PRICE; trend = TREND; Resalt = RESALT; } else { if(Tnew > time2) Print("ERROR01"); else Print("ERROR02"); return(-1); } //---- èíèöèàëèçàöèÿ íóëÿ if(limit >= MaxBar) { for(int iii = 0; iii < AveragePeriod; iii++) { Ind_Buffer1[MaxBar-iii] = 0.0; Ind_Buffer2[MaxBar-iii] = 0.0; limit = MaxBar - AveragePeriod; } //---- AvgRange = 0; for(int jjj = AveragePeriod - 1; jjj >= 0; jjj--) AvgRange += MathAbs(High[MaxBar+jjj] - Low[MaxBar+jjj]); dK = AvgRange / (AveragePeriod*10000*Point ); close = Close[MaxBar]; open = Open [MaxBar]; price = close; //---- if(close > open) { Resalt = close * (1 - dK); trend = true; } //---- if(close < open) { Resalt = close * (1 + dK); trend = false; } if(trend) Ind_Buffer1[MaxBar] = Resalt; if(!trend) Ind_Buffer2[MaxBar] = Resalt; } //----+ îñíîâíîé öèêë ðàñ÷¸òà èíäèàòîðà bar = limit; while(bar >= 0) { //+--- Ñîõðàíåíèå çíà÷åíèé ïåðåìåííûõ if(bar == 1) if(((limit == 1) && (time2 == Time[2])) || (limit > 1)) { time2 = Time[2]; PRICE = price; TREND = trend; RESALT = Resalt; } //+---+==========================================+ AvgRange = 0; for(int kkk = AveragePeriod-1; kkk >= 0; kkk--) AvgRange += MathAbs(High[bar+kkk] - Low[bar+kkk]); dK = AvgRange / (AveragePeriod*10000*Point ); close = Close[bar]; Ind_Buffer1[bar] = 0; Ind_Buffer2[bar] = 0; //---- if(trend) { if(close > price) { price = close; NewVel = close * (1 - dK); if(NewVel > Resalt) Resalt=NewVel; } else if(close < Resalt) { price = close; Resalt = close * (1 + dK); trend = false; } } //---- if(!trend) { if(close < price) { price = close; NewVel = close * (1 + dK); if(NewVel < Resalt) Resalt=NewVel; } else if(close > Resalt) { price = close; Resalt = close * (1 - dK); trend = true; } } //---- if(trend) Ind_Buffer1[bar] = Resalt; if(!trend) Ind_Buffer2[bar] = Resalt; bar--; } //----+ çàâåðøåíèå îñíîâíîãî öèêëà return(0); } //+---------------------------------------------------------------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_ARROW
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: