Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1480

 
Artyom Trishkin #:
Può. Allora si riceveranno due valori, solo nelle variabili passate per riferimento. Cioè, la funzione restituisce tre valori

Per motivi di interesse, ho eliminato la variabile d. Ho lasciato solo la funzione. Il risultato della stampa non è cambiato. Ad essere onesti, non capisco affatto i tre valori.

Saluti, Vladimir.

 
MrBrooklin #:

Per motivi di interesse, ho eliminato la variabile d. Ho lasciato solo la funzione. Il risultato della stampa non è cambiato. Ad essere onesti, non capisco affatto i tre valori.

Saluti, Vladimir.

Non è cambiato perché questo valore non è stato stampato.

Aggiungete la stampa e vedrete.

 
Alexey Viktorov #:

Non modificato perché questo valore non è stato stampato.

Basta aggiungere la stampa e si vedrà.

L'ho stampato. È rimasto lo stesso.

2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b перед вызовом:14 8
2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b после вызова:28 4

Forse ho frainteso di nuovo qualcosa? O avevi bisogno di stampare lavariabiled? È di questo che stavamo parlando?

Saluti, Vladimir.

 
MrBrooklin #:

Stampato. Così com'era, tutto rimane invariato.

Saluti, Vladimir.

Stampato dove?

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d=SecondMethod(a,b);
   Print("Результат выполнения функции ", d);
   Print("a и b после вызова:",a," ",b, " ",d);// или здесь. А можно и там и тут…
  }
//+------------------------------------------------------------------+
 
Alexey Viktorov #:

Stampato dove?

Ora ho capito tutto. )) Grazie a tutti!

Saluti, Vladimir.

 
Buongiorno e buon umore a tutti! Continuo a studiare il linguaggio di programmazione MQL5. Ho scritto un piccolo script per calcolare il numero totale di posizioni aperte e stampare alcuni parametri, compresi gli eventuali codici di errore:
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позиций
   if(pos_total > 0) // если есть открытые позиции
     {
      for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
        {
         if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
           {
            ulong  pos_id = PositionGetInteger(POSITION_IDENTIFIER);
            double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = PositionGetDouble(POSITION_TP);
            double pos_sl = PositionGetDouble(POSITION_SL);
            PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
           }
         else // если выбрать позицию не удалось
           {
            PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", _Symbol, GetLastError());
           }
        }
     }
  }
//+------------------------------------------------------------------+

L'ho eseguito su un simbolo in cui ci sono posizioni aperte. Funziona correttamente, le informazioni vengono stampate correttamente. Avanti. Avviato sul simbolo in cui non ci sono posizioni aperte. Le informazioni sul fatto che non ci sono posizioni aperte vengono visualizzate correttamente, ma il codice della causa dell'errore, per qualche motivo, no. Potete aiutarmi a capire perché il codice di errore non viene visualizzato?

Cordiali saluti, Vladimir.

 
MrBrooklin #:

L'ho avviato su un simbolo con posizioni aperte. Funziona correttamente, le informazioni vengono visualizzate correttamente. Successivamente. L'ho eseguito su un simbolo senza posizioni aperte. Le informazioni sul fatto che non ci sono posizioni aperte vengono visualizzate correttamente, ma il codice della causa dell'errore, per qualche motivo, no. Potete aiutarmi a capire perché il codice di errore non viene visualizzato?

Da dove viene il codice di errore se non c'è alcun errore? È solo il simbolo sbagliato per la posizione.

 
JRandomTrader #:

Perché dovrebbe esserci un codice di errore se non c'è alcun errore? È solo il simbolo sbagliato per la posizione.

Grazie per la risposta! Mi aspettavo che venisse visualizzato almeno questo codice di errore:

ERR_TRADE_POSITION_NOT_FOUND

4753

Posizione non trovata


Non sono d'accordo sul simbolo. Il simbolo è esattamente quello sul cui grafico è stato lanciato questo script. Ora non ho posizioni aperte sul simbolo GBPUSDrfd, ma non c'è nemmeno l'errore. Non è chiaro!!!

2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 
2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 

Saluti, Vladimir.

 
MrBrooklin #:

Grazie per la risposta! Mi aspettavo che venisse visualizzato almeno questo codice di errore:

ERR_TRADE_POSITION_NOT_FOUND

4753

Posizione non trovata


Non sono d'accordo sul simbolo. Il simbolo è esattamente quello sul cui grafico è stato lanciato questo script. Non ho posizioni aperte sul simbolo GBPUSDrfd, ma non ho nemmeno un errore. Non capisco!!!

Saluti, Vladimir.

Tutte le posizioni sono state trovate! Ma nessuna delle posizioni trovate ha il simbolo che ci serve.

 
JRandomTrader #:

Tutte le posizioni trovate! Ma nessuna delle posizioni trovate ha il simbolo che ci serve.

Ora ho capito. Grazie!!! Risulta che se c'è almeno una posizione aperta, il codice di errore 4753 non appare mai.

Saluti, Vladimir.

Motivazione: