Почему это не работает?

 

Почему это не работает?

if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);

 
Это не работает потому что не различается ОrдеrType()
 
for(int i=0; i<at; i++)
{
OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES);
to++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
 
А у вас в советнике может быть открыто только ордера на покупку или только на продажу? Или оба сразу?
 
liza:
for(int i=0; i<at; i++)
{
OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES);
to++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);

Лиза, попробуй для начала проверить какие значения сравниваются в условиях.

Потому как загвоздка может стоять в какой-нибудь переменной, например sp. В пунктах она задается или нет

 

Лучше так.

for(int i=at; i>=0; i--){
if(!OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES))continue;
if(OrderType()==OP_BUY){
if( Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
if(OrderType()==OP_SELL){
if(Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}

Что-то вставка кода у меня не работает.

 
for(int i=at; i>=0; i--)
{
  if(!OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES)) continue;
  if(OrderType()==OP_BUY)
    if( Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
  if(OrderType()==OP_SELL)
    if(Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
 
Попробовала. Не работает. Ордера выставляются и срабатывают только по tp и sl. Очень странно, вроде все правильно...
 
Проверьте значения переменных sp и Pip
 
Убрала sp – работает, но тогда не понятно почему не работает это –
double sp=MarketInfo(Symbol(), MODE_SPREAD);
 
liza:
Убрала sp – работает, но тогда не понятно почему не работает это –
double sp=MarketInfo(Symbol(), MODE_SPREAD);

Возвращает спрэд в пунктах.

Причина обращения: