SnakeInBorders_v1

Author:
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
SnakeInBorders_v1
//+------------+-----------------------------------------------------+
//| v.11.09.06 |                                  SnakeInBorders.mq4 |
//+------------+                                   "ÔÈËÜÒÐÓÉ ÁÀÇÀÐ!" |
//|  Êîìïëåêò  |              Bookkeeper, 2006, yuzefovich@gmail.com |
//+------------------------------------------------------------------+
//|  Snake ðàññ÷èòûâàåò êîðèäîð îòôèëüòðîâàííîãî ðûíêà, îãðàíè÷åííûé |
//|  äâóìÿ áîðäþðàìè BorderTop[] è BorderBot[], è ñèãíàëüíóþ Mart[]. |
//|                                                                  |
//|  Âíåøíèå ïåðåìåííûå:                                             |
//|  SnakeRange - ïîëóïåðèîä ðàñ÷åòà îñè Snake'à Axis[] - îïòèìàëüíî |
//|  = 4;                                                            |
//|  FilterPeriod - ïåðèîä ôèëüòðàöèè. ( îïòèìàëüíî áîëüøå 13);      |
//|  MartFiltr - êîýôôèöèåíò ôèëüòðàöèè ðûíêà. ×åì MartFiltr áîëüøå, |
//|  òåì óæå êîðèäîð îòôèëüòðîâàííîãî ðûíêà. Êîýôôèöèåíò íàäî        |
//|  ïîäáèðàòü, ïî óìîë÷àíèþ = 2;                                    |
//|  Ó Snake'à äâà ðåæèìà: HardCalc = true - íå ïåðåñ÷èòûâàòü, è     |
//|  = false - ïåðåñ÷èòûâàòü çíà÷åíèÿ Axis[Pos]...[Pos+SnakeRange+1].|
//|  Ïîâåäåíèå ñèãíàëüíîé Mart[] âíóòðè êîðèäîðà:                    |
//|  Ïðè äâèæåíèè ðûíêà ââåðõ - ñèãíàëüíàÿ îòõîäèò îò íèæíåãî        |
//|  áîðäþðà, ïåðåñåêàåò êîðèäîð è ñëèâàåòñÿ ñ âåðõíèì áîðäþðîì.     |
//|  Àíàëîãè÷íî, ñ òî÷íîñòüþ äî íàîáîðîò, - ïðè äâèæåíèè ðûíêà âíèç. |
//|  Äî òåõ ïîð, ïîêà ðûíîê áóäåò äâèãàòüñÿ íàïðàâëåííî, ñèãíàëüíàÿ  |
//|  áóäåò "äåðæàòüñÿ" ñîîòâåòñòâóþùåé ãðàíèöû êîðèäîðà. Ïðè ýòîì    |
//|  óâåëè÷åíèå øèðèíû êîðèäîðà îçíà÷àåò íàïðàâëåííîå äâèæåíèå. Ïðè  |
//|  êîëåáàíèÿõ ðûíêà êîðèäîð íà÷èíàåò ñóæàòüñÿ. Ñóæåíèåì êîðèäîðà   |
//|  ñîïðîâîæäàåòñÿ äâèæåíèåì ñèãíàëüíîé îò îäíîé ãðàíèöû ê äðóãîé   |
//|  âíóòðè êîðèäîðà, ïîñëå äîñòèæåíèÿ ïðîòèâîïîëîæíîé ãðàíèöû -     |
//|  êîðèäîð íà÷íåò ðàñøèðÿòüñÿ.                                     |
//|  Snake ìîæíî èñïîëüçîâàòü êàê ñàìîñòîÿòåëüíî, ñðàâíèâàÿ äâèæåíèå |
//|  ñèãíàëüíîé íà ðàçíûõ ÒÔ îäíîâðåìåííî, òàê è äëÿ ïîñòðîåíèÿ      |
//|  äðóãèõ èíäèêàòîðîâ, èñïîëüçóÿ Mart[] âìåñòî öåíû áàðà. Äëÿ      |
//|  èíäèêàòîðîâ òèïà MA, OA, AC,.. èñïîëüçîâàòü HardCalc = true, à  |
//|  äëÿ èíäèêàòîðîâ òèïà ZigZag, Channel,.. - HardCalc = false, à   |
//|  çíà÷åíèå MartFiltr ïîäáèðàòü îò 3...5. Ïðè ýòîì ìîæíî îòñåèâàòü | 
//|  èñòèííûå è ëîæíûå âåðøèíû: åñëè âåðøèíà ïðîìåæóòî÷íàÿ,          | 
//|  ñèãíàëüíàÿ Mart[] íå áóäåò ñîâïàäàòü ñ áîðäþðîì.                |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "yuzefovich@gmail.com"
//----
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1  Red
#property indicator_color2  Red
#property indicator_color3  Blue
//----
extern int    SnakeRange   = 2;
extern int    FilterPeriod = 24;
extern double MartFiltr    = 2;
extern bool   HardCalc     = true;
//----
double BorderTop[];
double BorderBot[];
double Mart[];
double Axis[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deinit()
  {
   Comment("");
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   int draw_begin;
   draw_begin=FilterPeriod+SnakeRange+2;
   IndicatorBuffers(4);
   SetIndexBuffer(0,BorderTop);
   SetIndexBuffer(1,BorderBot);
   SetIndexBuffer(2,Mart);
   SetIndexBuffer(3,Axis);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE,0,2);
   SetIndexDrawBegin(0,draw_begin);
   SetIndexDrawBegin(1,draw_begin);
   SetIndexDrawBegin(2,draw_begin);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int limit,i;
   if(counted_bars<0)
      return(-1);
   if(Bars<=(FilterPeriod+SnakeRange+2))
      return(0);
   if(SnakeRange<4)
      SnakeRange=4;
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;
   if(counted_bars==0) limit-=(2*SnakeRange+3);
   for(i=limit; i>=0; i--)
      MainCalculation(i);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MainCalculation(int Pos)
  {
   int v;
   MartAxis(Pos);
   if(HardCalc==true)
      SmoothOverMart2(Pos);
   else
      SmoothOverMart(Pos);
//----
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MartAxis(int Pos)
  {
   int    SnakeWeight,i,w,ww,Shift;
   double SnakeSum;
   Axis[Pos] = iMA(NULL, 0, SnakeRange + 1, 0, MODE_LWMA, PRICE_WEIGHTED, Pos);
   for(Shift = Pos + SnakeRange + 2; Shift > Pos; Shift--)
     {
      SnakeSum=0.0;
      SnakeWeight=0;
      i = 0;
      w = Shift + SnakeRange;
      ww= Shift-SnakeRange;
      if(ww<Pos)
         ww=Pos;
      while(w>=Shift)
        {
         i++;
         SnakeSum=SnakeSum+i*SnakePrice(w);
         SnakeWeight=SnakeWeight+i;
         w--;
        }
      while(w>=ww)
        {
         i--;
         SnakeSum=SnakeSum+i*SnakePrice(w);
         SnakeWeight=SnakeWeight+i;
         w--;
        }
      Axis[Shift]=SnakeSum/SnakeWeight;
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double SnakePrice(int Shift)
  {
   return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SmoothOverMart(int Pos)
  { // Ïðàâèì èñòîðèþ íà ïîñëåäíèõ Pos...(Pos+SnakeRange+2) áàðàõ
   int    Shift;
   double a,t,b;
   for(Shift=Pos+SnakeRange+2; Shift>=Pos; Shift--)
     {
      t = Axis[ArrayMaximum(Axis, FilterPeriod, Shift)];
      b = Axis[ArrayMinimum(Axis, FilterPeriod, Shift)];
      a = Axis[Shift];
      BorderTop[Shift] = (2*(1 + MartFiltr)*a + (t - b)) / 2 / (1 + MartFiltr);
      BorderBot[Shift] = (2*(1 + MartFiltr)*a - (t - b)) / 2 / (1 + MartFiltr);
      Mart[Shift]=(2*(2+MartFiltr)*a -(t+b))/2/(1+MartFiltr);
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SmoothOverMart2(int Shift)
  { // Íå ïîäïðàâëÿåì èñòîðèþ íà ïîñëåäíèõ áàðàõ
   double a,t,b;
   t = Axis[ArrayMaximum(Axis, FilterPeriod, Shift)];
   b = Axis[ArrayMinimum(Axis, FilterPeriod, Shift)];
   a = Axis[Shift];
   BorderTop[Shift] = (2*(1 + MartFiltr)*a + (t - b))/2/(1 + MartFiltr);
   BorderBot[Shift] = (2*(1 + MartFiltr)*a - (t - b))/2/(1 + MartFiltr);
   Mart[Shift]=(2*(2+MartFiltr)*a -(t+b))/2/(1+MartFiltr);
   return;
  }
//---------------------------------------------------------------------

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