[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 6

 
DhP:


Ricalcola ad ogni tick il numero di ordini pendenti.

Se ce ne sono meno, significa che un ordine pendente è diventato un ordine a mercato.

Tutti quelli rimanenti (che sono diventati inutili) possono essere cancellati.


Al momento della cancellazione, entrambi gli ordini sono ordini a mercato. Ma anche se l'ultimo ordine pendente viene cancellato o attivato, il suo ticket viene comunque attivato e genera un errore. E il penultimo è ancora in sospeso.
 
Andreev:

Grazie per il link!!! Ci darò un'occhiata :) Con il tempo, così come il numero magico e per tipo di ordine (bylimit o selllimit) è una buona idea. Ma probabilmente non mi avete capito bene. Il mio problema non è segnare l'ordine, ma come rimuoverlo. Sono solo in grado di cancellare l'ultimo ordine pendente, non importa come definisco il penultimo.
// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   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);
   }
Come ho capito dal tuo primo post "uso il seguente esempio per definire, ma chiude solo l'ultimo ordine pendente invece del primo, anche se tutte le condizioni sono soddisfatte per il primo ordine pendente. Aiutami a trovare l'errore!!!!!!!!!!!!!" - hai bisogno di cancellare tutti gli ordini pendenti rimanenti, dopo averne trasformato alcuni in ordini a mercato - questo codice dovrebbe essere scritto nelle tue condizioni di trading e andare avanti...
 
Roman.:
Come ho capito dal tuo primo post "Uso il seguente esempio per la definizione, ma chiude solo l'ultimo ordine pendente invece del primo, anche se tutte le condizioni sono soddisfatte per il primo ordine pendente. Aiutami a trovare l'errore!!!!!!!!!!!!!" - devi cancellare tutti gli ordini pendenti rimanenti, dopo averne trasformato alcuni in ordini a mercato - questo codice dovrebbe essere inserito nelle tue condizioni di trading e andare avanti...

Grazie!!! Non mi aspettavo che fosse così complicato :)))
 
Roman.:
Come ho capito dal tuo primo post "Uso il seguente esempio per la definizione, ma chiude solo l'ultimo ordine pendente invece del primo, anche se tutte le condizioni sono soddisfatte per il primo ordine pendente. Aiutami a trovare l'errore!!!!!!!!!!!!!" - devi cancellare tutti gli ordini pendenti rimanenti, dopo averne trasformato alcuni in ordini a mercato - questo codice dovrebbe essere inserito nelle tue condizioni di trading e andare avanti...

Pensavo che ci volessero un paio di righe ... :)
 
Andreev:

Al momento della cancellazione, entrambi gli ordini sono vendibili. Ma anche se l'ultimo ordine pendente viene cancellato o si innesca, il ticket che l'ha attivato mostrerà ancora un errore. Il penultimo sarà ancora lì.


Non riesco nemmeno a immaginare come sia possibile.

Se dopo aver ricalcolato gli ordini pendenti l'Expert Advisor non riesce a trovare un ordine, emette immediatamente un comando per cancellare il resto.

L'operazione di cancellazione degli ordini pendenti non necessari deve necessariamente precedere (precedere) qualsiasi operazione di apertura.

 
Roman.:

Come ho capito dal tuo primo post "Uso il seguente esempio per la definizione, ma chiude solo l'ultimo ordine pendente invece del primo, anche se tutte le condizioni sono soddisfatte per il primo ordine pendente. Aiutami a trovare l'errore!!!!!!!!!!!!!" - hai bisogno di cancellare tutti gli ordini pendenti rimanenti, dopo averne trasformato alcuni in ordini a mercato - questo codice dovrebbe essere scritto nelle tue condizioni di trading e andare avanti...

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

   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);
   }
Avete mai provato a scrivere codici in modo compatto?

Ecco il vostro codice:

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

   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:

Ho pensato che potrebbe essere possibile inserire un paio di righe ... :)

Bene. artmedia70 (24.07.2011 20:01) ha messo tutto in quasi due righe. Proprio come volevi)))
 

Per favore aiutatemi, dove sto sbagliando? L'idea è che sulla barra in cui l'ordine è stato chiuso, l'ordine non dovrebbe aprirsi


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

Ma nel tester, dopo che l'ordine è chiuso, le condizioni sono ancora soddisfatte e un altro ordine è aperto nella stessa direzione

 
artmedia70:
Non avete mai provato a scrivere codici in modo compatto?

Ecco il tuo codice personale:

Ho... :-))) È un'abitudine di Pascal... La leggibilità è peggiore... Soprattutto per quelli che non sono troppo "iniziati"... :-))) E avete bisogno dell'indentazione nelle operazioni in cicli e condizioni annidate alla larghezza della tabulazione o a 3 spazi - come ultima risorsa... :-))
 
LazarevDenis:

Per favore aiutatemi, dove sto sbagliando? L'idea è che sulla barra in cui l'ordine è stato chiuso, l'ordine non dovrebbe aprirsi


Ma nel tester, dopo che l'ordine viene chiuso, le condizioni sono ancora soddisfatte e viene aperto 1 altro ordine nella stessa direzione


Per aiutarvi, cercate su Google questo e cercate qualcosa come: aprire e chiudere un ordine su una barra sito:mql4.com - e sarete fortunati.