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

 
Alexey Viktorov #:

Non sto discutendo. "Quelli grigi sono mostrati nella foto di questo post.


Senza il materiale di partenza, questi sono quelli


Beh, io parlavo di "questi". Quando ho avuto un overflow e gli indicatori non si vedevano, non ho guardato cosa veniva mostrato nel menu mostrato nello screenshot del post che hai citato. Non posso dire nulla di sicuro qui.

Ma se gli indicatori non sono nel navigatore, ma sono nella cartella, significa che i nuovi non appariranno nel navigatore finché alcuni dei vecchi non saranno rimossi dalla cartella.

Ci sono stato, l'ho fatto. Non sono l'unico.

 

Volevo aggirare la necessità di ridimensionare manualmente l'array dinamico semplicemente assegnandolo come buffer dell'indicatore. Ma non riesco a sbarazzarmi di ArrayResize() come se fosse un array dinamico di buffer di indicatori la cui dimensione dovrebbe essere monitorata dal terminale stesso e che non dovrebbe essere ridimensionata manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.

Andiamo su https://www.mql5.com/ru/docs/array/arrayisdynamic, eseguiamo il codice e improvvisamente scopriamo che:

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3. Controllo del buffer dell'indicatore:

2022.01.24 21:25:27.543 t (NZDUSD,D1) Dimensione prima del rilascio della memoria = 7278

2022.01.24 21:25:27.543 t (NZDUSD,D1) Questo è un array dinamico = Nessuno

2022.01.24 21:25:27.543 t (NZDUSD,D1) Dimensione dopo il rilascio della memoria = 0

allo stesso tempo:

double ExtBuff[];      // индикаторный буфер
SetIndexBuffer(0,ExtBuff);

Guardo nel libro - vedo un fico. O siamo stati ingannati per tutto questo tempo?

O forse è dinamico una volta (alla prima inizializzazione) e poi basta?

 
x572intraday #:

Non riesco a sbarazzarmi di ArrayResize(), che è presumibilmente un array dinamico di buffer di indicatori la cui dimensione dovrebbe essere monitorata dal terminale stesso e che presumibilmente non ha bisogno di essere ridimensionato manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Andiamo su https://www.mql5.com/ru/docs/array/arrayisdynamic, eseguiamo il codice e improvvisamente scopriamo che:

Allo stesso tempo:

Guardo nel libro - vedo un fico. O siamo stati ingannati per tutto questo tempo?

O forse è dinamico una volta (alla prima inizializzazione) e poi basta?

22:23:17.002 Dinamica EURCAD,H1: +============================+

0 22:23:17.002 Dinamica EURCAD,H1: 1. Controllo di una matrice dinamica:

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione prima del rilascio della memoria = 100

0 22:23:17.002 Dynamic EURCAD,H1: Questo è Array dinamico = Sì

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione dopo la memoria libera = 0

0 22:23:17.002 Dinamica EURCAD,H1: 2. Controllo statico dell'array:

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione prima della memoria libera = 100

0 22:23:17.002 Dynamic EURCAD,H1: Questo è un array dinamico = Nessuno

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione dopo la memoria libera = 0

0 22:23:17.002 dinamica EURCAD,H1: 3. Controllare il buffer dell'indicatore:

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione prima della memoria libera = 2725

0 22:23:17.002 Dynamic EURCAD,H1: Questo è un array dinamico = Sì

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione dopo il rilascio della memoria = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 indicatore personalizzato Dynamic EURCAD,H1: rimosso

Questo è al 4.

 
x572intraday #:

Volevo aggirare la necessità di ridimensionare manualmente l'array dinamico semplicemente assegnandolo come buffer dell'indicatore. Ma non riesco a sbarazzarmi di ArrayResize() come se fosse un array dinamico di buffer di indicatori la cui dimensione dovrebbe essere monitorata dal terminale stesso e che non dovrebbe essere ridimensionata manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Andiamo su https://www.mql5.com/ru/docs/array/arrayisdynamic, eseguiamo il codice e improvvisamente scopriamo che:

Allo stesso tempo:

Guardo nel libro - vedo un fico. O siamo stati ingannati per tutto questo tempo?

O forse è una volta sola dinamica (alla prima inizializzazione) e poi basta?

sì, allora è così :-)

...dopo SetIndexBuffer è impossibile usare ArrayResize e dal punto di vista del programma, l'array è statico, con una dimensione predefinita (controllata esternamente)

 
Alekseu Fedotov #:

22:23:17.002 Dinamica EURCAD,H1: +============================+

0 22:23:17.002 Dinamica EURCAD,H1: 1. Controllo di una matrice dinamica:

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione prima del rilascio della memoria = 100

0 22:23:17.002 Dynamic EURCAD,H1: Questo è Dynamic Array = Sì

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione dopo la memoria libera = 0

0 22:23:17.002 Dinamica EURCAD,H1: 2. Controllo statico dell'array:

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione prima della memoria libera = 100

0 22:23:17.002 Dynamic EURCAD,H1: Questo è un array dinamico = Nessuno

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione dopo la memoria libera = 0

0 22:23:17.002 Dinamica EURCAD,H1: 3. Controllare il buffer dell'indicatore:

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione prima della memoria libera = 2725

0 22:23:17.002 Dynamic EURCAD,H1: Questo è un array dinamico = Sì

0 22:23:17.002 Dynamic EURCAD,H1: Dimensione dopo il rilascio della memoria = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 indicatore personalizzato Dynamic EURCAD,H1: rimosso

Questo è al 4.

Fantastico! Cos'è questa magia? Ho appena controllato su EURCAD,H1 - di nuovo no.

E cos'è il 4? Ci sono solo tre punti nell'esempio.

 
x572intraday #:

Fantastico! Cos'è questa magia? Ho appena controllato su EURCAD,H1 - "No" di nuovo.

E cos'è il 4? Ci sono solo tre punti nell'esempio.

Terminale MT4

 
x572intraday #:

Fantastico! Qual è la magia? Ho appena controllato su EURCAD,H1 - "No" di nuovo.

E cos'è il 4? Ci sono solo tre punti nell'esempio.

0 23:33:06.088 test (EURUSD,D1) +============================+

0 23:33:06.088 test (EURUSD,D1) 1. Controllo dell'array dinamico:

0 23:33:06.088 test (EURUSD,D1) Dimensione prima del rilascio della memoria = 100

0 23:33:06.088 test (EURUSD,D1) Questo è un array dinamico = Sì

0 23:33:06.088 test (EURUSD,D1) Dimensione dopo il rilascio della memoria = 0

0 23:33:06.088 test (EURUSD,D1) 2. Test statico della matrice:

0 23:33:06.088 test (EURUSD,D1) Dimensione prima della memoria libera = 100

0 23:33:06.088 test (EURUSD,D1) Questo è un array dinamico = Nessuno

0 23:33:06.088 test (EURUSD,D1) Dimensione dopo il rilascio della memoria = 100

0 23:33:06.088 test (EURUSD,D1) 3. Controlla il buffer degli indicatori:

0 23:33:06.088 test (EURUSD,D1) Dimensione prima della memoria libera = 1054

0 23:33:06.088 test (EURUSD,D1) Questo è un array dinamico = Nessuno

0 23:33:06.088 test (EURUSD,D1) Dimensione dopo il rilascio della memoria = 0


Terminale MT5, nessun pensiero.

 
x572intraday #:

Volevo aggirare la necessità di ridimensionare manualmente l'array dinamico semplicemente assegnandolo come buffer dell'indicatore. Ma non riesco a sbarazzarmi di ArrayResize() come se fosse un array dinamico di buffer di indicatori la cui dimensione dovrebbe essere monitorata dal terminale stesso e che non dovrebbe essere ridimensionata manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Andiamo su https://www.mql5.com/ru/docs/array/arrayisdynamic, eseguiamo il codice e improvvisamente scopriamo che:

Allo stesso tempo:

Guardo nel libro - vedo un fico. O siamo stati ingannati per tutto questo tempo?

O forse è dinamico una volta (alla prima inizializzazione) e poi basta?

L'array di buffer è dinamico. In MQL, gli array dinamici hanno segni di oggetti, per quanto ho capito lavorando con loro (come nei linguaggi di altissimo livello). Ma se dichiarate un array dinamico come buffer (usando SetIndexBuffer), quest'area di memoria diventerà riservata. Ecco perché la maggior parte delle funzioni standard non può cambiare le sue dimensioni. A volte uso gli array di oggetti come buffer di indicatori. E se lo faccio, la memoria di tali array viene liberata nel distruttore dell'oggetto. Così, il rilascio della memoria del buffer dell'indicatore da parte dell'applicazione(o dell'oggetto) stessa è permesso. Ma non significa che l'array può essere liberato proprio durante il funzionamento dell'indicatore. Tutto dovrebbe essere fatto con saggezza.

 

Pomeriggio

Potete consigliarmi, sto cercando di scrivere un Expert Advisor, e quando lo provo succede una cosa strana...

Ho una funzione

CalcAngleTrend(NormalizeDouble((a[0]-a[1]), MA_DIGITS));

double CalcAngleTrend(double d)
 {
  double a = (double) ((atan(d*pow(10,_Digits-2)))*(180/M_PI)*coefAngle);
Print("d: ", d);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

Qual è la situazione, avvio un'istanza dell'EA in esecuzione su un grafico, ed eseguo la seconda in modalità debug sullo stesso grafico con MT4
I dati di input per la funzione sono gli stessi, ma i dati di output sono diversi!!!? Non capisco qualcosa, sembra...(

Это выдает запущеный вариант:

2022.01.25 15:01:12.880 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:12.880 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:12.880 USDJPY,M5: Angle Slow: +1.70580000
2022.01.25 15:01:12.880 USDJPY,M5: Angle Fast: -6.96560000

это в режиме отладки:

2022.01.25 15:01:14.330 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:14.330 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:14.330 USDJPY,M5: Angle Slow: +4.26450000
2022.01.25 15:01:14.330 USDJPY,M5: Angle Fast: -17.41390000

consigliatemi da che parte scavare per trovare informazioni!!!

PS: calcolato la differenza di esattamente 2,5 volte l'uscita
 
Владимир Казаков scrivere un Expert Advisor, e quando lo provo succede una cosa strana...

Ho una funzione

Qual è la situazione, avvio un'istanza dell'EA in esecuzione su un grafico, ed eseguo la seconda in modalità debug sullo stesso grafico con MT4
I dati di input per la funzione sono gli stessi, ma i dati di output sono diversi!!!? Non capisco qualcosa, sembra...(

potete dirmi da che parte scavare per ottenere informazioni?!

PS: calcolato la differenza di esattamente 2,5 volte l'uscita

È tutta una questione di formula per calcolare l'angolo. Nel codice si può vedere che per il suo calcolo ha usato solo una coordinata e qualche coefficiente, il cui scopo non è chiaro. Che cos'è questo? Per favore, spiegate quali dati state usando per calcolare l'angolo.

Motivazione: