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

 
Renat:

Тут поднялся вопрос по FileReadArray, и в объяснениях я указал что у неё есть фича считывать не тот тип данных что был сохранён.

отсюда вопрос: как эта фича стыкуется с безопасностью языка?

если нормально, то почему бы не сделать стандартную функцию перевода битного поля  в нужный тип?

В общем или наведите порядок и уберите эту фичу или дайте людям реализовывать длинную арифметику.

Вот пример этой фичи через файл с протиранием винта:

double arr[]; ulong arr1[]; 
//+------------------------------------------------------------------+
void OnStart()
  {   
   ArrayResize(arr,1); arr[0]=123.2564;
   WriteArrayFile();
   ReadArrayFile();
   Print(arr1[0]);
  }
//+------------------------------------------------------------------+
void WriteArrayFile(string folder="Calculator")
  {
   int han=FileOpen(folder+".dat",FILE_WRITE|FILE_BIN);
   if(han!=INVALID_HANDLE)
     {      
      FileWriteArray(han,arr);              
      FileClose(han);
     }
  }
//+------------------------------------------------------------------+
void ReadArrayFile(string folder="Calculator")
  {
   int han=FileOpen(folder+".dat",FILE_READ|FILE_BIN);
   if(han!=INVALID_HANDLE)
     {      
      FileReadArray(han,arr1);             
      FileClose(han);
     }
  }
//+------------------------------------------------------------------+
 
Паранойя детектед.
 
TheXpert:
Паранойя детектед.

Развивай мысль.

ЗЫ Я собственно за то чтоб признать фичу безопасной и сделать её аналог но без использования файла, а напрямую.

Но если MQ признает её небезопасной, то и из функции стоит изъять.

ЗЗЫ Кстати может я действительно сегодня чегойто не то леплю, мне уже на два вопроса не ответили, ты уж просвети меня, покаж пальцем где туплю.

 
Urain:

Вот пример этой фичи через файл с протиранием винта:


Через файл-то зачем? Можно проще. Почитайте про Приведение данных типа простых структур
 
или так
 
Renat:
При тестах на кроссах идет точное моделирование и других курсов для правильной конвертации профитов и маржевых требований.
Попробуйте запустить визуализацию и сразу же поймете объем вычислений на основе количества фоновыхьсимволов в маркетвотче.
Я все могу понять, но разница в 13,7 раз по скорости... Ну в 2 раза - куда ни шло. И щенячья радость от скорости тестирования по ценам открытия на мажорах сменилось слезливым унынием на кроссах. И вместо использования 30 родных удаленных агентов опять придется башлять клаудам... Абыдна!
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
Urain:

Развивай мысль.

ЗЫ Я собственно за то чтоб признать фичу безопасной и сделать её аналог но без использования файла, а напрямую.

Но если MQ признает её небезопасной, то и из функции стоит изъять.

ЗЗЫ Кстати может я действительно сегодня чегойто не то леплю, мне уже на два вопроса не ответили, ты уж просвети меня, покаж пальцем где туплю.

Файл сам по себе является обезличенным. Заранее неизвестно, каким способом записывали этот файл. То есть описанную выше функциональность запретить невозможно. Можно, конечно, органолептически определить чисто текстовый файл, и то есть нюансы с юникодом и анси-кодировками.

Так что Вы можете как угодно читать любой файл. И это не приведёт ни к какой опасной ситуации, так как размеры чтения (и записи тоже) контролируются. Вы не сможете сорвать стек. Вы не сможете никоим образом получить адрес в память процесса.

 
muallch:
Я все могу понять, но разница в 13,7 раз по скорости... Ну в 2 раза - куда ни шло. И щенячья радость от скорости тестирования по ценам открытия на мажорах сменилось слезливым унынием на кроссах. И вместо использования 30 родных удаленных агентов опять придется башлять клаудам... Абыдна!
Мы занимаемся этим вопросом. Тестирование по ценам открытия на кроссах будет ускорено.
 
stringo:

Файл сам по себе является обезличенным. Заранее неизвестно, каким способом записывали этот файл. То есть описанную выше функциональность запретить невозможно. Можно, конечно, органолептически определить чисто текстовый файл, и то есть нюансы с юникодом и анси-кодировками.

Так что Вы можете как угодно читать любой файл. И это не приведёт ни к какой опасной ситуации, так как размеры чтения (и записи тоже) контролируются. Вы не сможете сорвать стек. Вы не сможете никоим образом получить адрес в память процесса.

Тогда не вижу причин не ввести функцию прямого считывания данных без приведения типов, аля

double a=123.2564; ulong b;

b=Byte(a,TYPE_ULONG);
Print(b);
//--- результат 4638373815016729713

Зашьёте это дело в функцию, всё будет безопасно.

 
Urain:

Тогда не вижу причин не ввести функцию прямого считывания данных без приведения типов, аля

Зашьёте это дело в функцию, всё будет безопасно.

struct __double { double v; }

struct __long { long v; }

__double a; __long b;

a.v=123.456;

b=a;

b.v=4638373815016729713;

не сложно.

+ почитай кроме верхних ссылок https://www.mql5.com/ru/articles/364


а перевод из одного типа в другой - это можешь либо макросами прописать либо функциями.

но реально сложного в этом нет.

Избавляемся от балласта самодельных DLL
Избавляемся от балласта самодельных DLL
  • 2012.01.31
  • o_O
  • www.mql5.com
Если MQL5-программисту недостаточно функционала языка, он вынужден обращаться к дополнительным инструментам. Для этого приходится использовать другой язык программирования и создавать промежуточную DLL. В MQL5 имеется механизм представления разных типов данных с помощью структур и передачи их в API, но к сожалению, MQL5 не отвечает нам на вопрос о том, как вытянуть данные из принятого указателя. В данной статье мы поставим точку в этом вопросе и покажем простые механизмы обмена сложными типами данных и работе с ними.
Причина обращения: