一、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));
}

02-21 22:05