Этот форум переведен в режим чтения, просим обсуждать вопросы на форумах MQL4.community и MQL5.community
*.HST фаил - как его прочитать ?К списку тем | 1 2 |
|
Lord81bc7
26.03.2008 13:22
Доброго всем времени суток .
столкнулся с необходимостью читать фаил истории котировок - В МТ4 он находится в виде файла *.hst как егопрочитать на Delphi? Читать формат CSV - проще - но для этогонадо пастаянно заходить в терминал и экспортировать - неудобный вариант. по форуму находил информацию , но там на С - а я в нём несилён. "формат файлов *.hst ???" заранее всем благодарен с Уважением Сергей. |
|
Jhonny
26.03.2008 14:39
Вот чтото когдато зачемто делал, но забросил
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. |
|
Lord81bc7
26.03.2008 16:43
немогу понять - как получить High Low Close Open - ??? сори за наивность
|
|
Jhonny
26.03.2008 19:50
Хорошо небольшой ликбез...
THistoryHeader TRateInfo Это две структуры: одна представляет собой заголовок файла, в нем разная служебная информация, воторая это элемент массива данных записанного в этом файле, другими словами все что идет после заголовка это массив записей TRateInfo, каждый такой элемент это и есть бар, в нем и открытие и закрытие и хай и лоу. А в коде что на верху вставил давольно подробные коментарии. Будет полезно если ты его с компилишь и поиграешься с ним. |
|
Lord81bc7
27.03.2008 06:06
Jhonny - огромное спасибо
|
|
Lord81bc7
27.03.2008 14:59
столкнулся со следующей проблемой
пи загрузки данный в StringGrid - подргужается только часть файла если увеличиваю масив Close1: array[0..255] - то вываливается ошибка больше 1500 строк |
|
Jhonny
27.03.2008 15:52
Ну что можно сказать... я пробовать не буду делать, если ты выложишь свой исходник погляжу, если что увижу подскажу, а так трудно сказать.
|
|
Profi_R
27.03.2008 17:29
может эта инфа поможет?
Slawa 05.06.06 12:45 На самом деле описание гораздо ближе. В клиентском терминале нажать F1. Сервис - Архив котировок - Формат файлов истории (HST-файлы) а так поиск по "HST" выдал http://www.metaquotes.ru/forum/search/?search=HST&x=0&y=0 вот здесь явно идет речь про чтение HST "Формат файла истории" и именно на дельфях |
|
Lord81bc7
27.03.2008 19:18
Всем спасибо - разобрался !!!!!
|
|
Lord81bc7
27.03.2008 19:40
:)
а как с датой разобраться ??? |
|
Jhonny
27.03.2008 21:13
попробуй функцию UnixToDateTime из модуля dateutils
А и еще... трудно сказать зачем тебе все это нужно но судя по фразе Читать формат CSV - проще - но для этогонадо пастаянно заходить в терминал и экспортировать - неудобный похоже что ты надеешься получать котировки в свою прогу онлайн? если я угадал то огорчу тебя наверно, вновь поступившие котировки сохраняются в архиве только при закрытии терминала помоему, так что все время перзапускать терминал тоже не самый красивый метод. |
К списку тем
| 1 2
Скачай MetaTrader 5 (300 Кб, веб-установщик) — новый терминал для финансовых рынков
