Вроде всё просто, но никак не могу понять....

 

BUY и SELL ордеры должны чередоваться, по этому я ввёл "BS" которая запоминает прежнее состояние.

почему-то вот только в BUY заходит, пишет "BUY order opened : ......" но

BS=TRUE;

не выполняет.

BS следовательно всё время FALSE.

Видимо тут что-то не так, но я не вижу что

bool BS=FALSE;
int ticket;
void OnTick()
  {                             

if(BS==FALSE)
      {
        ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          Print("BUY order opened : ",OrderOpenPrice());
          BS=TRUE;
         }
         else
          Print("Error opening BUY order : ",GetLastError());
          BS=FALSE;
       }                 
       else 
       {        
        ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          Print("SELL order opened : ",OrderOpenPrice());
          BS=FALSE;
         }
         else
          Print("Error opening SELL order : ",GetLastError());
          BS=TRUE;
       }
}


Спасибо

 
derignatim1:

BUY и SELL ордеры должны чередоваться, по этому я ввёл "BS" которая запоминает прежнее состояние.

почему-то вот только в BUY заходит, пишет "BUY order opened : ......" но

не выполняет.

BS следовательно всё время FALSE.

Видимо тут что-то не так, но я не вижу что


Спасибо

Вот так должно работать. Лишние кривые скобки бывают лишними но не в этом случае.

bool BS=FALSE;
int ticket;
void OnTick()
  {                             

if(BS==FALSE)
      {
        ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          {
           Print("BUY order opened : ",OrderOpenPrice());
           BS=TRUE;
          }
         }
         else
          {
           Print("Error opening BUY order : ",GetLastError());
           BS=FALSE;
          }
       }                 
       else 
       {        
        ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          {
           Print("SELL order opened : ",OrderOpenPrice());
           BS=FALSE;
          }
         }
         else
          {
           Print("Error opening SELL order : ",GetLastError());
           BS=TRUE;
          }
       }
}
 
derignatim1:

BUY и SELL ордеры должны чередоваться, по этому я ввёл "BS" которая запоминает прежнее состояние.

почему-то вот только в BUY заходит, пишет "BUY order opened : ......" но

не выполняет.

BS следовательно всё время FALSE.

Видимо тут что-то не так, но я не вижу что


Спасибо

После if() и else полагается выполняемые действия заключать в фигурные скобки. А вы не всегда это делаете. Сделайте правильно, а потом уже разбирайтесь дальше, а может и будет работать правильно.

P.S . Ну вот пока писал уже подсказали.

 
khorosh:

После if() и else полагается выполняемые действия заключать в фигурные скобки. А вы не всегда это делаете. Сделайте правильно, а потом уже разбирайтесь дальше, а может и будет работать правильно.

Вот так, без кривых скобок тоже будет работать

bool BS=FALSE;
int ticket;
void OnTick()
  {                             

if(BS==FALSE)
      {
        ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          //Print("BUY order opened : ",OrderOpenPrice());
          BS=TRUE;
         }
         else
          //Print("Error opening BUY order : ",GetLastError());
          BS=FALSE;
       }                 
       else 
       {        
        ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          //Print("SELL order opened : ",OrderOpenPrice());
          BS=FALSE;
         }
         else
          //Print("Error opening SELL order : ",GetLastError());
          BS=TRUE;
       }
}

И ещё вариант

bool BS=FALSE;
int ticket;
void OnTick()
  {                             

if(BS==FALSE)
      {
        ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          //Print("BUY order opened : ",OrderOpenPrice());
          BS=TRUE;
         }
         else
          Print("Error opening BUY order : ",GetLastError());
          //BS=FALSE;
       }                 
       else 
       {        
        ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed);
         if(ticket>0)
         {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
          //Print("SELL order opened : ",OrderOpenPrice());
          BS=FALSE;
         }
         else
          Print("Error opening SELL order : ",GetLastError());
          //BS=TRUE;
       }
}
 
сработало. Спасибо за быстрые ответы !
Причина обращения: