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

 
uncleVic:

Получает EMPTY_VALUE, т.к. мы его возвращаем если файл не открыт. Если удобнеее получать 0.0, возвращайте 0.0.

А возвращать что-то нужно. Читать файл, который не открылся, нехорошо.

По поводу ошибки открытия. Напишите так:

Приведён скриншот тестера. В терминале то же самое?


Да в терминале тоже самое а ошибка Вот что пишет :

Файл размером 20 мб, около 2.5 млн. значений

в самом начале тестирования раз 20 при открытии удалось

получить нужные значения, потом ошибка постоянно 5004 - не удалось открыть файл,

пробовал с 2 мб. около 400 тыс. знач. - открывается, а больше размером не хочет, смотрел на данные

диспетчера задач, оперативки хватает 2,5 гб. (еще 500 мб. свободно !)

 

КОДОВЫЙ ПОЛТЕРГЕЙСТ завелся у меня в компе, если раньше не открывайл файл в 20 мб.

то в тек. момент идет тестирование с открытием файла в 38 мб. с 5.5 млн. значения (данные с 2005 года),

а вот с 2001 - около 10млн. знач. и размером под 65 мб. не хочет открывать. Вот интересно - а то и не понятно почему ?

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
Renat:
К сожалению, с указанной картой уже ничего не поможет. Если это ноутбук, то ситуация безнадежная. Иначе за 1000-1500 рублей можно купить прилично мощную видеокарту, которая снимет все вопросы производительности.


Так скажите мт4 \ мт5 через DirectX 2D ускорение работает или как ... ?


какие из вышеописанных параметров важны для ускорения векторной графики .. или все ?

есть ещё вопрос ... драйвера для HD2000 встроенного в процессор, официально не поддерживают Windows Server 2008 r2 SP1 64bit, -

а только виста и 7ка 64 бит ....


эта неполная совместимость может как-то сказываться ... ?

(хотя дрова встали, работают даже в HD игры запускаются ...)


2. Как у платформ мт4\мт5 с видео-аппаратной 2D совместимостью на системе Windows Server 2008 r2 SP1 64bit ?


Кого из производителей лучше выбирать ... радионы ... nVidia ?


какие-то тесты на скорость и совместимость адаптеров для мт4\мт5 проводились ... ?


спасибо.

 
Im_hungry:

Да в терминале тоже самое а ошибка Вот что пишет :

Файл размером 20 мб, около 2.5 млн. значений

в самом начале тестирования раз 20 при открытии удалось

получить нужные значения, потом ошибка постоянно 5004 - не удалось открыть файл,

пробовал с 2 мб. около 400 тыс. знач. - открывается, а больше размером не хочет, смотрел на данные

диспетчера задач, оперативки хватает 2,5 гб. (еще 500 мб. свободно !)

Я сильно не читал, но бросился в глаза выделенный текст... Вы файл то закрываете?

Вообще правильно с его дескриптором обращаетесь?

 
AlexSTAL:

Я сильно не читал, но бросился в глаза выделенный текст... Вы файл то закрываете?

Вообще правильно с его дескриптором обращаетесь?

Логика (судя по приведённым кодам) почти правильная. За исключением того, что после проверки хэндла он читает и пишет невзирая на результаты проверки (а потом ещё и закрывает файл).

Я думаю здесь беда в другом:

 1. Индикатор на каждом тике открывает файл, записывает данные, закрывает файл.

 2. Советник ( я думаю тоже на каждом тике) открывает файл, читает данные, закрывает файл.

Т.к. это происходит в разных потоках, чем больше размер файла, тем больше у советника вероятность при открытии оного "нарваться" на открытый индикатором файл. А т.к. флаг открытия  FILE_SHARE_READ не используются, вытекают последствия.

На мой взгляд, лечение проблемы может быть таким:

 1. Открывать файл (и в индикаторе и в советнике) в OnInit с флагом FILE_SHARE_READ.

 2. В индикаторе после записи вызывать FileFlush(handle).

 3. Закрывать файл в OnDeinit.

Вот как-то так.


Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов - Документация по MQL5
 
tester_el_pro:


Так скажите мт4 \ мт5 через DirectX 2D ускорение работает или как ... ?


Терминал использует обычный Windows GDI, которому нужен 2D ускоритель.

При выбора карточки берите любую внешнюю 3D, пусть даже самого низкого ценового уровня - ее будет достаточно.
И не придется сравнивать базовые пункты возможностей видеокарты.

 
uncleVic:

Логика (судя по приведённым кодам) почти правильная. За исключением того, что после проверки хэндла он читает и пишет невзирая на результаты проверки (а потом ещё и закрывает файл).

На мой взгляд, лечение проблемы может быть таким:

 1. Открывать файл (и в индикаторе и в советнике) в OnInit с флагом FILE_SHARE_READ.

 2. В индикаторе после записи вызывать FileFlush(handle).

 3. Закрывать файл в OnDeinit.

Вот как-то так.


Насчет этого спасибо на будущее при использовании в реальном времени

работы с файлом из советника и индюка - буду использовать ваш совет.

 
AlexSTAL:

Я сильно не читал, но бросился в глаза выделенный текст... Вы файл то закрываете?

Вообще правильно с его дескриптором обращаетесь?

да конечно - файл видит а читать не хочет из-за ошибки открытия 5004
 
uncleVic:

Логика (судя по приведённым кодам) почти правильная. За исключением того, что после проверки хэндла он читает и пишет невзирая на результаты проверки (а потом ещё и закрывает файл).

Я думаю здесь беда в другом:

 1. Индикатор на каждом тике открывает файл, записывает данные, закрывает файл.

 2. Советник ( я думаю тоже на каждом тике) открывает файл, читает данные, закрывает файл.

Т.к. это происходит в разных потоках, чем больше размер файла, тем больше у советника вероятность при открытии оного "нарваться" на открытый индикатором файл. А т.к. флаг открытия  FILE_SHARE_READ не используются, вытекают последствия.

На мой взгляд, лечение проблемы может быть таким:

 1. Открывать файл (и в индикаторе и в советнике) в OnInit с флагом FILE_SHARE_READ.

 2. В индикаторе после записи вызывать FileFlush(handle).

 3. Закрывать файл в OnDeinit.

Вот как-то так.



Ссори не уточнил работа индюка по другому,

1. прежде чем тестировать в терминале запускаю индюк

2.он записывает на каждом баре время бара и его. знач. корреляции

3. перекидываю файл в папку тестера где он должен быть C:\Program Files\MetaTrader 5\tester\Agent-127.0.0.1-3000\MQL5\Files.

4. запускаю советник, который по барам открытия работает - и с 2005 года - все записанные данные

   читает (38 мб.) но с 2002 - не читает (67мб.)

 

Попробовал записать то же самое в том же индюке но в мт4

перекинул файл бин в папку тестера мт5 - ни какой из файлов

не открывается - ошибка 5004, в мт 5 еще хоть чтото открывает.


в мт 4 реализовал запись данных в индикаторе (все даныые записывает правильно) следующим образом:

      Corr = GetCorrelation();
      Pos = iBarShift(Symbol(), Period(), Times[CurrPos]);
      Buffer[Pos] = NormalizeDouble(Corr,3);
//------
      datetime bar2 = iTime(Symbol1, 0, Pos);
      Print("Buffer[Pos]...",Buffer[Pos],"...bar2...",bar2);
      handle= FileOpen("kor.bin", FILE_BIN|FILE_READ|FILE_WRITE, ";");
      if(handle<1) Print("can't open file error-",GetLastError());
      if (handle>=1)
       {
        FileSeek(handle,0,SEEK_END);
        FileWriteDouble(handle,bar2,DOUBLE_VALUE); 
        FileSeek(handle,0,SEEK_END);
        FileWriteDouble(handle,Buffer[Pos],DOUBLE_VALUE); 
        FileClose(handle);
       }
//------
      CurrPos++;

А чтение в мт5 в советнике осталось прежним:

double proverka()
{
 if (FileIsExist("kor.bin",0)==true) Print("ФАЙЛ ОБНАРУЖЕН = ...");
 handle= FileOpen("kor.bin", FILE_BIN|FILE_READ);
 if(handle < 0) Print("-----Неоткрывается :- Почему? Потому что произошла ошибка ",GetLastError());
 ulong file=FileSize(handle);
 ulong N = 0.0;
 double kor = 0.0;
 datetime bar[1];
 CopyTime(Symbol_1,NULL,0,1,bar);
 ulong New = (ulong) bar[0];
 while (N < file)
  {
   kor=FileReadDouble(handle); 
   N = FileTell(handle);
   //Print("1...kor=",kor,"N=",N,"file=",file,"New=",New);
   if (kor == New) 
    {
     double ss = FileReadDouble(handle);
     FileClose(handle);
     Print("2...ss=",ss);
     return (ss);
     break;
    }
   if (New < kor)
    {
     Print ("New=",New,"kor=",kor);
     return (0.0);
     break;
    }
  } 
 Print("ВСЕЕЕЕЕЕ",kor);
 FileClose(handle);
 return (kor);
}
//=

Возможно ли в мт5 советником открывать файл созданный в мт4 ?

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