0
Views
0
Downloads
0
Favorites
TD_Points&Line_mgtd1.1
//+------------------------------------------------------------------+
//| TD_Points&Lines_mgtd1.mq4 |
//| Vladislav Goshkov (VG) |
//| 4vg@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Vladislav Goshkov (VG)"
#property link "4vg@mail.ru"
//----
#property indicator_chart_window
//----
extern int StepBack=0;
extern bool Qw1=True;
extern bool Qw2=True;
extern bool Qw3=True;
extern color UpLineColor=Blue;
extern int UpLnWidth=1;
extern color DnLineColor=Red;
extern int DnLnWidth=1;
extern color MarkColor =Blue;
extern int MarkNumber =217;
//----
int i=1,NP=0,D=0,
iB_Up=0,iB_Dn=0,
S1=0,
S2=0,
UpLev=0,
DownLev=0,
iP_Up=0,
iP_Dn=0,
value=0,
CurPeriod=0,
shift=0;
//----
datetime nTime=0;
//----
double UpV=0,
DownV=0,
iP=0,
target=0,
UpP[2]={0,0},
DownP[2]={0,0},
PP1=0,PP2=0,PP3=0;
int DownBT[2]={0,0}, // Bar Time
UpBT[2]={0,0},
UpB[2]={0,0}, // Bar Num
DownB[2]={0,0};
string buff_str="";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
Comment(" ");
ObjectsDeleteAll();
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int Target_Style[4]={STYLE_DASH,STYLE_DASH,STYLE_DASH,STYLE_SOLID},
Target_Color[4]={DimGray,MediumSpringGreen,SeaGreen,Blue},
Target_LW[4] ={ 1, 1, 1, 2 };
double target[4];
//---- TODO: add your code here
if((nTime!=Time[0]) || (CurPeriod!=Period()))
{
UpP[0]=0;
UpP[1]=0;
//=================================================
//******** Ïîèñê îïîðíûõ òî÷åê ïðåäëîæåíèÿ ********
//=================================================
for(i=2+StepBack,D=2,NP=0; (NP<D)&&(i<Bars); i++)
{ //Begin
if (High[i]!= High[i+1])
{
if((High[i]>High[i+1] && High[i]>High[i-1] && High[i]>Close[i+2])
&& High[i]> UpP[0])
{
UpB[NP] =i;
UpBT[NP]=Time[i];
UpP[NP] =High[i];
NP++;
}
}
if (High[i]== High[i+1])
{
if((High[i]>High[i+2] && High[i]>High[i-1] && High[i]>Close[i+3])&& High[i]> UpP[0])
{
UpB[NP] =i;
UpBT[NP]=Time[i];
UpP[NP] =High[i];
NP++;
}
}
if(i==(Bars-2))
{
UpB[NP] =i;
UpBT[NP]=Time[i];
UpP[NP] =High[i];
break;
}
}//for(i=2+StepBack,D=2,NP=0; NP<D; ) {//End;
//=================================================
//********** Ïîèñê îïîðíûõ òî÷åê ñïðîñà ***********
//=================================================
DownP[0]=1000000000;
DownP[1]=1000000000;
for(i=2+StepBack,D=2,NP=0; (NP<D)&&(i<Bars); i++)
{//Begin
if (Low[i]!= Low[i+1])
{
if((Low[i]<Low[i+1] && Low[i]<Low[i-1] && Low[i]<Close[i+2])&& Low[i]< DownP[0] )
{
DownB[NP]=i;
DownBT[NP]= Time[i];
DownP[NP]=Low[i];
NP++;
}
//i++;
}
if (Low[i]== Low[i+1])
{
if((Low[i]<Low[i+2] && Low[i]<Low[i-1] && Low[i]<Close[i+3])&& Low[i]< DownP[0] )
{
DownB[NP]=i;
DownBT[NP]= Time[i];
DownP[NP]=Low[i];
NP++;
}
//i++;
}
if (i==(Bars-2))
{
DownB[NP]=i;
DownBT[NP]= Time[i];
DownP[NP]=Low[i];
break;
}
}//End;
UpV=(UpP[1]-UpP[0])/(UpB[0]-UpB[1]);
DownV=(DownP[1]-DownP[0])/(DownB[0]-DownB[1]);
//=================================================
//**** Ðèñóåì TD-ëèíèè ****
//=================================================
buff_str="TD_Up";
if(ObjectFind(buff_str)==-1)
{
ObjectCreate(buff_str, OBJ_TREND, 0, UpBT[1], UpP[1],UpBT[0], UpP[0]);
ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(buff_str, OBJPROP_COLOR, UpLineColor);
ObjectSet(buff_str, OBJPROP_WIDTH, UpLnWidth);
}
else
{
ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 2, UpBT[1], UpP[1]);
}
buff_str="TD_Dn";
if(ObjectFind(buff_str)==-1)
{
ObjectCreate(buff_str, OBJ_TREND, 0, DownBT[1], DownP[1],DownBT[0], DownP[0]);
ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(buff_str, OBJPROP_COLOR, DnLineColor);
ObjectSet(buff_str, OBJPROP_WIDTH, DnLnWidth);
}
else
{
ObjectMove(buff_str, 1, DownBT[0], DownP[0]);
ObjectMove(buff_str, 2, DownBT[1], DownP[1]);
}
CurPeriod=Period();
nTime=Time[0];
}//if (nTime <> Time[0]) {
//----
for(i=0;i<4;i++) target[i]=0;
for( i=UpB[0]; i>=StepBack; i--)
{
if((Close[i]>UpP[0]+UpV*(UpB[0]-i)) && (Close[i+1]<=UpP[0]+UpV*(UpB[0]-(i+1))))
{
iB_Up=i;
iP=UpP[0]+UpV*(UpB[0]-i);
iP_Up=iP;
S1=Lowest(NULL,0,MODE_LOW,UpB[1]-i,i);
S2=Lowest(NULL,0,MODE_CLOSE,UpB[1]-i,i);
//----
PP1=iP+((UpP[1]+UpV*(UpB[1]-S1))-Low[S1]);
PP2=iP+((UpP[1]+UpV*(UpB[1]-S2))-Low[S2]);
PP3=iP+((UpP[1]+UpV*(UpB[1]-S1))-Close[S1]);
if((Qw1 && Close[i+2]>Close[i+1])
|| (Qw2 && Open[i]> iP)
|| (Qw3 && (Close[i+1]+(Close[i+1]-MathMin(Low[i+1],Close[i+2])))<iP)){
target[0]=PP1;
target[1]=PP2;
target[2]=PP3;
target[3]=(PP1+PP2+PP3)/3;
buff_str="Break_Sig_Up";
if(ObjectFind(buff_str)==-1)
{
ObjectCreate(buff_str, OBJ_ARROW,0, Time[iB_Up], iP+2*Point );
ObjectSet(buff_str, OBJPROP_ARROWCODE, 164);
ObjectSet(buff_str, OBJPROP_COLOR, Red);
}
else
{
ObjectMove(buff_str, 0, Time[iB_Up], iP+2*Point );
}
}
}
}
for( i=DownB[0]; i>=StepBack;i--)
{
if((Close[i]<DownP[0]+DownV*(DownB[0]-i)) && (Close[i+1]>=DownP[0]+DownV*(DownB[0]-(i+1))))
{
iB_Dn=i;
iP=DownP[0]+DownV*(DownB[0]-i);
iP_Dn=iP;
S1=Highest(NULL,0,MODE_HIGH,DownB[1]-i,i);
S2=Highest(NULL,0,MODE_CLOSE,DownB[1]-i,i);
//----
PP1=iP-(High[S1]-(DownP[1]+DownV*(DownB[1]-S1)));
PP2=iP-(High[S2]-(DownP[1]+DownV*(DownB[1]-S2)));
PP3=iP-(Close[S1]-(DownP[1]+DownV*(DownB[1]-S1)));
if((Qw1 && Close[i+2]<Close[i+1] )
|| (Qw2 && Open[i] < iP )
|| (Qw3 && (Close[i+1]+(Close[i+1]-MathMax(High[i+1],Close[i+2])))>iP))
{
target[0]=PP1;
target[1]=PP2;
target[2]=PP3;
target[3]=(PP1+PP2+PP3)/3;
buff_str="Break_Sig_Dn";
if(ObjectFind(buff_str)==-1)
{
ObjectCreate(buff_str, OBJ_ARROW,0, Time[iB_Dn], iP+2*Point );
ObjectSet(buff_str, OBJPROP_ARROWCODE, 164);
ObjectSet(buff_str, OBJPROP_COLOR, Blue);
}
else
{
ObjectMove(buff_str, 0, Time[iB_Dn], iP+2*Point );
}
}
}
}//for( i=DownB[1]; i>=StepBack;i--) {
for(i=3;i>=0;i--)
{
buff_str="Target"+i;
if(ObjectFind(buff_str)==-1)
{
ObjectCreate(buff_str, OBJ_HLINE,0, Time[0], target[i] );
ObjectSet(buff_str, OBJPROP_STYLE, Target_Style[i]);
ObjectSet(buff_str, OBJPROP_COLOR, Target_Color[i]);
ObjectSet(buff_str, OBJPROP_WIDTH, Target_LW[i]);
}
else
{
ObjectMove(buff_str, 0, Time[0], target[i] );
}
}
//----
string buff_str="TD_LatestCulcBar";
if(ObjectFind(buff_str)==-1) {
ObjectCreate(buff_str, OBJ_ARROW,0, Time[StepBack], Low[StepBack]-2*Point );
ObjectSet(buff_str, OBJPROP_ARROWCODE, MarkNumber);
ObjectSet(buff_str, OBJPROP_COLOR, MarkColor);
}
else
{
ObjectMove(buff_str, 0, Time[StepBack], Low[StepBack]-2*Point );
}
return(0);
}
//+------------------------------------------------------------------+
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
---