AgGreSsiVe
Прохожий
Здравствуйте уважаемые форумчане. Помогите пожалуйста разобраться с кодом. Есть советник, который открывает, сделку по отбою от горизонтальной линии. Вверх на покупку, вниз на продажу. Суть в том, что он, берет любую линию на графике. Я же пытаюсь его переделать, так, что бы он, открывал сделку от линии с конкретным именем. К примеру от линии названной LineBuy на покупку, LineSell на продажу. Как получить данные с этих линий, я примерно понял, но как, правильно оформить в коде - не очень. Если не затруднит, напишите как это правильно сделать.
Ниже сам код:
Ниже сам код:
void OnTick()
{
CheckBU();
if(BarsCount != Bars)
{
BarsCount = Bars;
for(int i=0;i<ObjectsTotal();i++)
{
string objName = ObjectName(i);
if(ObjectType(objName) == OBJ_HLINE)
{
double line_price = ObjectGetDouble(0,objName,OBJPROP_PRICE);
if((Open[1] <= Close[1])&&(Close[1]<=line_price)&&(High[1]>=line_price)&&(High[1] - line_price <=Rule1*Point)&&(High[1] - Close[1] <= Rule2*Point)&&(OrdersCount() < MaxOrders))
{
double sl = 0;
if(SL != 0) sl = Bid + SL*Point;
double tp = 0;
if(TP != 0) tp = Bid - TP*Point;
bool result = OpenPosition(Symbol(),OP_SELL,Lot,Bid,0,sl,tp,Comm ents,Magic);
if(Alerts && result)
Alert("Open position sell "+Symbol());
}
if((Open[1] >= Close[1])&&(Close[1]>=line_price)&&(Low[1]<=line_price)&&(line_price - Low[1] <=Rule1*Point)&&(Close[1] - Low[1] <=Rule2*Point)&&(OrdersCount() < MaxOrders))
{
double sl = 0;
if(SL != 0) sl = Ask - SL*Point;
double tp = 0;
if(TP != 0) tp = Ask + TP*Point;
bool result = OpenPosition(Symbol(),OP_BUY,Lot,Ask,0,sl,tp,Comme nts,Magic);
if(Alerts && result)
Alert("Open position buy "+Symbol());
}
}
}
}
}
{
CheckBU();
if(BarsCount != Bars)
{
BarsCount = Bars;
for(int i=0;i<ObjectsTotal();i++)
{
string objName = ObjectName(i);
if(ObjectType(objName) == OBJ_HLINE)
{
double line_price = ObjectGetDouble(0,objName,OBJPROP_PRICE);
if((Open[1] <= Close[1])&&(Close[1]<=line_price)&&(High[1]>=line_price)&&(High[1] - line_price <=Rule1*Point)&&(High[1] - Close[1] <= Rule2*Point)&&(OrdersCount() < MaxOrders))
{
double sl = 0;
if(SL != 0) sl = Bid + SL*Point;
double tp = 0;
if(TP != 0) tp = Bid - TP*Point;
bool result = OpenPosition(Symbol(),OP_SELL,Lot,Bid,0,sl,tp,Comm ents,Magic);
if(Alerts && result)
Alert("Open position sell "+Symbol());
}
if((Open[1] >= Close[1])&&(Close[1]>=line_price)&&(Low[1]<=line_price)&&(line_price - Low[1] <=Rule1*Point)&&(Close[1] - Low[1] <=Rule2*Point)&&(OrdersCount() < MaxOrders))
{
double sl = 0;
if(SL != 0) sl = Ask - SL*Point;
double tp = 0;
if(TP != 0) tp = Ask + TP*Point;
bool result = OpenPosition(Symbol(),OP_BUY,Lot,Ask,0,sl,tp,Comme nts,Magic);
if(Alerts && result)
Alert("Open position buy "+Symbol());
}
}
}
}
}