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

 
Rosh:
Напишите в Сервисдеск со всеми деталями (если необходимо, приложите эксперта). Так будет быстрее
Хорошо. Сегодня сделаю обязательно. Но всё же пару вопросов задам для общего развития. :)
mql5:
Возможно Вы используете большой размер локальных переменных функции, например массивы.
В следующем билде, для 32битного терминала, можно будет управлять размером стека через соответствующее свойство компилятора #property stacksize

Это проблема только 32-ух битных терминалов? У меня x64. Как понять "...большой размер локальных переменных функции, например массивы..."? Насколько это должно быть большим, чтобы стек оказывался в итоге переполненным?
 
tol64:
Это проблема только 32-ух битных терминалов? У меня x64. Как понять "...большой размер локальных переменных функции, например массивы..."? Насколько это должно быть большим, чтобы стек оказывался в итоге переполненным?
Нет, это не только проблема 32битного терминала. Но на сегодня решение для 32битного готово, в 64битном пока остаётся ограничение по стеку в 256Кб.
Но если программист самостоятельно, через свойство, не укажет требуемый размер стека, то EX5 в терминале будет работать с размером стека по умолчанию ( 256Кб )

По поводу большого размера.
Под каждое объявление переменной внутри функции(кроме static переменных) отводится место на стеке, при этом выделение места на стеке под локальные переменные происходит при каждом вызове.

Поэтому если функция имеет локальные переменные размером в 64Кб, то стека хватит на 3 вложенных вызова, при 4 вызове произойдёт переполнение стека (т.к. часть стека уходит на внутренние нужды терминала). Поэтому если есть потребность в больших локальных данных, то лучше использовать динамическую память - при входе в функцию память под локальные нужды выделяется в системе (new, ArrayResize) и при выходе из функции производится удаление памяти (delete, ArrayFree).
 

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

Не могу понять такую проблему.

filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);

В при отладке отрабатывает нормально, файл читаем, находясь в MT5\MQL5\File\

При прогоне в тестере пишет "Не удалось открыть файл  Symbols.txt, ошибка 5004", и хендел -1 

подсовывал так же в папку MT5\tester\агент000\MQL5\File, но оно его опять не видит и файл там убивает вообще.)

При этом в описании сказано:

"Файл открывается в папке клиентского терминала в подпапке MQL5\files (или каталог_агента_тестирования\MQL5\files в случае тестирования)."

"функция ищет файл в локальной папке (MQL5\Files или MQL5\Tester\Files в случае тестирования)."

И у меня нет такой папки "MQL5\Tester\Files" как сказано в справке?

Чего я делаю не так и как эту проблему мне победить?

Благодарю за ответ.

 

Попробуйте использовать #property tester_file:

#property tester_file "My\\Symbols.txt"
 
Rosh:

Попробуйте использовать #property tester_file:

Ух-х-х Вроде помогло в MT5\tester\агент000\MQL5\File поместил еще раз, тогда с property пашет.

Благодарю!

 
Fia:

Попробовал на тестере опять хендл -1 и ошибка 5004.

Не понимаю, что еще может тут быть, явно он не находит файл, при отладке же все видит.

Файл скопируйте в MQL5\Tester\Files (предварительно создав папку).
Документация по MQL5: Файловые операции / FolderCreate
Документация по MQL5: Файловые операции / FolderCreate
  • www.mql5.com
Файловые операции / FolderCreate - Документация по MQL5
 
uncleVic:
Файл скопируйте в MQL5\Tester\Files (предварительно создав папку).

Попробовал, создал такие папки ручками, положил свой файл (с подпапкой, отключил #property tester_file), не находит он его в тестере никак.

А если подключить #property tester_file то как ни странно работает.

Правда периодически, он мне папку и файл там грохает в MT5\tester\агент000\MQL5\File, наверно связано с тем, если отключить  #property tester_file то он там все трет. 

Да, вот сейчас выяснил, что если я меняю код (где либо) mq5 файле (из под которого вызывается txt) , затем компилируем его и идем в тестер, он все трет в  MT5\tester\агент000\MQL5\File

Чудеса какие-то, но хоть как то,  работает и то хорошо.

 
Fia:

Попробовал, создал такие папки ручками, положил свой файл (с подпапкой, отключил #property tester_file), не находит он его в тестере никак.

А если подключить #property tester_file то как ни странно работает.

Правда периодически, он мне папку и файл там грохает в MT5\tester\агент000\MQL5\File, наверно связано с тем, если отключить  #property tester_file то он там все трет. 

Да, вот сейчас выяснил, что если я меняю код (где либо) mq5 файле (из под которого вызывается txt) , затем компилируем его и идем в тестер, он все трет в  MT5\tester\агент000\MQL5\File

Чудеса какие-то, но хоть как то,  работает и то хорошо.

Если W7, положите файлик в каталог Document and Setting/.../MetaQuotes/Common/Files, или отключите UAC

PS опять же проверте правильность написания имени, на каких раскладках записано имя (лучше конечно копипастить), наличие пробела в конце имени ну и так далее.

 
Urain:

Если W7, положите файлик в каталог Document and Setting/.../MetaQuotes/Common/Files, или отключите UAC

PS опять же проверте правильность написания имени, на каких раскладках записано имя (лучше конечно копипастить), наличие пробела в конце имени ну и так далее.

Действительно у меня Win7 64бит, но UAC на нуле.

C:\Documents and Settings\All Users\MetaQuotes\Terminal\Common\Files\ закинул туда свою папку и файлик, не помогло, не находит в тестере файл.

Да вроде все правильно с именем, на #property tester_file же в тесте работает (и на отладке работает по любому ), а в тестере никак , окромя как только через #property tester_file.

И то с выше озвученной проблемой убийства файла после изменения и компиляции mq5 (у меня такой расклад получается).

 

У вас в справке наглая ложь написана:

CLBufferWrite

Записывает массив в буфер OpenCL.

bool  CLBufferWrite(
   int          buffer            // хендл на буфер OpenCL
   const void&  data[]            // массив значений
   uint         offset=0          // с какого элемента, по умолчанию с первого
   void         size=WHOLE_ARRAY  // количество значений, по умолчанию весь массив
   );

Параметры

......

offset

.....

size

[in]  Количество значений, которые нужно записать. По умолчанию в буфер OpenCL пишутся все значения массива.

......

На самом деле пишется количество байт (!!), а вовсе не значений. 

Два вечера угробил на отладку индикатора, пока допёр..! А всё пачему? - патамушта верил в ваше писание... 

ИСПРАВЬТЕ НЕМЕДЛЕННО !! :))

//  Вовремя не догадался, потому что по умолчанию ( size=WHOLE_ARRAY) работает правильно.