SnakeInBorders

Author:
SnakeInBorders
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
SnakeInBorders
//+------------+-----------------------------------------------------+
//| 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;
   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 ---