Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
SnakeForce
//+------------------------------------------------------------------+
//| SnakeInBorders.mq4 |
//| "ÈÍÄÈÊÀÒÎÐÛ ÄËß ÑÀÌÎÎÁÌÀÍÀ" |
//| Bookkeeper, 2006, yuzefovich@gmail.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
//----
extern int cPeriod=24;
//----
double ForceUp[];
double ForceDown[];
double ResistanceUp[];
double ResistanceDown[];
double Mart[];
//----
double Snake_Sum, Snake_Weight, Snake_Sum_Minus, Snake_Sum_Plus;
//----
int init()
{
int draw_begin;
double indperiod,val1,val2;
string CommentStr;
draw_begin=3*cPeriod;
IndicatorBuffers(5);
SetIndexBuffer(0,ForceUp);
SetIndexBuffer(1,ForceDown);
SetIndexBuffer(2,ResistanceUp);
SetIndexBuffer(3,ResistanceDown);
SetIndexBuffer(4,Mart);
SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);
SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,2);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexStyle(4,DRAW_NONE);
SetIndexLabel(2,NULL);
SetIndexLabel(3,NULL);
SetIndexLabel(4,NULL);
SetIndexDrawBegin(0,draw_begin);
SetIndexDrawBegin(1,draw_begin);
SetIndexDrawBegin(2,draw_begin);
SetIndexDrawBegin(3,draw_begin);
SetIndexDrawBegin(4,draw_begin);
indperiod=1.0*cPeriod*Period();
if(indperiod<60)
{
CommentStr=DoubleToStr(indperiod,0);
CommentStr=" M"+CommentStr+", FORCE UP -DOWN ";
}
else
{
indperiod=indperiod/60;
if(indperiod>=24)
{
val1=MathAbs(MathRound(indperiod/24)-indperiod/24);
if(val1<0.01)
{
CommentStr=DoubleToStr(indperiod/24,0);
CommentStr=" D"+CommentStr+", FORCE UP -DOWN ";
}
else
{
CommentStr=DoubleToStr(indperiod/24,1);
CommentStr=" D"+CommentStr+", FORCE UP -DOWN ";
}
}
else
{
val1=MathAbs(MathRound(indperiod)-indperiod);
if(val1<0.01)
{
CommentStr=DoubleToStr(indperiod,0);
CommentStr=" H"+CommentStr+", FORCE UP -DOWN ";
}
else
{
CommentStr=DoubleToStr(indperiod,1);
CommentStr=" H"+CommentStr+", FORCE UP -DOWN ";
}
}
}
IndicatorShortName("SnakeInBorders"+CommentStr);
return(0);
}
//----
void deinit()
{
}
//----
int start()
{
int FirstPos, ExtCountedBars=0,i;
if(Bars<=50) return(0);
if(cPeriod<21) return(0);
ExtCountedBars=IndicatorCounted();
if (ExtCountedBars<0) return(-1);
if (ExtCountedBars>0) ExtCountedBars--;
FirstPos=Bars-ExtCountedBars-1;
if(FirstPos>Bars-cPeriod-7)
{
FirstPos=Bars-cPeriod-7;
Mart[FirstPos+cPeriod]=SnakeFirstCalc(FirstPos+cPeriod);
for(i=FirstPos+cPeriod-1;i>FirstPos;i--) SnakeNextCalc(i);
}
Snake(FirstPos);
return(0);
}
//----
void Snake(int Pos)
{
int i;
if(Pos<6) Pos=6;
Mart[Pos]=SnakeFirstCalc(Pos);
Drawing(Pos);
Pos--;
while(Pos>=5)
{
Mart[Pos]=SnakeNextCalc(Pos);
Drawing(Pos);
Pos--;
}
while(Pos>0)
{
Mart[Pos]=SnakeFirstCalc(Pos);
Drawing(Pos);
Pos--;
}
if(Pos==0)
{
// Mart[Pos]=iMA(NULL,0,6,0,MODE_LWMA,PRICE_TYPICAL,0);
Mart[Pos]=iMA(NULL,0,6,0,MODE_LWMA,PRICE_CLOSE,0);
Drawing(Pos);
}
return;
}
//----
double SnakePrice(int Shift)
{
// return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
return(Close[Shift]);
}
//----
double SnakeFirstCalc(int Shift)
{
int i, j, w;
Snake_Sum=0.0;
if(Shift<5)
{
Snake_Weight=0.0;
i=0;
w=Shift+5;
while(w>=Shift)
{
i++;
Snake_Sum=Snake_Sum+i*SnakePrice(w);
Snake_Weight=Snake_Weight+i;
w--;
}
while(w>=0)
{
i--;
Snake_Sum=Snake_Sum+i*SnakePrice(w);
Snake_Weight=Snake_Weight+i;
w--;
}
}
else
{
Snake_Sum_Minus=0.0;
Snake_Sum_Plus=0.0;
for(j=Shift-5,i=Shift+5,w=1; w<=5; j++,i--,w++)
{
Snake_Sum=Snake_Sum+w*(SnakePrice(i)+SnakePrice(j));
Snake_Sum_Minus=Snake_Sum_Minus+SnakePrice(i);
Snake_Sum_Plus=Snake_Sum_Plus+SnakePrice(j);
}
Snake_Sum=Snake_Sum+6*SnakePrice(Shift);
Snake_Sum_Minus=Snake_Sum_Minus+SnakePrice(Shift);
Snake_Weight=36;
}
return(Snake_Sum/Snake_Weight);
}
//----
double SnakeNextCalc(int Shift)
{
Snake_Sum_Plus=Snake_Sum_Plus+SnakePrice(Shift-5);
Snake_Sum=Snake_Sum-Snake_Sum_Minus+Snake_Sum_Plus;
Snake_Sum_Minus=Snake_Sum_Minus-SnakePrice(Shift+6)+SnakePrice(Shift);
Snake_Sum_Plus=Snake_Sum_Plus-SnakePrice(Shift);
return(Snake_Sum/Snake_Weight);
}
//----
void Drawing(int Shift)
{
double val,Dval,val1,val2,val11,val22,val3;
val= 5*(Mart[Shift]-Mart[ArrayMinimum(Mart,cPeriod,Shift)])/9;
Dval=5*(Mart[Shift]-
Mart[Shift+1]+
Mart[ArrayMinimum(Mart,cPeriod,Shift+1)]-
Mart[ArrayMinimum(Mart,cPeriod,Shift)] )/9;
if(Dval>0)
{
ForceUp[Shift]=val;
ResistanceUp[Shift]=0;
}
else
{
ForceUp[Shift]=0;
ResistanceUp[Shift]=val;
}
val= 5*(Mart[Shift]-Mart[ArrayMaximum(Mart,cPeriod,Shift)])/9;
Dval=5*(Mart[Shift]-
Mart[Shift+1]+
Mart[ArrayMaximum(Mart,cPeriod,Shift+1)]-
Mart[ArrayMaximum(Mart,cPeriod,Shift)] )/9;
if(Dval<0)
{
ForceDown[Shift]=val;
ResistanceDown[Shift]=0;
}
else
{
ForceDown[Shift]=0;
ResistanceDown[Shift]=val;
}
return;
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---