// Поиск точки пробоя линии на графике
void fLineBreak(string Name // Имя линии
,int& Bar1,double& Price1 // Точка начала
,int& Bar2,double& Price2 // Точка касания
,int& Bar3,double& Price3 // Точка пробоя
,double& Speed){ // Наклон линии
datetime Time1, Time2;
int Type;
Bar1=LastBar-1;
Bar2=LastBar-1;
Bar3=LastBar-1;
Price1=0;
Price2=0;
Price3=0;
Speed=0;
if( ObjectFind(Name)!=0 ){
if( РежимОтладки ) Print("*** "+Name+" не найден");
return;
}
Time1=ObjectGet(Name,OBJPROP_TIME1);
Bar1=iBarShift(NULL,0,Time1);
Price1=ObjectGet(Name,OBJPROP_PRICE1);
Type=ObjectType(Name);
switch( Type ){
case OBJ_TREND : // Наклонная линия(основной тип)
Time2=ObjectGet(Name,OBJPROP_TIME2);
Bar2=iBarShift(NULL,0,Time2);
Price2=ObjectGet(Name,OBJPROP_PRICE2);
break;
case OBJ_HLINE : // Горизонтальная линия
Bar2=LastBar;
Time2=Time[Bar2];
Price2=Price1;
break;
default : // Необрабатываемый объект
Print("*** "+Name+" недопустимый тип: "+Type);
return;
}
if( Bar1<=Bar2
|| Bar1<=LastBar
|| Bar2<LastBar
|| Price1<Zero
|| Price2<Zero ){
if( РежимОтладки ) Print("*** "+Name+" не обработан, параметры: "
+DoubleToStr(Price1,Digits)+" ("+Bar1+"/"+TimeToStr(Time1)+")..."
+DoubleToStr(Price2,Digits)+" ("+Bar2+"/"+TimeToStr(Time2)+")");
return;
}
Speed=fSpeed(Name,Bar1,Price1,Bar2,Price2);
// "3"-первый слева пробой на интервале "2" ... LastBar
fBreakPoint(Name,Bar2,Price2,Speed,LastBar,Bar3,Price3);
return;
}