Формат файла истории

 
Подскажите, может кто знает формат заголовка (или хотя бы длину заголовка) и формат хранения данных в файле истории (например "header: 500 byte; Date: WinDate; ... Open: Word; ...").
Нужно для написания проги в Дельфях.
 
Сначала идет заголовок базы:
struct HistoryHeader
  {
   int               version;            // версия базы
   char              copyright[64];      // копирайт
   char              symbol[12];         // инструмент
   int               period;             // период инструмента
   int               digits;             // число знаков после запятой в инструменте
   time_t            timesign;           // временной отпечаток создания базы
   time_t            last_sync;          // время последней синхронизации
   int               unused[13];         // для будущего использования
  };


а затем массив баров (выравнивание однобайтовое):

#pragma pack(push,1)
//---- Стандартное представление котировки в базе
struct RateInfo
  {
   time_t            ctm;                // текущее время в секундах
   double            open;
   double            low;
   double            high;
   double            close;
   double            vol;
  };
#pragma pack(pop)
 
Большое спасибо.
 
А что пишешь, если не секрет? Я уже этот формат давно прочитал, есть модуль построения графика по истории и вывод заголовка.
 
Посмотрите на скрипт period_converter.mq4, который появился пару билдов назад. На его примере показана методика генерации и записи чартов любых нестандартных таймфреймов, файлы которых можно потом открыть в оффлайне. С помощью MQL4 можно формировать родные бинарные HST файлы.

Таким же образом можно конвертор из CSV в HST написать прямо на MQL4.
//+------------------------------------------------------------------+
//|                                             Period-Converter.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs
#include <WinUser32.mqh>

extern int i_mult = 3; // new period multiplier factor
int handle;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int    i, start_pos, i_time, time0, last_fpos, periodseconds;
   double d_open, d_low, d_high, d_volume, last_volume;
   int    hwnd=0;
//---- History header
   int    version=400;
   string c_copyright;
   string c_symbol=Symbol();
   int    i_period=Period()*i_mult;
   int    i_digits=Digits;
   int    i_unused[13];
//----  
   handle=FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE);
   if(handle < 0) return(-1);
//---- write history file header
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   FileWriteInteger(handle, version, LONG_VALUE);
   FileWriteString(handle, c_copyright, 64);
   FileWriteString(handle, c_symbol, 12);
   FileWriteInteger(handle, i_period, LONG_VALUE);
   FileWriteInteger(handle, i_digits, LONG_VALUE);
   FileWriteInteger(handle, 0, LONG_VALUE);       //timesign
   FileWriteInteger(handle, 0, LONG_VALUE);       //last_sync
   FileWriteArray(handle, i_unused, 0, 13);
//---- write history file
   periodseconds=i_period*60;
   start_pos=Bars-1;
   d_open=Open[start_pos];
   d_low=Low[start_pos];
   d_high=High[start_pos];
   d_volume=Volume[start_pos];
   //---- normalize open time
   i_time=Time[start_pos]/periodseconds;
   i_time*=periodseconds;
   for(i=start_pos-1;i>=0; i--)
     {
      time0=Time[i];
      if(time0>=i_time+periodseconds)
        {
         last_fpos=FileTell(handle);
         last_volume=Volume[i];
         FileWriteInteger(handle, i_time, LONG_VALUE);
         FileWriteDouble(handle, d_open, DOUBLE_VALUE);
         FileWriteDouble(handle, d_low, DOUBLE_VALUE);
         FileWriteDouble(handle, d_high, DOUBLE_VALUE);
         FileWriteDouble(handle, Close[i], DOUBLE_VALUE);
         FileWriteDouble(handle, d_volume, DOUBLE_VALUE);
         i_time=time0/periodseconds;
         i_time*=periodseconds;
         d_open=Open[i];
         d_low=Low[i];
         d_high=High[i];
         d_volume=last_volume;
        }
       else
        {
         d_volume+=Volume[i];
         if (Low[i]<d_low)   d_low=Low[i];
         if (High[i]>d_high) d_high=High[i];
        }
     } 
   FileFlush(handle);
//---- collect incoming ticks
   Print("Run!");
   int last_time=LocalTime()-5;
   while(true)
     {
      int cur_time=LocalTime();
      //---- check for new rates
      if(RefreshRates())
        {
         time0=Time[0];
         //---- is there current bar?
         if(time0<i_time+periodseconds)
           {
            FileSeek(handle,last_fpos,SEEK_SET);
            d_volume+=Volume[0]-last_volume;
            last_volume=Volume[0]; 
            if (Low[0]<d_low) d_low=Low[0];
            if (High[0]>d_high) d_high=High[0];
           }
         else
           {
            //---- no, there is new bar
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[0];
            d_low=Low[0];
            d_high=High[0];
            d_volume=Volume[0];
            last_volume=d_volume;
           }
         //----
         last_fpos=FileTell(handle);
         FileWriteInteger(handle, i_time, LONG_VALUE);
         FileWriteDouble(handle, d_open, DOUBLE_VALUE);
         FileWriteDouble(handle, d_low, DOUBLE_VALUE);
         FileWriteDouble(handle, d_high, DOUBLE_VALUE);
         FileWriteDouble(handle, Close[0], DOUBLE_VALUE);
         FileWriteDouble(handle, d_volume, DOUBLE_VALUE);
         FileFlush(handle);
         //----
         if(hwnd==0)
           {
            hwnd=WindowHandle(Symbol(),i_period);
            if(hwnd!=0) Print("Chart window detected");
           }
         //---- refresh window not frequently than 1 time in 5 seconds
         if(hwnd!=0 && cur_time-last_time>=5)
           {
            PostMessageA(hwnd,WM_COMMAND,33324,0);
            last_time=cur_time;
           }
        } 
     }      
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deinit()
  {
   FileClose(handle); 
  }
//+------------------------------------------------------------------+
 
Когда-то в какой то ветке я прочел, что поддержки Крестиков-ноликов, Ренко и Каги в ближайшем будущем разработчики не предусматривают, а торгую все больше на "днёвках", минимум на 4-х часовках, хотелось-бы для пущей убедительности других методов прогнозирования рынка видеть и эти представления движения цен.
Для Крестов я уже приспособил BEB 4.
Ренко и Каги от Румуса привязывают совершенно к другой платформе и брокеру, а хочется все от одного брокера и на единой платформе.

NEEP писал, что у него уже есть модуль построения графика. А какого? Написан в МЕ4? Дело в том, что по жизни сталкивался с Борланд Пасквилем и чтобы быстро, пишу на Пасквиле, а чтобы в МТ4 - надо переучиться на МЕ4.
 
NEEP писал, что у него уже есть модуль построения графика. А какого? Написан в МЕ4? Дело в том, что по жизни сталкивался с Борланд Пасквилем и чтобы быстро, пишу на Пасквиле, а чтобы в МТ4 - надо переучиться на МЕ4.


Модуль написан на Delphi для построения крестиков, а также для тестирования стратегий, которые тоже пишу на Delphi. Осталось написать часть которая будет управлять МТ для совершения сделок.
 
NEEP писал, что у него уже есть модуль построения графика. А какого? Написан в МЕ4? Дело в том, что по жизни сталкивался с Борланд Пасквилем и чтобы быстро, пишу на Пасквиле, а чтобы в МТ4 - надо переучиться на МЕ4.


Модуль написан на Delphi для построения крестиков, а также для тестирования стратегий, которые тоже пишу на Delphi. Осталось написать часть которая будет управлять МТ для совершения сделок.


А где можно скачать? Интересно посмотреть!
 
NEEP писал, что у него уже есть модуль построения графика. А какого? Написан в МЕ4? Дело в том, что по жизни сталкивался с Борланд Пасквилем и чтобы быстро, пишу на Пасквиле, а чтобы в МТ4 - надо переучиться на МЕ4.


Модуль написан на Delphi для построения крестиков, а также для тестирования стратегий, которые тоже пишу на Delphi. Осталось написать часть которая будет управлять МТ для совершения сделок.


Да, действительно, если не жалко, то можно-ли посмотреть?
Причина обращения: