Author: CRamdass - Conversion only
NRTR_NK
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
NRTR_NK
//+------------------------------------------------------------------+
//|                                          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);
  }
//+---------------------------------------------------------------------------------------------------------------------------+

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 ---