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

 
fxsaber #:

MT4 и MT5 не работают одинаково с FileWriteString. Как пример, пришлось такой способ конвертации MT4->MT5 использовать, чтобы MT5 выдавал тот же результат, что и MT4.

Однако, мне сразу стало понятно, в чем проблема, и быстро написал это. В ином же случае можно просто перебрать все возможные комбинации флагов. По комбинаторике их немного.

Возможно, имеет смысл проверить на линуксе MT4, а потом уже искать решение под MT5.

MT4 тут никаким боком, никогда с ним не работал, кроме перевода с него на MT5 пары индикаторов.

С флагами проблем нет, если только возможность записи в файл в определённой кодировке не зависит от флагов режима доступа.

Просто под Линуксом (Wine) не работает вывод в файл в кодировке UTF-8.

В CP-1251 и в UTF-16 - работает, а в UTF-8 - нет.

Если я не прав и кому-то удалось под Wine штатными средствами MT5 записать в файл UTF-8 - покажите, как.

Кстати, эта тема тут уже поднималась, рабочего решения никто не показал, разработчики проигнорили.

Я привёл код, воспроизводящий проблему https://www.mql5.com/ru/forum/1111/page3416#comment_50488072

Мне это не критично, но проблема существует.

 
Yuriy Vasilyev #:

Код, который вы предоставили, выполняет вставку нового элемента в двусвязный список на заданной позиции. Однако вы правильно заметили, что есть несколько проблем с текущей реализацией.

  1. if(index>m_data_total || index<0) return(-1); : Эта строка проверяет, что индекс находится в правильных границах. Если индекс меньше нуля или больше общего количества элементов в списке, возвращается -1. Вполне верно, что на практике часто используют возможность вставки элемента в конец списка по индексу -1, но в вашей реализации так делать нельзя из-за этой проверки.

  2. if(index==-1) ... : Этот блок кода должен позволить вставить элемент в конец списка, если указан индекс -1. Но, как вы правильно заметили, до этого места кода выполнение не дойдет из-за предыдущей проверки.

  3. В остальных строках обрабатываются остающиеся случаи: вставка элемента перед текущим узлом ( m_curr_node ) или добавление элемента в конец списка, если указанного индекса не существует.

Хорошо подмечено, что в этом коде есть противоречия/баги, которые не позволяют ему работать должным образом. Это могут быть ошибки, сделанные программистом. Если вы хотите изменить этот код, чтобы он позволил вставлять элемент в конец списка по индексу -1, вы можете изменить проверку индекса следующим образом:

if(index > m_data_total || index < -1) return(-1);

Такой код позволит пропускать индекс -1.

Должен заметить, что моё сообщение предназначалось для разработчиков и лиц сопровождающих платформу, а так как перезапись стандартной библиотеки происходит при каждом ее обновлении, то любые  изменения, сделанные пользователем, в  коде библиотеки - будут потеряны.  
По-прежнему надеюсь на необходимые системные изменения в стандартной библиотеке от самих МетаКвотов.
 
Правильно ли понимаю, что создать такую функцию невозможно?
class A
{
public:  
  virtual string Type() const { return(typename(this)); }
};

class B : public A
{
public:  
  virtual string Type() const { return(typename(this)); }
};

class C : public B
{
public:  
  virtual string Type() const { return(typename(this)); }
};

// Создает копию объекта потомка по указателю на родителя.
A* New( const A* a ) { return(NULL); }

void OnStart()
{
  A* a = new C;  
  Print(a.Type()); // class C const
  
  A* a2 = New(a); // Эту функцию нужно написать. 
  Print(a2.Type()); // class C const
}
Рецепт в виде прописывания в каждом потомке соответствующей виртуальной функции не рассматриваем.
 
JRandomTrader #:

Под Wine файлы в UTF-8 не пишутся. Файл нулевой длины, и ошибки тоже нет.

Если сделать так

пишется в UTF-16

Исправили в билде 4067.

Обновитесь, пожалуйста.

 
Когда матрицы будут с типом данных int и меньше? Для машинного обучения мне требуется работать с бинарными данными, а флоты крайне избыточно употребляют память.
 

Здравствуйте.

Напишите, пожалуйста, системные требования к Metatrader 4/5 на страницах справки и загрузки. Когда MT5 перестал быть совместимым с 32-разрядными ОС?

 
Ego_Dekker #:
Когда MT5 перестал быть сосвместимым с 32-разрядными ОС?

Да уж несколько лет как.

 

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

class A {};
void OnStart()
{
                      A*              a;
    Print(typename(   A*) == typename(a)); //(1)
                   void*              v;
    Print(typename(void*) == typename(v)); //(2)
}

Результат:   true:false

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

Какая принципиальная разница между (1) и (2) ?

 
Aleksey Vyazmikin #:
Когда матрицы будут с типом данных int и меньше? Для машинного обучения мне требуется работать с бинарными данными, а флоты крайне избыточно употребляют память.

Неизвестно когда.

На матрицах целочисленного типа происходит катастрофическая потеря точности. Если речь идёт о машинном обучении, то матрицы весов по-любому должны быть вещественного типа, пусть даже и float. А на векторах слоёв вы много не выиграете.

Я понимаю, если бы был запрос на float16. Но, это всё - экономия на спичках

 
Ошибка при выполнении:
class A {};
void OnStart()
{
                   int const        i = NULL;
    Print(typename(int) == typename(i)); //(1)
                   A*  const        a = NULL;
    Print(typename(A*)  == typename(a)); //(2)
}
Результат в (1) случае: true, а во (2) - false. A какая принципиальная разница?