- Новая версия платформы MetaTrader 4 build 1170
- Архив котировок
- Взаимодействие клиентской и серверной частей
Подскажите, пожалуйста, можно ли и как в MQL4 организовать редактирование данных архива котировок (тех, что доступны по F2)? Спасибо.
Scriptong:
Да, двойной клик на строке, которую хотите редактировать. К тому же, там есть еще кнопка "Правка".Y
Уточняю вопрос: не из терминала, а программно, средствами языка MQL4.
Тоже можно. Смотрите в сторону FileOpenHistory. Наиболее яркий пример - штатный скрипт period_converter.
Да, это то, что надо. Большое спасибо
А может еще знаете скрипт, который историю меньшего фрейма дописывает более длинной историей большего фрейма?
А может еще знаете скрипт, который историю меньшего фрейма дописывает более длинной историей большего фрейма?
ок, спасибо, вроде бы сам сделал.
Я опять за помощью, застрял там, где не рассчитывал:
Создал файл минуток с историей нужной длины из исходных минуток и историй бОльших фреймов:
myLink.HST
Теперь хочу сделать копию исходного файла минутки, а потом заменить исходную минутку на myLink.HST, но сделать этого не могу, так как все время идет ошибка 5002 "неверное имя файла" из FileCopy, FileMove и т.д.
Хотя проводник по этому пути до файла добирается
Может файлы .hst переименовывать/удалять нельзя? Может для них есть функции типа FileCopyHistory?
Вот нужные строки кода:
string iFile,rFile;//initial and result files
string local=TerminalInfoString(TERMINAL_DATA_PATH);
string local1=AccountServer();
...
Tool=ToolNames[i];
iFile=StringConcatenate(local,"\\history\\",local1,"\\", Tool,"1.hst");
rFile=StringConcatenate(local,"\\history\\",local1,"\\", Tool,"1_.hst");
...
GetLastError();
if(!FileCopy(iFile,0,rFile,FILE_REWRITE))
{
err=GetLastError();
MessageBox(iFile+" FileCopy err="+err);
}
Теперь хочу сделать копию исходного файла минутки, а потом заменить исходную минутку на myLink.HST, но сделать этого не могу, так как все время идет ошибка 5002 "неверное имя файла" из FileCopy, FileMove и т.д.
Хотя проводник по этому пути до файла добирается
FileCopy не работает с файлами, находящимися вне папки MQL4\Files. Об этом прямо написано в документации. Чтобы работать с файлами истории котировок из MQL4, придется их копировать путем открытия-чтения-записи (FileOpenHistory-FileRead-FileReadStruct-FileWrite-FileWriteStruct), т. е. самостоятельно.
FileCopy не работает с файлами, находящимися вне папки MQL4\Files. Об этом прямо написано в документации. Чтобы работать с файлами истории котировок из MQL4, придется их копировать путем открытия-чтения-записи (FileOpenHistory-FileRead-FileReadStruct-FileWrite-FileWriteStruct), т. е. самостоятельно.Xn
Мне уже неловко, но у меня не получается. Что я делаю не так?
Размер моей копии получается чуть меньшего размера, чем у оригинала (2271628 оригинал/2271360 копия).
Убедился, что размер копии по Copy+Paste совпадает с оригиналом.
Когда импортирую (по F2 из History Center) созданную мною копию , то в окне предварительного просмотра все пусто, а когда созданную по Copy+Paste, то там все нормально.
Возможно какого-то заголовка файла не хватает?
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates buf[];
int err;
int i=0;
int HndCopy=FileOpenHistory("AUDCHF1_.hst",FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN);
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:
ExtHandle=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI); if(ExtHandle<0) return; c_copyright="(C)opyright 2003, MetaQuotes Software Corp."; ArrayInitialize(i_unused,0); //--- write history file header FileWriteInteger(ExtHandle,file_version,LONG_VALUE); FileWriteString(ExtHandle,c_copyright,64); FileWriteString(ExtHandle,c_symbol,12); FileWriteInteger(ExtHandle,i_period,LONG_VALUE); FileWriteInteger(ExtHandle,i_digits,LONG_VALUE); FileWriteInteger(ExtHandle,0,LONG_VALUE); FileWriteInteger(ExtHandle,0,LONG_VALUE); FileWriteArray(ExtHandle,i_unused,0,13);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования