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

 

Sono stati inviati parametri errati alla funzione di compravendita, per esempio simbolo errato, compravendita non identificata, tolleranza di prezzo negativa, numero di biglietto inesistente, ecc. È necessario cambiare la logica del programma.


Prova il secondo parametro per mettere OrderOpenPrice() invece di zero

 
sergeev:

prendere l'abitudine di stampare tutti i parametri che possono essere rilevanti per l'errore.

se (!OrderModify(...)) { Print(GetlastError()+.... Elenco parametri OrderModify ); }



Sì, è una buona abitudine. Grazie.))

FOReignEXchange 03.07.2011 18:35

Prova il secondo parametro invece di zero per mettere OrderOpenPrice()

Sì, proprio così. )) E per qualche ragione ero convinto che non si possono impostare parametri che non è necessario modificare, perché questo porterà ad un altro errore. C'è qualcosa di simile a quello di cui sto parlando?

Qualcosa del genere è fisso nella mia mente:

La funzione cerca di cambiare il parametro allo stesso valore.

 
tol64:


E per qualche ragione ero convinto che non si possono impostare parametri che non si vogliono modificare, perché questo porterebbe ad un altro errore. C'è qualcosa di simile a quello di cui sto parlando?

Una cosa del genere è fissata nella testa:

La funzione cerca di cambiare il parametro allo stesso valore.


Si potrebbe cambiare un solo parametro e lasciare il resto invariato e scrivere OrderOpenPrice(), OrdsrStopLoss() etc. ovunque.
 
Ciao, qualcuno ha un esempio di un trawl da un certo livello di prezzo con un certo passo? Grazie!
 

Ecco un'altra domanda che ho. Sull'esempio di codice che ho dato sopra (tol64 03.07.2011 18:20).

Il programma non sempre sincronizza lo stop loss di diverse posizioni. Cioè, la posizione è selezionata, la condizione è soddisfatta, è anche registrata nel giornale, ma lo stop loss non è modificato.

Nell'immagine sopra lo stop loss per la posizione con il ticket 4 dovrebbe essere modificato e impostato allo stesso valore della posizione con il ticket 1. Il programma raggiunge questo punto con la stampa, ma l'ulteriore esecuzione sembra essere bloccata.

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

                     if(!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print("Условие не выполняется!");  else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
                           Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
                  }
               if(OrderType() == OP_SELL)
                  {  if(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);  }
                  }
            }

         ...

Perché la variante in cui la condizione non è soddisfatta non è nemmeno registrata. Ho provato tante combinazioni diverse, ma nessuna ha funzionato. Per favore, aiutatemi.

 

E qui.

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

Non è così che si fa?

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange:

E qui.

Non è così che si fa?


No, non lo fa. Restituisce comunque un bool.
 
tol64:

Ecco un'altra domanda che ho. Sull'esempio di codice che ho dato sopra (tol64 03.07.2011 18:20).

Il programma non sempre sincronizza lo stop loss di diverse posizioni. Cioè, la posizione è selezionata, la condizione è soddisfatta, è anche registrata nel giornale, ma lo stop loss non è modificato.

Nell'immagine sopra lo stop loss per la posizione con il ticket 4 dovrebbe essere modificato e impostato allo stesso valore della posizione con il ticket 1. Il programma raggiunge questo punto con la stampa, ma l'ulteriore esecuzione sembra essere bloccata.

Perché la variante in cui la condizione non è soddisfatta non è nemmeno registrata. Ho provato tante combinazioni diverse, ma nessuna ha funzionato. Vorrei il vostro aiuto.


Print() per emettere il valore della variabile global_trailing_SP direttamente nella funzione che avete fornito.

Dove leggete il valore di questa variabile?

E sostituire lo zero (evidenziato) nel codice

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

A OrderTakeProfit()

 
FOReignEXchange:

A cosa serve allora questa condizione, se non c'è una condizione? E i dati dell'ordine non vengono poi utilizzati.


Allora dimmi quale codice è migliore

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

scriverlo come:

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


poi e dimmi qual è il codice migliore

scriverlo come:


Non capisco? Sto solo guardando nell'aiuto, lì OrderSelect() usa una condizione. Non ho visto da nessuna parte senza il vero.

If è un operatore di condizione. E ci dovrebbe essere una condizione tra parentesi. Mi sembra più logico così. Anche se non ci può essere alcuna differenza.

Motivazione: