в частности во первых вопрос - неужели в имени символа реально ограничение 12 байт или символов?
да, ограничение в 12 символов, заголовок файла .hst в MQL4:
//---- write history file header c_copyright="(C)opyright 2003, MetaQuotes Software Corp."; FileWriteInteger(ExtHandle, version, LONG_VALUE); FileWriteString(ExtHandle, c_copyright, 64); FileWriteString(ExtHandle, c_symbol, 12); FileWriteInteger(ExtHandle, i_period, LONG_VALUE); FileWriteInteger(ExtHandle, i_digits, LONG_VALUE); FileWriteInteger(ExtHandle, 0, LONG_VALUE); //timesign FileWriteInteger(ExtHandle, 0, LONG_VALUE); //last_sync FileWriteArray(ExtHandle, i_unused, 0, 13); //---- write history file
https://docs.mql4.com/ru/files/filewritestring
uint FileWriteString( int file_handle, // handle файла const string text_string, // записываемая строка int length=0 // количество символов );
Параметры
file_handle [in] Файловый описатель, возвращаемый функцией FileOpen().
text_string [in] Строка.
length=0 [in] Количество символов, которые нужно записать. Параметр необходим для записи строки в файл типа BIN. Если размер не указан, то записывается вся строка без завершающего 0. Если указан размер меньший, чем длина строки, то записывается часть строки без завершающего 0. Если указан размер больший, чем длина строки, то строка дописывается соответствующим количеством нулей. Для файлов типа CSV и TXT этот параметр игнорируется и строка записывается полностью.

- docs.mql4.com
да, ограничение в 12 символов, заголовок файла .hst в MQL4:
https://docs.mql4.com/ru/files/filewritestring
Параметры
file_handle [in] Файловый описатель, возвращаемый функцией FileOpen().
text_string [in] Строка.
length=0 [in] Количество символов, которые нужно записать. Параметр необходим для записи строки в файл типа BIN. Если размер не указан, то записывается вся строка без завершающего 0. Если указан размер меньший, чем длина строки, то записывается часть строки без завершающего 0. Если указан размер больший, чем длина строки, то строка дописывается соответствующим количеством нулей. Для файлов типа CSV и TXT этот параметр игнорируется и строка записывается полностью.
как используется FileWriteString я понял, вопрос был нельзя ли к примеру просто поставить в
FileWriteString(ExtHandle, c_symbol, 24);
просто и тем самым удлинить заголовок, я пробовал, но он получается обрезается всё равно до 12 символов, видимо незя, но в доке вроде не написано ничего
как используется FileWriteString я понял, вопрос был нельзя ли к примеру просто поставить в
просто и тем самым удлинить заголовок, я пробовал, но он получается обрезается всё равно до 12 символов, видимо незя, но в доке вроде не написано ничего
вопрос был вопросом, исходников не наблюдается в топике. модифицируйте стандартный скрипт PeriodConverter или покажите Ваш код и покажите, как Вы сумели сделать имя инструмента более 12 символов и терминал сам "обрезал" до 12 символов
если заголовок файла ( file header ) имеет не правильный формат, МТ4 вообще не дает открыть такой график - такого графика не будет в окне: Файл - Открыть автономно
вопрос был вопросом, исходников не наблюдается в топике. модифицируйте стандартный скрипт PeriodConverter или покажите Ваш код и покажите, как Вы сумели сделать имя инструмента более 12 символов и терминал сам "обрезал" до 12 символов
если заголовок файла ( file header ) имеет не правильный формат, МТ4 вообще не дает открыть такой график - такого графика не будет в окне: Файл - Открыть автономно
к примеру вот так . исходник приложил
string c_symbol=Symbol()+"_DlinnyeBukvy"; int i_period=Period()*InpPeriodMultiplier; int i_digits=Digits; ....... FileWriteString(ExtHandle,c_copyright,64); FileWriteString(ExtHandle,c_symbol,24); FileWriteInteger(ExtHandle,i_period,LONG_VALUE);
и получаю в итоге что на скриншоте
к примеру вот так . исходник приложил
и получаю в итоге что на скриншоте
ну и правильно терминал Вам написал, ту просто нужно понимать, что обычно header файла делают "жестким" и тогда программы которые читают заголовок файла действуют по определенному алгоритму не "парясь" в правильности что там в заголовке правильно лежит или нет
т.е. вот Вы взяли увеличили строку с именем инструмента до 6+13 = 19 символов (на евро проверял) :
string c_symbol=Symbol()+"_DlinnyeBukvy";
и потом увеличили в заголовке файла длину поля до 24-х знаков:
FileWriteString(ExtHandle,c_symbol,24);
и терминал пропустил эту конструкцию, НО Вы теперь в следующем поле сдвинули всю информацию на 12 байт, но терминал же об этом не знает? header же здесь "жесткий", а не динамический? (динамический имею в виду,, что бывают конструкции заголовка, где будут данные при чтении корректироваться)
т.е. вот конкретно что имеем В Вашем примере:
// пока без изменений FileWriteInteger(ExtHandle, version, LONG_VALUE); FileWriteString(ExtHandle, c_copyright, 64); // было 12 байт, у Вас 24 теперь! FileWriteString(ExtHandle, c_symbol, 12); // вот тут терминал будет читать следующие 12 байт, и прочтет их как тип long // и поэтому Вы испортили период ТФ, это на скрине у Вас видно FileWriteInteger(ExtHandle, i_period, LONG_VALUE); // вот тут опять все смещено, испортили _Digits FileWriteInteger(ExtHandle, i_digits, LONG_VALUE); FileWriteInteger(ExtHandle, 0, LONG_VALUE); //timesign // тут испортили время синхронизации FileWriteInteger(ExtHandle, 0, LONG_VALUE); //last_sync FileWriteArray(ExtHandle, i_unused, 0, 13);
т.е. дополнительным смещением Вы заставили терминал читать некорректную информацию, но он думает, что раз ошибок нет, значит так задумано, и все что не прочитал терминал ушло в последние 13 байт, которые не используются в header
ну и правильно терминал Вам написал, ту просто нужно понимать, что обычно header файла делают "жестким" и тогда программы которые читают заголовок файла действуют по определенному алгоритму не "парясь" в правильности что там в заголовке правильно лежит или нет
т.е. вот Вы взяли увеличили строку с именем инструмента до 6+13 = 19 символов (на евро проверял) :
string c_symbol=Symbol()+"_DlinnyeBukvy";
и потом увеличили в заголовке файла длину поля до 24-х знаков:
FileWriteString(ExtHandle,c_symbol,24);
и терминал пропустил эту конструкцию, НО Вы теперь в следующем поле сдвинули всю информацию на 12 байт, но терминал же об этом не знает? header же здесь "жесткий", а не динамический? (динамический имею в виду,, что бывают конструкции заголовка, где будут данные при чтении корректироваться)
т.е. вот конкретно что имеем В Вашем примере:
т.е. дополнительным смещением Вы заставили терминал читать некорректную информацию, но он думает, что раз ошибок нет, значит так задумано, и все что не прочитал терминал ушло в последние 13 байт, которые не используются в header
то есть кратко говоря - имя символа больше 12 знаков не может быть - верно ?
ну об этом и в первом сообщении я писал, все что Вы напишете в заголовок файла терминал будет все равно читать по своей "старой схеме", если схема будет сильно нарушена, тогда не откроет оффлайн график, если схема будет так себе, тогда откроет и данные будут так себе ))))
ну об этом и в первом сообщении я писал, все что Вы напишете в заголовок файла терминал будет все равно читать по своей "старой схеме", если схема будет сильно нарушена, тогда не откроет оффлайн график, если схема будет так себе, тогда откроет и данные будут так себе ))))
Благодарю !

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
есть задача импортировать в MT4 символы криптовалют, вопрос того что данные идут в json вроде разрешился, библиотекой
в частности во первых вопрос - неужели в имени символа реально ограничение 12 байт или символов? в итоге задуманное имя получается обрезанным а то и может не поместиться
или я что то не понимаю ? или придется как то сокращать имя