небольше проблемы со скриптом...

 
... проблема в том что я просто не представляю как он работает: 1) он вызывается (допустим скрипт закрывающий все ордера) потом он просто за тик пытается все закрыть, функция пробегает что закрылось то закрылось, что нет то нет и все...? :( 2) ..... потом он каждый тик пытается что то закрыть, что закрылось то закрылось, что нет то нет? :( инымы словами правельно ли так? start { allclosed(); if (OrdersTota==0) return(0); } или надо так void start() { int a; for (int i=OrdersTotal(); i==0;) { allclosed(); } return(0); } другими словами: "как скрипт заставить быть цикличным?"
 
void start() { for (int i=OrdersTotal(); i==0;) { for (int a=OrdersTotal(); a>=-1; a--) { if (OrderSelect(a,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,9,Gold); else OrderClose(OrderTicket(),OrderLots(),Ask,9,Gold); } } } return(0); } будет ли работать этот скрипт?
 
Будет и еще как!... бесконечно долго)))
 
а почему? что не так?
 

На расстоянии 1 спичечный коробок и еще одна треть от начала находтся ошибка)))
А если хотите обсуждать - отформатируйте в SRC прямо в посте

 
 
void start()
{
for (int i=OrdersTotal(); i==0;)
    {
    for (int a=OrdersTotal(); a>=-1; a--)
        {
        if (OrderSelect(a,SELECT_BY_POS,MODE_TRADES)==true)
           {
           if   (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,9,Gold);
           else                       OrderClose(OrderTicket(),OrderLots(),Ask,9,Gold);
           } 
        }
    }
return(0);
}
 
void start()
{
for (int i=OrdersTotal(); i==0;)    //Где декремент i? - здесь бесконечный цикл
    {
    for (int a=OrdersTotal(); a>=-1; a--) //самый малый номер ордера в списке это ноль, сейчас выходит за граицу
        {
        if (OrderSelect(a,SELECT_BY_POS,MODE_TRADES)==true) //TRUE - лишнее
           {
           if   (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,9,Gold); 
           else                       OrderClose(OrderTicket(),OrderLots(),Ask,9,Gold);
           } 
        }
    }
return(0);
}
 

Это называется - программирование на удачу - авось чтонить получиться :-)

Почитайте https://book.mql4.com/ru/trading/orderclose

здесь есть нужные вам ответы

 
 
void start()
{
for (int i=OrdersTotal(); i==0;)
    {i=OrdersTotal();
    for (int a=OrdersTotal(); a>=0; a--)
        {
        if (OrderSelect(a,SELECT_BY_POS,MODE_TRADES)==true)
           {
           if   (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,9,Gold);
           else                       OrderClose(OrderTicket(),OrderLots(),Ask,9,Gold);
           } 
        }
    }
return(0);
}
// а так почему не работает?
 
xeon:

Это называется - программирование на удачу - авось чтонить получиться :-)

Почитайте https://book.mql4.com/ru/trading/orderclose

здесь есть нужные вам ответы

мне просто хотелось разобратся как работают скрипты =)

 
 
void start()
{
    for (int a=OrdersTotal()-1; a>=0; a--)
        {RefreshRates();
        if (OrderSelect(a,SELECT_BY_POS,MODE_TRADES))
           {
           if   (OrderType()==OP_BUY&&OrderCloseTime()==0) OrderClose(OrderTicket(),OrderLots(),Bid,9,Gold);
           else                       OrderClose(OrderTicket(),OrderLots(),Ask,9,Gold);
           } 
        }
    
return(0);
}

P.S. minus 1 OrderTotal

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