Errori, bug, domande - pagina 1440
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
MT 4. Generatore di numeri casuali MathRand() all'interno di OnTick(). Quando si testa il gufo, si ottengono risultati diversi quando viene eseguito nuovamente con le stesse impostazioni. Questo è naturale se il numero generato influenza l'algoritmo.
Durante l'ottimizzazione, ottengo per qualche motivo risultati identici su una seconda esecuzione con le stesse impostazioni. Quindi MathRand() non funziona in modalità di ottimizzazione?
In secondo luogo (ho paura di fare un errore qui, spero cheAlexander Puzanov possa correggermi semmai), se il programmatore per qualche motivo decide di aggiungere un elemento con indice 20 a un array dinamico, non accadrà nulla di male. L'array prenderà questa dimensione e vi scriverà un valore e inizializzerà gli indici "mancanti" con valori zero.
Esattamente. Perché "zero"? Forse dovrebbe essere EMPTY_VALUE? O WRONG_VALUE?
Il problema di tali assegnazioni implicite è proprio la loro natura implicita - il compilatore introduce del codice, che un programmatore pensa in un modo, mentre un altro potrebbe pensare diversamente.
Inoltre è inefficace - non è sempre necessario inizializzare una variabile immediatamente, e inizializzare un grande array in un ciclo può ridurre significativamente la velocità.
E terzo, nessuno impedisce al programmatore di controllare la dimensionalità e l'indice utilizzato! L'unica differenza è che ora è costretto a farlo! )))
Se il compilatore stesso tiene traccia della dimensione di un array, nessuna classe sarà in grado di pulire questo codice. L'efficienza può benissimo diminuire.
Allo stesso tempo, se il compilatore non si occupa di questo compito, il programmatore può scrivere una classe per farlo e quindi utilizzare un array che si espanderà e sarà inizializzato con zeri dove necessario.
Nel secondo caso, la flessibilità è maggiore.
Quindi, quello che proponi è anche una buona soluzione per molti casi. Ma può diminuire l'efficienza, il che non è buono.
Questo è, in linea di principio, un semplice esempio di come un array dinamico dovrebbe normalmente essere riempito. Non scrivo in C da molto tempo, non mi ricordo, ma è così che si riempiono gli array in php! Tutto è logico e comprensibile. Se aggiungo un elemento a un array (arr[] = x), l'array viene automaticamente espanso, e l'elemento viene aggiunto alla fine dell'array. E non dobbiamo allungarlo da soli, e non dobbiamo specificare l'indice dell'elemento da soli. Ma qui dobbiamo fare movimenti assolutamente inutili:
la differenza è evidente...
Secondo me, è strano, per non dire altro ))))
I linguaggi di programmazione si dividono in strettamente tipizzati e non. Il tuo PHP, R e altri linguaggi funzionali appartengono a quelli non strettamente tipizzati. Nei linguaggi strettamente tipizzati come MQL o C# e Java questo tipo di manipolazione ambigua dei dati non è permesso. E questo è fatto specificamente per la sicurezza del programmatore stesso. La tipizzazione rigorosa implica che ogni vostra procedura sia estremamente specifica: "prendere un elemento all'indice 0 nell'array" è una procedura specifica e chiara, ma voi proponete di sostituirla con "prendere qualcosa dall'array e aggiungerlo a qualsiasi cosa il compilatore decida di restituire per primo". - Siete d'accordo che non andrete lontano su questo.
D'altra parte, naturalmente, vogliamo semplici costrutti di alto livello senza fastidiosi dimensionamenti di array e costanti riordinamenti da parte dell'utente. Questo è esattamente ciò a cui serve la libreria standard. Invece di usare gli array di base, passate alle classi del gruppo Array. Ecco come appare, per esempio, l'aggiunta da zero a 16 nell'array CArrayInt:
Come potete vedere, non c'è niente di troppo naturale. E non c'è bisogno di scervellarsi sulla dimensione attuale dell'array e su altri riordinamenti. Tutto è fatto per voi, all'interno di una rigorosa digitazione, e siete invitati a concentrarvi direttamente sul compito dell'utente. Questo è il potere e il punto di OOP.
Registrazione completa non disponibile. Errore di compilazione
Non riesco a trovare dove ho sbagliato.
Il compito è trovare il valore massimo e minimo su un intervallo
Ordine errato degli argomenti in ArrayMaximum(), ArrayMinimum().
Non riesco a trovare dove ho sbagliato.
Il compito è trovare il valore massimo e minimo su un intervallo
Funzioni
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//copia i valori dei massimi
CopyLow(_Symbol,0,2,Kol_Kan,LO); //copia i valori minimi
già ridimensionare l'array.
Questo non è necessario
ArrayResize(HI,Kol_Kan); //imposta la dimensione dell'array
ArrayResize(LO,Kol_Kan);
Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().
Esattamente)) E io che pensavo...
Funzioni
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//copia i valori dei massimi
CopyLow(_Symbol,0,2,Kol_Kan,LO); //copia i valori minimi
già ridimensionare l'array.
Questo non è necessario
ArrayResize(HI,Kol_Kan); //imposta la dimensione dell'array
ArrayResize(LO,Kol_Kan);
Lo saprò, grazie.
L'autore, invece, l'ha già capito. ))
PabloEs:
Esattamente.)) E io che pensavo...