//+------------------------------------------------------------------+
//| sEcrossL.mq4 |
//| http://www.mql4.com/ru/users/Integer |
//+------------------------------------------------------------------+
#property copyright "*"
#property link "*"
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
Comment("");
while(!IsStopped()){
if(ObjectFind("fa")!=0){
ObjectCreate("fa",OBJ_FIBOARC,0,Time[0],Open[0],Time[30],Close[30]);
ObjectSet("fa",OBJPROP_ELLIPSE,true);
ObjectSet("fa",OBJPROP_SCALE,100);
}
if(ObjectFind("la")!=0){
ObjectCreate("la",OBJ_TREND,0,Time[10],Open[10],Time[40],Close[40]);
}
datetime etm1=ObjectGet("fa",OBJPROP_TIME1);
double ep1=ObjectGet("fa",OBJPROP_PRICE1);
datetime etm2=ObjectGet("fa",OBJPROP_TIME2);
double ep2=ObjectGet("fa",OBJPROP_PRICE2);
double a=Point*ObjectGet("fa",OBJPROP_SCALE);
int eb1;
if(etm1>Time[0]){
eb1=(Time[0]-etm1)/(Period()*60);
}
else{
eb1=iBarShift(NULL,0,etm1,false);
}
int eb2;
if(etm1>Time[0]){
eb2=(Time[0]-etm2)/(Period()*60);
}
else{
eb2=iBarShift(NULL,0,etm2,false);
}
int ecx=eb2;
double ecy=ep2;
datetime ltm1=ObjectGet("la",OBJPROP_TIME1);
double lp1=ObjectGet("la",OBJPROP_PRICE1);
datetime ltm2=ObjectGet("la",OBJPROP_TIME2);
double lp2=ObjectGet("la",OBJPROP_PRICE2);
int lb1;
if(ltm1>Time[0]){
lb1=(Time[0]-ltm1)/(Period()*60);
}
else{
lb1=iBarShift(NULL,0,ltm1,false);
}
int lb2;
if(ltm1>Time[0]){
lb2=(Time[0]-ltm2)/(Period()*60);
}
else{
lb2=iBarShift(NULL,0,ltm2,false);
}
double lcx=lb2;
double lcy=lp2;
double k=(lp1-lp2)/(lb1-lb2);
double r100=MathSqrt(MathPow(MathAbs(eb1-ecx),2)+MathPow((ep1-ecy)/a,2));
int lc=ObjectGet("fa",OBJPROP_FIBOLEVELS);
for(int i=ObjectsTotal()-1;i>=0;i--){
if(StringFind(ObjectName(i),"cr",0)==0){
ObjectDelete(ObjectName(i));
}
}
int dn=0;
for(i=0;i<lc;i++){
double r=r100*ObjectGet("fa",OBJPROP_FIRSTLEVEL+i);
double A=-a*a - k*k;
double B=2.0*ecx*a*a - lcy*k - k*lcy + k*k*lcx + k*ecy + k*lcx*k + ecy*k;
double C = r*r*a*a - ecx*ecx*a*a - lcy*lcy + lcy*k*lcx + lcy*ecy + k*lcx*lcy - k*lcx*k*lcx - k*lcx*ecy + ecy*lcy - ecy*k*lcx - ecy*ecy;
int Cnt;
double X1,X2;
QuadraticEquation(A,B,C,Cnt,X1,X2);
if(Cnt>0){
double Y1 = lcy + k*(X1-lcx);
fObjTrendLine("cr_"+dn,MyTime(X1),Y1,MyTime(X1),Y1,false,Blue,5);
dn++;
}
if(Cnt>1){
double Y2 = lcy + k*(X2-lcx);
fObjTrendLine("cr_"+dn,MyTime(X2),Y2,MyTime(X2),Y2,false,Blue,5);
dn++;
}
}
WindowRedraw();
Sleep(10);
}
Comment("");
ObjectsDeleteAll();
WindowRedraw();
return(0);
}
//+------------------------------------------------------------------+
int MyTime(double aShift){
int sh=MathRound(aShift);
if(sh<0){
return(Time[0]+Period()*60*MathAbs(sh));
}
return(Time[sh]);
}
void QuadraticEquation(double A,double B,double C,int & Cnt,double & X1,double & X2){
double D=B*B-4.0*A*C;
if(D==0){
Cnt=1;
X1=(-B)/(2.0*A);
}
else if(D>0){
Cnt=2;
D=MathSqrt(D);
X1=(-B+D)/(2.0*A);
X2=(-B-D)/(2.0*A);
}
else{
Cnt=0;
}
}
void fObjTrendLine(
string aObjectName, // 1 èìÿ
datetime aTime_1, // 2 âðåìÿ 1
double aPrice_1, // 3 öåíà 1
datetime aTime_2, // 4 âðåìÿ 2
double aPrice_2, // 5 öåíà 2
bool aRay=false, // 6 ëó÷
color aColor=Red, // 7 öâåò
int aWidth=1, // 8 òîëùèíà
int aWindowNumber=0, // 9 îêíî
int aStyle=0, // 10 0-STYLE_SOLID, 1-STYLE_DASH, 2-STYLE_DOT, 3-STYLE_DASHDOT, 4-STYLE_DASHDOTDOT
bool aBack=false // 11 ôîí
){
// fTrendLine("",Time[100],Close[100],Time[1],Close[1]);
// fTrendLine("",Time[100],Close[100],Time[1],Close[1],false,Red,1,0,STYLE_SOLID,false);
if(ObjectFind(aObjectName)!=aWindowNumber){
ObjectCreate(aObjectName,OBJ_TREND,aWindowNumber,aTime_1,aPrice_1,aTime_2,aPrice_2);
}
ObjectSet(aObjectName,OBJPROP_TIME1,aTime_1);
ObjectSet(aObjectName,OBJPROP_PRICE1,aPrice_1);
ObjectSet(aObjectName,OBJPROP_TIME2,aTime_2);
ObjectSet(aObjectName,OBJPROP_PRICE2,aPrice_2);
ObjectSet(aObjectName,OBJPROP_RAY,aRay);
ObjectSet(aObjectName,OBJPROP_COLOR,aColor);
ObjectSet(aObjectName,OBJPROP_WIDTH,aWidth);
ObjectSet(aObjectName,OBJPROP_BACK,aBack);
ObjectSet(aObjectName,OBJPROP_STYLE,aStyle);
}
Comments