Errori, bug, domande - pagina 1782
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
Quali funzionano?
La regola di perdere le cifre significative e riempirle con lavori casuali
Il risultato è lungo, ma nei calcoli intermedi del doppio ed è lì che si perdono cifre significative
(Cifre+1)*3-1=17
La regola di perdere le cifre significative e riempirle con lavori casuali
Il risultato è lungo, ma nei calcoli intermedi del doppio ed è lì che si perdono cifre significative
(Cifre+1)*3-1=17
Grazie per le informazioni.
Tuttavia, l'informazione è difficile da afferrare - cioè il numero può essere così, ma non si possono fare calcoli con esso?
Ecco un esempio di codice dove viene convertito da stringa a numero
Print ("CalcY=",CalcY);
Stampa il numero 111111111111111104.
Cioè non ci sono calcoli qui o mi sbaglio?
È possibile gestire questi numeri o si tratta di limitazioni della lingua?
Quindi non ci sono calcoli qui, o mi sbaglio?
Un calcolo è una qualsiasi operazione (in questocaso una conversione). Per il numero specificato StringToDouble restituisce doppio con perdita di precisione
StringToInteger restituisce long, ma altre funzioni che operano con double non possono essere usate nei calcoli senza perdita di precisione, come NormalizeDouble, MathPow
Computazione - qualsiasi operazione (in questo caso una conversione). StringToDouble restituisce doppio - c'è una perdita di precisione
StringToInteger restituisce long, ma altre funzioni che operano con double non possono essere usate nei calcoli senza perdita di precisione, come NormalizeDouble, MathPow,
StringToInteger ha funzionato per esprimere il numero, ma poi diventa peggio, credo che il numero debba essere scomposto nei suoi componenti per le operazioni matematiche...
Print ("CalcZ=",CalcZ);
double Test=CalcZ;
Print ("Test=",Test);
Test=1.111111111111111e+17
Di nuovo, è scritto nell'helpdesk
INT_MAX
Valore massimo che può essere rappresentato dal tipo int
2147483647
Allora come ha fatto StringToInteger a eseguire la conversione e a memorizzarla in long se il numero è più grande del consentito?
Allora come ha fatto StringToInteger a convertire e memorizzare in long se il numero è più grande del consentito?
StringToInteger originariamente restituisce long entroLONG_MINLONG_MAX(potrebbe anche essere chiamato StringToColobok)
StringToInteger originariamente restituisce long (avrebbe anche potuto essere chiamato StringToBoob)
Certo, questo è probabilmente vero, ma nell'aiuto è così confuso
"
Converte una stringa contenente una rappresentazione a caratteri di un numero in un numero int(intero).
"
È questo che mi ha fuorviato.
Grazie per le informazioni.
Immagino che la rappresentazione dei numeri di cui sopra non entrerà nel buffer grafico?
Suppongo che il numero di cui sopra non entrerà nel buffer grafico?
Sono scritti come B'1111111111111111111111111111111111111111'
Affermo (e suggerisco di controllare) che quando il timeframe viene cambiato da M5 a M15 nessun comando M5 Deinit viene inviato al primo indicatore (e solo ad esso - in questo caso M5) e non si scaricherà dal grafico finché l'utente non cancella l'EA
Si noti che in MT5, il nucleo di calcolo dell'indicatore è una risorsa condivisa con un contatore di utilizzo nel proprio gestore. Se diversi programmi o finestre utilizzano l'indicatore con gli stessi parametri, una copia di calcolo con il contatore di utilizzo funziona effettivamente. Questo fa risparmiare molto denaro quando un trader usa gli stessi indicatori nei grafici e in un Expert Advisor.
Il gestore di indicatori è progettato in modo da rimuovere fisicamente gli indicatori in modo asincrono e con un ritardo. E nel frattempo, viene creata una nuova copia di lavoro con nuovi parametri, che spesso viene inizializzata prima che la vecchia copia venga fisicamente cancellata.
Il gestore di indicatori è progettato in modo da rimuovere fisicamente gli indicatori in modo asincrono e con un ritardo. E nel frattempo viene creata una nuova copia di lavoro con nuovi parametri, che spesso viene inizializzata prima che la vecchia copia venga fisicamente cancellata.
Semplifichiamo l'indicatore
void Prn( string f, int i = -1 ) { Print( f, "->", StringSubstr( EnumToString( Period()), 7 ), (i == -1 ? "" : ":" + i )); }
void OnInit() { Prn( __FUNCTION__ ); }
void OnDeinit( const int reason ) { Prn( __FUNCTION__, reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }
Alleghiamo il Test.mq5 al grafico M5 e poi cambiamo il periodo del grafico da M5->M15
Risultato:
2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15
Domanda: quando sarà chiamato OnDeinit->M5 ?
La mia risposta: mai!
La tua risposta sopra: in modo asincrono e con un ritardo