[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 6

 
DhP:


Recalcule a cada tique o número de pedidos pendentes.

Se houver menos, isso significa que uma ordem pendente se tornou uma ordem de mercado.

Todos os restantes (que se tornaram desnecessários) podem ser apagados.


No momento da eliminação, ambas as ordens são ordens de mercado. Mas mesmo que a última ordem pendente seja apagada ou acionada, seu bilhete ainda é acionado e gera um erro. E o penúltimo ainda está pendente.
 
Andreev:

Obrigado pelo link!!! Vou investigar isso :) Com o tempo, assim como o número mágico e por tipo de ordem (bylimit ou selllimit) é uma boa idéia. Mas você provavelmente não me entendeu bem. Meu problema não é marcar o pedido, mas COMO REMOVê-lo. Só sou capaz de apagar a última ordem pendente, não importa como eu defina a penúltima.
// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
Como entendi de seu primeiro post "Eu uso o seguinte exemplo para definir, mas ele fecha apenas a última ordem pendente em vez da primeira, embora todas as condições estejam preenchidas para a primeira ordem pendente". Help me find error!!!!!!!!!!!!!" - você precisa apagar todas as ordens pendentes restantes, após transformar algumas delas em ordens de mercado - este código deve ser escrito em suas condições de negociação e vá em frente...
 
Roman.:
Como entendi de seu primeiro post "Uso o seguinte exemplo para definição, mas fecha apenas a última ordem pendente em vez da primeira, embora todas as condições estejam preenchidas para a primeira ordem pendente". Help me find error!!!!!!!!!!!!!" - você precisa apagar todas as ordens pendentes restantes, após transformar algumas delas em ordens de mercado - este código deve ser inserido em suas condições de negociação e ir em frente...

Obrigado!!! Não esperava que fosse tão complicado :)))
 
Roman.:
Como entendi de seu primeiro post "Uso o seguinte exemplo para definição, mas fecha apenas a última ordem pendente em vez da primeira, embora todas as condições estejam preenchidas para a primeira ordem pendente". Help me find error!!!!!!!!!!!!!" - você precisa apagar todas as ordens pendentes restantes, após transformar algumas delas em ordens de mercado - este código deve ser inserido em suas condições de negociação e ir em frente...

Pensei que poderia ser preciso um par de linhas ... :)
 
Andreev:

No momento da eliminação, ambas as ordens são comercializáveis. Mas mesmo que a última ordem pendente seja apagada ou acionada, o bilhete que acionou ainda assim mostrará um erro. O penúltimo ainda estará lá.


Não consigo nem imaginar como isso é possível.

Se após recalcular as ordens pendentes, o Consultor Especialista não encontrar uma ordem, ele emite imediatamente um comando para apagar o resto.

A operação de apagar as ordens pendentes não necessárias deve necessariamente preceder (preceder) qualquer operação de abertura.

 
Roman.:

Como entendi de seu primeiro post "Uso o seguinte exemplo para definição, mas fecha apenas a última ordem pendente em vez da primeira, embora todas as condições estejam preenchidas para a primeira ordem pendente". Help me find error!!!!!!!!!!!!!" - você precisa apagar todas as ordens pendentes restantes, após transformar algumas delas em ordens de mercado - este código deve ser escrito em suas condições de negociação e vá em frente...

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
Você já tentou escrever códigos de forma compacta?

Aqui está o seu código:

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))                            continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))                    continue;
      ticket = OrderTicket( );                         // Номер ордера
      orderLots = OrderLots();                         // Lots   
      SL =  OrderStopLoss();                           // Значение StopLoss ордера
      TP = OrderTakeProfit();                          // Значение TakeProfit ордера
      if (ticket>0) {
         while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
            Sleep(100);
            OrderDelete(ticket,CLR_NONE); // и удаляете их                       
         }
      return (0);
      }
 
Andreev:

Pensei que poderia ser possível encaixar em algumas linhas ... :)

Bem. artmedia70 (24.07.2011 20:01) empacotou tudo em quase duas linhas. Assim como você queria))))
 

Por favor, ajude-me, onde estou cometendo um erro? A idéia é que no bar onde o pedido foi fechado, o pedido não deve ser aberto.


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
if ((условие 1)&&(условие 2)&&(OrderCloseTime()!=Time[0]))
 {
 OrderSend...; 
 }

Mas no testador, após o fechamento do pedido, as condições ainda são cumpridas e mais um pedido é aberto na mesma direção

 
artmedia70:
Nunca tentou escrever códigos de forma compacta?

Aqui está o seu próprio código:

Eu tenho... :-))) É um hábito de Pascal... A legibilidade é pior... Especialmente para aqueles que não são muito "iniciados"... :-))) E você precisa de indentação nas operações em laços aninhados e condições por largura de aba, ou 3 espaços - como último recurso... :-))
 
LazarevDenis:

Por favor, ajude-me, onde estou cometendo um erro? A idéia é que no bar onde o pedido foi fechado, o pedido não deve ser aberto.


Mas no testador, após o fechamento do pedido, as condições ainda são cumpridas e mais 1 pedido é aberto na mesma direção


Para ajudar, visite o site e procure algo como: abrir e fechar um pedido em um bar site:mql4.com - e você estará com sorte.