[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 364

 
Ho controllato questo codice ora su un conto reale, tutto è OK, ho modificato tutti gli ordini di mercato, ma l'unica cosa che non ho toccato sono gli ordini pendenti. Qual è il problema? Cosa ne pensate?
 
Noterday:
Ho controllato questo codice sul mio conto reale, tutto è ok, ho modificato tutti gli ordini di mercato, ma ho lasciato gli ordini pendenti intatti. Qual è il problema? Cosa ne pensate?


Nella condizione

         if(cmd==OP_BUY || cmd==OP_SELL)

e nella condizione

if(cmd==OP_BUY)
 
Non capisco :(
 
Noterday:
Non capisco :(

C'è anche una frase nel nome dello script che dice solo ordini di mercato... Rimuovi quelle condizioni per gli ordini a mercato, poi le condizioni per gli ordini a mercato e in sospeso saranno soddisfatte - questo è tutto. No, non è tutto - leggi attentamente - requisiti e limitazioni... ...e assicurati di aggiungere questi requisiti minimi ai tuoi ordini in sospeso, in modo che siano soddisfatti anche loro.
 
KONDOR:


Quindi non ho nessuna di queste linee, non seleziono affatto il tipo, ma modifico TUTTI quelli che ho, che siano in sospeso o a mercato.
 
Noterday:
Quindi non ho affatto queste linee, non seleziono affatto il tipo, modifico TUTTO, che sia in sospeso o a mercato.

Vi scrivo per leggere attentamente: "Limitazione della distanza FreezeLevel.

Gli ordini a mercato non vengono chiusi se i valori di StopLoss o TakeProfit violano i requisiti del parametro FreezeLevel.
Gli ordini a mercato StopLoss o TakeProfit non possono essere modificati se i valori di StopLoss o TakeProfit violano i requisiti del parametro StopLevel.
La cancellazione e la modifica degli ordini in sospeso non vengono eseguite se il prezzo aperto dichiarato dell'ordine viola i requisiti del parametro FreezeLevel.
 

Ecco, l'errore era lì:

if (OrdersTotal()!=0)
  {
   
   bool   modify;
   int    Done=0;
   for (i = 1; i <= OrdersTotal(); i++)
      {
       if (OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES) == true)
         {
          Stop = OrderStopLoss();
          Take = OrderTakeProfit();
          Print("Пробую модифицировать ",i," ордер (#",OrderTicket(),")");
          modify = OrderModify(OrderTicket(),0,SL,TP,0,0);                          <<<--------------------- во втором параметре OrderModify нужно ставить не ноль а Orderopenprice()
          if (modify==true) Done++;
          if (modify==false)
            {
             int error = GetLastError();
             Print("                 Неудача... Ошибка ",error);
             Sleep(5000);
            }
         }
       }
    Alert("Модифицировано  ",Done,"  из  ",OrdersTotal());
    Sleep(10000);
   }
 
Noterday:
Quindi non ho affatto queste linee, non seleziono affatto il tipo, modifico TUTTO, che sia in sospeso o a mercato.


Anche nella condizione questo

( cmd==OP_BUYLIMIT || cmd==OP_SELLSTOP)

cambiare in modo simile sotto l'ordine da selezionare (cambiare la condizione di definizione del tipo di ordine in una di queste:

Costante Valore Descrizione
OP_BUY 0 Posizione di acquisto.
OP_VENDITA 1 Posizione di vendita.
OP_BUYLIMIT 2 Compra limite in attesa di posizione.
OP_SELLLIMIT 3 Vendere il limite della posizione pendente.
OP_BUYSTOP 4 Compra stop in attesa di posizione.
OP_SELLSTOP 5 Vendi stop in attesa di posizione.
e già allora si controlla il rispetto dei "Requisiti e restrizioni di trading" di questo o quell'ordine selezionato, ogni tipo di ordine selezionato ha i suoi propri requisiti e restrizioni... e qui lo script è solo per gli ordini di mercato... Modifica per analogia e questo è tutto - hai tutte le informazioni. Con calma, attenzione e metodo.

 
Sì, tutto era originariamente scritto correttamente, l'errore era nelle cose di cui sopra. GRAZIE A TUTTI! =)))
 
È possibile accelerare il processo di test?