Архив котировок - страница 2

 
Scriptong:

Да, Вы забыли про заголовок исторического файла. Посмотрите, как это реализовано в штатном period_converter:

 

Вставил заголовок, все равно окно предварительного просмотра пустое. С флажками открытия как штатном (закомментировал) то же самое. Как быть? Что у меня неправильно?

void OnStart()

  {


//---- History header

   int      file_version=401;

   string   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";

   string   c_symbol="AUDCHF";

   int      i_period=11;

   int      i_digits=MarketInfo("AUDCHF",MODE_DIGITS);

   int      i_unused[13];  

    

MqlRates buf[];

ArrayInitialize(i_unused,0);


int err;

int i=0;



int HndCopy=FileOpenHistory("AUDCHF11.hst",FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN);

//int HndCopy=FileOpenHistory("AUDCHF11.hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);


//--- write history file header

   FileWriteInteger(HndCopy,file_version,LONG_VALUE);

   FileWriteString(HndCopy,c_copyright,64);

   FileWriteString(HndCopy,c_symbol,12);

   FileWriteInteger(HndCopy,i_period,LONG_VALUE);

   FileWriteInteger(HndCopy,i_digits,LONG_VALUE);

   FileWriteInteger(HndCopy,0,LONG_VALUE);

   FileWriteInteger(HndCopy,0,LONG_VALUE);

   FileWriteArray(HndCopy,i_unused,0,13);

   


int copied=CopyRates("AUDCHF",1,i,1,buf);

while (copied>0)

{  

   i=i+1;

   copied=CopyRates("AUDCHF",1,i,1,buf);

   FileWriteStruct(HndCopy,buf[0]);

}

FileClose(HndCopy);

//MessageBox(i);

  } 

 

Попробовал запустить штатный period_converter, у него такой же результат - пустое окно предварительного просмотра.

Тогда посмотрел  как в окне  предварительного просмотра импорта выглядят оригинальные  (мною не мученные) файлы hst. Оказалось, что часть из них нормальные, а часть - как мои и из  period_converter. 

В чем дело? возможно они из разных версий баз?

   int      file_version=401;

Какие еще версии бывают? 

 

Вы записываете котировки в новый файл задом наперед. То есть считываете с М1 нулевой бар и пишете его в М4 как первые данные. А нужно наоборот: считать с М1 данные бара Bars - 1 и записать их первыми в М4.

P.S. Для правильной вставки кода используйте кнопку SRC. 

 

void OnStart()
  {

//---- History header
   int      file_version=401;
   string   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   string   c_symbol="AUDCHF";
   int      i_period=11;
   int      i_digits=MarketInfo("AUDCHF",MODE_DIGITS);
   int      i_unused[13];  
    
MqlRates buf[];
ArrayInitialize(i_unused,0);

int i=0;


int HndCopy=FileOpenHistory("AUDCHR1.hst",FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN);
//int HndCopy=FileOpenHistory("AUDCHF11.hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

//--- write history file header
   FileWriteInteger(HndCopy,file_version,LONG_VALUE);
   FileWriteString(HndCopy,c_copyright,64);
   FileWriteString(HndCopy,c_symbol,12);
   FileWriteInteger(HndCopy,i_period,LONG_VALUE);
   FileWriteInteger(HndCopy,i_digits,LONG_VALUE);
   FileWriteInteger(HndCopy,0,LONG_VALUE);
   FileWriteInteger(HndCopy,0,LONG_VALUE);
   FileWriteArray(HndCopy,i_unused,0,13);
   

int copied=CopyRates("AUDCHF",1,i,1,buf);
while (copied>0)
{  
   FileWriteStruct(HndCopy,buf[0]);
   i=i+1;
   copied=CopyRates("AUDCHF",1,i,1,buf);
}
FileFlush(HndCopy);
FileClose(HndCopy);

//MessageBox(IntegerToString(i));
  }

Действительно, ИМХО писал со смещением на 1, а не задом наперед. Смещение убрал и кнопку SRC освоил. Но проблема осталась: При попытке импорта созданного мною файла  AUDCHF11 вижу пустое окно предварительного просмотра.

Еще обнаружил следующее:

1.аналогичная ситуация при попытке импорта любого (не моего)  файла  с фреймом отличным от исходного. Т.е. в AUDCHF1 можно импортировать AUDCHF1, AUDCAD1, USDJPY1 и т.д., но не AUDCHF5 или AUDCHF60

2. переименовал файл  копии AUDCAD5 в AUDCAC1. Оказалось, что его можно импортировать только в те же фреймы, что и исходный. То есть в минутки он не импортируется, а только в 5 минутки. Значит, дело не в названии, а в заголовке? Попробую поменять. Потом расскажу, что получилось.

 
evnt:

Действительно, ИМХО писал со смещением на 1, а не задом наперед. Смещение убрал и кнопку SRC освоил. Но проблема осталась: При попытке импорта созданного мною файла  AUDCHF11 вижу пустое окно предварительного просмотра.

Еще обнаружил следующее:

1.аналогичная ситуация при попытке импорта любого (не моего)  файла  с фреймом отличным от исходного. Т.е. в AUDCHF1 можно импортировать AUDCHF1, AUDCAD1, USDJPY1 и т.д., но не AUDCHF5 или AUDCHF60

2. переименовал файл  копии AUDCAD5 в AUDCAC1. Оказалось, что его можно импортировать только в те же фреймы, что и исходный. То есть в минутки он не импортируется, а только в 5 минутки. Значит, дело не в названии, а в заголовке? Попробую поменять. Потом расскажу, что получилось.

 

3. Обозвал создаваемый файл  именем  AUDCHC1 и период исправил на 1,  и теперь AUDCHC1 импортируется как надо.

Скриптонг, большое спасибо! Без Вас еще долго бы вымучивал. Теперь, наверное, смогу дописывать дописать меньшие фреймы историей бОльших фреймов!?

 
evnt:

3. Обозвал создаваемый файл  именем  AUDCHC1 и период исправил на 1,  и теперь AUDCHC1 импортируется как надо.

Скриптонг, большое спасибо! Без Вас еще долго бы вымучивал. Теперь, наверное, смогу дописывать дописать меньшие фреймы историей бОльших фреймов!?

Опять pfcnhzk. Могу без проблем создать hst файл c  необходимой глубиной истории,но только под незанятым именем. Как rewrite hst  файл с существующим именем? Например, AUDCHF1.hst
 
evnt:
Опять pfcnhzk. Могу без проблем создать hst файл c  необходимой глубиной истории,но только под незанятым именем. Как rewrite hst  файл с существующим именем? Например, AUDCHF1.hst
Никак. Если файл открыт для записи одной программой, то в него невозможно писать из другой программы. Это правила любой ОС. Попробуйте в Excel (Word) создать файл, а потом его же откройте еще раз. Второй раз файл будет доступен только для чтения.
 
Scriptong:
Никак. Если файл открыт для записи одной программой, то в него невозможно писать из другой программы. Это правила любой ОС. Попробуйте в Excel (Word) создать файл, а потом его же откройте еще раз. Второй раз файл будет доступен только для чтения.

Вы неправильно поняли. Написано про закрытый файл, например, AUDCHC1.hst. Я могу манипулировать им средствами ОС (переименовывать, перемещать из папки истории и т.д.) Не получалось его удлинить историей из больших фреймов средствами MQL4 из-за моей ошибки. Ошибку исправил, теперь все получилось. Спасибо за участие

 
evnt:

Вы неправильно поняли. Написано про закрытый файл, например, AUDCHC1.hst. Я могу манипулировать им средствами ОС (переименовывать, перемещать из папки истории и т.д.) Не получалось его удлинить историей из больших фреймов средствами MQL4 из-за моей ошибки. Ошибку исправил, теперь все получилось. Спасибо за участие


 

И опять вопрос:. Как импортировать историю НЕ вручную? 

Разбираюсь и записываю:

Есть  AUDCHC1.hst старый, открываю график, жму Хоме, вижу начало старое

Удлинил AUDCHC1.hst, теперь он новый. Проверяю: захожу в ИсториЦентр,  у AUDCHC1.hst теперь более удаленное начало, можно импортировать, но  не импортирую, жму Хоме, вижу начало старое, делаю Рефреш графика, начало старое. То есть автоматически не импортирует. Возможно, захватит после перезагрузки. 

Не импортируя в платформу новый AUDCHC1.hst перезагружаю платформу, у  AUDCHC1.hst опять старый конец. То есть платформа при выгрузке сохранила то, что в ней было (старый).

Опять удлиняю и импортирую вручную, жму Хоме, вижу новое, нужное мне начало.

Перегружаю платформу. Теперь платформа использует новый AUDCHC1.hst

Вопрос: Как, не импортируя вручную. заставить платформу использовать созданный файл?   

 

Не хотел создавать отдельную тему, так как вопрос пересекается с темой этой ветки.

Вопрос к тем кто знает тонкости работы МТ4 с котировками, в коде вызываю функцию SymbolInfoTick, будет ли создан файл котировок при использовании этой функции и вообще, как программно будет правильно заставить терминал подгружать исторические котировки по различным символам?  

 
evnt:

И опять вопрос:. Как импортировать историю НЕ вручную? 

Разбираюсь и записываю:

Есть  AUDCHC1.hst старый, открываю график, жму Хоме, вижу начало старое

Удлинил AUDCHC1.hst, теперь он новый. Проверяю: захожу в ИсториЦентр,  у AUDCHC1.hst теперь более удаленное начало, можно импортировать, но  не импортирую, жму Хоме, вижу начало старое, делаю Рефреш графика, начало старое. То есть автоматически не импортирует. Возможно, захватит после перезагрузки. 

Не импортируя в платформу новый AUDCHC1.hst перезагружаю платформу, у  AUDCHC1.hst опять старый конец. То есть платформа при выгрузке сохранила то, что в ней было (старый).

Опять удлиняю и импортирую вручную, жму Хоме, вижу новое, нужное мне начало.

Перегружаю платформу. Теперь платформа использует новый AUDCHC1.hst

Вопрос: Как, не импортируя вручную. заставить платформу использовать созданный файл?   

 

 Такой вариант тоже не подошел: ChartOpen-ChartRedraw. Из скрипта не перерисовывает, перерисовывает только когда вручную делаешь Redraw. Задержки Sleep не помогают. Через индикатор с функцией OnCalculate тоже не редравится. Может тика ждет? Как заставить открытый в скрипте по  ChartOpen график перерисоваться по ChartRedraw?

 тidChart=ChartOpen(Tool,TF[indFrame-1]);
         Sleep(1000);
         ChartRedraw(idChart);
         Sleep(1000);
         ChartClose(idChart);
         Sleep(1000);
         copied=CopyRates(Tool,TF[indFrame],i,1,buf);

 

 

Причина обращения: