Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 133

 
Olá a todos. Você pode me dizer como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
No momento, está fechando as mais recentes abertas. Quero que feche primeiro os primeiros!
 
Rustam Bikbulatov:
Olá a todos. Você pode me dizer como mudar este código para(int i=OrdersTotal()-1;i>=0;i--){
No momento, está fechando as mais recentes abertas. Quero que feche primeiro os primeiros!
for(int i=0; i<OrdersTotal(); i++)
 
Rustam Bikbulatov:
Olá a todos. Por favor, me diga como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
No momento, está fechando as mais recentes abertas. Você quer que feche primeiro os primeiros!
for( int i = 0; i < OrdersTotal(); i++ )
   {
    if( /*Функция закрытия. Если вернула истину*/ )
       i--;
   }

Tente desta forma. Ao invés de comentários, você deve usar a função para fechar o pedido. Eu não verifiquei sua funcionalidade. E aqui, acho que teremos que chamar a função que calcula a quantidade de pedidos a cada vez, já que o número de pedidos diminuirá.

Você também pode tentar uma variante desse tipo:

while( OrdersTotal() > 0 )
   /*Функция закрытия ордера*/
 
Vitaly Muzichenko:
for(int i=0; i<OrdersTotal(); i++)
não fecha corretamente)
 
Rustam Bikbulatov:
fecha de forma desajeitada)
A maneira correta é lembrar quais ordens precisam ser fechadas, ordenar a lista como você precisa e fechar nessa ordem

não é correto, mas por enquanto (até certo ponto) funciona: no fechamento bem sucedido do i...



 
Rustam Bikbulatov:
Olá a todos. Você pode me dizer como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
No momento, está fechando as mais recentes abertas. Quero que feche primeiro os primeiros!

//+------------------------------------------------------------------+
//|           Закрыть все позиции начиная с первых                   |
//+------------------------------------------------------------------+

double CloseOrders()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    break;
    
    if (OrderMagicNumber() != mn)
    break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
                          break;
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
    }  
  }
return (True);
}
// End
 
Rustam Bikbulatov:
Fecha de maneira desajeitada)
A opção que tenho sugerido é geralmente incongruente para o fechamento.
Se você está falando em fechar do velho para o novo, então você está fechando a grade. Tendo alguma experiência com grades, tudo o que posso dizer com certeza é que você não deve escolher pela idade do cargo, mas por seu lote, e você deve fechar de um lote maior para um menor. Se a grade é de lote único, então não há diferença na ordem de fechamento. Use funções prontas para fechar, e não invente algo que já foi inventado)
 
Muito obrigado, pessoal! Eu já resolvi isso!!!
 
Vitaly Muzichenko:
A opção que tenho sugerido é geralmente incongruente para o fechamento.
Se você está falando em fechar do velho para o novo, então você está fechando a grade. Tendo alguma experiência com grades, tudo o que posso dizer com certeza é que você não deve escolher pela idade do cargo, mas por seu lote, e você deve fechar de um lote maior para um menor. Se a grade é de lote único, então não há diferença na ordem de fechamento. Use funções prontas para fechamento, e não invente algo que já foi inventado)
É isso mesmo. Você está certo!
 
Cavalheiros desenvolvedores! Bom dia para todos. Estou interessado em uma pergunta sobre como criar um modelo de Expert Advisor (roteiro) ao criá-lo. Isso pode ser editado em algum lugar e como isso é feito?