*.HST фаил - как его прочитать ?

 
Доброго всем времени суток .
столкнулся с необходимостью читать фаил истории котировок - В МТ4 он находится в виде файла *.hst
как егопрочитать на Delphi?
Читать формат CSV - проще - но для этогонадо пастаянно заходить в терминал и экспортировать - неудобный вариант.

по форуму находил информацию , но там на С - а я в нём несилён.
"формат файлов *.hst ???"
заранее всем благодарен
с Уважением Сергей.
 
Вот чтото когдато зачемто делал, но забросил

type

 THistoryHeader = packed record
		version: integer;            // версия базы
		copyright:array[0..63] of char;      // копирайт
		symbol: array[0..11] of char;         // инструмент
		period: integer;             // период инструмента
		digits: integer;             // число знаков после запятой в инструменте
		timesign: cardinal;           // временной отпечаток создания базы
		last_sync: cardinal;          // время последней синхронизации
		unused:array[0..12] of integer;
 end;

 TRateInfo = packed record
		ctm: cardinal;                // текущее время в секундах
		open: double;    /// цена открытия
		low:double;// минимум
		high:double;// максимум
		close:double;//закрытие
		vol:double;// обьем
 end;


var
	Form1: TForm1;
	hstfile:tfilestream; // эта штука чтоб с открытием файла не заморачиваться сильно
	Close1: array[0..255] of TRateInfo ;// это массив на 256 элементов в него будем читать котировки
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 header:THistoryHeader;// эта переменая куда прочитаем заголовок
 i,y1,y2:integer;// эти нужны были чтоб нарисовать и посмотреть чего читали
begin
 hstfile:=tfilestream.Create('EURUSD1.hst',fmShareDenyNone);// можно сказать что открываем файл
 hstfile.Read(header,sizeof(header));// читаем заголовок
 hstfile.Read(Close1,sizeof(Close1));// читаем 256 элементов масисвва котировок

/// а это цил который рисует то что прочитали на форме, причем
//рисует по клосам, если напишешь так close1[i].open будет рисовать по опенам
// это вобщем и ответ на твой вопрос
 for i:=1 to 255 do 
	begin
	y1:= round(10000*close1[i-1].close)-14600;
	y2:= round(10000*close1[i].close)-14600  ;
		form1.Canvas.MoveTo(i-1,y1);
		form1.Canvas.lineTo(i,y2);
	end;
 hstfile.Free; // можно сказать что закрываем файл
end;

end.


 
немогу понять - как получить High Low Close Open - ??? сори за наивность
 
Хорошо небольшой ликбез...
THistoryHeader
TRateInfo
Это две структуры: одна представляет собой заголовок файла, в нем разная служебная информация, воторая это элемент массива данных записанного в этом файле, другими словами все что идет после заголовка это массив записей TRateInfo, каждый такой элемент это и есть бар, в нем и открытие и закрытие и хай и лоу.

А в коде что на верху вставил давольно подробные коментарии.
Будет полезно если ты его с компилишь и поиграешься с ним.
 
Jhonny - огромное спасибо
 
столкнулся со следующей проблемой
пи загрузки данный в StringGrid - подргужается только часть файла
если увеличиваю масив Close1: array[0..255] - то вываливается ошибка больше 1500 строк
 
Ну что можно сказать... я пробовать не буду делать, если ты выложишь свой исходник погляжу, если что увижу подскажу, а так трудно сказать.
 
может эта инфа поможет?
Slawa 05.06.06 12:45

На самом деле описание гораздо ближе. В клиентском терминале нажать F1. Сервис - Архив котировок - Формат файлов истории (HST-файлы)


а так поиск по "HST" выдал https://www.mql5.com/en/forum
вот здесь явно идет речь про чтение HST "Формат файла истории" и именно на дельфях
 
Всем спасибо - разобрался !!!!!
 
:)
а как с датой разобраться ???
 
попробуй функцию UnixToDateTime из модуля dateutils

А и еще... трудно сказать зачем тебе все это нужно но судя по фразе
Читать формат CSV - проще - но для этогонадо пастаянно заходить в терминал и экспортировать - неудобный


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