MT4 экспортный скрипт
Следующие MQL4
скрипт экспортирует данные из MetaTrader в csv
файл. К сожалению (для меня по крайней мере) порядок данных в сгенерированном csv
файл от 0 до 1000, 0 - самый последний (от настоящего к прошлому). Я хочу, чтобы файл был отсортирован от 1000 до 0 (от прошлого к настоящему).
Я изменил цикл записи данных ниже: for (int bar=Export_Bars; bar==0 bar--)
но это просто порождает пустое csv
файл.
#property script_show_inputs
input string Export_FileName = "data\\data.csv";
input int Export_Bars = 20000;
input int StartHour = 10;
input int EndHour = 19;
void OnStart()
{
int file = FileOpen(Export_FileName, FILE_WRITE|FILE_CSV|FILE_ANSI, ',');
if (file != INVALID_HANDLE && (Hour() >= StartHour) && Hour() < EndHour)
{
// Write the header of data
string row="";
for (int i=0; i<=5; i++)
{
if (StringLen(row))
row += ",";
row += "Open"+i+",High"+i+",Low"+i+",Close"+i;
}
FileWrite(file, row);
// Copy all required information from the history
MqlRates rates[], rate;
int count = Export_Bars + 5;
if (CopyRates(Symbol(), Period(), 1, count, rates) < count)
{
Print("Error! Not enough history size for exporting required information.");
return;
}
ArraySetAsSeries(rates, true);
// Write data
for (int bar=0; bar<Export_Bars; bar++)
{
row="";
double zlevel=0;
for (int y=0; y<=5; y++)
{
if (StringLen(row))
row += ",";
rate = rates[bar+y];
if (y==0)
zlevel = rate.open; // level of price calculation
row += NormalizeDouble(rate.open -zlevel, Digits()) + ","
+ NormalizeDouble(rate.high -zlevel, Digits()) + ","
+ NormalizeDouble(rate.low -zlevel, Digits()) + ","
+ NormalizeDouble(rate.close-zlevel, Digits());
}
FileWrite(file, row);
}
FileClose(file);
Print("Export of data is finished successfully.");
} else Print("Error! Failed to create the file for data export. ", GetLastError());
}
Итак, мой вопрос, какие изменения необходимо внести в сценарий, чтобы экспортировать данные из прошлого в настоящий порядок?
1 ответ
Решение
Измените конструктор цикла для пошагового обратного итератора времени:
for ( int bar = Export_Bars - 1; // .LOOP-INIT(s)
bar >= 0; // .LOOP-RUN-PRE-CONDITION
bar-- // .LOOP-RUN-POST-UPDATE(s)
) {...} // .LOOP-RUN-BODY