Следующий скрипт 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());
}
Итак, мой вопрос, какие изменения необходимо внести в сценарий, чтобы экспортировать данные из прошлого в текущий порядок?
.CSV
с помощью предварительного условияbar==0
должна привести к созданию одной строки в выводеcsv
. Цикл должен выполняться ровно один раз. Проверьте логику обработки вывода, почему ваш вывод остался, как возражали, пустым. - person user3666197   schedule 21.03.2015