PriceChannel_Stop_NK

Author: Copyright � 2005, TrendLaboratory Ltd.
PriceChannel_Stop_NK
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
PriceChannel_Stop_NK
//+------------------------------------------------------------------+
//|                                          Version  July 1, 2006   |
//|  Editing   Nikolay Kositsin  15.06.2006  farria@mail.redcom.ru   |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                          PriceChannel_Stop.mq4   | 
//|                         Copyright © 2005, TrendLaboratory Ltd.   | 
//|                                     E-mail: igorad2004@list.ru   | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright © 2005, TrendLaboratory Ltd." 
#property link "E-mail: igorad2004@list.ru" 
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôôåðîâ
#property indicator_buffers 6 
//---- öâåòà èíäèêàòîðà
#property indicator_color1 Brown 
#property indicator_color2 Magenta
#property indicator_color3 Lime 
#property indicator_color4 Red 
#property indicator_color5 Lime 
#property indicator_color6 Red  
//---- òîëùèíà èíäèêàòîðíûõ ëèíèé
#property indicator_width1 0
#property indicator_width2 0
#property indicator_width3 2
#property indicator_width4 2
#property indicator_width5 0
#property indicator_width6 0
//---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ ----+ 
extern int ChannelPeriod = 5; 
extern double       Risk = 0.10; 
extern bool       Signal = true;
extern bool         Line = true; 
//---- ---------------------------------+
//---- èíäèêàòîðíûå áóôôåðû
double UpTrendBuffer  []; 
double DownTrendBuffer[]; 
double UpTrendSignal  []; 
double DownTrendSignal[]; 
double UpTrendLine    []; 
double DownTrendLine  [];  
//+------------------------------------------------------------------+
//| PriceChannel_Stop initialization function                        | 
//+------------------------------------------------------------------+
int init() 
  { 
    string short_name; 
//---- 6 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà
    SetIndexBuffer(0, UpTrendBuffer); 
    SetIndexBuffer(1, DownTrendBuffer); 
    SetIndexBuffer(2, UpTrendSignal); 
    SetIndexBuffer(3, DownTrendSignal); 
    SetIndexBuffer(4, UpTrendLine); 
    SetIndexBuffer(5, DownTrendLine); 
//---- Ñòèëü èñïîëíåíèÿ ãðàôèêà
    SetIndexStyle(0, DRAW_ARROW); 
    SetIndexStyle(1, DRAW_ARROW); 
    SetIndexStyle(2, DRAW_ARROW); 
    SetIndexStyle(3, DRAW_ARROW); 
    SetIndexStyle(4, DRAW_LINE); 
    SetIndexStyle(5, DRAW_LINE); 
    SetIndexArrow(0, 159); 
    SetIndexArrow(1, 159); 
    SetIndexArrow(2, 108); 
    SetIndexArrow(3, 108); 
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
    SetIndexEmptyValue(0, 0.0);
    SetIndexEmptyValue(1, 0.0);
    SetIndexEmptyValue(2, 0.0);
    SetIndexEmptyValue(3, 0.0);
    SetIndexEmptyValue(4, 0.0);
    SetIndexEmptyValue(5, 0.0);
//---- èìÿ äëÿ îêîí äàííûõ è ëýéáà äëÿ ñóáúîêîí
    short_name = "PriceChannel_Stop_v1("+ChannelPeriod+")"; 
    IndicatorShortName(short_name); 
    SetIndexLabel(0, "UpTrend Stop"); 
    SetIndexLabel(1, "DownTrend Stop"); 
    SetIndexLabel(2, "UpTrend Signal"); 
    SetIndexLabel(3, "DownTrend Signal"); 
    SetIndexLabel(4, "UpTrend Line"); 
    SetIndexLabel(5, "DownTrend Line"); 
//---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ èíäèêàòîð 
    SetIndexDrawBegin(0, ChannelPeriod); 
    SetIndexDrawBegin(1, ChannelPeriod); 
    SetIndexDrawBegin(2, ChannelPeriod); 
    SetIndexDrawBegin(3, ChannelPeriod); 
    SetIndexDrawBegin(4, ChannelPeriod); 
    SetIndexDrawBegin(5, ChannelPeriod); 
//---- Óñòàíîâêà ôîðìàòà òî÷íîñòè (êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè) äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà  
    IndicatorDigits(Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
    return(0); 
  }
//+------------------------------------------------------------------+
//| PriceChannel_Stop                                                | 
//+------------------------------------------------------------------+
int start() 
  { 
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
    if(Bars - 1 < ChannelPeriod + 1)
        return(0);
//----+ Ââåäåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
    double bsmax[1], bsmin[1], high, low, price, dprice; 
//---- ââåäåíèå ïåðåìåííûõ ïàìÿòè  
    static int time2, TREND;
    static double BSMAX, BSMIN;
//----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ
    int trend, MaxBar, bar, limit, ii, counted_bars = IndicatorCounted();
//---- ïðîâåðêà íà âîçìîæíûå îøèáêè
    if(counted_bars < 0)
        return(-1);
//---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí 
    if(counted_bars > 0) 
        counted_bars--;
//---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ 
    MaxBar = Bars - 1 - ChannelPeriod - 1;
    limit = Bars - counted_bars - 1; 
//---- èíèöèàëèçàöèÿ íóëÿ
    if(limit > MaxBar)
      {
        for(bar = limit; bar >= MaxBar; bar--) 
          { 
            UpTrendBuffer  [bar] = 0.0; 
            DownTrendBuffer[bar] = 0.0; 
            UpTrendSignal  [bar] = 0.0; 
            DownTrendSignal[bar] = 0.0; 
            UpTrendLine    [bar] = 0.0; 
            DownTrendLine  [bar] = 0.0; 
          } 
       limit=MaxBar;
      }
//---- èçìåíåíèå ðàçìåðîâ âðåìåííûõ áóôôåðîâ 
    if(ArrayResize(bsmax, limit + 2) != limit + 2)
        return(-1);
    if(ArrayResize(bsmin, limit + 2) != limit + 2)
        return(-1);
//---- ïðåäâàðèòåëüíûé öèêë ðàñ÷¸òà âðåìåííûõ áóôôåðîâ 
    for(bar = limit; bar >= 0; bar--) 
      { 
        high = High[bar]; 
        low = Low[bar]; 
        ii = bar - 1 + ChannelPeriod; 
        while(ii >= bar) 
          { 
            price = High[ii]; 
            //----
            if(high < price) 
                high = price; 
            price = Low[ii]; 
            //----
            if(low > price) 
                low = price; 
            ii--; 
          } 
        dprice = (high - low)*Risk;
        bsmax[bar] = high - dprice; 
        bsmin[bar] = low + dprice;
      }
//+--- âîññòàíîâëåíèå çíà÷åíèé ïåðåìåííûõ +======+
    int Tnew = Time[limit+1];
    if(limit < MaxBar)
      if(Tnew == time2)
        {
          bsmax[limit+1] = BSMAX;
          bsmin[limit+1] = BSMIN;
          trend = TREND;
        } 
      else 
        {
          if(Tnew > time2)
              Print("ERROR01");
          else 
              Print("ERROR02");
          return(-1);  
       }
//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
    for(bar = limit; bar >= 0; bar--) 
      { 
        //+--- Ñîõðàíåíèå çíà÷åíèé ïåðåìåííûõ +====+ 
        if(bar == 1)
            if(((limit == 1) && (time2 == Time[2])) || (limit > 1))
              {
                time2 = Time [2];
                BSMAX = bsmax[2]; 
                BSMIN = bsmin[2];
                TREND = trend;
              }
        //----
        UpTrendBuffer  [bar] = 0.0; 
        DownTrendBuffer[bar] = 0.0; 
        UpTrendSignal  [bar] = 0.0; 
        DownTrendSignal[bar] = 0.0; 
        UpTrendLine    [bar] = 0.0; 
        DownTrendLine  [bar] = 0.0; 
        //----
        if(Close[bar] > bsmax[bar+1])
            trend = 1; 
        if(Close[bar] < bsmin[bar+1])
            trend = -1; 
        //----
        if(trend > 0 && bsmin[bar] < bsmin[bar+1]) 
            bsmin[bar] = bsmin[bar+1]; 
        if(trend < 0 && bsmax[bar] > bsmax[bar+1]) 
            bsmax[bar] = bsmax[bar+1]; 
        //---- +++
        if(trend > 0) 
          { 
            price = bsmin[bar];
            if(Signal == true && DownTrendBuffer[bar+1] > 0) 
              { 
                UpTrendSignal[bar] = price; 
                if(Line == true) 
                    UpTrendLine[bar] = price; 
              } 
            else 
              { 
                UpTrendBuffer[bar] = price; 
                if(Line == true) 
                    UpTrendLine[bar] = price; 
              }
          }  
        //---- +++
        if(trend < 0) 
          { 
            price = bsmax[bar];
            if(Signal == true && UpTrendBuffer[bar+1] > 0) 
              { 
                DownTrendSignal[bar] = price;
                if(Line == true) 
                    DownTrendLine[bar] = price; 
              } 
            else 
              { 
                DownTrendBuffer[bar] = price;
                if(Line == true) 
                    DownTrendLine[bar] = price;
              } 
          } 
        //---- +++
      } 
//----
    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 ---