HST файл можно ли дописать котировки в начало файла

 

Если у нас есть файл истории HST и предположим есть история с 01.11.2018 

но есть необходимость загрузить историю с 2015 года, можно ли как то перезаписать данный файл так чтобы не затирать историю старую а просто дописать данные до 01.11.2018.

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

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

 

если речь идет о докачке истории, то вот пример https://www.mql5.com/ru/code/10472  (FastMethod = TRUE)

если речь идет о кастомном символе, то только перезапись файла, не припомню, чтобы можно было к файлам получить произвольный доступ, только последовательный знаю - считал файл, установил FileSeek() и потом записываем новые значения и затем старые данные


Yurij Izyumov:

на сколько я понимаю если мы даже и каким то образом сможем найти координату самого первого бара в истории в байтах и поставим туда указатель для записи

добавить в стандартный PeriodConverter вывод файлового указателя после создания заголовка, примерно так:

 FileWriteArray(ExtHandle,i_unused,0,13);
//--- write history file
Print("Write file header, FileTell = ",FileTell(ExtHandle));

и Вы узнаете сколько байт занимает history file header потом можете это значение использовать при открытии файла HST с помощью FileSeek()

FastHistory
FastHistory
  • www.mql5.com
Скрипт создает файл истории исходного символа, на которой достигается увеличение в разы скорости тестирования/оптимизации стратегий на модели "Все тики", при идентичных результатах. Входные параметры: Трансформация истории: Удаляются бары, не участвующие в существенном движении цены (особенно актуально для Pips < Spread). Изменяется...
 
Igor Makanu:

если речь идет о докачке истории, то вот пример https://www.mql5.com/ru/code/10472  (FastMethod = TRUE)

если речь идет о кастомном символе, то только перезапись файла, не припомню, чтобы можно было к файлам получить произвольный доступ, только последовательный знаю - считал файл, установил FileSeek() и потом записываем новые значения и затем старые данные


добавить в стандартный PeriodConverter вывод файлового указателя после создания заголовка, примерно так:

и Вы узнаете сколько байт занимает history file header потом можете это значение использовать при открытии файла HST с помощью FileSeek()

благодарю )))) да, кастомный , ладно будем обновлять 

 
Yurij Izyumov:

Если у нас есть файл истории HST и предположим есть история с 01.11.2018 

но есть необходимость загрузить историю с 2015 года, можно ли как то перезаписать данный файл так чтобы не затирать историю старую а просто дописать данные до 01.11.2018.

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

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

Без проблем дописывается все, куда угодно, хоть в начало, хоть в конец, хоть в середину. Скрипт ConvertTicksFiles.