Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1479

 
MrBrooklin #:

Grazie mille, Alexander. La tua correzione ha fatto funzionare il codice. Ad essere sincero, mi sono reso conto di essermi confuso anch'io in tre pini. Devo studiare di nuovo il passaggio di argomenti a una funzione. A quanto pare, ho frainteso completamente.

Saluti, Vladimir.

L'output di variabili nell'area globale non è il passaggio di argomenti a una funzione...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

Mettete & prima dei nomi delle variabili all'ingresso della funzione e tutti i problemi saranno risolti.

 
Alexey Viktorov #:

L'output di variabili all'ambito globale non è il passaggio di argomenti a una funzione...

Mettete & prima dei nomi delle variabili all'ingresso della funzione e tutti i problemi saranno risolti.

Ciao Alexey, quindi è questo il problema!!! Grazie mille, caro! Avevo la testa rotta, pensavo che mancasse qualcos'altro! Si è scoperto che i cervelli non bastano!!!! ))

Saluti, Vladimir.

 
Alexey Viktorov #:
Mettete & davanti ai nomi delle variabili nell'input delle funzioni e tutti i problemi saranno risolti.

Ho trovato e guardato il video sulle funzioni con riferimenti. Da questa lezione video ho capito che non mi serve solo una lezione di MQL5 per principianti, ma una lezione di MQL5 per principianti particolarmente dotati di stupidità. In breve, non ho capito nulla. In generale, è necessario digerire tutte le informazioni ricevute e rivedere questo video cinque o addirittura sei volte. Ma ci sarà qualcosa da fare nel mio tempo libero! ))

Saluti, Vladimir.

 
MrBrooklin #:

Ho trovato e guardato un video sulle funzioni con collegamenti. Da questa lezione video ho capito che non mi serve solo una lezione di MQL5 per principianti, ma una lezione di MQL5 per principianti particolarmente dotati di stupidità. In breve, non ho capito nulla. In generale, è necessario digerire tutte le informazioni ricevute e rivedere questo video cinque o anche sei volte. Ma ci sarà qualcosa da fare nel mio tempo libero! ))

Saluti, Vladimir.

Non perdete tempo, anche se non avete un posto dove passarlo. Il nome del "maestro" parla da solo, un dilettante è un dilettante.

Questo video è utile solo per 3 minuti. Il resto distrae e fa perdere informazioni utili.

È meglio leggere attentamente la documentazione, sperimentare con gli esempi e capirete tutto.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Передача параметров - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Non perdete tempo, anche se non c'è nessun posto dove sprecarlo. Il nome del "maestro" parla da solo, un dilettante è un dilettante.

In questo video ci sono solo 3 minuti di informazioni utili. Il resto è solo una distrazione e si perdono informazioni utili.

È meglio leggere attentamente la documentazione, sperimentare con gli esempi e capirete tutto.

Grazie, Alexey, pensavo che la lezione video sarebbe stata più informativa e utile per me, ma si è rivelata esattamente il contrario. Per quanto riguarda il Manuale di riferimento MQL5, la sezione Trasmissione dei parametri, l'ho letto allo stesso modo, ma si è rivelato come il famoso detto: "Guardo nel libro, vedo la figura!". Non ho capito nulla. Insomma, ovviamente rileggerò e sperimenterò ancora qualche volta, non ho molta scelta. ))

Saluti, Vladimir.

 

Dopo aver visto il video tutorial e aver letto il passaggio di argomenti per riferimento nel Manuale di riferimento MQL5, sembra essere più o meno chiaro. Tuttavia, dopo aver analizzato il codice presentato nel Manuale di riferimento, un frammento mi ha lasciato perplesso, anche se, a mio parere, non ha nulla a che fare con il passaggio di argomenti per riferimento:

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
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("a и b после вызова:",a," ",b);
  }
//+------------------------------------------------------------------+
//--- результат выполнения скрипта
//  a и b перед вызовом: 14 8
//  a и b после вызова: 28 4

A questo proposito, ho una domanda per gli esperti di programmazione MQL5: perché diavolo hanno "ficcato" la funzione SecondMethod(a,b ) nella variabile d in OnStart( )? È un prerequisito per il corretto funzionamento dello script o c'è qualcosa che ho frainteso di nuovo?

Saluti, Vladimir.

 

Aiutatemi, per favore.

Ci sono molti array con il tempo e il tempo di alcuni elementi in questi array può coincidere.

Ho bisogno di raccoglierli in un array senza ripetere i valori temporali.

L'ho fatto in questo modo:

struct str1
  {
   int               time[];// в массиве порядка 10 тыс элементов
  };

struct str2
  {
   str1              arr[];// в массиве порядка 1 тыс элементов
  };

str2 m_name[]; // в массиве порядка 100 элементов

int ArrFull[]; // массив в который нужно собрать отсортированное время без повторений
//+------------------------------------------------------------------+
void OnStart()
  {
// считаем что m_name[] ранее уже заполнили


   int tempArr[];// объявляю дополнительный массив

   int size1 = ArraySize(m_name);
   for(int i = 0; i < size1; i++)
     {
      int size2 = ArraySize(m_name[i].arr);
      for(int j = 0; j < size2; j++)
        {
         // копирую в дополнительный массив все массивы времени из структур
         ArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
        }
     }
// сортирую дополнительный массив
   ArraySort(tempArr);

   int size = ArraySize(tempArr);
   ArrayResize(ArrFull, size);
   ArrFull[0] = tempArr[0];
   int j = 1;

// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работать
   for(int i = 1; i < size; i++)
      if(ArrFull[j - 1] != tempArr[i])
        {
         ArrFull[j] = tempArr[i];
         j++;
        }

   size = ArrayResize(ArrFull, j);

// дальше продолжение. много много букв
  }
//+------------------------------------------------------------------+


Ma si è rivelato un codice molto lento. Deve essere più veloce. Come ????

 
MrBrooklin argomenti per riferimento nel Manuale di riferimento MQL5, sembra essere più o meno chiaro. Tuttavia, dopo aver analizzato il codice presentato nel Manuale di riferimento, un frammento ha causato ancora un po' di confusione, anche se, a mio parere, non ha nulla a che fare con il passaggio di argomenti per riferimento:

A questo proposito, ho una domanda per gli esperti di programmazione MQL5: perché diavolo hanno "ficcato" la funzione SecondMethod(a,b ) nella variabile d in OnStart( )? È un prerequisito per il corretto funzionamento dello script e ho di nuovo frainteso qualcosa?

Cordiali saluti, Vladimir.

Alla variabile d viene assegnato il risultato dell'esecuzione della funzione
 
Artyom Trishkin #:
Alla variabile d viene assegnato il risultato dell'esecuzione della funzione.

Grazie, Artyom, per la tua risposta! Èimpossibile utilizzare solo la funzione SecondMethod(a,b) senza assegnazione?

Cordiali saluti, Vladimir.

 
MrBrooklin #:

Grazie, Artyom, per la tua risposta! Èimpossibile utilizzare solo la funzione SecondMethod(a,b) senza assegnazione?

Saluti, Vladimir.

Sì, è possibile. In tal caso si riceveranno due valori, solo nelle variabili passate per riferimento. Cioè, la funzione restituisce tre valori
Motivazione: