Auguri per MT5 - pagina 46

 
-Alexey-:
Non sono d'accordo, c'è un problema, ecco un esempio (griglia 10000x10000):

doppio x1=0,0011;

doppio y1=x1/10000;

doppio x2=0,0012;
doppio y2=x2/10000;

doppio c=y1-y2;
doppio d=MathPow(c,2);


printf(string(d));

результат: 9.999999999999968e-017

Quindi cosa devo fare con questo risultato? Come posso confrontarlo con altri risultati? DBL_EPSILON=2.2204460492503131e-016. Oltre alle ultime due cifre - vedi? E sono solo due operazioni. E ho altre di queste operazioni. E queste informazioni devono essere utilizzate per ripristinare i dati in seguito con altre operazioni. Altre perdite. Sto imparando a programmare in un linguaggio simile al C e una tale classe è difficile da costruire per me (o meglio, non ho idea di come). Questo è un lavoro serio. A proposito, per caso, avete un corso del genere? E gli sviluppatori possono migliorare le cose per tutti contemporaneamente. Sarebbe possibile fare 100.000x100.000 griglie. Sarebbero già disponibili campioni più o meno rappresentativi, sebbene anche questo non sia sufficiente in generale. E se facessero una classe per la precisione arbitraria, sarebbe ancora meglio :) È solo un tipo di dati. Se esiste, è lì per una ragione, perché soddisfa un bisogno. Il punto è che non so se sia difficile o meno per gli sviluppatori. Se è difficile e costoso - sono d'accordo con te - perché scaricare il mio problema su di loro. Ma se non è difficile - perché non farlo. Di nuovo - un potente ambiente di sviluppo per i calcoli di trading con alta precisione - qualche vantaggio competitivo qui :). Ecco perché chiedo cosa ne pensano.

Rileggete la forma standard del numero e molte domande spariranno.

Nella forma standard 1,111e5 è più grande di 9,999e4 quindi il confronto è abbastanza corretto.

Ecco lo stesso risultato: 9.99999999999999968e-017 è legato alla rappresentazione binaria del numero, non tutti i numeri in forma binaria sono rappresentati da una frazione finita, alcuni sono rappresentati da una frazione infinita, quindi si arrotonda la mantissa al numero più vicino con una frazione finita.

A proposito, double d=MathPow(c,2); non è corretto prendere il grado, se lavorate con double allora double d=MathPow(c,2.0); quindi, non so se sia un bug o meno, ma quando impostate un numero ad un grado dovreste guardare anche il tipo di indicatore.

 
-Alexey-:
La fantasia non c'entra affatto. La mia domanda è sorta sulla possibilità di implementare il metodo di analisi più comune. E questo è lavorare con la serie che rimane dopo la rimozione della tendenza e del ciclo. Si scrive di questo metodo in tutti, senza eccezione, i libri di testo di statistica finanziaria e di metodo nelle università. Questa non è una fantasia, ma uno degli approcci canonici dell'analisi. E un ambiente specializzato dovrebbe avere i mezzi per implementare questo approccio, non crede?
)))))))
 
Urain:

Rileggete la forma standard del numero e molte domande spariranno.

Nella forma standard 1,111e5 è più grande di 9,999e4 quindi il confronto è abbastanza corretto.

Ecco lo stesso risultato: 9.99999999999999968e-017 è legato alla rappresentazione binaria del numero, non tutti i numeri in forma binaria sono rappresentati da una frazione finita, alcuni sono rappresentati da una frazione infinita, da qui l'arrotondamento della mantissa al numero più vicino con una frazione finita.

Circa l'1,111e5 e il 9,999e4 vedo. Ma ho bisogno di confrontarli: 9.999999999999999999968e-017 (sulla perdita di precisione in cifre ho scritto anche). L'aiuto mi dice che i numeri con una differenza inferiore a DBL_EPSILON dovrebbero essere considerati indistinguibili. Scusa, se non sono stato chiaro - lo sto imparando solo ora :) Grazie separatamente per le informazioni sull'indicatore.

 
Urain:

A proposito, double d=MathPow(c,2); non è corretto prendere il grado, se lavorate con double allora double d=MathPow(c,2.0); quindi, non so bug o no ma quando si imposta un numero in un grado è necessario seguire il tipo di indicatore.

L'esponente deve in ogni caso essere di tipo doppio.
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 

Cari sviluppatori, permettete al tipo void di restituire valori, o definite una nuova classe che restituisca valori di qualsiasi tipo.

Qualcosa del genere:

voids get(int i)
  {
   if(i==0)return((int)2);
   else
     {
      if(i==1)return((double)2);
      else
        {
         if(i==2)return((string)2);
        }
     }
  }

Voglio avere questo tipo di dichiarazione nelle funzioni definite dall'utente:

int  Custom_ArraySize( void  array[] );   
bool Custom_ArraySort( number&  array[] );

e per questo ho bisogno di aggiungere qualcosa alla lingua. Avete fissato troppo gli utenti, dovete allentare un po' la presa da qualche parte.

Immaginate che uno sviluppatore stia scrivendo del codice, ha creato 1500 linee e tutto il codice funziona con un doppio, per passarci un int dovrà fare un overload per altre 1500 linee. E avete 14 tipi.

 
Urain:

Immaginate, una persona scrive del codice, fa 1500 linee, e tutto il codice funziona con il doppio, per passarci dentro dovrete fare l'overloading per altre 1500 linee. E avete 14 tipi.

Usare OOP.

 
lea:

Usare OOP.

Pensi che io scriva in autocodice?

agli sviluppatori:

come opzione per alleviare la situazione della fraternità di scrittura, fare una conversione di tipo array, in modo da poter almeno fare una tale chiamata:

void OnStart()
  {
   int array[10];
   func((double)array)
  }
//+------------------------------------------------------------------+
void func(double &array[]){};
 
Urain:

Pensi che io scriva in autocodice?

A giudicare dal fatto che avevi bisogno di una tale estensione della lingua, credo di sì.

p.s. Se tu avessi avuto solo il compilatore C++ nel momento in cui hai risolto il tuo problema, avremmo sentito un suggerimento per rivedere lo standard del linguaggio?

 
lea:

In base al fatto che avevi bisogno di una tale estensione della lingua - apparentemente, sì.

p.s. Se aveste avuto solo il compilatore C++ al momento del vostro problema - avremmo sentito il suggerimento di rivedere lo standard del linguaggio?

Non confondere traduttore e compilatore. mql non è veramente un compilatore, è un traduttore che descrive chiamate di funzioni C++ sicure.

E mql5 è in fase di sviluppo attivo. Quindi la mia richiesta di modifiche è abbastanza adeguata.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Urain:

Non confondere traduttore e compilatore, mql non è realmente un compilatore, è un traduttore che descrive chiamate di funzioni C++ sicure

Inoltre, mql5 è in fase attiva di sviluppo. Quindi la mia richiesta di apportare modifiche è abbastanza adeguata.

Ok, se è così importante, prendiamo Java e non C++. Anche la traduzione in bytecode :) Si prega di riconsiderare lo standard linguistico?

Una richiesta di aggiungere un tipo universale non è del tutto adeguata, dovresti chiedere dei modelli. E per i tipi universali OOP è sufficiente.