一、MQL语言导出报价为JSON文件意义
-
数据存储:将报价导出为JSON文件可以将数据以结构化的方式存储在文件中。JSON格式具有良好的可读性和易于解析的特点,可以方便地进行数据的存储和检索。
-
数据传输:JSON文件可以作为一种常见的数据交换格式,用于在不同系统之间传输报价数据。由于JSON格式的普及性和通用性,它可以被广泛支持和解析,使得数据在不同系统之间的传输更加便捷。
-
数据处理:导出为JSON文件后,可以使用各种编程语言和工具对报价数据进行处理和分析。JSON格式的数据可以轻松地转换为对象或字典结构,使得数据处理变得更加灵活和高效。
-
数据可视化:通过将报价导出为JSON文件,可以方便地将数据用于可视化展示。各种数据可视化工具和库都支持JSON格式的数据输入,可以将报价数据转化为图表、图形等形式,帮助用户更好地理解和分析数据。
二、MQL语言导出报价为JSON的代码实现
设置输入变量
input string dataDiractoryName = "Data";
input datetime fromDate = D'01.01.2022';
input datetime toDate = D'30.12.2022';
input string dataFilename = "datasource.json";
加载历史数据
// 加载历史数据
bool LoadHistoryData(MqlRates& historyData[])
{
bool copyRatesStatus = CopyRates(Symbol(), PERIOD_D1, fromDate, toDate, historyData);
if (copyRatesStatus == true)
{
Alert("Data successfully retrieved");
return true;
}
else
{
Alert("Unable to retrieve data");
return false;
}
}
报价写入JSON文件
// 报价写入JSON文件
uint WriteToJsonFile(int& file_handler, MqlRates& historyData[])
{
uint writeCounter = 0;
string jsonData = "";
jsonData += "{ \"Time Series FX(Daily)\": \r\n";
jsonData += "{\r\n";
for(int counter = 0; counter < ArraySize(historyData); counter++)
{
MqlDateTime dateStruct;
TimeToStruct(historyData[counter].time, dateStruct);
string properDate = dateStruct.year + "-" + dateStruct.mon + "-" + dateStruct.day;
jsonData += "\"" + properDate + "\": {\r\n";
jsonData += " \"Symbol\": \"" + Symbol() + "\",\r\n";
jsonData += " \"1. open\": \"" + (string)historyData[counter].open + "\",\r\n";
jsonData += " \"2. high\": \"" + (string)historyData[counter].high + "\",\r\n";
jsonData += " \"3. low\": \"" + (string)historyData[counter].low + "\",\r\n";
jsonData += " \"4. close\": \"" + (string)historyData[counter].close + "\",\r\n";
jsonData += " },\r\n";
}
jsonData += "}\n}\r\n";
writeCounter = FileWriteString(file_handler, jsonData);
return writeCounter;
}
添加数据到json文件
// 添加数据到json文件
void AddDataToJsonFile(MqlRates& historyData[])
{
int file_handler = FileOpen(dataDiractoryName + "//" + dataFilename, FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON);
uint writeStatus = 0;
if (file_handler != INVALID_HANDLE)
{
//Alert("File opened successfully");
writeStatus = WriteToJsonFile(file_handler, historyData);
FileClose(file_handler);
}
else
{
Alert("File failed to open!");
}
if (writeStatus != 0)
{
Alert("Added data to data file successfully!");
}
else
{
Alert("Data was not added to a file!");
}
}
脚本主程序
void OnStart()
{
MqlRates historyData[];
if (LoadHistoryData(historyData))
{
AddDataToJsonFile(historyData);
}
//Alert("Total Elements is : ", ArraySize(historyData));
}