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

 
Andrey Sokolov:

Saluti. Potresti dirmi qualcosa, per favore?

È possibile ottenere il nome di una variabile invece del suo valore? Per esempio, stampare il nome di una variabile.

#define PRINTVAR(x) Print(" " ##x); Print(x)
void OnStart()
  {
      long anyvar=(long)TimeLocal();
      PRINTVAR(anyvar);
  
  }

risultato:

2020.08.24 14:46:05.394    test (USDCHF,H1)     anyvar
2020.08.24 14:46:05.394    test (USDCHF,H1)    1598280365

Forse una caratteristica da inedito :-) simile a "C", ma non ancora utilizzabile

 
Andrey Sokolov:

Dovete ottenere il nome della variabile stessa.

Senza conoscere il nome, e senza alcuna caratteristica distintiva, questo non può essere fatto. Potete, per esempio, ottenere i nomi di tutte le variabili uguali a 5 e stampare i loro nomi, trovati, stampati. O i nomi di tutte le variabili stringa. Ma in ogni caso è un'enumerazione variabile.

 
 
Andrey Sokolov:
Maxim Kuznetsov Grazie


Sì, si tratta anche di selezionare una variabile per nome.

Per esempio, ci sono variabili a1, a2, a3, a4, a5, ecc. Dovete cercare anche tra queste variabili, scegliere quale ha "a" e 5, e usarla.

allora non c'è quasi nessun modo. I nomi delle variabili sono accessibili solo dal preprocessore (#macros).

Dobbiamo cambiare la logica interna, per esempio usare un array di hash di nomi al posto delle variabili. Allora sia la chiave che il valore sono disponibili contemporaneamente. O usare SQLite in caso di archiviazione a lungo termine. O combinarli :-)

Ma è così, senza la conoscenza dell'algoritmo, consigli invano.

 
Andrey Sokolov:

Sì, si tratta anche di selezionare una variabile per nome.

Per esempio, ci sono variabili a1, a2, a3, a4, a5, ecc. Dobbiamo enumerare anche queste variabili, scegliere quale ha "a" e 5, e usarla.

Scrivi i nomi in una matrice e passa attraverso la matrice.

 

Buon giorno a tutti, la mia domanda riguarda il tester MT4, il linguaggio mql4
Per favore, ditemi qual è il mio errore quando inizializzo un array. Ho creato un array unidimensionale con 750 elementi. Ho inizializzato tutti i 750 elementi con il valore 50.0.

Significa che nel primo tick e nei successivi, il primo elemento della matrice con indice 0 deve avere valore 50,0 e l'ultimo elemento della matrice con indice 749 deve avere valore 50,0.

Infatti si scopre che l'ultimo elemento dell'array ha valore 0. E il primo, come dovrebbe essere, è 50.0.

La domanda. Come fare in modo che tutti i valori dell'array (compreso l'ultimo) abbiano il valore 50.0 dopo l'inizializzazione

Ecco il mio codice

doppio S_L[750]={50.0};

void OnTick()
{
if (Day()==4&&Month()==1&&Year()==2010&&Hour()==0&&Minute()==0)

Print("=========================749======= ",S_L[749]," =0= ",S_L[0]);

}

In fondo al valore di Print() del diario

2020.08.24 17:43:55.427 GBPUSD,M1: 52255 eventi tick (1440 barre, 53256 stati delle barre) processati in 0:00:00.047 (tempo totale 0:00:02.422)

2020.08.24 17:43:55.407 2010.01.04 00:00:53 TESTER(B.ORG) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:52 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:50 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:47 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:45 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:43 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:41 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:40 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:37 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:35 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:32 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:30 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:28 TESTER(B.ORDERS) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:26 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:25 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:22 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:20 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:17 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:15 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:13 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:11 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:10 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:07 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:05 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:02 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00 TESTER(B.ORD) GBPUSD,M1: =========================749======= 0 = 0= 50

2020.08.24 17:43:55.385 2010.01.01 00:00:00 Tester(B.ORD.) test avviato


Grazie per l'aiuto


Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
 
ANDREY:

Ecco il mio.

Dove?))

 
Alexey Viktorov:

Dove?)))

In cima al mio post modificato. Grazie per la risposta.

 

ANDREY:

Domanda. Come posso fare in modo che tutti i valori del mio array (compreso l'ultimo) abbiano un valore di 50.0 dopo l'inizializzazione?

int OnInit()
{
   ArrayInitialize(S_L, 50.0);
}
 
Igor Makanu:

Grazie per il suggerimento. A proposito, volevo chiarire..... Nel tutorial di Kovalev si dice che l'array può essere inizializzato simultaneamente alla sua dichiarazione (come ho fatto io), senza alcuna funzione speciale. So che il tutorial di Kovalev è un po' datato. D. Ho capito bene che ora in mql4 gli array dovrebbero essere inizializzati solo usando una funzione?

ArrayInitialize(S_L, 50.0)

Grazie.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...