Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
iK_trend_v01_6
//+------------------------------------------------------------------+
//| iK_trend_v01.mq4 |
//| Ivan Katsko |
//| ICQ:372739628 |
//+------------------------------------------------------------------+
#property copyright "Ivan Katsko"
#property link "ICQ:372739628"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 DarkViolet
#property indicator_color3 Blue
#property indicator_color4 Green
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
//---- indicator parameters
extern int PeriodMA=3;
extern int History=100;
extern int VerExtr=4;
extern int Flat=4;
extern int TimeFrame=0;
//extern
bool Draw=true;
//---- indicator buffers
double up, upp, min, minmin;
double BuySell;
double SL[];
double TP[];
double Trend[];
double Trade[];
double Delta[];
double DeltaMA[];
bool New_Bar=false;
static datetime New_Time;
//+------------------------------------------------------------------+
int init()
{
New_Time=Time[0];
min=MarketInfo(Symbol(),MODE_SPREAD)*Point;
//----
IndicatorBuffers(6);
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_LINE);
SetIndexDrawBegin(0,VerExtr);
IndicatorDigits(Digits+5);
//----
SetIndexBuffer(0,SL);
SetIndexBuffer(1,TP);
SetIndexBuffer(2,Trend);
SetIndexBuffer(3,Trade);
SetIndexBuffer(4,Delta);
SetIndexBuffer(5,DeltaMA);
//----
if(TimeFrame==0)TimeFrame=Period();
IndicatorShortName("iK_trend_6("+PeriodMA+","/*+History+","*/+VerExtr+","+TimeFrame+")");
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
//Alert("Íà start min=",min/Point);
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
// limit=History;
//---- Ðàçíèöà äâóõ ÌÀ-øåê
for(int i=0; i<limit+PeriodMA; i++)
Delta[i]=iMA(NULL,TimeFrame,PeriodMA,0,MODE_EMA,PRICE_MEDIAN,i)-iMA(NULL,TimeFrame,PeriodMA,0,MODE_EMA,PRICE_MEDIAN,i+1);
//---- Ñðåäíåå çíà÷åíèå ðàçíèöû äâóõ ÌÀ-øåê çà PeriodMA áàð
int j=0;
for(i=0; i<limit; i++)
{
DeltaMA[i]=0;
for (j=i; j<i+PeriodMA; j++) DeltaMA[i]+=MathAbs(Delta[j]);
DeltaMA[i]=DeltaMA[i]/PeriodMA;
}
//---- Ñòðîèì áóôåð òðåíäà
Fun_New_Bar();
if(New_Bar)
{
min=MarketInfo(Symbol(),MODE_SPREAD)*Point;
minmin=0;
}
double index=1.1;
up=1;
while(up<8)
{
// Alert("Íà âõîäå while min=",min/Point," up=",up);
for(i=History; i>=0; i--)
{
if (MathAbs(Delta[i])>0.5*min && Delta[i]>0)
{
Trend[i]=MathRound(Open[1]);
BuySell=1;
}
else
if (MathAbs(Delta[i])>0.5*min && Delta[i]<0)
{
Trend[i]=-MathRound(Open[1]);
BuySell=-1;
}
else
{
Trend[i]=0;
}
if ((BuySell==1 && Delta[i]<0 && MathAbs(Delta[i])>0.33*min)
|| (BuySell==-1 && Delta[i]>0 && MathAbs(Delta[i])>0.33*min))
{
BuySell=0;
}
if (BuySell==1) Trade[i]=MathRound(Open[1])/2;
else
if (BuySell==-1) Trade[i]=-MathRound(Open[1])/2;
else Trade[i]=0;
}
//---- Îïðåäåëèì äëèíó ôëåòà
int flat=0;
j=0;
for(i=1; i<History; i++)
{
if (Trade[i-1]!=0 && Trade[i]==0) {upp=1; j=0;}
if (Trade[i]==0 && upp==1) j++;
if (Trade[i+1]!=0 && Trade[i]==0 && upp==1) upp=0;
if (j>flat) flat=j;
}
//up=0;
up++;
double in_min=min;
for(i=0; i<History; i++)
{
// Alert("Öèêë i=",i," min=",min/Point);
if ((Trade[i]>=0 && Trade[i+1]<0 && Trade[i+2]>=0)
//||(Trade[i]>0 && Trade[i+1]==0 && Trade[i+2]>0)
||(Trade[i]<=0 && Trade[i+1]>0 && Trade[i+2]<=0)
//||(Trade[i]<0 && Trade[i+1]==0 && Trade[i+2]<0)
||flat<Flat
)
{
//up=1;
//minmin=min;
// Alert("Ñëó÷àé íà i=",i," min=",min/Point," DeltaMA[i+1]=",DeltaMA[i+1]/Point);
if(in_min>=DeltaMA[i+1]) index=index*index;
if(min<DeltaMA[i+1]) min=DeltaMA[i+1];
// Alert("Ñòàëî min=",min/Point/*," minmin=",minmin/Point*/);
for(j=0; j<=History; j++)
{
// Alert("Òåïåðü ïðè j=",j," minDeltaMA=",MathMin(DeltaMA[j],DeltaMA[j+1])/Point," control=",min*index/Point);
if(min<MathMin(DeltaMA[j],DeltaMA[j+1])
&& min*index>MathMin(DeltaMA[j],DeltaMA[j+1]))
{
min=MathMin(DeltaMA[j],DeltaMA[j+1]);
break;
}
// Alert("Íàçíà÷åí min=",min/Point);
/*if (min>DeltaMA[j]
&& minmin<DeltaMA[j])
{
min=DeltaMA[j]*1.1;
}
//else {min=minmin; up=0; break;}*/
}
break;
// Comment("min=",min/Point,"\ni=",i,"\nDeltaMA[",i,"]=",DeltaMA[i]/Point);
}
else
if(i==History-1 && up!=2)
{
// Alert("针֌ min=",min/Point," up=",up);
up=8;
}
}
// Alert("Íà âûõîäå while min=",min/Point);
//if (up==0) break; //else continue;
}
//---- Èùåì è ñòðîèì ÑòîðËîññ
double sl=Open[0];
for(i=1; i<=VerExtr; i++)
{
if (Trade[0]>0 && Low[i]<sl)
sl=Low[i];
if (Trade[0]<0 && High[i]>sl)
sl=High[i];
if (Trade[0]==0)
sl=0;
}
//---- Èùåì è ñòðîèì ÒåéêÏðîôèò
double TPup =0;
double TPdown=0;
for(i=1; i<History; i++)
{
if (Trade[i]>0)
if((Close[i]-Open[i])>TPup) TPup=Close[i]-Open[i];
if (Trade[i]<0)
if((Open[i]-Close[i])>TPdown) TPdown=Open[i]-Close[i];
// Alert("i=",i," TPup=",TPup/Point," TPdown=",TPdown/Point);
}
if (Trade[0]>0)
{
sl=-sl - MarketInfo(Symbol(), MODE_SPREAD)*Point;
double tp=0.67*TPup/Point;
}
if (Trade[0]<0)
{
sl= sl + MarketInfo(Symbol(), MODE_SPREAD)*Point;
tp=-0.67*TPdown/Point;
}
if (Open[1]<10) tp=tp/100;
if (Draw)
{
for(i=0; i<2; i++)
{
SL[i]=sl;
TP[i]=tp;
}
}
SL[2]=0;
TP[2]=0;
//---- done
return(0);
}
//+------------------------------------------------------------------+
void Fun_New_Bar() // Ô-èÿ îáíàðóæåíèÿ íîâîãî áàðà
{
New_Bar=false; // Íîâîãî áàðà íåò
if(New_Time!=Time[0]) // Ñðàâíèâàåì âðåìÿ
{
New_Time=Time[0]; // Òåïåðü âðåìÿ òàêîå
New_Bar=true; // Ïîéìàëñÿ íîâûé áàð
}
}
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
---