Errori, bug, domande - pagina 3018

 
Artyom Trishkin:

Poi si dovrà disegnare alla linea dell'indicatore + candele per l'indicatore che dovrebbe essere disegnato sotto le candele. Per gli altri - che sono disegnati sopra le candele, imposta il grafico per disegnare le candele sullo sfondo. Personalmente non vedo altro modo.

Ma, in termini di convenienza e flessibilità nella costruzione di programmi in MQL5, si può chiedere agli sviluppatori MQL5 di creare una proprietà per il buffer indicatore (per qualsiasi buffer indicatore).

 

nella build 2940 hanno riscritto Alglib, ora lavorare con i numeri complessi è una struttura (c'era una classe)

e ha commesso degli errori:

#include <Math\Alglib\complex.mqh>
void OnStart()
{
      al_complex a(1, 2);
      al_complex b(3, 4);
      a += b;
      printf("tst#1 : a.real = %f , a.imag = %f", a.re, a.im);

      al_complex c(1, 2);
      al_complex d(3, 4);
      c -= d;
      printf("tst#2 : c.real = %f , c.imag = %f", c.re, c.im);
 }

2021.05.23 21:49:35.210 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:49:35.210 tst (EURUSD,H1) tst#2 : c.real = 4.000000 , c.imag = 6.000000


complesso sorgente .mqh

//+------------------------------------------------------------------+
//| Overloading (+=)                                                 |
//+------------------------------------------------------------------+
void al_complex::operator+=(const al_complex &rhs)
  {
   re+=rhs.re;
   im+=rhs.im;
  }
//+------------------------------------------------------------------+
//| Overloading (-=)                                                 |
//+------------------------------------------------------------------+
void al_complex::operator-=(const al_complex &rhs)
  {
   re+=rhs.re;
   im+=rhs.im;
  }
 

Non ricordo che è stato annunciato un nuovo complesso di tipi di dati, ma senza librerie di plugin tutto funziona correttamente:

void OnStart()
{
      complex a(1, 2);
      complex b(3, 4);
      a += b;
      printf("tst#1 : a.real = %f , a.imag = %f", a.real, a.imag);

      complex c(1, 2);
      complex d(3, 4);
      c -= d;
      printf("tst#2 : c.real = %f , c.imag = %f", c.real, c.imag);
 }

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#2 : c.real = -2.000000 , c.imag = -2.000000




Da dove viene il nuovo tipo complesso? .... non c'è niente nella guida, e cos'altro è stato aggiunto?

 
Igor Makanu:

Non ricordo che è stato annunciato un nuovo complesso di tipi di dati, ma senza librerie di plugin tutto funziona correttamente:

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#2 : c.real = -2.000000 , c.imag = -2.000000




Da dove viene il nuovo tipo complesso? .... non c'è niente nella guida, e cos'altro è stato aggiunto?

C'è stata una conferma da parte degli sviluppatori che sono stati aggiunti nuovi tipi. Recentemente.

 
Igor Makanu:

Non ricordo che è stato annunciato un nuovo complesso di tipi di dati, ma senza librerie di plugin tutto funziona correttamente:

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#1 : a.real = 4.000000 , a.imag = 6.000000

2021.05.23 21:54:13.976 tst (EURUSD,H1) tst#2 : c.real = -2.000000 , c.imag = -2.000000

Da dove viene il nuovo tipo complesso? .... non c'è niente nell'aiuto, e cos'altro è stato aggiunto?

Qui:

7. MQL5: Aggiunto il supporto per le operazioni con i numeri complessi.


Aggiunto un nuovo tipo incorporato "complex".
struct complex
  {
   double             real;   // вещественная часть
   double             imag;   // мнимая часть
  };
Il tipo "complesso" può essere passato per valore come parametro per le funzioni MQL5 (al contrario delle solite strutture, che vengono passate solo per riferimento). Per le funzioni importate dalla DLL, il tipo "complesso" deve essere passato solo per riferimento.

Per descrivere le costanti complesse si usa il suffisso 'i':
.
complex square(complex c)
  {
   return(c*c);
  }
  
void OnStart()
  {
   Print(square(1+2 i));  // в качестве параметра передается константа
  }

// будет выведено "(-3,4)" - это строковое представление комплексного числа
Per i numeri complessi sono disponibili solo operazioni semplici: =, +, -, *, /, +=, -=, *=, /=, ==, !=.

Altre funzioni matematiche saranno aggiunte in futuro: ottenere il valore assoluto, seno, coseno e molte altre.
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
  • 2021.05.14
  • www.mql5.com
В пятницу 21 мая 2021 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Artyom Trishkin:

Qui:

7. MQL5: Aggiunto il supporto per lavorare con i numeri complessi.


Aggiunto un nuovo tipo incorporato "complex".
Il tipo complesso può essere passato per valore come parametro per le funzioni MQL5 (in contrasto con le solite strutture, che vengono passate solo per riferimento). Per le funzioni importate dalla DLL, il tipo "complesso" deve essere passato solo per riferimento.

Per descrivere le costanti complesse si usa il suffisso 'i':
Per i numeri complessi sono attualmente disponibili solo operazioni semplici: =, +, -, *, /, +=, -=, *=, /=, ==, !=.

Altre funzioni matematiche saranno aggiunte in futuro: ottenere il valore assoluto, seno, coseno e molte altre.

OK grazie, è un peccato che l'aiuto sia stato aggiunto in ritardo

 
Errore di esecuzione:
void OnStart()
{
    const string text[] = { "ABC", "", "ABC" };
    uchar array[];
    int start = 0;
    int n = 0;
    for ( int i = 0; i < ArraySize( text ); i++ )
    {
        const int count = StringLen( text[ i ] );
        n += StringToCharArray( text[ i ], array, start, count );
        start += count;
    }
    Print( ArraySize( array ), ":", n );
}

Risultato: 6:7

Previsto: 6:6

 
A100:
Errore di esecuzione:

Risultato: 6:7

Previsto: 6:6

count = 0 - viene copiata solo la fine della stringa. Eppure "" != NULL.

 
fxsaber:

count = 0 - viene copiata solo la fine della stringa. Ancora "" != NULL.

E quanti

StringToCharArray

dovrebbe copiare a count = 0?

Suggerimento: 3 caratteri sono copiati quando count = 3

 
A100:

dovrebbe copiare i caratteri quando il conteggio = 0?

sembra che count=0 funzioni allo stesso modo di count=-1 e nel caso di "" copia un null terminale, quindi senza controlli aggiuntivi una stringa vuota non può essere convertita normalmente