Подскажите пожалуйста!

 

Почему не работает OrderClose()  в данной ситуации?

 


for(int i=0;i< actTotal;i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol()==Symbol())
{
TotalOrders++;
}
}}
if(TotalOrders > 0)
{

if(OrderType()==OP_BUY && OrderStopLoss()==0){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - sl*Point,NULL,0,CLR_NONE);
}
if(OrderType()==OP_SELL && OrderStopLoss() == 0){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + sl*Point,NULL,0,CLR_NONE);
}
}

double profit = ProfitDef();

if(OrderType()==OP_BUY && Bid > OrderOpenPrice() + sl/3*Point && Bid < iClose(Symbol(),tf,1))
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(OrderType()==OP_SELL && Ask < OrderOpenPrice() - sl/3*Point && Ask > iClose(Symbol(),tf,1))
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);

 

 

Возможно, операции закрытия позиции следует поставить внутрь функции выбора(перебора), т.е. внутрь 

for(int i=0;i< actTotal;i++)
{

 ... ... 

// вот сюда.
  } //for(int i=0;i< actTotal;i++)

 

//-------------------------

Возможно есть и др. ошибки. 

 
цену попробуй нормализовать
 

=============

Примерно так:

if(TotalOrders > 0)                  {//если есть ордера 
for(int i=0;i< actTotal;i++)             {//перебираем их
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){//выбираем  открытые позиции
if( OrderSymbol()==Symbol())                      {//если символ соотв-ет текущему графику
double profit = ProfitDef();

if(OrderType()==OP_BUY && Bid > OrderOpenPrice() + sl/3*Point && Bid < iClose(Symbol(),tf,1))
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);//закрываем бай-позицию

if(OrderType()==OP_SELL && Ask < OrderOpenPrice() - sl/3*Point && Ask > iClose(Symbol(),tf,1))
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);//закрываем селл-позиция

                      }}}}
 

Большое спасибо!

Работает