Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 805

 
Sfinks35:
Buon pomeriggio!
Ora mi sembra di aver capito bene:

Ma quando si compila, dà un avvertimento: possibile perdita di dati a causa della conversione di tipo in linea:
indice = GetPatt5barsDN(indice);

Non ci sono errori nell'intestazione della funzione (o nella funzione stessa) durante la compilazione.

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print("low3= ", low3);
   Print("index= ", index);
 

Saluti, ho una domanda, c'è un modo per saltare un certo passaggio durante l'ottimizzazione.

Per esempio sto ottimizzando il mio robot con 2 MA - veloce e lento partendo da 10 e finendo con 1000 per ciascuno

Come posso saltare i passaggi quando il periodo di quello lento è inferiore a quello di quello veloce?

 
Roman Sharanov:

Saluti, ho una domanda, c'è un modo per saltare un certo passaggio durante l'ottimizzazione.

Per esempio sto ottimizzando il mio robot con 2 MA - veloce e lento partendo da 10 e finendo con 1000 per ciascuno

Come posso saltare i passaggi quando il periodo di quello lento è inferiore a quello di quello veloce?

In questo caso, fate return(INIT_PARAMETERS_INCORRECT) durante l'inizializzazione;

 
Igor Zakharov:

In questo caso, fate return(INIT_PARAMETERS_INCORRECT) durante l'inizializzazione;

grazie

 

Salve. Chi può dirmelo. Tre diversi TS, tre diversi EA, con tre diversi numeri magici, su diverse coppie. Ma hanno una caratteristica comune - la chiusura degli ordini (usando la funzione OrderClose()) quando si raggiungono certe condizioni(numero di ordini e piccolo profitto). Nel tester, non ci sono problemi, ma in pratica, l'impressione è che quando la funzione Order Close() si attiva su una delle coppie, questa funzione (OrderClose()) si attiva anche su altre coppie, che le condizioni siano soddisfatte o meno. Forse è nella funzione Close() definita dall'utente?

Qui sotto ci sono le condizioni di chiusura e la funzione personalizzata Close().

if(CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
      int    i;
      int    total    = OrdersTotal();
      double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
      if((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = -1;
   int k      = OrdersTotal();
   
   for(i = k - 1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if(OrderTicket() != ticket) 
      if(!OrderSelect(ticket, SELECT_BY_TICKET))
         Print("Ошибка в выборе ордеров!");

   while(true)
   {
      int  error;
      bool result = true;
      
      if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, 0);
         
      if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, 0);
         
      if(result != TRUE) 
      { 
         error = GetLastError(); 
            Print("LastError = ", error); 
      }
      else 
      { 
         error = 0; 
      }
      if(error == 135) 
         RefreshRates();
      else break;
   } 
}

 
Youri Lazurenko:

Salve. Chi può dirmelo. Tre diversi TS, tre diversi Expert Advisors, con tre diversi numeri magici, su diverse coppie. Ma hanno una caratteristica comune - la chiusura degli ordini (usando la funzione OrderClose()) quando si raggiungono certe condizioni(numero di ordini e piccolo profitto). Nel tester, non ci sono problemi, ma in pratica, l'impressione è che quando la funzione Order Close() si attiva su una delle coppie, questa funzione (OrderClose()) si attiva anche su altre coppie, che le condizioni siano soddisfatte o meno. Forse è nella funzione Close() definita dall'utente?

Ecco le condizioni di chiusura e la funzione Close() definita dall'utente.

In primo luogo, si usa OrderSelect() per controllare gli ordini come dovrebbe essere - si controlla il simbolo e il numero master dell'ordine, e poi si chiude l'ordine usando OrderCloseX() e si cerca nuovamente tra gli ordini, ma non si controlla il simbolo e il numero master in OrderSelect() per qualche motivo

Penso che dovremmo aggiungere OrderCloseX() per evitare di riscrivere l'intero codice:

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 
Igor Makanu:

Prima si controllano gli ordini attraverso OrderSelect() come dovrebbe essere - controlla il simbolo e il numero master dell'ordine, e poi si chiude l'ordine in OrderCloseX() e si cerca di nuovo tra gli ordini, ma per qualche motivo non si controlla il simbolo e il numero master in OrderSelect()

Penso che dovrei aggiungere OrderCloseX() per non riscrivere tutto il codice:

Grazie. Lo correggerò. Già corretto. Forse questa è la ragione: la funzione OrderCloseX() viene chiamata su una delle coppie che poi viene eseguita su tutte le altre coppie e numeri magici. Può essere, può essere. Grazie ancora.

 
Igor Makanu:

Cifre - Variabili predefinite

Ho anche deciso di usare questa funzione, ho letto che se il numero di cifre nell'ufficio è 5 per esempio 1.00000 e gli ultimi valori sono zeri potrebbe non restituire 5 cifre ma zero o per esempio il numero sembrerà 1.24700 restituirà 3 cifre decimali anche se dovrebbero essercene 5 è vero?

 
Seric29:

Ho anche deciso di usare questa funzione, ho letto che se il numero di cifre in uno stabile di 5 caratteri per esempio 1.00000 e l'ultimo valore di zero potrebbe non restituire 5 caratteri ma zero, o per esempio il numero sembrerà 1.24700 restituirà 3 cifre decimali anche se dovrebbero essercene 5 è vero?

Le cifre sono usate con NormalizeDouble

https://docs.mql4.com/ru/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
All'improvviso, tutti i terminali hanno perso la connessione con i broker. Ovunque l'errore di connessione non è riuscito.
Nella finestra di login, il server non mi permette di selezionare un server, è vuoto. Non ho cambiato nulla prima, non ho installato nulla o cancellato nulla.
Qual è la ragione?