Ошибки, баги, вопросы - страница 3018

 
Artyom Trishkin:

Тогда придётся рисовать к линии индикатора + свечи для того индикатора, который должен рисоваться под свечами. Для остальных - которые рисуются над свечами, установить для графика отрисовку свечей на заднем плане. Другого пути лично я не вижу.

много чего можно сделать, проявив толику извращённости и совсем немного изобретательности. но, с точки зрения удобства и гибкости построения программ на MQL5, можно попросить разработчиков свойство для индикаторного буфера (для любого из буферов индикатора).

 

в билде 2940 переписали Алглиб, теперь работа с комплексными числами это структура(был класс)

и ошибок наделали:

#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


исходник complex .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;
  }
 

не помню чтобы анонсировали новый тип данных complex , но без подключаемых библиотек все работает правильно:

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




откуда взялся новый тип complex ? .... в справке нет ничего, да и что еще добавили?

 
Igor Makanu:

не помню чтобы анонсировали новый тип данных complex , но без подключаемых библиотек все работает правильно:

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




откуда взялся новый тип complex ? .... в справке нет ничего, да и что еще добавили?

Было подтверждение от разработчиков о добавлении новых типов. Недавно.

 
Igor Makanu:

не помню чтобы анонсировали новый тип данных complex , но без подключаемых библиотек все работает правильно:

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

откуда взялся новый тип complex ? .... в справке нет ничего, да и что еще добавили?

Здесь:

7. MQL5: Добавлена поддержка работы с комплексными числами.


Добавлен новый встроенный тип "complex".
struct complex
  {
   double             real;   // вещественная часть
   double             imag;   // мнимая часть
  };
Тип "complex" может передаваться по значению в качестве параметра для MQL5-функций (в отличие от обычных структур, которые передаются только по ссылке). Для функций, импортируемых из DLL, тип "complex" должен передаваться только по ссылке.

Для описания комплексных констант используется суффикс 'i':
complex square(complex c)
  {
   return(c*c);
  }
  
void OnStart()
  {
   Print(square(1+2i));  // в качестве параметра передается константа
  }

// будет выведено "(-3,4)" - это строковое представление комплексного числа
Для комплексных чисел на данный момент доступны только простые операции: =, +, -, *, /, +=, -=, *=, /=, ==, !=.

В дальнейшем будут добавлены дополнительные математические функции: получение абсолютного значения, синуса, косинуса и многие другие.
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
  • 2021.05.14
  • www.mql5.com
В пятницу 21 мая 2021 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Artyom Trishkin:

Здесь:

7. MQL5: Добавлена поддержка работы с комплексными числами.


Добавлен новый встроенный тип "complex".
Тип "complex" может передаваться по значению в качестве параметра для MQL5-функций (в отличие от обычных структур, которые передаются только по ссылке). Для функций, импортируемых из DLL, тип "complex" должен передаваться только по ссылке.

Для описания комплексных констант используется суффикс 'i':
Для комплексных чисел на данный момент доступны только простые операции: =, +, -, *, /, +=, -=, *=, /=, ==, !=.

В дальнейшем будут добавлены дополнительные математические функции: получение абсолютного значения, синуса, косинуса и многие другие.

ОК спасибо, жаль, что справка с опозданием дополняется

 
Ошибка при выполнении:
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 );
}

Результат:   6:7

Ожидалось: 6:6

 
A100:
Ошибка при выполнении:

Результат:   6:7

Ожидалось: 6:6

count = 0 - копирование только конца строки. Все же "" != NULL.

 
fxsaber:

count = 0 - копирование только конца строки. Все же "" != NULL.

И сколько

StringToCharArray

должна по Вашему скопировать символов при count = 0 ?

Подсказка: при count = 3 копируется 3 символа

 
A100:

должна по Вашему скопировать символов при count = 0 ?

похоже что count=0 работает так же как count=-1 и в случае "" копирует терминальный ноль, получается без дополнительных проверок пустую строку нормально преобразовать не удастся

Причина обращения: